Назначение программного обеспечения ввода-вывода 


Мы поможем в написании ваших работ!



ЗНАЕТЕ ЛИ ВЫ?

Назначение программного обеспечения ввода-вывода



 

Ключевая концепция разработки ПО ввода-вывода — независимость от устройств. Эта концепция означает возможность написания программ, способных получать доступ к любому устройству ввода-вывода без предварительного указания конкретного устройства. Соответственно, программа, читающая данные из входного файла, должна с одинаковым успехом работать с файлом на CD, HDD, Floppy, причем без каких-либо изменений в программе. Например, должна быть возможность выполнить команду вроде sort < input > output

Эта команда должна работать невзирая на то, что именно указано в качестве входного устройства.

 

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

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

 

Программное обеспечение ааода-вывода разбивается на 4 уровня:

Обработчики прерываний.

Драйверы устройств.

Независимый от аппаратуры код ОС.

Пользовательские программы.

 

11. Менеджер памяти. Порядок определения физического адреса.

 

Менеджер памяти — часть компьютерной программы (как прикладной, так и операционной системы), обрабатывающая запросы на выделение и освобождение оперативной памяти или (для некоторых архитектур ЭВМ) запросы на включение заданной области памяти в адресное пространство процессора.

 

Основное назначение менеджера памяти в первом смысле — реализация динамической памяти. Например, в языке C динамическое выделение памяти производится через функцию malloc.

 

Иерархия менеджеров памяти

 

Распределение памяти в монопрограммировании.

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

Системный. Сверху находится менеджер памяти, встроенный в ОС. Он вносит ту или иную страницу в адресное пространство процесса — а значит, работает с дискретностью в 4 килобайта и очень медленный.

Принадлежащий процессу. Менеджер памяти, встроенный в стандартную библиотеку языка программирования, берёт у ОС блоки памяти «оптом» и раздаёт их сообразно с нуждами программиста. При этом он знает, что память отдаётся только одному процессу — а значит, синхронизация потоков производится не мютексами, а фьютексами. И переключение в режим ядра происходит в двух случаях: либо когда «оперативного запаса» памяти не хватает и нужно обратиться к ОС, либо когда один из потоков «натыкается» на занятый фьютекс.

Специализированные. Некоторые динамические структуры данных, например, std::vector, также берут память у стандартной библиотеки с запасом (например, блоками по 16 элементов). Таким образом, элементы добавляются по одному, но обращение к вышестоящему менеджеру происходит один раз за 16 элементов. Объектный пул выделяет память под объекты конкретного типа и удобен, если они выделяются-освобождаются в больших количествах, и т. д.

 

Подобная иерархия приводит к тому, что на каждом из уровней «залёживается» свободная память. Но это оправдано: снижается фрагментация памяти и повышается скорость.

 

Определение физического адреса.

Конкретизируем задачу и ограничимся рассмотрением определения адреса команды. Для адресации операндов используется аналогичный механизм, только участвуют в этом случае другие сегментные регистры. Напомним, что для определения физического адреса команды содержимое сегментного регистра CS (code segment) умножается на 16 за счет добавления справа (к младшим битам) четырех нулей, после чего к полученному значению прибавляется содержимое указателя команд (регистр IP, instruction pointer). Получается двадцатибитовое значение, которое и позволяет указать любой байт из 220.

 

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

Для изучения этих возможностей рассмотрим сначала новые архитектурные возможности микропроцессоров i80x86.

 

 



Поделиться:


Последнее изменение этой страницы: 2016-08-15; просмотров: 516; Нарушение авторского права страницы; Мы поможем в написании вашей работы!

infopedia.su Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав. Обратная связь - 3.129.249.105 (0.008 с.)