Процесс – совокупность машинных команд и данных, которая исполняется в рамках ВС и обладает правами на владение некоторым набором ресурсов.
Разделяемые ресурсы - это ресурсы, которые могут быть доступны разному количеству процессов.
Жизненный цикл процесса включает в себя типовые этапы обработки процесса в ВС: образование (порождение) процесса; обработка (выполнение) процесса; ожидание (по тем или иным причинам) постановки на выполнение; завершение процесса.
Типы процессов:
«полновесные процессы». Это процессы, которые выполняются внутри защищенных участков памяти ВС, т.е. эти процессы имеют свою виртуальную адресацию и соответствующие атрибуты, которые необходимы для их поддержания, – это традиционный процесс, т.е. процесс, который имеет монопольное владение адресным пространством.
«облегченные процессы». Суть: многие ОС поддерживают в качестве элементов программного управления так называемые облегченные процессы или нити, суть которых заключается в том, что нити могут быть реализованы внутри полновесного процесса, но они реализуются на общем адресном пространстве, т.е. в нитях отсутствуют: отдельная виртуальная адресация, защита и т.д. и т.п. Но нити являются объектом управления ОС с точки зрения взаимодействия и планирования.
Контекст процесса – это совокупность данных, которые характеризуют актуальное состояние процесса.
Идентификатор процесса – это есть некоторый номер, который характеризует размещение информации о регистрации процесса в системе в таблице процессов.
Контекст процесса в Unix – это есть некоторая совокупность данных, которая принадлежит как адресному пространству самого процесса, так и находится в адресном пространстве ОС.
От родительского процесса сыновний процесс наследует ряд параметров:
Параметры окружения. Системным переменным ОС Unix можно присваивать некоторые значения, и эти значения образуют окружение процесса. Через окружение процесса можно задавать те или иные режимы заботы процесса. Соответственно, в зависимости от нюансов окружения могут по разным режимам работать системные вызовы.
Файлы, открытые в процессе-отце.
Способы обработки сигналов
Разрешение переустановки эффективного идентификатора пользователя
Разделяемые ресурсы процесса-отца
Текущий рабочий каталог и домашний каталоги
…
Не наследуются:
Идентификатор процесса;
Идентификатор родительского процесса;
Сигналы, ждущие доставки в родительский процесс.
Время посылки ожидающего сигнала, установленное системным вызовом alarm();
Блокировка файлов, установленных родительским процессом.
Параллельные процессы - процессы, выполнение которых так или иначе перекрывается во времени полностью либо частично.
Параллельные процессы могут быть:
Независимыми. Процессы, которые не знают о существовании друг друга, используют независимое множество ресурсов и понятно, что их выполнение никак не должно зависеть от выполнения другого независимого процесса.
Взаимодействующие. Процессы, которые знают о существовании друг друга и используют ресурсы совместно и выполнение одного процесса естественно может оказывать влияние на выполнение другого процесса.
Взаимное исключение – это такой способ работы с разделяемы ресурсом, при котором в тот момент, когда один из процессов работает с разделяемым ресурсом, все остальные процессы не могут иметь к нему доступ.
Блокирование – это ситуация, когда один из процессов никогда не получит доступа к ресурсу.
Семафоры Дейкстры – это переменные целого типа, на которых определены не обычные операции, которые обычно определяются для целого типа, а вполне определенные две операции – это Down(S) (или P(S)) и Up(S) (или V(S)).
Монитор – это совокупность структур данных и процедур, которые работают с ними. Они объединены в один программный модуль и этот модуль специального типа и называется монитор.
Вообще обмен сообщениями – это программное средство, которое используется для проблем синхронизации. Это некоторая система, в котором реализованы два примитива – это отправка сообщения - send и получение сообщения –receive.
Сигнал – это некоторое средство уведомления процессора о том, что в системе произошло то или иное событие.
Неименованные каналы – это некоторая область на диске, с которой ассоциированы два дескриптора. Один из дескрипторов используется для чтения из канала, другой для записи в канал.
Отличительные свойства канала: Канал не имеет имени, Канал обладает фиксированным размером, Канал не существует вне процессора, его породившего, В канале реализуется строго последовательный доступ к данным.
Именованные каналы - файлы, реализующие дисциплину последовательного доступа к данным.
Схема «главный-подчиненный» предполагает, что один из процессов является главным, т.е. управляет поведением другого процесса. В системе Unix к такой модели относится трассировка, т.е. отладка процессов. Трассировка осуществляется двумя процессами, которые родственны между собой.
Сетевая ОС – это ОС, которая обеспечивает функционирование распределенных приложений.
ФС – это компонент ОС, который обеспечивает именованный доступ к данным.
Атрибуты файлов - набор параметров, которые определяют свойства этого файла.
Каталог – это часть ФС, в котором размещается информация об именах файлах и их свойствах, которые размещены в данной ФС.
Суперблок – это блок ФС, в котором находится информация о настройках ФС и информация об актуальном состоянии ФС.
Настройки ФС - это информация о дисковом пространстве, которое выделено для хранения файлов, это информация о возможных предельных размерах файлов и т.д. и т.п., это информация о свободных блоках, которые можно использовать для файлов, это информация о данных, которые содержат каталоги.
Блок – это порция данных фиксированного размера, с терминах которой осуществляется обмен с данным устройством.
Блок дискового устройства – это блок, который определяется свойствами этого устройства.
Индексный дескриптор – это некоторая системная структура данных, которая описывает состояние и размещение файлов в ФС.
Жесткая ссылка - с одним и тем же индексным дескриптором будет ассоциироваться два или более имени, размещенных в произвольных точках ФС.
Символическая связь - в ФС можно создать специальный файл ссылку, содержимое которого размещается в индексном дескрипторе этого файла. Этим содержимым является текстовая строка, указывающая полное имя того файла, с которым нужно ассоциировать новое имя (имя файла-ссылки).
RAID система представляет собой набор независимых дисков, которые рассматриваются ОС как единое дисковое устройство, где данные представляются в виде последовательности записей, которые называются полосы.
Концепция IPC: Для именования доступа используется так называемые ключи IPC. Т.е. система позволяет работать с определенными разделяемыми ресурсами. Этими разделяемыми ресурсами могут быть: Очередь сообщений, Разделяемая оперативная память, Семафоры.
Очередь сообщений представляет собой организованную совокупность данных, в которой каждый из наборов данных называется сообщением, и которая организованна как очередь.
Ipc: разделяемая память
Суть этого ресурса заключается в следующем: можно создать ресурс, который будет представим в процессе как память, в которой может процесс работать через указатель на начало этой области памяти. При этом эта область памяти будет являться разделяемой.
Ipc: массив семафоров
Это средство реализуется программно. Требование атомарности операции – свойство семафоров Дейкстры и также это требование имеет место и в прерываниях. Атомарность семафорных операций ΙPC обеспечивается системой. Разница между массивом семафоров IPC и семафорами Дейкстры заключается в том, что первое программная реализуется в реальных условиях, а второе является модельной реализацией.
1. Первый тип сокетов – это так называемое соединение с использованием виртуального канала (по модели организации виртуального канала). В семействе протоколов TCP/IP виртуальный канал обеспечивает протокол TCP.
2. Второй тип сокетов обеспечивает так называемое датаграммное соединение, т.е. соединение аналогичное протоколу UDP.
Квант времени – непрерывный период процессорного времени.
Приоритет процесса – числовое значение, показывающее степень привилегированности процесса при использовании ресурсов ВС (в частности, времени ЦП).
Планировщик – это некоторая программа, которая реализует некоторый алгоритм, который связан с его системными функциями.
Свопинг – это откачка и закачка тех или иных страниц (если имеет место страничная организация) или процессов из внешней памяти в ОП.
Управление оперативной памятью
Одиночное непрерывное распределение
Предполагается, что физическая ОП делится на две области. 1-я область – это область, в которой размещается ОС. 2-я область – это оставшаяся часть, которая доступна для задач или для процессов пользователя. И предполагается, что для одного процесса (или для одной задачи) выделяется вся эта область.
Распределение неперемещаемыми разделами
Суть это стратегии заключается в том, что также есть ОС, которая занимает часть памяти, и есть оставшаяся физическая память. Оставшуюся физическую память мы делим на некоторое фиксированное количество разделов. В каждом разделе может быть загружено свое задание или свой процесс.
Распределение перемещаемыми разделами
Суть: система имеет фиксированное количество разделов, и начинается проблема фрагментации. Для борьбы с внешней фрагментацией понятно очевидное решение. Это есть перемещение разделов и образование свободной области в одном разделе.
Страничное распределение
Мы имеем виртуальное адресное пространство и имеем пространство физической памяти. И страничная организация посредством соответствующих аппаратных и программных решений, в частности таблиц и страниц, позволяет отображать те страницы, которым поставлены в соответствие физические страницы, практически автоматически.
Задача обедающих философов
# define N 5 /* количество философов */
# define LEFT (i-1)%N
# define RIGHT (i+1)%N
# define THINKING 0 /* философ думает */
# define HUNGRY 1 /* философ голоден */
# define EATING 2 /* философ ест */
typedef int semaphore; /* определяем семафор */
int state[N]; /* массив состояний каждого из философов */
semaphore mutex=1; /* семафор для критической секции */
semaphore s[N]; /* по одному семафору на философа */
void philosopher (int i) /* i : номер философа от 0 до N-1 */
{ while (TRUE) /* бесконечный цикл */
{ think(); /* философ думает */
take_forks(i); /*философ берет обе вилки или блокируется */
eat(); /* философ ест */
put_forks(i); /* философ кладет обе вилки на стол */}}
void take_forks(int i) /* i : номер философа от 0 до N-1 */
{down(&mutex); /* вход в критическую секцию */
state[i] = HUNGRY;
test(i); /* попытка взять обе вилки */
up(&mutex); /* выход из критической секции */
down(&s[i]); /* блокируемся, если вилок нет */}
void put_forks(i) /* i : номер философа от 0 до N-1 */
{down(&mutex); /* вход в критическую секцию */
state[i] = THINKING; /* философ закончил есть */
test(LEFT); /* может ли левый сосед сейчас есть */
test(RIGHT); /* может ли правый сосед сейчас есть*/
up(&mutex); /* выход из критической секции */}
void test(i) /* i : номер философа от 0 до N-1 */
{if (state[i] == HUNGRY && state[LEFT] != EATING &&
state[RIGHT] != EATING){
state[i] = EATING;
up (&s[i]);}}