Лекции по "Криптология "

Автор: Пользователь скрыл имя, 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

Файлы: 1 файл

модОС.docx

— 97.55 Кб (Скачать)

 В большинстве  современных компьютеров процессор  стараются полностью освободить  от необходимости опроса внешних  устройств, в том числе и  от определения с помощью опроса  устройства, сгенерировавшего сигнал  прерывания. Устройства сообщают  о своей готовности процессору  не напрямую, а через специальный  контроллер прерываний, при этом  для общения с процессором  он может использовать не одну  линию, а целую шину прерываний. Каждому устройству присваивается  свой номер прерывания, который  при возникновении прерывания  контроллер прерывания заносит  в свой регистр состояния и,  возможно, после распознавания процессором  сигнала прерывания и получения  от него специального запроса,  выставляет на шину прерываний  или шину данных для чтения  процессором. Номер прерывания  обычно служит индексом в специальной  таблице прерываний, лежащей по  адресу, задаваемому при инициализации  вычислительной системы, и содержащей  адреса программ обработки прерываний  – вектора прерываний. Для распределения  устройств по номерам прерываний  необходимо, чтобы от каждого устройства к контроллеру прерываний шла специальная линия, соответствующая одному номеру прерывания. При наличии множества устройств, такое подключение становится невозможным, и на один проводник (один номер прерывания) подключается несколько устройств. В этом случае процессор при обработке прерывания все равно вынужден заниматься опросом устройств для определения устройства, выдавшего прерывание, но в существенно меньшем объёме. Обычно при установке в систему нового устройства ввода-вывода требуется аппаратно или программно определить, каким будет номер прерывания, вырабатываемый этим устройством.

 Когда мы  с вами рассматривали кооперацию  процессов и взаимоисключения, мы  говорили о существовании критических  секций внутри ядра операционной  системы, при выполнении которых  необходимо исключить всякие  прерывания от внешних устройств.  Для запрещения прерываний, а,  точнее, для невосприимчивости процессора  к внешним прерываниям, обычно  существуют специальные команды,  которые могут маскировать (запрещать)  все или некоторые из прерываний  устройств ввода-вывода. В то же время, определенные кризисные ситуации в вычислительной системе (например, неустранимый сбой в работе оперативной памяти), должны требовать ее немедленной реакции. Такие ситуации вызывают прерывания, которые невозможно замаскировать или запретить и которые поступают в процессор по специальной линии шины прерываний, называемой линией немаскируемых прерываний (NMI – Non-Maskable Interrupt).

 Не все  внешние устройства являются  одинаково важными с точки  зрения вычислительной системы  (“все животные равны, но некоторые  равнее других”). Соответственно, некоторые прерывания являются более существенными, чем другие. Контроллер прерываний обычно позволяет устанавливать приоритеты для прерываний от внешних устройств. При почти одновременном возникновении прерываний от нескольких устройств (во время выполнения одной и той же команды процессора), процессору сообщается номер наиболее приоритетного прерывания, для его обслуживания в первую очередь. Менее приоритетное прерывание при этом не пропадает, о нем процессору будет доложено после обработки более приоритетного прерывания. Более того, при обработке возникшего прерывания процессор может быть извещен о возникновении прерывания с более высоким приоритетом, и переключиться на его обработку.

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

  Для внешних прерываний характерны следующие особенности:

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

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

  Прямой доступ к памяти (Direct Memory Access – DMA)

 Использование механизма прерываний позволяет разумно загружать процессор в то время, когда устройство ввода-вывода занимается своей работой. Однако запись или чтение большого количества информации из адресного пространства ввода-вывода (например, с диска) приводят к большому количеству операций ввода-вывода, которые должен совершать процессор. Для разгрузки процессора от операций последовательного вывода данных из оперативной памяти или последовательного ввода в нее был предложен механизм прямого доступа внешних устройств к памяти – ПДП или Direct Memory Access – DMA. Давайте кратко рассмотрим, как работает этот механизм.

 Для того  чтобы какое-либо устройство помимо  процессора могло записать информацию  в память или прочитать ее  из памяти, необходимо чтобы это  устройство могло забрать у  процессора управление локальной  магистралью для выставления  соответствующих сигналов на  шины адреса, данных и управления. Для централизации эти обязанности  обычно возлагаются не на каждое  устройство в отдельности, а  на специальный контроллер –  контроллер прямого доступа к  памяти. Контроллер прямого доступа  к памяти имеет несколько спаренных  линий – каналов DMA, которые  могут подключаться к различным  устройствам. Перед началом использования  прямого доступа к памяти этот  контроллер необходимо запрограммировать,  записав в его порты информацию  о том, какой канал или каналы  предполагается задействовать, какие  операции они будут совершать,  какой адрес памяти является  начальным для передачи информации, и какое количество информации  должно быть передано. Получив  по одной из линий каналов  DMA сигнал запроса на передачу  данных от внешнего устройства, контроллер по шине управления  сообщает процессору о желании  взять на себя управление локальной  магистралью. Процессор, возможно  через некоторое время, необходимое  для завершения его действий  с магистралью, передает управление  ею контроллеру DMA. известив его  специальным сигналом. Контроллер DMA выставляет на адресную шину  адрес памяти для передачи  очередной порции информации  и по второй линии канала  прямого доступа к памяти сообщает  устройству о готовности магистрали  к передаче данных. После этого,  используя шину данных и шину  управления, контроллер DMA, устройство  ввода-вывода и память осуществляют  процесс обмена информацией. Затем  контроллер прямого доступа к  памяти извещает процессор о  своем отказе от управления  магистралью, и тот берет руководящие  функции на себя. При передаче  большого количества данных весь  процесс повторяется циклически. 

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

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

  Лекция 14. Загрузка программ. Абсолютная загрузка. Относительная загрузка. Позиционно-независимый код. Загрузка ОС. Сборка программ.

