Файл: Курс лекций по дисциплине Операционные системы 2 Содержание.pdf

ВУЗ: Не указан

Категория: Не указан

Дисциплина: Не указана

Добавлен: 28.03.2024

Просмотров: 57

Скачиваний: 0

ВНИМАНИЕ! Если данный файл нарушает Ваши авторские права, то обязательно сообщите нам.

49
Работа системы свопинга проиллюстрирована на рис. 1. На начальной стадии в памяти находится только процесс А. Затем создаются или загружаются с диска процесса В и С. Процесс А выгружается на диск. Как мы видим процесс А второй раз загрузился в другое адресное пространство, должны создаваться такие условия, которые не повлияют на работу процесса.
Свопер - планировщик, управляющий перемещением данных между памятью и диском.
Этот метод был основным для UNIX до версии 3BSD.
Если память выделяется динамически, этим процессом должна управлять операционная система. Существует два способа учета использования памяти: битовые массивы, иногода называемые битовыми картами, и списки свободных участков.
1.1. Управление памятью с помощью битовых массивов
При использовании битовых матриц память делится на единичные блоки размером от нескольких слов до нескольких килобайт. С каждым единичным блоком соотносится один бит в битовой матрице, который содержит 0, если единичный блок свободен, и 1, если он занят (или наоборот). На рис. 2 показана часть памяти и соответствующая ей битовая матрица.
Рис. 2. Часть памяти с пятью процессами и тремя свободными пространствами.
Единичные блоки памяти разделены вертикальными штрихами. Заштрихованные
области (которым соответствует 0 в битовой матрице) являются свободными (а).
Соответствующая битовая матрица (б). Та же самая информация в виде списка (в)
Битовая матрица предоставляет довольно простой способ отслеживания слов памяти в фиксированном объеме памяти, поскольку ее размер зависит только от размера памяти и размера единичного блока памяти. Основная проблема заключается в том, что при решении поместить в память процесс, занимающий k единичных блоков, диспетчер памяти должен искать в битовой матрице непрерывную последовательность нулевых битов. Поиск в битовой матрице последовательности заданной длины - довольно медленная операция (поскольку последовательность может пересекать границы слов в матрице), и это обстоятельство служит аргументом против применения битовых матриц.
1.2. Управление памятью с помощью связных списков
Другой способ отслеживания состояния памяти предоставляет поддержка связных списков занятых и свободных фрагментов памяти, где сегментом является или процесс, или участок между двумя процессами.
Этот способ отслеживает списки занятых (между процессами) и свободных
(процессы) фрагментов памяти.
Запись в списке указывает на:

занят (P, process) или незанят (H, hole - дыра) фрагмент,

адрес начала фрагмента,


50

длину фрагмента и указатель на следующую запись.
В нашем примере список отсортирован по адресам. Такая сортировка имеет следующее преимущество: когда процесс завершается или скачивается на диск, изменение списка представляет собой несложную операцию. Закончившийся процесс обычно имеет двух соседей (кроме тех случаев, когда он находится на самом верху ил на дне памяти). Соседям могут быть процессы или свободные фрагменты, что приводит к четырем комбинациям, показанным на рис. 8.
Рис. 3. Четыре комбинации соседей для завершения процесса X
На рис. 3. а. корректировка списка требует замены P на H. На рис. 3. б. две записи соединяются в одну, а список становится на запись короче. На рис. 3. в. объединяется три записи, а из списка удаляются два пункта.
Алгоритмы выделения блока памяти:

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

следующий подходящий участок, стартует не сначала списка, а с того места на котором остановился в последний раз.

самый подходящий участок (медленнее, но лучше использует память).

самый неподходящий участок, расчет делается на то, что программа займет самый большой участок, а лишнее будет отделено в новый участок, и он будет достаточно большой для другой программы.
2. Виртуальная память
Уже достаточно давно люди столкнулись с проблемой размещения программ, оказавшихся слишком большими и поэтому не помещавшихся в доступной физической памяти. Обычно принималось решение о разделении программы на части, называемые
оверлеями. Оверлей 0 обычно запускался первым. После окончания своего выполнения он вызвал следующий оверлей.
Несмотря на то, что фактическая работа по загрузке оверлеев с диска и выгрузке на диск выполнялись системой, делить программы на части должен был программист.
Разбиение больших программ на маленькие модули поглощало много и было не слишком интересным занятием. Однако такая ситуация продолжалась недолго, так как вскоре кто- то придумал способ поручить всю эту работу компьютеру.
Разработанный метод известен как виртуальная память (Fotheringham, 1961).
Основная идея заключается в разбиении программы на части, и в память эти части загружаются по очереди.
В основе виртуальной памяти лежит идея, что у каждой программы имеется свое собственное адресное пространство, которое разбивается на участки, называемые страницами. Каждая страница представляет собой непрерывный диапазон адресов. Эти страницы отображаются на физическую память, но для запуска программы присутствие в памяти всех страниц не обязательно. Когда программа ссылается на часть своего адресного пространства, находящегося в физической памяти, аппаратное обеспечение


