Управление процессами в ОС Unix. Типы процессов

Типы процессов:

1) Системные процессы – часть ядра и всегда находится в оперативной памяти. Системные процессы не имеют соответствующих программ в виде исполняемых файлов. Запускаются они при инициализации ядра, к таким процессам относятся разного рода диспетчеры, так же относится процесс init, который является прародителем всех процессов, запускается который из программы init.

2) Демоны – неинтерактивные процессы которые запускаются с программой. Выполняются они в фоновом режиме. Запускаются они при инициализации системы но после инициализации ядра. Обеспечивают работу подсистем (подсистем печати). Демоны не связаны ни с одним из пользователей и не могут ими непосредственно управляться. Большую часть времени демоны ожидают пока какой либо процесс не запросит определенной услуги.

3) Прикладные – к ним относятся все остальные процессы. Процессы порожденные в рамках пользователя сеанса работы и времени жизни ограничено сеансом работы пользователя. Могут работать как в фоновом режиме так и интерактивном режиме.

Атрибуты процесса. Основные:

1) Идентификатор процесса (PID)

2) Родительский процесс

3) Приоритет процесса. Относительный приоритет учитывается планировщиком при определении очередности запуска. Фактическое распределение ресурсов определяется приоритетом выполнения, который в отличии динамически обновляет ядро.

4) Терминальная линия – системные процессы и демоны не имеют ассоциации с ними терминала.

5) Реальные и эффективные идентификаторы пользователя. Реальным идентификатором является идентификатор пользователя запустивший данный процесс, а эффективный служит для определения прав доступа к ресурсам. Обычно они совпадают. Но существует возможность задания более широких прав доступа. Когда эффективному идентификатору присваивается значение присваемого идентификатора владельца исполняемого файла.

Состояние процессов:

1) Процесс выполняется в режиме задачи

2) В режиме ядра

3) Процесс не выполняется но готов к запуску, он обладает всеми ресурсами кроме вычислительных.

4) Процесс находится в состоянии сна, он ожидает в данный момент ресурсов.

5) Процесс только что создан и находится в переходном состоянии, то есть он уже существует но не готов к запуску и не находится в состоянии сна.

6) Процесс выполнил системный вызов на завершение и перешел в состояние зомби, то есть как такового состоянии не существует но осталась статистика его выполнения.

 

21. Алгоритмы управления памятью в ОС Unix, Linux. Замещение страниц.

Управление памятью в Unix. До версии 3ВSD при упр-и памятью большинство систем основывались на свопинге(это название процесса), работающим след образом: когда загружались процессы больше, чем могло поместиться в памяти, некот из них выгружались на диск. Эти выгружаемые процессы всегда выгружаются целиком. Выбирая жертву, своппер(какая-то программка) сначала рассматривал блокированные процессы, либо находящиеся в памяти долгое время. Если блокированных процессов не было, то выбирался готовый к выполнению процесс. Начиная с версии 3ВSD, при управлении памятью появилась возможность страничной подкачки для того, чтобы обеспечить возможность работы прогам больших размеров, кот теперь реализован во всех современных версиях Unix.

Идея, лежащая в основе страничной подкачки, заключ в том, что для работы процесса ему не нужно целиком нах-ся в памяти. Всё, что требуется – это структура польз-ля и страница страниц. Если они загружены, то процесс считается нах-симся в памяти и может быть запущен планировщиком. Подкачка страниц осущ по требованиям с кластеризацией. Страничная подкачка реализ-ся частично процессом, называемым «страничным демоном». Как и все демоны, страничный демон запускается раз в 250мс, чтобы сравнить количество свободных страничных блоков с пар-ром “lostfree” , кот обычно = ¼ Vопер памяти. И если количество свободных блоков < значения этого параметра, то страничный демон начинает переписывать страницы из памяти на диск до тех пор, пока количество свободных страниц не станет = параметру lostfree! Страничный демон использует модифицированную версию алгоритма часов. Это глобальный алгоритм, кот при удалении страницы не учитывает, чья это страница Таким образом, кол-во страниц у процессов меняется со временем. Основной алг-м часов работает, сканируя страничные блоки так, как если бы они лежали на циферблате часов. На первом проходе , когда стрелка часов указывает на страничный блок, то сбрасывается его вид исп-ния. На втором проходе, если вид исп-я остался=0, то страничный блок будет помещён в список свободных страниц после записи его на диск. Страничный блок сохраняет своё содержание, что позволит быстро восстановить страничку, если она потребуется, прежде чем будет перезаписана.

