Как компьютер использует всего несколько регистров?

StackOverflow https://stackoverflow.com/questions/3410778

Вопрос

Я немного знаю о сборке, и что есть 4 или 8 или около того регистров общего назначения. Как все программы на компьютере работают только с тем суммой регистров, особенно с многопотативной и всеми?

Это было полезно?

Решение

Multi-Threading сам не влияет на количество используемых регистров. Когда нить помешается, она обычно имеет сохраненные регистры, сохраненные в памяти, а следующий поток для пропускания есть эти регистры, загруженные из его предыдущего сохранения.

Примером является система, имеющая структуру блока управления потоком (TCB). Эта структура будет содержать (в то время как нить не работал), сохраненная указатель инструкции, указатель стека, регистры общего назначения, регистры с плавающей точкой, статистика потоков и так далее. Короче, все, что нужно для того, чтобы полностью восстановить нить в состояние, когда он был заменен для запуска другой нити.

И не все, что происходит на компьютере, сделано в регистрах. Современные компиляторы могут оптимизировать код, чтобы элементы данных, используемые большинством, хранятся в регистрах, но подавляющее большинство данных проводится в памяти, и только куплена в регистрах при необходимости.

Лучшая книга, которую я когда-либо читал на теме Таненбаум «Структурированная компьютерная организация» которые осматривают компьютеры с точки зрения слоев, с цифрового логического уровня до уровня операционной системы, с каждым уровнем здания на предыдущем.

           alt text

В стороне: Моя мечта в один день, напишите книгу так же, как это охватывает все, от кварка на уровне до Emacs :-)

Другие советы

Другие переменные и потоки потоков обычно хранятся в защищенном пространстве памяти, где их можно призвать в регистры при необходимости.

Вы можете проверить книгу Элементы вычислительных систем Для хорошего понимания того, как работает процессор вашего компьютера. Книга создана как ряд проектов, в которых вы работаете от NAND ворот в процессор, ассемблер, простой компилятор и в небольшой операционной системе. Это неоценимо в понимании того, как все детали вашего компьютера подходят друг к другу.

Каждый раз, когда нить (или процесс) разваливается, все регистры нажимаются на стек с помощью ядра операционной системы в структуру данных, обычно называемые блоком управления процессом. Затем, когда тема / процесс отключится назад, данные регистра читаются с печатной платы и вышли из стека в регистры.


Существуют также внутренние регистры и таблица сопоставления, что X86 имеет внутреннюю часть такого рода настроить таблицу виртуальной регистрации для сохранения архитектуры набора инструкций IA32, имея большую гибкость для проектирования SuperScalar Architures и сложных алгоритмов планирования инструкций.

Кроме того, наборы инструкций обычно имеют нагрузка а также хранить Инструкция, которая используется в сочетании с указателями на память, позволяя хранить данные из регистров в память. Который находится в том месте, от того, от этого максимальная машина нагрузки нагрузки исходит, т. Е. Компьютер, который не имеет инструкций, которые работают непосредственно на память.

Некоторые компьютеры имеют инструкции, которые работают на памяти; некоторые находятся на основе стека. Это зависит от дизайнеров, а ограничения, размещенные на оборудовании.

Вы должны понимать, что тысячи миллионов инструкций сборки выполняются для даже простых вещей. Эти регистры часто заменяют свои ценности.

На самом деле довольно интересно, как компьютер способен использовать так мало регистров для достижения всего, что он делает.

Это действительно умное программирование на уровне сборки (обычно из-за страшных умных компиляторов), которые позволяют использовать так несколько регистров для использования настолько эффективно.

Если проблема невозможна только с предоставленными несколькими регистрами, программа, как правило, будет «различить» регистры в основной стек памяти. Вспоминая, где в стеке мы поместим наш пролитый регистры, мы можем легко получить их обратно.

Когда мы исчерпываем регистры, нам нужно просто хранить их в стеке, что дает нам ДАЛЕКО Больше места, чем большинство из нас нужно для наших программ.

В конкретном случае мультипоток мы просто сохраняем все наши регистры в память, то у нас есть чистый сланец для других потоков.

Это одна из вещей, что другое хранение компьютера, в частности RAM, используется для: для сохранения и восстановления битов данных в и вне регистров.

Когда нить отключается, так что другая нить может работать. Первые потоки регистрируют состояние где-то сохраняются (на стеке или какую-то другую структуру данных), и состояние регистра потока секунды восстанавливается из того, где он был сохранен ранее. ОЗУ достаточно быстро, что тысячи этих коммутаторов могут возникать за секунду, но принимает достаточно времени, что если вы заменяете нити, ненужденно, он может повлиять на производительность.

Другое очень, очень распространенное явление - это локальные переменные - если локальная переменная используется в течение короткого периода времени, оно может никогда не существовать вне реестра. Однако во многих случаях локальная переменная должна должна быть сохранена из реестра в местоположение памяти, поэтому какое-то другое значение может быть загружено и манипулировать в реестре. То же самое на самом деле происходит в значительной степени любые переменные, а не только местные жители (но намного скорее всего, для местного никогда не существует в памяти).

Это довольно вовлеченный вопрос, и ответ зависит от вашей архитектуры ЦП.

В хорошем OL «Дни» вы были правы - действительно было всего несколько регистров общего назначения. В настоящее время ЦП и компилятор играет в игрутрехкарточный монет«С вашего общего назначения регистрируются по методикам, как Регистрация переименования.

Хотя на простых архитектурах верно, что регистры копируются на память [кэш], когда контекстно-коммутатор происходит, такие методы, как Подразделение «Дурай» ОС в мышление есть больше сердечников, чем на самом деле.

Но самый общий ответ на ваш вопрос заключается в том, что данные перемещаются в и вне регистров много. Отказ И именно поэтому множество инструкций, которые вы видите в любой данной программе сборки, - это инструкции «MOV». Дизайнеры CPU и компиляторы проводят много времени и денег, оптимизирующих их конструкции, чтобы вы не перемещали данные из основной памяти (медленные) в регистры - они пытаются сохранить данные кэшированные как можно больше. Это большое количество инструкций «MOV» связано, поэтому задержка памяти и скорость шины настолько решается к производительности общего компьютера.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top