
- •Конспект лекций по курсу «Операционные системы», (1 семестр , часть 1)
- •Занятие 1.Введение
- •Занятие 2.Прерывания, многозадачность
- •Занятие 3.Работа с памятью
- •Занятие 4.Процессы
- •Занятие 5.Потоки. Многопроцессорные системы
- •Занятие 6.Микроядро.
- •Занятие 7.Устройства ввода-вывода. Dma.
- •Занятие 8.Буферизация операций ввода-вывода
- •Циклическая буферизация
- •Занятие 9.Структура hdd.
- •Занятие 10.Файловая система
- •Смешанный – состоят из записей разной длины с разным количеством полей:
- •Последовательный – состоит из записей одинаковой длины с одинаковым количеством и размеров полей.
- •Непрерывный
- •Цепочечный
- •Индексированный
- •Битовые таблицы ( маска)
- •Список свободных блоков
- •Цепочки свободных блоков
- •Индексирование
- •Занятие 11. Инсталяция windows
- •Запуск инсталляции
- •Занятие 12.Загрузка windows
- •Занятие 13.Загрузочный файл boot.Ini
- •Загрузочные файлы
- •Файл Boot.Ini
- •Занятие 14.Диск аварийного восстановления
- •Занятие 15.Консоль восстановления
- •Консоль восстановления
- •Занятие 16.Адресация и доступ к разным типам памяти
- •Основная и верхняя память.
- •Менеджеры памяти
Занятие 4.Процессы
Процессы
Процесс – это последовательность команд одной программы, выполняющая единую по смыслу задачу и использующая одну область памяти. Процессы рождаются операционной системой при запуске программы на выполнение. Одна программа может запускать несколько процессов, которые могут взаимодействовать друг с другом. Вся работа операционной системы заключается в управлении запуском (созданием) и выполнением процессов.
Каждый процесс по ходу своей работы может порождать другой процесс, который начинает работать параллельно с «родительским». Такой процесс называется порожденным или дочерним.
Все процессы выполняются поочередно т.к. центральный процессор, который выполняет их действия только один, следовательно, часть из них находится в очереди ожидания, когда освободится процессор.
Состояния процесса
У процесса может быть несколько состояний:
новый – процесс, который только создан ОС, но не помещен в очередь готовых к выполнению и для него еще не размещены данные в оперативной памяти(т.е идет его подготовка к выполнению).
выполняющийся – процесс, который выполняется в данный момент процессором
готовый к выполнению – процесс, который ожидает в очереди выполнения, пока другой процесс выполняется процессором
блокированный – процесс, который находится в состоянии ожидания завершения каких-либо операций ( например, ввода-вывода).
приостановленный – процесс, который остановлен явно системой либо родительским процессом. При этом он мог быть перед этим блокированным либо готовым к выполнению. Перевести процесс в состояние приостановленного могут следующие действия:: - действия ОС по выгрузке его в виртуальную память ( если нужно запустить другой процесс, а все страницы в оперативной памяти заняты) - запрос интерактивного пользователя ( пользователь захотел приостановить процесс) - приостановка по завершению кванта( интервала) времени, отведенного для его выполнения (это для процессов выполняющихся не постоянно, а периодически - по времени) - по требованию родительского процесса ( нужна проверка выполнения или модификация ...) - по требованию ОС в случае подозрения на возникновение ошибок из-за этого процесса.
завершающийся – процесс, который удален из очереди
Очереди процессов
При работе одновременно многих процессов может возникнуть ситуация, что к работе одновременно готовы несколько процессов или устройство печати требуется 3 процессам. Как же распределить процессорное время или печатающее устройство между несколькими процессами?
Для этого есть очереди процессов:
Заблокированных процессов - ждущих печать или другие операции ввода-вывода
готовых процессов - ожидающих своей очереди для обработки процессором.
Очереди заблокированных процессов
Если завершается какое-то событие, ожидание которого ждут несколько заблокированных процессов в очереди. При этом сами процессы в очереди могут располагаться не подряд а в произвольном порядке. После завершения события, которого они все вместе ожидали они могут не ждать дальше. А перейти в очередь готовых процессов. Однако, для поиска всех процессов, которые ждали одного завершившегося события, нужно просматривать всю очередь заблокированных процессов для перевода их в другую очередь – готовых процессов. Для больших систем – этот перебор может занимать значительное время, поэтому создают несколько очередей заблокированных процессов: для каждого события создается своя очередь процессов. Которые ждут завершения именно этого события. Например, 3 процесса ждут, когда закончится ввод данных с жесткого диска, а 2 процесса ждут, когда пользователь введет данные с клавиатуры. В этом случае создается 2 очереди: первая для ожидания ввода данных с диска и в нее помещаются первые 3 процесса. вторая для ожидания ввода данных с клавиатуры и в нее помещаются остальные 2 процесса.
Очереди готовых процессов
Очередь готовых процессов может быть одна или несколько. При одной очереди все процессы выполняются последовательно: кто первый стал в очередь – того первого и обслуживает процессор Однако вы скажете – зачем несколько очередей, если процессор только один? Вы были бы правы, если бы не было необходимости одни процессы выполнять быстрее, чем другие. Особенно это касается системных процессов, которым нужно давать процессорное время в первую очередь.
При нескольких очередях каждой очереди назначается свой приоритет и процессы размещаются в очереди по их приоритетам. Чем приоритет у очереди больше, тем процессы из этой очереди выполняются раньше
Пример состояний процесса и очередей.
Разберем пример перехода процесса из одного состояния в другое. Допустим, пользователь запускает программу, которая порождает процесс. Первое состояние этого процесса – «новый» т.е. идет подготовка его к началу работы. При этом, для него отводится своя область оперативной памяти, в которую размещаются коды команд процесса и необходимые для его выполнения данные. После всех размещений процесс переходит в состояние «готовый к выполнению» или «выполняющийся» – это зависит от того, занят процессор или нет к моменту готовности процесса. Если процессор занят, то процесс переходит в состояние готового к работе и размещается в очереди готовых процессов, а если процессор свободен, то процесс сразу начинает работу т.е. переходит в состояние выполняющегося.
Допустим, что во время работы процесса потребовался ввод с жесткого диска данных. В этом случае процессор выполняет прерывание процесса с сохранением значений всех своих регистров в оперативной памяти и система переводит процесс в очередь заблокированных процессов для данного жесткого диска. Как только данные будут считаны с диска, система переведет процесс из очереди заблокированных процессов в очередь готовых к выполнению процессов и как только процессор освободится и подойдет очередь данного процесса он будет запущен на выполнение процессором т.е. перейдет снова в состояние выполняющегося.
Если во время выполнения процесса случилась ошибка ( например, деление на 0) и система прервала его работу, переведя процесс в очередь приостановленных процессов и вывела пользователю на экран сообщение об ошибке с вопросом: продолжить работу или завершить? Если пользователь захочет продолжить работу, то после ввода им ответа о продолжении работы система снова переведет процесс в состояние готовых к работе и разместит его в очереди готовых процессов. Если же пользователь захочет прервать работу процесса или процесс сам закончит свою работу, то система переведет его в состояние завершающегося. На этом этапе будет выполнено сохранение всех данных результата работы процесса и освобождена оперативная память от всех данных. Состояние «завершающийся» - это последняя стадия существования процесса.
Переключения между процессами
Для управления процессами и распределения ресурсов между ними ОС должна хранить управляющую информацию о процессах и ресурсах. В общем случае это 4 типа таблиц:
таблицы памяти – для слежения использованием процессами основной и виртуальной памяти.
таблицы ввода-вывода – для управления устройствами ввода-вывода ( хранится информация об использовании устройства процессом, адресах памяти, используемых для ввода в них или вывода с них данных на внешнее устройство..)
таблицы файлов – расположение, текущее состояние, атрибуты файлов ...
таблицы процессов
Образ процесса – это набор кода программы с ее данными, стеком процедур и атрибутами. Часть образа процесса может находиться в основной памяти, а другая в виртуальной.
Управляющий блок процесса – это набор атрибутов для управления процессом:
- Идентификаторы процессов ( родительского процесса, текущего процесса и процесса пользователя)
- Регистры пользователя: доступные для программ пользователя регистры процессора ( от 8 до 32)
- управляющие регистры: счетчик команд, флаги условия, флаги состояния
- Указатели на стек: с каждым процессом связан свой стек, на который нужна ссылка
- управляющая информация процесса: состояние, приоритет, событие ожидания, флаги взаимодействия процессов, привилегии в выполнении каких-то действий, указатели на таблицы памяти...
При выполнении переключения процессов, система должна выполнить множество действий: сохранить управляющий блок процесса в оперативной памяти переместить процесс в какую-либо очередь процессов изменить значения регистров процессора, загрузив в них данные другого процесса.
На все эти действия тратится много процессорного времени, Поэтому постоянно разрабатываются способы минимального количества переключений.
ОС как процесс
Сама операционная система это тоже программа, которая порождает множество системных процессов. Эти процессы могут выполняться как самостоятельные процессы или входить как часть пользовательских процессов.
Вся работа процессов может выполняться в двух режимах: режим ядра и пользовательский режим. Процессы, запускающиеся в режиме ядра, имеют возможность прямого доступа к устройствам и оперативной памяти и имеют самый высокий приоритет выполнения. Процессы, запускающиеся в пользовательском режиме, не имеют прямого доступа к устройствам и всей оперативной памяти и имеют более низкий приоритет выполнения.
Традиционно, сама ОС выполняется вне всех процессов пользователя т.е. в режиме ядра. При запуске ОС занимает отдельное место в памяти и имеет свой стек. При запуске процессов, им передается управление, а затем управление по разным причинам ( прерывания...)возвращается к ОС, которая занимается распределением пользовательских процессов в памяти и системных очередях и передачей им управления.
Включение процедур ОС в состав пользовательских процессов.
Другой подход – это включить требуемые системные процедуры в совместно используемое пространство всех процессов т.е. в состав пользовательского процесса. Тогда при вызове системных процедур из процесса и возврате к пользовательскому процессу не потребуется переключение процессов, а произойдет лишь переключение процессора в режим ядра. Переключение процессора в режим ядра означает, что пользовательский процесс в это время не может вмешиваться в работу системных процедур.
Для переключения процессов вызывается отдельная процедура переключения процессов, которая вызывается или из текущего пользовательского процесса или из системного процесса, находящегося как бы вне пользовательских процессов ( это зависит от архитектуры ОС)
ОС на основе процессов
Такая ОС реализована как набор системных процессов, которые выполняются вместе с пользовательскими, но как отдельные процессы. Кроме набора процессов имеется небольшая системная программа, которая выполняется как бы вне всех процессов и управляет их переключением. Такой подход способствует разработке модульных ОС, где связь между модулями выполняется простым межмодульным интерфейсом. Этот метод положен в основу современных ОС.
Вопросы на повторение:
Что такое процесс. В каком случае рождается процесс и какие действия выполняет ОС для его создания и завершения.
Какие состояния могут быть у процесса после его создания и что они означают
Как могут организовываться очереди готовых к выполнению процессов ( 2 варианта)
Как могут организовываться очереди заблокированных процессов
Какие два режима существуют для выполнения всех процессов
В каком режиме работают процессы операционной системы. Как они могут взаимодействовать с пользовательскими процессами.