Изначально в UNIХ исп-ся основной алг-м часов, но затем было обнаружено, что при больших V опер памяти проходы занимают слишком много времени. Тогда основной алгоритм был заменён на алг-м с двумя стрелками. В этом алг-ме страничный демон поддерживает 2 указателя на карту памяти. При своей работе он сначала считывает бит обращения пользователя передней стрелкой, а затем проверяет задней стрелкой, после чего одновременно перемещаются обе стрелки. При каждом запуске страничного демона обе стрелки проходят не полный оборот, а ровно столько, сколько необходимо, чтобы кол-во свободных страничных блоков стало больше значения параметра lostfree. Если ОС обнаруживает, что частота подкачки страниц слишком высока, а значение кол-ва свободных страничных блоков всё время ниже пар-ра lostfree, то своппер начинает удалять из памяти один или несколько процессов.

Алг работы своппера следующий: Сначала своппер проверяет, есть ли процесс, кот бездействовал в течение 20 или более секунд. Если такие есть, то самые бездействующие сбрасываются на диск. Если таких нет, то изучаются 4 самых больших процесса, из кот один сбрасывается на диск. Алг-м повторяется до тех пор, пока не будет освобождено достаточное кол-во места. Периодически своппер проверяет, есть ли на диске готовые процессы, кот следует загрузить в память. Своппер загружает в память только страницу польз-ля и таблицы страниц, а сами страницы загружаются при помощи обычной страничной подкачки.

В системе System V, в отличие от 3ВSD, есть 2 особенности реализации алг-ма страничного замещения:

1) Вместо алг-ма часов с двумя стрелками исп-ся алг-м часов с одной стрелкой. Более того, страница помещается в список свободных страниц в том случае, если она не исп-сь в течение нескольких последовательных проходов. Хотя при таком решении страницы не5 освобождаются быстро, но увеличивается вероятность того, что освобождённая страница тут же не потребуется снова;

2) Вместо одной переменной опции исп-ся две переменные: min и maх. Когда кол-во свободных страниц спускается ниже значения min, то страничный демон начинает освобождать страницы и работает до тех пор, пока кол-во свободных страниц не сравняется со значением переменной maх. Такой подход позволяет не так часто запускать страничного демона.

Управление памятью в Linex. Каждый процесс ОС Linex получает 3 ГБ виртуального адресного пространства. Оставшийся 1Гб памяти исп-ся для страничных таблиц и других ф-ций ядра. Он виден процессам, кот выполняются в режиме ядра. Linex упр-ет памятью таким образом, что может предоставить процессу участок памяти произвольного размера. Для этого исп-ся дружественный алг-м. Основная его идея: Изначально память состоит из единого непрерывного участка. Когда поступает запрос на выделение памяти процессу, то он округляется до степени 2х. Затем весь блок памяти делится пополам. Если полученные участки велики, то нижняя половина делится пополам ещё раз. И так до тех пеор, пока не получится участок подходящего размера. Этот алг-м был унаследован с System V.

Алг-м замещения страниц работает след образом: Системе Linex пытается поддерживать некоторые страницы свободными с тем, чтобы их можно было исп-ть при необходимости. Во время загрузки системы процесс init запускает страничного демона, кот работает 1 раз в секунду. Он проверяет, есть ли достаточное кол-во свободных страниц. Страничный демон состоит из цикла, кот выполн-ся до 6 раз с возрастающей срочностью. Тело цикла выполняет обращение к 3м процедурам, каждая из кот пытается получить различные типы страниц. Значение срочности передаётся в виде пар-ра процедуре. Оно определяет, сколько страниц нужно проверить. В результате этот алг-м сначала выбирает легкодоступные страницы, после чего переходит к труднодоступным.

1я процедура пытается получить те страницы из страничного КЭШа, к кот в последнее время не было обращений; для чего исп-ся алг-м часов.

2я процедура ищёт совместно используемые страницы, которыми никто из пользователей активно не пользуется;

3я процедура выполняет поиск по всем процессам в поисках процесса, у кот на данный момент >всего страниц нах-ся в памяти. К нему применяется тот же алг-м часов. Если страница, выбранная из замещения, чистая, т.е не было её модификации, то она замещается немедленно. Если страница грязная, то она становиться в очередь в запись на диск.

В Linex сущ ещё один демон, кот периодически проверяет кол-во грязных страниц и если оно превысило опред уровень, то этот демон начинает записывать эти страницы на диск.