
- •Билет №1 Структура эвм общего назначения. Алу, уу
- •Арифметико-логические устройства.
- •Устройства управления.
- •Описание сегментного механизма
- •Билет №2 Структура эвм общего назначения. Risc и cisc процессоры. Форматы машинных команд.
- •Risc и cisc процессоры.
- •Форматы машинных команд.
- •Описание страничного механизма.
- •Билет №3 Структура эвм общего назначения. Способы адресации. Стековая адресация. Виды стеков.
- •Способы адресации.
- •Стековая адресация. Виды стеков.
- •Особенности страничного механизма в Pentium и в р6.
- •Билет №4 Микропроцессор вм86. Назначение входов/выходов вм86 в минимальном/максимальном режиме.
- •Назначение входов/выходов вм86 в максимальном режиме.
- •Общие сведения о механизмах адресации в защищенном режиме.
- •Билет №5 Внутренняя архитектура мп вм86. Программная модель мп вм86.
- •Программная модель мп вм86.
- •Форматы системных таблиц защищенного режима. Системные таблицы
- •Билет №6 мп вм86. Сегментация памяти. Организация оперативной памяти.
- •Общие сведения о 32х разрядных процессорах фирмы Intel. Tss, ldt, gdt. Селектор,дескриптор. Билет №7 мп вм86. Организация адресного пространства портов ву.
- •Общие сведения о 32х разрядных процессорах фирмы Intel. Режимы работы, Режимы работы 32 разрядного процессора.
- •Билет №8 Программируемый адаптер к1810вв55 (i8255)
- •Битовая карта ввода вывода
- •Билет 9 Программируемый таймер к1810ви54 (i8254)
- •Механизм перехода в защищенном режиме
- •Билет №10 Общие сведения об обработке прерываний.
- •Формат машинной команды 32х разрядного процессора.
- •Билет №11 Система прерываний вм86.
- •Внутренняя кэш-память.
- •Билет №12 Контроллер прерываний к1810вн59 (i8259). Настройка вн59.
- •Сведения о внутренней организации 32-х разрядных процессорах, (состав, назначение).
- •Билет №13 Общие сведения о прямом доступе к памяти.
- •Буфер tlb. Кэш-память страниц.
- •Билет 14 Контроллер прямого доступа к памяти к1810вт37 (i8237).
- •Программирование кпдп вт37
- •Вопрос №2
- •Билет 15
- •1. Организация процессорного модуля вм86.
- •2.21 Организация процессорного модуля вм86.
- •Программная модель 32-разрядного мп.
- •Программная модель 32 разрядного мп
- •Билет 16 Слабосвязанная конфигурация.
- •2.23. Слабо связанные конфигурации.
- •Форматы таблиц gdt, ldt и idt.
- •3.4. Системные таблицы
- •Билет 17 Арбитр шин к1810вб89 (i8289).
- •2.24. Арбитр шин к1810вб89 (i8289).
- •Формат дескриптора.
- •3.15 Формат дескриптора.
- •Билет №18 Сильно связанные конфигурации на примере совместной работы мп86 и арифметического сопроцессора вм87.
- •Форматы элементов pte и pde.
- •3.8. Формат элемента pte (pde).
- •Билет №19 Формат машинных команд мп вм86.
- •Механизм переключения задач. Формат сегмента tss
- •Билет №20 мп вм86. Сегментация памяти. Организация оперативной памяти.
- •Сегментация памяти.
- •2.7 Организация оперативной памяти.
- •Общие сведения о кэш-памяти.
- •Внутренняя кэш-память
- •Сведения о кэшах в процессорах фирмы Intel.
Форматы системных таблиц защищенного режима. Системные таблицы
ТАБЛИЦА GDT. Эта таблица создается еще в реальном режиме и содержит следующие виды дескрипторов:
Дескрипторы сегментов ОС.
Дескрипторы сегментов, разделяемых несколькими задачами.
Дескриптор самой GDT, где она описана как сегмент данных ( с тем чтобы мы могли вносить в GDT изменения).
Дескриптор таблицы IDT, где она описана как сегмент данных (причины те же).
Дескрипторы всех созданных в системе таблиц LDT .
Альтернативные дескрипторы для всех LDT, где эти таблицы описаны как сегменты данных.
Дескрипторы всех сегментов TSS.
Альтернативные дескрипторы для всех TSS, где TSS описаны как сегменты данных.
Возможно другие дескрипторы и шлюзы.
Не следует конечно думать что все перечисленные выше дескрипторы должны обязательно присутствовать в GDT. А вот нулевой (самый первый дескриптор в таблице) дескриптор в GDT обязательно должен быть пустым (состоять из одних нулей). Его использует МП для системных целей.
Для того чтобы МП знал где в ОП располагается таблица GDT, внутри МП имеется специальный регистр gdtr: Его формат приведен на рис. 48.
-
47 16
15 0
начальный адрес GDT
размер GDT
Рис. 48
Размер GDT задается в байтах. Для загрузки этого регистра используется команда lgdt m 40 / m 48. То есть команда загружает в регистр пять или шесть байт из памяти (пять байт здесь используется для совместимости с МП 286, который работал не с 32-х, а с 24-х разрядным адресом). Например, следующая команда загружает в регистр gdtr шесть байт из области памяти, на которую указывает регистр si;
lgdt pword ptr [si].
Команда lgdt допустима как в реальном, так и в защищенном режимах, но в защищенном она доступна только на 0-м уровне привилегий. При первом использовании этой команды (еще в реальном режиме) задается местоположение таблицы в памяти и ее размер. В дальнейшем эта команда может использоваться для изменения размера GDT, например, если понадобилось добавить в GDT новые дескрипторы. Менять местоположение GDT в памяти не имеет никакого смысла (хотя рассматриваемая команда и предоставляет такую возможность).
Таблица GDT в системе всегда одна и всегда должна находиться в ОП. А вот содержимое этой таблицы постоянно обновляется ОС и самим МП. Например, отправив сегмент из ОП на диск ОС должна соответствующим образом пометить дескриптор этого сегмента. Для того чтобы можно было изменять содержимое GDT должен быть создан дескриптор, где эта таблица была бы описана как сегмент данных. Этот дескриптор располагают в самой GDT.
ТАБЛИЦА IDT. Это дескрипторная таблица прерываний. Хотя таблица называется дескрипторной в ней располагаются только шлюзы. Связано это с тем что прерывание может произойти когда мы находимся на любом уровне привилегий (может на 0-м, а может на 3-м). При этом, на каком бы уровне мы не находились, мы должны получить доступ к обработчику. Иначе говоря, обработчик любого прерывания должен быть доступен (через IDT! )с любого уровня привилегий. А это можно осуществить только через шлюз. В данной таблице могут располагаться шлюзы трех типов:
шлюзы задач;
шлюзы ловушки;
шлюзы прерывания.
Таблица IDT, так же как и таблица прерываний МП 8986, задает 256-ть (или меньше) обработчиков прерываний. Для каждого имеющегося в системе обработчика в таблице должен быть шлюз. Учитывая что шлюз занимает в памяти 8-мь байт можно сделать вывод что максимальный размер IDT равен 256×8=2Кбайта. Напомним, что в реальном режиме и в МП 8086 размер таблицы векторов прерываний 1Кбайт.
Таблица IDT может располагаться в любом месте ОП (в отличие от МП 8086, где подобная таблица фиксируется в младшем килобайте ОП). Для того чтобы МП 486 знал где находится IDT и каков ее размер внутри МП имеется регистр idtr. Его формат аналогичен рассмотренному выше формату регистра gdtr. Кстати отсюда следует (смотри формат регистра) что мы можем задать размер IDT больше 2-х Кбайт (вплоть до 64Кбайт), но смысл будут иметь не более 2-х младших килобайт этой области, так как обработчиков не может быть больше 256-ти. Загрузка регистра idtr производится командой lidt m 40 / m 48. Для этой команды справедливо все сказанное выше о команде lgdt.
Таблица IDT в системе всегда одна и всегда должна находиться в ОП. А вот содержимое этой таблицы по ходу работы может меняться. Для того чтобы можно было менять содержимое IDT для нее должен быть создан дескриптор, в котором эта таблица описана как сегмент данных. Этот дескриптор размещается в GDT.
ТАБЛИЦЫ LDT. Для каждой задачи в системе может быть создана ( а может и не создаваться) своя таблица LDT. В нее сводятся дескрипторы всех сегментов с которыми работает только эта задача. В LDT могут находится дескрипторы сегментов кода, данных и стека, а так же шлюзы вызова и задач.
Таким образом подобных таблиц в системе может быть много и располагаться они могут как в ОП, так и на диске. Для того чтобы МП знал где находится LDT текущей задачи в его состав введен специальный регистр ldtr. Формат этого регистра не похож на формат gdtr, а скорее похож на формат обычного сегментного регистра (см. рис. 49). Дело в том что смена LDT происходит при смене задачи, при этом МП загружает в ldtr новый селектор, задающий дескриптор LDT в таблице GDT. То есть «с точки зрения GDT» таблица LDT представляет из себя сегмент специального вида. У этого сегмента есть дескриптор, который располагается в GDT и в котором задан начальный адрес LDT, ее размер и. т. д.
-
15 0
63 0
селектор LDT
дескриптор LDT
видимая часть
теневая часть
Рис. 49
В видимую часть загружается селектор, адресующий дескриптор LDT в таблице GDT. При правильном обращении из этого дескриптора берутся начальный адрес и размер LDT и копируются в теневую часть ldtr, с тем чтоб в дальнейшем эта информация была у МП «под рукой». В процессе работы системы загрузка нового селектора в видимую часть ldtr (а следовательно и смена LDT) происходит при переходе на новую задачу. Новый селектор берется при этом из соответствующего поля сегмента TSS входящей задачи. Для первоначальной загрузки регистра ldtr применяется команда lldt r 16 / m 16. Эта команда загружает в 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 (регистр задачи). Формат этого регистра аналогичен формату регистра ldtr, рассмотренному выше. В видимой части регистра TR располагается селектор, адресующий дескриптор сегмента TSS в таблице GDT, а в теневой части - копия этого дескриптора (начальный адрес этого TSS в ОП и его размер). Таким образом адрес TSS выходящей задачи МП тоже известен.
Содержимое регистра tr в процессе работы меняется при смене задач, когда в видимую часть этого регистра загружается новый селектор. Для начальной загрузки этого регистра используется команда ltr r 16 / m 16. Эта команда аналогична рассмотренной выше команде lldt.
Сегменты TSS очень сильно привилегированны, с ними может работать только сам МП. В тоже время часто возникает необходимость внести изменения во внутреннее содержимое сегмента TSS (например, при задании исходного контекста задачи). Поэтому для любого TSS создается альтернативный дескриптор, где этот сегмент описан как обычный сегмент данных.
Более подробно механизм переключения задач и формат TSS будет рассмотрен в дальнейшем.