Лекции по Вычислительным машинам, системам и сетям   

3. Тридцатидвухразрядные процессоры фирмы Intel

3.4. Системные таблицы

Таблица GDT. Эта таблица создается еще в реальном режиме и содержит следующие виды дескрипторов:

- дескрипторы сегментов ОС;

- дескрипторы сегментов, разделяемых задачами;

- дескриптор самой GDT, где она описана как сегмент данных ( с тем чтобы мы могли вносить в GDT изменения);

- дескриптор таблицы IDT, где она описана как сегмент данных (причины те же);

- дескрипторы всех созданных в системе таблиц LDT;

- альтернативные дескрипторы для всех LDT, где эти таблицы описаны как сегменты данных;

- дескрипторы всех сегментов TSS;

- альтернативные дескрипторы для всех TSS, где TSS описаны как сегменты данных;

- возможно другие дескрипторы и шлюзы.

Не все перечисленные дескрипторы должны обязательно присутствовать в GDT. Нулевой (первый дескриптор) дескриптор в GDT обязательно должен быть пустым (одни нули). Его использует МП для системных целей.

Для того чтобы МП знал, где в ОП располагается таблица GDT, внутри МП имеется специальный регистр gdtr. Его формат приведен на рис. 3.7.

47                                                16

15                              0

Начальный адрес GDT

Размер GDT

Рис. 3.7

Размер GDT задается в байтах. Для загрузки регистра используется команда lgdt m40/m48. Команда загружает в регистр 5 или 6 байтов из памяти. Например, следующая команда загружает в регистр gdtr 6 байтов из области памяти, на которую указывает регистр si:

lgdt  pword  ptr [si].

Команда lgdt допустима как в реальном, так и в защищенном режимах, но в защищенном она доступна только на 0-м уровне привилегий. При первом использовании этой команды задается местоположение таблицы в памяти и ее размер. В дальнейшем эта команда может использоваться для изменения размера GDT, напри-мер, если понадобилось добавить в GDT новые дескрипторы. Менять местоположение GDT в памяти не имеет никакого смысла (хотя рассматриваемая команда и предоставляет такую возможность).

Таблица GDT в системе всегда одна и всегда должна находиться в ОП. Содержимое этой таблицы постоянно обновляется ОС и самим МП. Например, отправив сегмент из ОП на диск, ОС должна соответствующим образом пометить дескриптор этого сегмента. Чтобы можно было изменять содержимое GDT, должен быть создан дескриптор, где эта таблица была бы описана как сегмент данных. Этот дескриптор располагают в самой GDT.

Таблица IDT дескрипторная таблица прерываний, и в ней располагаются только шлюзы. Связано это с тем, что прерывание может произойти, когда находимся на любом уровне привилегий (может на 0-м, а может на 3-м). При этом, на каком бы уровне не находились, должны получить доступ к обработчику. Иначе говоря, обработчик любого прерывания должен быть доступен (через IDT) с любого уровня привилегий. Это можно осуществить только через шлюз. В данной таблице могут располагаться шлюзы трех типов: шлюзы задач; шлюзы ловушки; шлюзы прерывания.

Таблица IDT, так же, как и таблица прерываний МП 8086, задает 256 (или меньше) обработчиков прерываний. Для каждого имеющегося в системе обработчика в таблице должен быть шлюз. Учитывая что шлюз занимает в памяти 8 байт, можно сделать вывод что максимальный размер IDT равен 256×8 = 2 Кбайта. В реальном режиме и в МП 8086 размер таблицы векторов прерываний 1 Кбайт.

Таблица IDT может располагаться в любом месте ОП (в отличие от МП 8086, где подобная таблица фиксируется в младшем килобайте ОП). Для того чтобы МП 486 знал, где находится IDT и каков ее размер, внутри МП имеется регистр idtr. Его формат аналогичен рассмотренному выше формату регистра gdtr. Отсюда следует (смотри формат регистра), что можем задать размер IDT больше 2 Кбайт (вплоть до 64 Кбайт), но смысл будут иметь не более двух младших килобайт этой области, так как обработчиков не может быть больше 256-ти. Загрузка регистра idtr производится командой lidt m40/m48. Для этой команды справедливо все сказанное выше о команде lgdt.

