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

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

Лекция 16. Структура системы  ввода-вывода. Функции  базовой подсистемы ввода-вывода.

Блокирующиеся, не блокирующиеся и асинхронные  системные вызовы. Блокирующиеся, не блокирующиеся и асинхронные  системные вызовы.

  Логические принципы организации ввода-вывода

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

Структура системы ввода-вывода

 Если поручить неподготовленному пользователю сконструировать систему ввода-вывода, способную работать со всем множеством внешних устройств, то, скорее всего, он окажется в ситуации, в которой находились биологи и зоологи до появления трудов Линнея. Все устройства разные, отличаются по выполняемым функциям и своим характеристикам, и кажется, что принципиально невозможно создать систему, которая без больших постоянных переделок позволяла бы охватывать все многообразие видов. Вот перечень лишь несколько направлений (далеко не полный), по которым различаются устройства:

Скорость обмена информацией может варьироваться  в диапазоне от нескольких байт в  секунду (клавиатура) до нескольких гигабайт в секунду (сетевые карты).

Некоторые устройства могут быть использованы параллельно  несколькими процессами (являются разделяемыми), в то время как другие требуют  монопольного захвата процессом.

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

Часть устройств  умеет передавать данные только по одному байту последовательно (символьные устройства), а часть устройств  умеет передавать блок байт как единое целое (блочные устройства).

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

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

 Похожий подход  оказался продуктивным и в  области программного подключения  устройств ввода-вывода. Подобно тому, как Линнею удалось заложить основы систематики растительного и животного мира, разделив все живое в природе на относительно небольшое число классов и отрядов, мы можем разделить устройства на относительно небольшое число типов, отличающихся по набору операций, которые могут быть ими выполнены, считая все остальные различия несущественными. Мы можем затем специфицировать интерфейсы между ядром операционной системы, осуществляющим некоторую общую политику ввода-вывода, и программными частями, непосредственно управляющими устройствами, для каждого из таких типов. Более того, разработчики операционных систем получают возможность освободиться от написания и тестирования этих специфических программных частей, получивших название драйверов, передав эту деятельность производителям самих внешних устройств. Фактически мы приходим к использованию принципа уровневого или слоеного построения системы управления вводом-выводом для операционной системы (см. рис. 13.1).

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

 В последующих  разделах мы подробнее рассмотрим  организацию и функции набора  драйверов и базовой подсистемы  ввода-вывода.

Систематизация  внешних устройств и интерфейс  между базовой подсистемой ввода-вывода и драйверами.

 Как и система  видов Линнея, система типов устройств  является далеко не полной  и не строго выдержанной. Устройства  обычно принято разделять по  преобладающему типу интерфейса  на следующие типы:

символьные (клавиатура, модем, терминал и т.п.);

блочные (магнитные  и оптические диски и ленты, и  т.д.);

сетевые (сетевые  карты);

все остальные (таймеры, графические дисплеи, телевизионные  устройства, видеокамеры и т.п.);

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

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

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

 Для блочных  устройств, таких как магнитные  и оптические диски, ленты и  т.п., естественными являются операции  чтения и записи блока информации  – read и write, а также, для устройств прямого доступа, операция поиска требуемого блока информации – seek.

 Драйвера  символьных и блочных устройств  должны предоставлять базовой  подсистеме ввода-вывода функции  для осуществления описанных  общих операций. Помимо общих  операций некоторые устройства  могут выполнять операции специфические,  свойственные только им – например, звуковые карты умеют увеличивать  или уменьшать среднюю громкость  звучания, дисплеи умеют изменять  свою разрешающую способность.  Для выполнения таких специфических  действий в интерфейс между  драйвером и базовой подсистемой  ввода-вывода обычно входит еще  одна функция, позволяющая непосредственно  передать драйверу устройства  произвольную команду с произвольными  параметрами, что позволяет задействовать  любую возможность драйвера без  изменения интерфейса. В операционной  системе UNIX такая функция получила  название ioctl (от input-output control).

 Помимо функций  read, write, seek (для блочных устройств), get, put (для символьных устройств) и ioctl в состав интерфейса обычно включают еще следующие функции:

Функцию инициализации  или повторной инициализации  работы драйвера и устройства –  open.

Функцию временного завершения работы с устройством (может, например, вызывать отключение устройства) – close.

Функцию опроса состояния устройства (если по каким-либо причинам работа с устройством производится методом опроса его состояния  – например, в операционных системах Windows NT и Windows 9x так построена работа с принтерами через параллельный порт) – poll.

Функцию останова драйвера, которая вызывается при  останове операционной системы или  выгрузке драйвера из памяти, - halt. 

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

Функции базовой подсистемы ввода-вывода

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

Блокирующиеся, не блокирующиеся и асинхронные  системные вызовы

 Все системные  вызовы, связанные с осуществлением  операций ввода-вывода, можно разбить  на три группы по способам  реализации взаимодействия процесса  и устройства ввода-вывода.

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

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

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