51 осуществляет необходимое отображение на лету. Когда программа ссылается на часть своего адресного пространства, которое не находится в физической памяти, операционная система предупреждается о том, что необходимо получить недостающую часть и повторно выполнить потерпевшую неудачу команду.
2.1. Страничная организация памяти
Большинство систем виртуальной памяти используют технику, называемую страничной организацией памяти (paging), которую мы сейчас опишем. На любом компьютере существует множество адресов в памяти, к которым может обратиться программа.
Когда программа использует следующую инструкцию
MOV REG,1000 она делает это для того, чтобы скопировать содержимое памяти по адресу 1000 в регистр REG (или наоборот, в зависимости от компьютера). Адреса могут формироваться с использованием индексации, базовых регистров, сегментных регистров и другими путями.
Эти программно формируемые адреса, называемые виртуальными адресами, формируют виртуальное адресное пространство. На компьютерах без виртуальной памяти виртуальные адреса подаются непосредственно на шину памяти и вызывают для чтения или записи слово в физической памяти с тем же самым адресом. Когда используется виртуальная память, виртуальные адреса не передаются напрямую шиной памяти. Вместо этого они передаются диспетчеру памяти, который отображает виртуальные адреса на физические адреса памяти, как продемонстрировано на рис. 9.
Программа при этом общается с виртуальной памятью, а не с физической.
Рис. 4. Диспетчер памяти преобразует виртуальные адреса в физические.
Страницы - это части, на которые разбивается пространство виртуальных адресов.
Страничные блоки - единицы физической памяти. Страницы и их блоки имеют всегда одинаковый размер.
Страницы всегда имеют фиксированный размер. Передача данных между ОЗУ и диском всегда происходит в страницах.

52
Х - обозначает не отображаемую страницу в физической памяти.
Страничное прерывание - происходит, если процесс обратился к странице, которая не загружена в ОЗУ (т.е. Х). Процессор передается другому процессу, и параллельно страница загружается в память.
Таблица страниц - используется для хранения соответствия адресов виртуальной страницы и страничного блока.
Таблица может быть размещена:

в аппаратных регистрах (преимущество: более высокое быстродействие, недостаток - стоимость)

в ОЗУ
Рис. 10. Типичная запись в таблице страниц
Присутствие/отсутствие - загружена или незагружена в память
Защита - виды доступа, например, чтение/запись.
Изменение - изменилась ли страница, если да то при выгрузке записывается на диск, если нет, просто уничтожается.
Обращение - было ли обращение к странице, если нет, то это лучший кандидат на освобождение памяти.
Информация о адресе страницы когда она хранится на диске, в таблице не
размещается.
Для ускорения доступа к страницам в диспетчере памяти создают буфер быстрого
преобразования адреса, в котором хранится информация о наиболее часто используемых страниц.
Страничная организация памяти используется, и в UNIX, и в Windows.
Хранение страничной памяти на диске
Статическая область свопинга
После запуска процесса он занимает определенную память, на диске сразу ему выделяется такое же пространство. Поэтому файл подкачки должен быть не меньше памяти. А в случае нехватки памяти даже больше. Как только процесс завершится, он освободит память и место на диске.
На диске всегда есть дубликат страницы, которая находится в памяти.
Этот механизм наиболее простой.


53
Рис. 11. Статический и динамический методы организации свопинга.
Динамическая область свопинга
Предполагается не выделять страницам место на диске, а выделять только при выгрузке страницы, и как только страница вернется в память освобождать место на диске.
Этот механизм сложнее, так как процессы не привязаны к какому-то пространству на диске, и нужно хранить информацию (карту диска) о местоположении на диске каждой страницы.

54
Лекция 7
1   2   3   4   5   6   7   8   9   10

Тема: Управление вводом-выводом
План:
1. Устройства ввода-вывода
2. Программные уровни ввода-вывода
Литература:
1. Коньков К.А. Устройство и функционирование ОС Windows. Практикум к курсу
«Операционные системы»: учебное пособие/ К.А. Коньков. – М.: Интернет-
Университет Информационных Технологий; БИНОМ. Лаборатория знаний, 2008. – с. 134 – 166.
2. Назаров С.В., Гудыно Л.П., Кириченко А.А. Операционные системы. Практикум.
Под ред. С.В. Назарова. – М.: Кудиц-ПРЕСС, 2008. – с. 176-237.
3. Таненбаум Э. Современные операционные системы. – СПб: Питер, 2002. – с. 304-
420.
4. Гордеев А.В. Операционные системы– 2-е издание. – СПб.: Питер, 2004. Гл. 1. с.
130-162.
1. Устройства ввода-вывода
Одна из важнейших функций ОС состоит в управлении всеми устройствами ввода- вывода компьютера. ОС должна давать этим устройствам команды, перехватывать прерывания и обрабатывать ошибки. Она также должна обеспечить простой и удобный интерфейс между устройствами и остальной частью системы.
Разные специалисты рассматривают аппаратуру ввода-вывода с различных точек зрения. Инженеры видят в них микросхемы, провода, источники питания, двигатели и прочие физические компоненты, из которых состоит аппаратура. Программисты, в первую очередь, обращают внимание на интерфейс, предоставляемый программному обеспечению, - команды, принимаемые аппаратурой, выполняемые ею функции и ошибки, о которых может аппаратура сообщить.
Устройства ввода-вывода можно грубо разделить на две категории: блочные устройства и символьные устройства. Блочными называются устройства, хранящие информацию в виде блоков фиксированного размера, причем у каждого блока имеется адрес. Важное свойство блочного устройства состоит в том, что каждый блок может быть прочитан независимо от остальных блоков. Наиболее распространенными блочными устройствами являются диски.
Другой тип устройств ввода-вывода – символьные устройства. Символьное устройство принимает или предоставляет поток символов без какой-либо блочной структуры. Оно не является адресуемым и не выполняет операцию поиска. Принтеры, сетевые интерфейсные карты, мыши и большинство других устройств можно рассматривать как символьные устройства.
Устройства ввода-вывода покрывают огромный диапазон скоростей, что создает определенные трудности для программного обеспечения, которому приходится обеспечивать хорошую производительность на скоростях передачи данных, различающихся несколькими порядками.