Загрузка  программ

 В данном  разделе мы рассмотрим - каким же образом программы попадают в оперативную память для их дальнейшего исполнения. Прежде всего, забегая несколько вперед, отметим, что существуют два типа адресов памяти. Адреса первого типа называются виртуальными, или логическими. Это то число, которое вы увидите, если, скажем, распечатаете значение указателя. Говоря точнее, это тот адрес, который видит ваша программа, номер ячейки памяти в ее собственном адресном пространстве. У многих машин эти адресные пространства для разных программ различны.

 Адреса другого  типа называются физическими.  Это тот адрес, который передается  по адресным линиям шины процессора, когда этот процессор считывает  или записывает данные в ОЗУ.

 Вообще говоря, эти два адреса могут не  иметь между собой ничего общего. Теоретически, могут существовать  адреса физической памяти, которым  не соответствует никакой виртуальный  адрес ни у какой из программ. Это может просто означать, что  в данный момент эта память  никем не используется. Более  интересная ситуация - это виртуальные  адреса, которым не соответствует  никакой физический адрес. Такая  ситуация часто возникает в  системах, использующих так называемую  страничную подкачку (page swapping или просто paging). В этой ситуации сумма объемов адресных пространств всех программ в системе может превышать объем доступной физической памяти, то есть на машине с четырьмя мегабайтами ОЗУ вы можете исполнять программы, требующие 8 и более мегабайт. Правда, организация такой подкачки - нетривиальная задача, но об этом в следующих разделах.

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

Абсолютная  загрузка

 

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

  • система может предоставить каждой программе свое адресное пространство
  • система может исполнять в каждый момент только одну программу

Подобный программный  модуль называется абсолютным загрузочным  модулем или абсолютной программой. Он представляет собой копию содержимого  виртуального адресного пространства программы в момент ее запуска. Точнее, наоборот, начальное содержимое адресного  пространства формируется путем  простого копирования модуля в память.

  Абсолютная загрузка используется, например, в системе UNIX на 32-разрядных машинах.

 Загружаемый файл при этом начинается с заголовка, который содержит:

  • "магическое число" - признак того, что это именно загружаемый модуль, а не что-то дpугое
  • число TEXT_SIZE - длину области кода программы (TEXT)
  • DATA_SIZE - длину области инициализированных данных программы (DATA)
  • BSS_SIZE - длину области неинициализированных данных программы (BSS)
  • стартовый адрес программы

За заголовком следует содержимое областей TEXT и DATA. Затем может следовать отладочная информация. Она нужна символьным отладчикам, но самой программой не используется.

 При загрузке  система выделяет программе TEXT_SIZE байтов виртуальной памяти, доступной  для чтения/исполнения, и копирует  туда содержимое сегмента TEXT. Затем  выделяется DATA_SIZE байтов памяти, доступной  для чтения/записи, и туда копируется  содержимое сегмента DATA. Затем выделяется  еще BSS_SIZE байтов памяти, доступной  для чтения/записи, и прописываются  нулями. После этого программе  выделяется пространство под  стек, в стек помещаются позиционные  аргументы и среда исполнения (environment), и управление передается на стартовый адрес. Программа начинает исполняться.

Информация о работе Лекции по "Криптология "