Таблица IDT в системе всегда одна и всегда должна находиться в ОП. Содержимое этой таблицы по ходу работы может меняться. Чтобы можно было менять содержимое IDT, для нее должен быть создан дескриптор, в котором эта таблица описана как сегмент данных. Этот дескриптор размещается в GDT.

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

Подобных таблиц в системе может быть много и располагаться они могут и в ОП, и на диске. Для того чтобы МП знал, где находится LDT текущей задачи, в его состав введен специальный регистр ldtr. Формат этого регистра не похож на формат gdtr, а скорее похож на формат обычного сегментного регистра (рис. 3.8).

15                       0

 

63                                     0

Селектор LDT  

Дескриптор LDT

Видимая часть

 

Теневая часть

Рис. 3.8

Смена LDT происходит при смене задачи. МП загружает в ldtr новый селектор, задающий дескриптор LDT в таблице GDT, т.е. «с точки зрения GDT» таблица LDT представляет из себя сегмент специального вида. У этого сегмента есть дескриптор, который располагается в GDT и в котором задан начальный адрес LDT, ее размер и т.д.

В видимую часть загружается селектор, адресующий дескриптор LDT в таблице GDT. При правильном обращении из этого дескриптора берутся начальный адрес и размер LDT и копируются в теневую часть ldtr, с тем чтоб дальше эта информация была у МП «под рукой». В процессе работы системы загрузка нового селектора в видимую часть ldtr (следовательно, и смена LDT) происходит при переходе на новую задачу. Новый селектор берется из соответствующего поля сегмента TSS входящей задачи. Для первоначальной загрузки регистра ldtr применяется команда lldt r16/m16. Эта команда загружает в ldtr новый селектор из любого 16-разрядного регистра МП или из памяти. Эта команда доступна только в защищенном режиме и только на 0-м уровне привилегий.

Содержимое таблиц LDT может меняться по ходу работы. Чтобы была возможность вносить изменения в LDT, для каждой из них должен быть создан альтерна-тивный дескриптор, где эти таблицы описаны как сегменты данных. Такие дескрипторы располагаются в GDT.

Сегменты TSS. Сегмент TSS (сегмент состояния задачи) создается для каждой задачи в системе. Размер TSS должен быть не менее 104 байт (67h). В этот сегмент в определенном порядке загружается содержимое почти всех внутренних регистров процессора. Эта информация называется текущим состоянием задачи или контекстом задачи. При переключении на новую (входящую) задачу МП автоматически копирует содержимое своих регистров в TSS выходящей задачи и загружает в эти регистры информацию из TSS входящей задачи. Происходит переключение на новую задачу. МП при этом должен знать, где в ОП находятся сегменты TSS и входящей и выходящей задач.

Переключиться на новую задачу можно только, обратившись к дескриптору TSS задачи (такие дескрипторы располагаются в GDT). Это можно сделать, обратившись к такому дескриптору либо напрямую, либо косвенным образом через шлюз задачи (командами jmp far, call far, retf иiret). Так как в дескрипторе TSS располагается начальный адрес этого сегмента, то процессору известно, где в памяти находится TSS входящей задачи. Чтобы МП знал, где в ОП находится TSS текущей задачи (при переключении задач текущая задача становится выходящей), внутри МП есть регистр tr (регистр задачи). Формат регистра tr аналогичен формату регистра ldtr. В видимой части регистра tr располагается селектор, адресующий дескриптор сегмента TSS в таблице GDT, а в теневой части ‑ копия этого дескриптора (начальный адрес этого TSS в ОП и его размер). Таким образом, адрес TSS выходящей задачи МП тоже известен.

Содержимое регистра tr в процессе работы меняется при смене задач, когда в видимую часть этого регистра загружается новый селектор. Для начальной загрузки этого регистра используется команда ltr r16/m16. Эта команда аналогична рассмотренной выше команде lldt.

Сегменты TSS сильно привилегированны, с ними может работать только сам МП. Часто необходимо внести изме-нения во внутреннее содержимое сегмента TSS (например, при задании исходного контекста задачи). Поэтому для любого TSS создается альтернативный дескриптор, в который этот сегмент описан как обычный сегмент данных.



*****
© Банк лекций Siblec.ru
Формальные, технические, естественные, общественные, гуманитарные, и другие науки.