DAY06 (Старые версии Машбука или нечто подобное)
Описание файла
Файл "DAY06" внутри архива находится в следующих папках: Старые версии Машбука или нечто подобное, Лекции (Машечкин 1998). Документ из архива "Старые версии Машбука или нечто подобное", который расположен в категории "". Всё это находится в предмете "операционные системы" из 3 семестр, которые можно найти в файловом архиве МГУ им. Ломоносова. Не смотря на прямую связь этого архива с МГУ им. Ломоносова, его также можно найти и в других разделах. .
Онлайн просмотр документа "DAY06"
Текст из документа "DAY06"
6
Лекция №6Лекция№ 6
На прошлой лекции мы ввели понятие ОС. Мы выяснили, что функции ОС - контроль и распределение ресурсов ВС. Мы рассмотрели понятие процесса, программы, которая обладает «личными», выделенными только ей ресурсами. Мы сформулировали три основные проблемы управления процессами. И обсудили одну из них - проблему планирования использования ЦП. Мною был подчеркнут тот факт, что проблема разделяемых ресурсов есть проблема не только мультипроцессирования, но и использования нескольких процессоров сразу. Сегодня мы рассмотрим оставшиеся две проблемы управления процессами: управление подкачкой и буферизацией, а также проблему разделения ресурсов. Но перед этим я хочу сделать одно небольшое замечание. На прошлой лекции мы рассмотрели проблему планирования CPU. И с этой точки зрения выделили три основных типа операционных систем:
-
пакетная ОС;
-
ОС разделения времени;
-
ОС реального времени.
Так вот, в современных операционных системах нет такого жесткого разделения. Современные ОС используют агрегированные подходы к решению задач, т. е. система может распределять смесь задач, выбирать задачи, которые будут выполняться в режиме реального времени и задачи, которые будут работать в режиме разделения времени или же в пакетном режиме. Появляются групповые приоритеты. И имеется возможность настроить вид распределения времени ЦП.
Управление подкачкой и буфером ввода.
Под термином «подкачка» подразумеваются две симметричные операции:
-
Откачка. Перемещение всего процесса или его части во внешнюю память;
-
Подкачка. Загрузка всего процесса или его части из ВЗУ в ОЗУ.
Необходимость в подкачке возникает тогда, когда программе требуется добраться до той информации, которая в данный момент не находится в RAM. (Пример: в программе происходит безусловный переход на ту точку программы, которая находится не в ОЗУ, а на ВЗУ.) Откачка происходит тогда, когда требуется освободить кусок оперативной памяти, например, для того, чтобы загрузить новую задачу. Подходы к проблеме, что именно откачивать, различны. Они определяются той или иной операционной системой, в некоторых ОС устанавливаются опционально. Примеры подходов к откачке:
-
Откачивать тот процесс, который дольше всего «занимал» CPU.
-
Откачивать процесс, использующий наибольший объем ресурсов.
-
В первую очередь откачивать те процессы (по тому или иному критерию, например по 1-му или 2-му), которые не являются задачами операционной системы.
Существует две схемы организации механизма «подкачки»:
-
Swapping всего процесса. «Ленивый» способ. Просто организуется, но не эффективен.
-
Swapping осуществляется некоторыми блоками данных. (Например, страницами или сегментами).
Буфер ввода - это пространство на ВЗУ, определяемое операционной системой, куда поступают задачи для обработки. Существует два подхода к организации буфера ввода:
-
Буфер ввода разделяется на две части:
-
буфер активных задач, т. е. задач, находящихся в мультипрограммной обработке;
-
буфер остальных задач.
Осуществляется переход задач из буфера ввода в буфер активных задач. Здесь сразу возникает проблема - критерий выбора задач из буфера ввода. Самые простые решения этой задачи:
-
выбираются все задачи подряд;
-
задачи разбиваются на несколько очередей по однотипным характеристикам (например, очередь задач операционной системы и очередь пользовательских задач.)
-
Один общий буфер. Задача вводится и сразу попадает в программную обработку. Преимущество этого подхода - упрощение системы. Недостаток - понижение выходной производительности ВС.
Управление разделяемыми ресурсами.
Здесь мы обозначим только проблему, потому что конкретные ее решения мы рассмотрим на примере ОС UNIX несколько позже.
Предположим, есть два процесса, которые работают на общем пространстве оперативной памяти. При этом разделяемые ресурсы могут работать в разных режимах, т.е. не исключена ситуация, когда два процесса реально находятся на разных машинах, но они связаны общем полем оперативной памяти. (Эта проблема аналогична той проблеме, которую мы сформулировали на прошлой лекции, когда в рамках одной ВС работают два или более процессоров с общей оперативной памятью). В этом случае возникает проблема с буферизацией работы с памятью, потому что на каждой из машин есть свои механизмы буферизации чтения-записи. Здесь возникает нехорошая ситуация, когда состояние физической памяти не соответствует реальному ее содержимому. А также появляются некоторые проблемы для ОС, работающей на двух машинах.
Следующая проблема. Пусть есть два процесса, которые работают на одной машине. Должны быть определенные средства, которые позволят синхронизовать доступ к разделяемой памяти, то есть позволят создать условия, при которых обмен каждого из работающих процессов с оперативной памятью будет происходить корректно. Это значит, что при каждом чтении информации из разделяемой памяти должно быть гарантированно, что все пользователи, которые начали писать что-то в эту память, этот процесс завершили - должна быть синхронизация по обмену с разделяемой памятью.
В действительности при решении задач зачастую не требуется таких разделяемых ресурсов, как общая память, но хотелось бы, чтобы процессы, которые функционируют одновременно, могли оказывать некоторое влияние друг на друга. Влияние, аналогичное аппарату прерываний. Для реализации этого во многих ОС имеются средства передачи сигналов между процессами, тогда возникает некоторая программная эмуляция прерываний. Один процесс говорит - передай сигнал другому процессу. В другом процессе возникает прерывание выполнения этого процесса и передача управления на некоторую предопределенную функцию, которая должна обработать полученный сигнал. Это третья функция ОС.
Я обратил ваше внимание на такие функции ОС, которые влияют на ее эксплуатационные свойства. Реально любая ОС также содержит огромный набор других функций, которые обеспечивают работу этой системы.
Структура операционной системы.
Практически любая ОС включает в себя понятие ядра. Ядром ОС обычно называется ее резидентная часть, т. е. та часть ОС, которая не участвует в процессах подкачки и работает в режиме ОС или в режиме супервизора. В ядро входят базовые средства управления основными сущностями, характерными для данной операционной системы, а также может входить набор программ, обеспечивающих управление некоторыми физическими устройствами. В функции ядра, в частности входит обработка прерываний, т. е. компоненты ядра содержат точки входа процедур обработки прерываний. Ядро ОС обычно работает без использования механизма виртуальной памяти.
Вокруг ядра наращиваются драйвера, программы, которые управляют ресурсами вычислительной системы (физическими и логическими). Драйверы подразделяются на резидентные и нерезидентные. Резидентные драйверы находятся в RAM, могут меняться по своему составу и количеству в зависимости от архитектуры ВС, могут функционировать как в режиме супервизора, так и в обычном режиме. Резидентные драйверы - обычно драйверы высокоскоростных устройств и устройств, часто используемых в системе. Нерезидентные драйверы в общем случае могут отсутствовать в RAM, подкачиваются в нее по мере необходимости. Вообще говоря, загрузка нерезидентных частей ОС может осуществляться с помощью механизмов подкачки обычных процессов. Нерезидентные драйвера - обычно драйвера низкоскоростных устройств (принтеры, дисководы). Первый уровень в основном состоит из драйверов физических устройств. Следующий уровень - управление логическими ресурсами. И так далее. Таких уровней может быть достаточно много. Чем дальше от ядра, тем большая абстрактность имеет место быть. К примеру, где-то в нашей схеме могут появиться драйверы управления файлами, которые, на самом деле, связаны с драйверами управления логическими дисками, а те, в свою очередь, связаны с драйверами реальных физических устройств и так далее.
Вовсе не обязательно, что все компоненты ОС работают в режиме супервизора, или в режиме ОС. Многие из компонентов, которые логически достаточно удалены от ядра, могут работать в обыкновенном пользовательском режиме. Так же не обязательно, все эти компоненты ОС работают в резидентном режиме. Обычно, для многих функций это не требуется.
Файловая система.
Одним из важных компонентов операционной системы является средство управления данными операционной системы, которое обычно называют файловой системой. Итак, файловая система - это компонент операционной системы, обеспечивающий организацию создания, хранения и доступа к именованным наборам данных. Эти именованные наборы данных называются файлами.
Основные свойства файлов, файловых систем:
-
Файл - некая сущность, некий объект, имеющий имя, и позволяющий оперировать со своим содержимым через ссылку на это имя. Обычно имя файла - последовательность некоторых символов, длина которой фиксируется и зависит от конкретной операционной системы.
-
Независимость файла от расположения. Для работы с конкретным файлом не требуется иметь информацию о местоположении этого файла на внешнем носителе информации. Например, для того, чтобы загрузить документ в редактор с жесткого диска нам не требуется знать на какой стороне какого магнитного диска и на каком цилиндре и в каком секторе находится требуемый документ. Можно проследить некоторую, хотя и весьма отдаленную, параллель с механизмом виртуальной памяти, когда отпадала необходимость в физической адресации памяти.
-
Набор функций ввода/вывода. Практически каждая операционная система однозначно определяет набор функций, обеспечивающих обмен с файлом. Обычно, этот набор функций содержит следующие возможности по работе с файлами:
-
Открытие файла. Эта функция обеспечивает установление взаимосвязи между программой и хранящимся на внешнем носителе файлом. Это средство объявляет операционной системе тот факт, что с данным файлом будет работать тот или иной процесс. А операционная система, исходя из этой информации, может принять какие-либо решения (например, блокировать, разрешить или синхронизировать доступ к этому файлу со стороны других процессов).
-
Закрытие файла. Закрытие файла - информация операционной системе о том, что работа с файлом завершена. При этом меняется статус доступа к файлу со стороны процессов. Операция закрытия файла осуществляется двумя функциями:
-
закрыть и сохранить текущее содержимое файла;
-
уничтожить файл.
-
Создать новый файл. Функция создает новый файл. В некоторых ОС создание файла осуществляется по функции открытия файла.
-
Управление файловым указателем. Практически с каждым открытым файлом связывается т. н. файловый указатель. Этот указатель, по аналогии с регистром счетчика команд (а скорее даже по аналогии с регистром-указателем на вершину стека), в каждый момент времени показывает на следующий относительный адрес по файлу, с которым можно произвести обмен. После обмена с данным блоком указатель переносится на позицию через блок. Для организации управления работы с файлами требуется уметь управлять этим указателем. В операционных системах имеется функция, позволяющая произвольным образом перемещать указатель в пределах файла. Доступ к содержимому файла может быть, по аналогии со способами работы с ВЗУ, прямым (двигаем указатель куда нам нужно в пределах файла и читаем/пишем) и последовательным (чтобы прочесть i-ый блок данных необходимо сначала прочесть первые i-1 блоки). Вообще говоря, файловый указатель есть некоторая переменная, доступная программе, которая создается при открытии файла.