Автор: Пользователь скрыл имя, 11 Декабря 2011 в 20:34, курс лекций
Рассмотренные в предыдущем разделе физические механизмы взаимодействия устройств ввода-вывода с вычислительной системой позволяют понять, почему разнообразные внешние устройства легко могут быть добавлены в существующие компьютеры. Все, что необходимо сделать пользователю при подключении нового устройства - это отобразить порты устройства в соответствующее адресное пространство, определить какой номер будет соответствовать прерыванию, генерируемому устройством, и, если нужно, закрепить за устройством некоторый канал DMA.
Лекция 16. Структура системы ввода-вывода. Функции базовой подсистемы ввода-вывода. 1
Логические принципы организации ввода-вывода 1
Структура системы ввода-вывода 1
Функции базовой подсистемы ввода-вывода 4
Буферизация и кэширование 5
Spooling и захват устройств. 6
Обработка прерываний и ошибок 6
Планирование запросов 7
Лекция 15. Система управления вводом-выводом. Физические принципы организации ввода-вывода. Общие сведения об архитектуре компьютера. Структура контроллера устройства. Опрос устройств и прерывания. 8
Физические принципы организации ввода-вывода 8
Общие сведения об архитектуре компьютера 8
Структура контроллера устройства 10
Опрос устройств и прерывания. Исключительные ситуации и системные вызовы 11
Для внешних прерываний характерны следующие особенности: 13
Прямой доступ к памяти (Direct Memory Access – DMA) 14
Лекция 14. Загрузка программ. Абсолютная загрузка. Относительная загрузка. Позиционно-независимый код. Загрузка ОС. Сборка программ. 15
Загрузка программ 15
Абсолютная загрузка 15
Абсолютная загрузка используется, например, в системе UNIX на 32-разрядных машинах. 16
Относительная загрузка 16
Позиционно-независимый код 17
Загрузка ОС 17
Пример: Загрузка системы MS-DOS. 20
Сборка программ 21
Объектный модуль 21
Библиотеки объектных модулей 22
Варианты построения загрузчиков 23
Лекция 13. Кэширование данных. Иерархия запоминающих устройств. Кэш память. Принцип действия кэш-памяти. Проблемы согласования данных. Проблемы отображения основной памяти в кэш. 25
Иерархия запоминающих устройств 25
Кэш-память 25
Принцип действия кэш-памяти 26
Проблема согласования данных 28
Способы отображения основной памяти на кэш 28
Схемы выполнения запросов в системах с кэш-памятью 29
Другой способ
загрузки состоит в том, что
мы грузим программу каждый
раз с нового адреса. Очевидно,
что при этом она должна
быть настроена на новые
Если для
адресации операндов
Если же
используется относительная (
Именно так происходит загрузка .com-файлов в системе MS DOS. Система выделяет свободную память, настраивает программе базовые регистры DS и CS, которые называются сегментными, и передает управление на стартовый адрес.
В более сложных ситуациях работа с базовой адресацией почти не отличается от абсолютной: мы должны запомнить все места в программе, где загружаются базовые регистры, и добавить к загружаемым значениям новый стартовый адрес. Единственное преимущество состоит в том, что таких мест в программе гораздо меньше, чем при абсолютной адресации. На практике разница здесь составляет десятки и сотни раз. Для перемещения программы мы обязаны найти в ней и обработать все ссылки на абсолютные адреса.
Такими ссылками могут быть не только адресные поля обычных команд и команды загрузки базовых регистров, но и статически инициализированные указатели, или даже ассемблерные вставки.
Как бы то ни было, в перемещаемой программе мы вынуждены запоминать все ссылки на абсолютные адреса и в момент загрузки производить их настройку на реальный начальный адрес. Обычно это делается при помощи так называемой таблицы перемещений (relocation table), которая присоединяется к телу загружаемого модуля, и содержит смещения от начала модуля для каждой такой ссылки.
Такой файл гораздо
сложнее абсолютного
Кроме рассмотренных
ранее основных способов
Позиционно-независимые
программы очень удобны для
загрузки, но, к сожалению, их написание
накладывает довольно жесткие
ограничения на стиль
Кроме того, на многих процессорах, например, Intel 8080/8085 или многих современных RISC-процессорах позиционно-независимый код вообще невозможен - эти процессоры не поддерживают соответствующий режим адресации для данных. Возникают серьезные неудобства при сборке программы из нескольких модулей. Поэтому такой стиль программирования используют только в особых случаях. Например, многие вирусы под MS DOS написаны именно таким образом.
При загрузке
самой ОС возникает
В кросс-системах
эта проблема решается просто. Как правило,
значительная часть памяти разделяется
между host-системой и целевой. Память целевой
системы может быть видна host-машине как
часть ее собственного физического адресного
пространства (так называемая backpane memory),
либо как специальное внешнее устройство.
По принципу backpane memory организованы многие
многопроцессорные машины, например транспьютерные
"фермы".
В процессорах семейства транспьютер фирмы Inmos может использоваться похожая техника. Транспьютер имеет четыре или более высокоскоростных последовательных канала, называемых линками. Эти линки не являются внешними устройствами, они глубоко интегрированы в архитектуру процессора. Кроме того, транспьютер имеет специальный разъем, по которому передается сигнал boot from link. Если этот сигнал установлен, при включении питания или после получения сигнала сброса (reset) транспьютер начинает ждать, пока с какого-то из линков не придет байт, больший чем 1. Такой байт воспринимается как длина сообщения, которое сейчас должно прийти по этому же линку.
Сообщение загружается в память с выделенного адреса и запускается как программа. В документации Inmos такая программа называется первичным загрузчиком. Как правило, эта программа загружает следующую, более сложную, называемую вторичным загрузчиком, которая и занимается инициализацией всей системы. В случае сложной конфигурации она может затянуть в память еще один, третичный загрузчик, который и произведет инициализацию.
Похожий процесс
происходит при загрузке
Большинство
современных процессоров не
На многих
системах в ПЗУ бывает прошито
нечто большее, чем первичный
загрузчик. Это может быть
На машинах фирмы Sun в качестве консольного монитора используется интерпретатор языка Forth. На ранних моделях IBM PC в ПЗУ был прошит интерпретатор BASIC. Именно поэтому клоны IBM PC имеют огромное количество плохо используемого адресного пространства выше сегмента 0xC000. Вы можете убедиться в том, что BASIC там должен быть, вызвав из программы прерывание 0x60. Вы получите на мониторе сообщение вроде: NO ROM BASIC. PRESS ANY KEY TO REBOOT. Вообще говоря, этот BASIC не является консольным монитором в строгом смысле этого слова, так как получает управление не перед загрузкой, а лишь после того, как загрузка со всех устройств завершилась неудачей.
На многих
больших компьютерах
После запуска
консольного монитора вы
Проще всего
происходит загрузка с
В современных
системах такая загрузка
Размер вторичного
загрузчика ограничен, чаще
В старых веpсиях MS DOS (3.30 и pанее) эта проблема была решена еще проще: файлы IO.SYS и MSDOS.SYS обязаны занимать на диске непрерывное пространство. Загрузочный сектор находит корневую директорию, находит в ней ссылки на соответствующие файлы и их длину и считывает требуемое количество секторов, начиная со стартового. Это существенно проще, чем разбираться с типом FAT, размером кластера и всей относящейся к делу информацией. В ранних версиях DOS эти файлы вообще должны были лежать в начале диска.
Легко понять, что первичный и вторичный загрузчики должны быть абсолютными загружаемыми модулями, потому что возлагать на первичный загрузчик настройку и перемещение вторичного просто нечестно, а для первичного этого просто никто не может сделать. Как правило, третичный и последующие загрузчики также являются абсолютными модулями, потому что у вторичного загрузчика хватает своих проблем, кроме настройки адресов у загрузчика следующего уровня.
В современных
системах возможен еще один
интересный способ загрузки - загрузка
с сети. Он происходит аналогично
загрузке с диска - стартовое
ПЗУ посылает в сеть пакет
стандартного содержания, который
содержит запрос к серверу
удаленной загрузки. Этот сервер
передает по сети вторичный
загрузчик, и т.д. Такая
Когда ядро
системы, наконец-то, окажется в
памяти, оно обычно запускает
некоторую специальную
Тем не
менее, в UNIX имеется специальная
инициализационная программа,
Существуют
операционные системы, которые
не умеют самостоятельно