
- •1 Ядро. Модули ос
- •Функции ядра
- •2 Ядро в привилегированном режиме
- •3 Процесс. Модель процесса
- •Создание процессов
- •Состояния процессов
- •4 Завершение процесса
- •5 Иерархия процессов
- •6 Структура ядра
- •7 Переключение процессов
- •Содержимое таблицы процессов (ее столбцы)
- •8 Потоки. Модель потока
- •9 Межпроцессорное взаимодействие. Состояние состязания
- •10 Критические области
- •11 Запрещения прерываний и переменные блокировки Попытка аппаратного решения проблемы
- •Рассмотрим программные решения
- •12 Алгоритм петерсона. Команда tsl
- •Примитивы межпроцессорного взаимодействия
- •13 Семафоры
- •14 Мьютексы
- •15 Функции ос по управлению памятью
- •16 Типы адресов
- •17 Образ процесса. Виртуальное адресное пространство
- •18 Методы распределения памяти
- •Распределение памяти фиксированными разделами
- •Распределение памяти динамическими разделами
- •Перемещаемые разделы
- •19 Swopping и виртуальная память
- •Включает решение следующих задач
- •20 Страничное распределение памяти
- •22 Сегментное распределение памяти
- •24 Кэш память
- •Принцип действия кэш памяти
- •25 Устройство ввода-вывода
- •Контроллеры внешних устройств
- •1 Способ. Раздельные адресные пространства
- •2 Способ. Одно адресное пространство
- •3 Способ. Гибридный
- •27 Использование нескольких шин для ввода-вывода
- •28 Прямой доступ к памяти. Direct Memory Access (dma)
- •29 Процедура прерываний. Контроллер прерываний
- •30 Принципы программного обеспечения ввода-вывода
- •31 Программный ввод-вывод
- •31 Управляемый прерываниями ввод-вывод. Использование дма
- •32 Программные уровни ввода-вывода
- •Обработка прерываний и драйверы
- •Программные уровни ввод-вывод
- •33 Независимое от устройств программное обеспечение ввода-вывода Единообразный интерфейс для устройств
- •Единообразный интерфейс драйверов устройств
- •34 Структура и функции драйверов
- •35 Буферизация ввода-вывода
- •36 Юникс подобные ос
- •37 Структура ядра ос юникс
- •38 Загрузка юникс подобной ос
- •39 Процессы в системе юникс
- •40 Управление процессами ядром юникс
- •41 Системные вызовы управления процессами
- •42 Системные вызовы управления потоками
- •43 Сигналы
- •44 Файловая система и иерархия данных
- •45 Файловая система fat
8 Потоки. Модель потока
В универсальных ОС каждому процессу соответствует адресное пространство и одиночный управляющий поток. Фактически это и определяет процесс. Тем не менее, часто встречаются ситуации, в которых предпочтительно иметь несколько квазипараллельных управляющих потоков в одном адресном пространстве, как если бы они были различными процессами (но разделяющими одно адресное пространство). Модель процесса базируется на двух независимых концепциях: группирование ресурсов и выполнение программы. Иногда их необходимо разделять и здесь появляется понятие потока. У потока общее адресное пространство. У потока есть счетчик команд, отслеживающий выполнение действий; есть регистры, в которых хранятся текущие переменные; стек, содержащий протокол выполнения команд, где на каждую процедуру, вызванную, но еще не вернувшуюся, отведена часть стека. Хотя поток должен выполняться внутри процесса, следует разделять эти понятия. Процессы используются для группирования ресурсов, а потоки являются объектами, поочередно выполняемыми на центральном процессоре. Концепция потоков добавляет к модели процесса возможность одновременного выполнения в одном и том же процессе нескольких независимых программ. Несколько потоков, работающих параллельно в одном процессе аналогичны нескольким процессам, идущим квазипараллельно на одном компьютере. В первом случае потоки разделяют адресное пространство, открытые файлы и другие ресурсы. Во втором случае процессы совместно пользуются физической памятью, дисками, принтерами и др.ресурсами.
9 Межпроцессорное взаимодействие. Состояние состязания
Межпроцессорное взаимодействие состоит из состязания. Процессам часто бывает необходимо взаимодействовать между собой. Напр., выходные данные одного процесса могут потребоваться другому. Поэтому необходимо правильно организовать взаимодействие между ними, не прибегая к прерываниям.
Проблема состоит из трех частей:
1) Передача данных от одного процесса к другому.
2) 2 процесса могут столкнуться между собой в критических ситуациях (напр., каждому из них в определенный момент может потребоваться последний мегабайт оперативной памяти).
3) Согласование действий между процессами: если напр., процесс А должен поставить данные, а процесс В выводить их на печать, то В должен ждать и не начинать печатать, пока не поступят данные от процесса А. два из записанных пунктов относятся и к потокам. Первая проблема (передача данных) в случае потоков проблемой не является, поскольку у потоков общее адресное пространство. Процессы, работающие совместно, могут сообща использовать общее хранилище данных. Каждый из них может считывать оттуда данные и записывать туда информацию. Это так же может быть участок в основной памяти или файл общего доступа.
Замечание: ситуация, в которой два или более процесса считывают или записывают данные одновременно, и конечный результат зависит от того, какой из них был первым, называется состоянием состязания.
10 Критические области
Основным решением проблем, связанных с совместным использованием памяти файлов и т.д., является запрет одновременной записи и чтения разделенных (общих) данных более, чем одним процессом. Иными словами, необходимо взаимное исключение. Это означает, что в момент, когда один процесс использует разделяемые данные, другому процессу это делать запрещено. В рассмотренном примере (см.дальше) эта ситуация возникла из-за того, что процесс В начал работу с одной из совместно используемых переменных до того, как процесс А ее закончил. Часть программы, в которой есть обращение к совместно используемым данным, называется критической областью. Если удастся избежать одновременного нахождения процессов в критической области, можно избежать состязаний. Несмотря на то, что это требование исключает состязания, оно не достаточно для правильной совместной работы квазипараллельных процессов и эффективного использования данных. Для этого необходимо выполнение 4-х условий.
1) Два процесса не должны одновременно находиться в критических областях (в программе, но в одно и тоже время).
2) В программе не должно быть предложений о скорости или количестве процессов.
3) Процесс, находящийся в критической области не может, или не должен блокировать другой процесс.
4) Недопустима ситуация, в которой процесс неопределенно долго ждет попадания в критическую область.