Студопедия

КАТЕГОРИИ:


Архитектура-(3434)Астрономия-(809)Биология-(7483)Биотехнологии-(1457)Военное дело-(14632)Высокие технологии-(1363)География-(913)Геология-(1438)Государство-(451)Демография-(1065)Дом-(47672)Журналистика и СМИ-(912)Изобретательство-(14524)Иностранные языки-(4268)Информатика-(17799)Искусство-(1338)История-(13644)Компьютеры-(11121)Косметика-(55)Кулинария-(373)Культура-(8427)Лингвистика-(374)Литература-(1642)Маркетинг-(23702)Математика-(16968)Машиностроение-(1700)Медицина-(12668)Менеджмент-(24684)Механика-(15423)Науковедение-(506)Образование-(11852)Охрана труда-(3308)Педагогика-(5571)Полиграфия-(1312)Политика-(7869)Право-(5454)Приборостроение-(1369)Программирование-(2801)Производство-(97182)Промышленность-(8706)Психология-(18388)Религия-(3217)Связь-(10668)Сельское хозяйство-(299)Социология-(6455)Спорт-(42831)Строительство-(4793)Торговля-(5050)Транспорт-(2929)Туризм-(1568)Физика-(3942)Философия-(17015)Финансы-(26596)Химия-(22929)Экология-(12095)Экономика-(9961)Электроника-(8441)Электротехника-(4623)Энергетика-(12629)Юриспруденция-(1492)Ядерная техника-(1748)

Планирование процессов в ОС UNIX. (13-2)

Создание процессов в ОС UNIX. (11-2)

Все процессы (кроме процесса с PID = 0) создаются при помощи системного вызова fork().

Когда выполняется системный вызов fork(), вызывающий процесс обращается в ядро ОС и ищет свободную строку в таблице процессов, в которую можно записать данные о дочернем процессе.

Если свободная строка находится, fork() копирует в нее информацию из родительского процесса. Затем он выделяет память для сегмента данных и динамического сегмента, куда копируется соответствующие сегменты родительского процесса. Контекст копируется вместе с динамическим сегментом.

Процедурный сегмент может либо копироваться, либо использоваться совместно (если он доступен только для чтения). Дочерний процесс получает идентификатор, затем настраивается его карта памяти и регистры. Кроме того, ему предоставляется доступ к файлам родительского процесса, посредством копирования дескрипторов файлов из контекста родительского процесса.

Карта памяти процесса сына настраивается по следующему принципу: сыну выделяются новые таблицы страниц, но эти таблицы указывают на страницы отца, помеченные, как доступные только для чтения. Когда процесс сын пытается что-то записать в такую странице, происходит прерывание; при этом ядро выделяет процессу сыну новую копию этой страницы, к которой сын получает доступ на запись. Копируются только те страницы, в которые сын пишет новые данные; при этом страницы с процедурным сегментом не копируются.

Определение последовательности выполнения потоков предусматривает два алгоритма, которые работают независимо друг от друга:

1. Низкоуровневый алгоритм – выбирает следующий процесс из набора процессов в памяти, готовых к работе.

2. Высокоуровневый алгоритм (swapper) – перемещает процессы из памяти на диск и обратно, т.е. осуществляет свопинг.

В низкоуровневом алгоритме используется несколько очередей. С каждой очередью связан диапазон непересекающихся значений приоритетов.

· Процессы, выполняющиеся в режиме «процесс» обычно имеют положительное значение приоритетов.

· У процессов, выполняющихся в режиме система, значение приоритетов, как правило, отрицательное. Отрицательное значение приоритетов считается наивысшими.

Когда запускается низкоуровневый алгоритм, он ищет очередь, начиная с самого высокого приоритета, т.е. наименьшего отрицательного значения, пока не находит очередь, в которой есть хотя бы один процесс. После этого в этой очереди выбирается и запускается первый процесс. Если процесс использует весь свой квант времени (~100мкс), он помещается в конец очереди, а алгоритм планирования запускается снова.

Один раз в секунду приоритет каждого процесса пересчитывается следующим образом:

PRI=K*CPU+NICE+BASE

На основе нового приоритета каждый процесс прикрепляется к соответствующей очереди.

· CPU – Среднее значение тиков таймера, в течение которого процесс выполнялся. При каждом тике таймера счетчик использования ЦП процессом в таблице процессов увеличивается на 1.

· K – Коэффициент для конкретной UNIX системы. Иногда это число K, иногда функция K(t).

· NICE - Пользовательская составляющая приоритета процесса, принимает диапазон значений от -20 до +20. С помощью системного вызова nice можно менять приоритет процесса от 0 до 20. Системный администратор может запросить обслуживание с более высоким приоритетом от -20 до 20. Это однозначно увеличивает частоту эксплуатации ЦП этим процессом.

· BASE

Когда процесс эмулирует прерывание для выполнения системного вызова, он блокируется, пока системный вызов не будет выполнен и процесс не вернется в режим «процесс». Блокировка происходит и при ожидании какого-либо события (wait) и при вводе/выводе. Когда процесс блокируется, он удаляется из очереди. Однако, когда происходит разблокировка процесса (наступает событие, которого он ждал или ввод/вывод завершен и т.п.), процесс снова помещается в очередь с отрицательным значением составляющей приоритета BASE.

Выбор значения (а, соответственно, и очереди) определяется событием, которого ждал процесс. Отрицательное значение приоритета BASE для дискового ввода/вывода, терминального ввода/вывода, выполнения различных системных вызовов и ожидания событий, жестко заданы в ОС и могут быть изменены только путем перекомпиляции системы.

<== предыдущая лекция | следующая лекция ==>
Дескриптор процесса в ОС UNIX. Контекст процесса. (5-2) | Управление памятью в ОС UNIX на основе свопинга (1-2)
Поделиться с друзьями:


Дата добавления: 2014-01-20; Просмотров: 892; Нарушение авторских прав?; Мы поможем в написании вашей работы!


Нам важно ваше мнение! Был ли полезен опубликованный материал? Да | Нет



studopedia.su - Студопедия (2013 - 2024) год. Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав! Последнее добавление




Генерация страницы за: 0.012 сек.