Скачиваний:
46
Добавлен:
03.06.2014
Размер:
676.35 Кб
Скачать

8. Регистровая модель процессора и сопроцессора.

Речь здесь пойдет, в основном, о программно-доступных регистрах, то есть с которыми можно работать напрямую через команды процессора. Но есть и программно-недоступные регистры. Про массив TLB: Он состоит из 64-х 52-разрядных регистров. (Младшие 32 разряда – собственно сам кэшируемый элемент из таблицы страниц, старшие 20 разрядов – номер этого элемента в таблице страниц, то есть это старшие 20 бит виртуального адреса, по которому происходит обращение.) Причем когда регистр TLB пуст, то все его 20 старших разрядов будут единичными. Непосредственное отношение к TLB имеют еще два 6-разрядных регистра: CBI (Current Buffer Index) и RBI (Random Buffer Index). В первом хранится номер (0 - 63) регистра из TLB, где хранится кэшированный элемент из таблицы страниц, описывающий страницу, с которой в данный момент осуществляется работа. Если значение этого регистра равно 40h (в шестнадцатеричной форме, это число регистров для кэширования в TLB), то это говорит о том, что нужный сейчас элемент из таблицы страниц отсутствует в TLB и необходимо его загрузить. Во втором регистре (RBI) хранится псевдослучайный номер (0 - 63) регистра из TLB, который будет использован для КЭШирования очередного элемента из таблицы страниц. Последний из программно-недоступных регистров,– счетчик команд сопроцессора FPC. В сопроцессоре Intel аналогичный регистр существует. Если сопроцессору понадобится указатель на очередную команду, то можно подвести к нему через внешние выводы содержимое счетчика команд основного процессора PCR.

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

Программно-доступные регистры RISC-процессора и сопроцессора.

В программах очень часто используются регистры общего назначения (RG0 – RG7). Эти регистры доступны в любом режиме работы процессора. Только в эти регистры можно занести непосредственные значения констант, только эти регистры используются при адресации по базе с индексированием, только с содержимым этих регистров возможно выполнение целочисленных операций. Даже в командах, использующих другие регистры (системные или сопроцессора), без этих многофункциональных регистров не обойтись. Кроме регистров общего назначения в системе присутствуют также и системные. Работа с ними (кроме регистров PCR и FLG) возможна только в режиме ядра. При чтении и записи всех системных регистров в качестве источников и приемников могут выступать только регистры общего назначения. Содержимое регистров PCR и FLG доступно для чтения в обоих режимах работы процессора. Модификация счетчика команд PCR выполняется только командами передачи управления (что не исключает изменение содержимого этого регистра при обработке прерываний) в любом режиме работы процессора. Регистр флагов процессора FLG занимает особое положение. Команд для записи в него не существует. В регистре флагов хранятся разные биты. Некоторые из них просто служат признаком возникновения какой-либо ситуации при выполнении команд. Их значение менять не имеет смысла. Но есть и другие биты. Они управляют работой процессора. Для каждого такого бита существует пара команд – одна для установки, другая для чтения. В зависимости от назначения бита, некоторые из них можно менять только в режиме ядра.

Описание битов регистра флагов процессора FLG.

Бит №0: "U". Определяет режим работы процессора. Если он равен "0", то процессор находится в режиме ядра, если "1" – в режиме пользователя. Команды сброса / установки существуют, являются привилегированными.

Бит №1: "I". Запрещает (когда равен "0") или разрешает (когда равен "1") обработку процессором аппаратных (внешних) прерываний. Команды сброса / установки существуют, являются привилегированными.

Бит №2: "T". Выключает (когда равен "0") или включает (когда равен "1") режим отладки программ, при котором перед каждой командой процессор генерирует исключение №3. Команды сброса / установки существуют, являются привилегированными.

Бит №3: "Z". Служит признаком нуля. Равен "1", если результатом последней целочисленной операции будет ноль. Команд сброса / установки нет.

Бит №4: "S". Повторяет значение старшего бита результата, который при использовании дополнительного кода определяет знак числа ("1" – для отрицательных чисел). Команд сброса / установки нет.

Бит №5: "O". Служит признаком переполнения. Устанавливается в "1" в случае переполнения при выполнении операций сложения и вычитания со знаковыми числами. Тем самым он показывает на потерю старшего бита результата. Установка в "1" при сложении происходит в случае переноса в старший бит и отсутствия переноса из старшего бита или в случае переноса из старшего бита и отсутствия переноса в него. Установка в "1" при вычитании происходит в случае заема из старшего бита, но отсутствия заема в старший бит или в случае заема в старший бит, но отсутствия заема из него. При делении на ноль данный бит всегда устанавливается, так как только в этой ситуации деление может привести к переполнению. Команд сброса / установки нет.

Бит №6: "C". Служит признаком переноса. Устанавливается в "1" при сложении целых чисел в случае возникновения переноса, а при вычитании таких же чисел указывает необходимость заема. Также этот бит используется в командах целочисленной арифметики и сдвига, поэтому существуют команды его сброса / установки, они не являются привилегированными.

Значение остальных битов регистра флагов процессора FLG всегда равно нулю.

Регистры SR0, SR1, SR2, SR3 (от System) предоставляются ядру ОС для хранения разных данных, а также как место сохранения некоторых регистров общего назначения при обработке прерываний. Кстати, это единственные системные регистры, имеющие, также как и регистры общего назначения, разрядность 64. Остальные системные регистры 32-х разрядные. В регистрах IPC и IFL (от Interrupt) процессор автоматически запоминает регистры PCR и FLG, когда переходит к программе обработки прерываний. Если возникло исключение №1, то есть есть проблемы при использовании виртуальной памяти, то в регистре BVA (Bad Virtual Address) будет сохранен адрес, обращение к которому вызвало нарушение. Сама таблица страниц (ее начало) должна располагаться в физической памяти по адресу, хранимому в регистре PTP (Page Table Pointer), а регистр ITP (Interrupt Table Pointer) должен содержать физический адрес начала таблицы векторов прерываний.Теперь можно смело перейти к описанию регистров сопроцессора. Он содержит 8 регистров для хранения чисел с плавающей точкой (FR0 – FR7, от Float). Соответственно, все команды сопроцессора по выполнению арифметических операций могут работать только с этими 64-х разрядными регистрами. Запись и чтение чисел с плавающей точкой осуществляется только в и из памяти при использовании косвенной адресации со смещением, причем в качестве базового регистра обязательно должен выступать один из регистров общего назначения центрального процессора. Сопроцессор, как и центральный процессор. Его биты тоже можно условно разделить на сигнальные и управляющие.

Соседние файлы в папке kurs