Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
iCarnecie_SSD2_RU_v5 (2).docx
Скачиваний:
30
Добавлен:
23.12.2018
Размер:
6.54 Mб
Скачать

3.1.3 Управление процессами

Другая функция операционной системы – поддерживать последовательность всех процессов, выполняющихся в настоящий момент, обеспечивая каждому выполнение с разумной частотой. Процесс – частный случай программы. Он включает некоторый набор страниц памяти, набор дескрипторов (описателей) открытых файлов (если это процесс ввода/вывода (I/O)), идентификатор процесса (ID) и другие. Ядро поддерживает список всех процессов в системе. Это программы, запущенные пользователем, различные программы, выполняющие функции операционной системы за пределами ядра, такие как печать и сетевая поддержка. Каждый процесс может быть в одном из состояний: работающий (запущенный), работоспособный, или заблокированный. Только один процесс на ЦП может фактически работать в данный момент времени, хотя любое число может быть работоспособным. Заблокированный процесс – тот, который дожидается некоторого события. Например, программа буферизации печати заблокирована большую часть времени и становится работоспособной, когда пользователь выбирает команду Печать, активизируя процесс.

В операционной системе Windows при вызове менеджера задач (Task Manager) можно увидеть список текущих заданий. (Задание в Windows – это приложение, запущенное пользователем, появляющееся в панели процессов. Задание обеспечивает выполнение одного или более процессов). 3.1.4 Lab: The Task Manager показывает шаги, необходимые для использования Task Manager. В операционной системе UNIX команды ps и top отображают информацию о процессах.

Ядро поддерживает очередь (также называется очередью задач) или очередь процессов на выполнение. Для того, чтобы создать иллюзию что все процессы выполняются одновременно, используется приоритетная многозадачность. По сравнению с другими видами многозадачности, приоритетная многозадачность создает лучшую иллюзию, чем остальные. Трюк заключается в наличии часов реального времени, которые могут регулярно генерировать прерывания. Прерывания по таймеру предоставляют ядру возможность посмотреть на очередь запуска и увидеть, можно ли какой-то процесс запустить прямо сейчас. Если ответ – да, то процесс, выполняемый в данный момент, выгружается. Ранг его состояние понижается от запущенного к работоспособному, этап его выполнения отмечается и содержимое его регистра сохраняется, чтобы процесс можно было возобновить позже. Заблокированные процессы также генерируют эти виды прерываний, но ответ на последний вопрос для них всегда “да”. Затем другой процесс в очереди задач выбирается для работы. Если ядро переключает процессы с достаточной частотой, то человеку кажется, что все процессы выполняются одновременно. Теперь вы знаете секрет иллюзии!

Если приоритетная многозадачность — хорошая идея, то почему бы ни переключать процессы чаще, скажем, после каждой команды? Причина в том, что ядро не переключает от одного процесса к другому, для этого требуется контекстный переключатель, который требует некоторого времени. Для выполнения контекстного переключения процессор должен прервать последовательность команд, сохранить содержимое всех регистров, загрузить новую таблицу страниц и т.п. Это требует определенного количества расходов для каждого приоритетного прерывания. Поэтому, оптимальная стратегия — делать контекстное переключение только тогда, когда нужно гарантировать справедливое обслуживание для всех процессов.

Некоторые приложения для выполнения своих функций требуют многозадачности. Например, для того чтобы веб-навигатор поддерживал многооконность (каждая загрузка — на своей странице или запуск различных Java-апплетов) браузеру нужно создать процесс для каждого окна. Но, наличие множества процессов дорого, потому что каждому требуется собственное адресное пространство, таблицы страниц, файлы дескрипторов и т.п. И многие приложений, использующие многозадачность, не требуют разделения процессов. Поэтому новые версии операционных систем предусматривают облегченные процессы (lightweight processes) называемые потоками (threads), которые находятся в одном адресном пространстве и совместно используют файловые дескрипторы.

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]