Содержимое таблицы процессов (ее столбцы)
ЯДРО. МОДУЛИ ОС
Некоторые ОС выполнены так, что ядро содержит лишь 1 модуль, в этом случае изменение свойств ядра весьма сложно (Linux). Другие ядра содержат несколько модулей, они называются микроядерными (напр.Word 2000).
Функции ядра
В состав ядра входят функции, выполняющие внутрисистемные задачи организации вычислительных процессов: переключение контекстов, загрузка-выгрузка страниц, обработка прерываний. Эти функции недопустимы для приложений. Другой класс функций ядра служит для поддержки приложений, создавая для них прикладную программную среду. Приложения могут обращаться к ядру с запросами, т.е. системными вызовами для выполнения тех или иных задач, напр. Чтение – открытие файлов; вывод графической информации на дисплей. Функции ядра, которые могут вызываться приложениями, образуют интерфейс прикладного программиста. Функции, выполняемые модулями ядра, являются наиболее часто используемыми функциями ОС, поэтому скорость их выполнения определяет производительность всей системы в целом. Для обеспечения высокой скорости работы ОС все модули ядра (их большая часть) постоянно находятся в оперативной памяти, т.е. являются резидентными.
ЯДРО В ПРИВИЛЕГИРОВАННОМ РЕЖИМЕ
Для надежного выполнения кода вычислительного процесса ОС должна иметь по отношению к приложениям привилегии, иначе некорректно работающее приложение может разрушить часть кода. Поэтому ОС должна обладать полномочиями, а так же для того, чтобы играть роль «арбитра в споре» приложений за ресурсы системы. Ни одно из приложений не должно иметь возможность без ведома ОС получить дополнительную область памяти, занимать процессор дольше разрешенного времени, управлять совместно используемыми внешними устройствами. Также привилегии можно обеспечить без специальных средств аппаратной поддержки. Аппаратура ПК должна поддерживать как минимум 2 режима работы: Пользовательский режим и Привилегированный режим (режим ядра). Приложение ставится в подготовительное положение за счет запрета воспроизведения в привилегированном режиме некоторых критических команд, связанных с переключением процессора с задачи на задачу, управлением устройства ввода-вывода, доступа к механизмам распределения и защиты памяти. Выполнение некоторых команд в пользовательском режиме запрещается (например команда перехода из польз. режима в привилегированный и обратно). Тогда как другие программы могут быть запрещены для выполнения в определенных условиях.
ПРОЦЕСС. МОДЕЛЬ ПРОЦЕССА
Модель процесса базируется на двух независимых концепциях: группирование ресурсов и выполнение программы. Процесс – это абстрактное понятие, описывающее работу программы. Процесс – выполняемая программа, включающая текущее значение счетчика команд, регистров и переменных. С позиции данной абстрактной модели у каждого процесса есть свой собственный центральный процессор. Процесс – это активность определенного рода. У процесса есть программа, входные, выходные данные, а также состояние (стек, аккумулятор, состояние регистров). Один процессор может переключаться между различными процессами, используя алгоритм планирования для определения моментов переключения от одного процесса к другому.
СОЗДАНИЕ ПРОЦЕССОВ
В универсальных ОС способ создания и прерывания процессов происходит по мере их необходимости. Есть 4 основных события, приводящие к созданию процессов:
1) Инициализация системы.
2) Выполнение изданного работающим процессом системного вызова на создание нового процесса.
3) Запрос пользователя на создание процесса.
4) Инициирование пакетного задания. Обычно при загрузке ОС создаются несколько процессов.
СОСТОЯНИЯ ПРОЦЕССОВ
Несмотря на то, что процесс является самостоятельным процессом со своим счетчиком команд и внутренним состоянием - существует необходимость взаимодействия с другими процессами.
Действие– это работающий процесс, в этот конкретный момент использующий процессор. Готовый к работе– процесс временно приостановлен, чтобы позволить выполниться другому процессу. Блокировка или заблокирование процесса – процесс не может быть запущен прежде, чем произойдет некоторое внешнее событие.
1 переход – процесс блокируется, ожидая входных данных.
2 переход – планировщик выбирает другой процесс.
3 переход – планировщик выбирает этот процесс.
4 переход – доступны входные данные. Первые два состояния похожи. В обоих случаях процесс может быть запущен. Только во втором случае процессор недоступен. Третье состояние отличается тем, что запустить процесс невозможно, независимо от того загружен процессор или нет.
Переход 1происходит тогда, когда процессор обнаруживает, что продолжение работы невозможно. В некоторых ОС процесс должен выполнить системный запрос, напр., block или pause, чтобы оказаться в заблокированном состоянии. В других системах (Unix) процесс автоматически блокируется, если он не в состоянии считать из специального файла или канала данные. Переход 2 и 3вызываются частью ОС, называемой планировщик процессов. Переход 2 происходит, если планировщик решил предоставить процессор другому процессу. Переход 3 происходит, когда все остальные процессы уже исчерпали свое процессорное время и процессор снова передается первому процессу. Переход 4 происходит с появление внешнего события, ожидавшего процессор, напр., прибытие входных данных. Если в этот момент не запущен никакой другой процесс, то срабатывает переход 3 и процесс запускается. В противном случае процессу придется некоторое время находиться в состоянии готовности, пока не освободится процессор.
ЗАВЕРШЕНИЕ ПРОЦЕССА
Рано или поздно процесс завершает свое существование. Чаще всего это происходит благодаря одному из следующих событий:
1) Обычный выход (преднамеренно).
2) Выход по ошибке (преднамеренно).
3) Выход по неисправимой ошибке (не преднамеренно).
4) Уничтожение другим процессом (не преднамеренно).
1) Процесс выполняет системный запрос, чтобы сообщить ОС о том, что он выполнил свою работу. 2) Второй причиной может стать неустранимая ошибка. Напр., пользователь вводит команду компиляции файла, которая не существует. В этом случае компилятор просто завершает свою работу. Интерактивные процессы, рассчитанные на работу с экраном обычно не завершают работу при получении неправильных параметров, а просят пользователя ввести правильные параметры, происходит диалог.
3) Ошибка, вызванная самим процессом. Чаще всего она связана с ошибкой в программе. Напр., выполнение недопустимой команды, обращение к несуществующей области памяти и др. В некоторых ОС, напр. Linux, процесс может информировать ОС о том, что он сам обрабатывает некоторые ошибки. В этом случае процессу посылается сигнал (процесс прерывается при появлении ошибки).
4) Выполнение другим процессом системного запроса на уничтожение определенного процесса (kill – Unix, Terminate Process – Windows 32). В обоих случаях процесс, который выбивает другой процесс, должен обладать соответствующими полномочиями. В некоторых ОС при завершении процесса преднамеренно или нет – все процессы, созданные этим процессом, завершаются.
ИЕРАРХИЯ ПРОЦЕССОВ
В некоторых ОС, в частности Linux, родительские и дочерние процессы остаются связанными. Дочерний процесс также может в свою очередь создавать процессы, формируя иерархию процессов. В Unix все эти дальнейшие потомки образуют группу процессов. Сигнал, посылаемый пользователем с клавиатуры, поставляется всем членам группы, взаимодействующим с клавиатурой в данный момент. Обычно это все активные процессы, созданные в текущем окне. Каждый из процессов может перехватить сигнал, игнорировать его или выполнить другое действие, предусмотренное по умолчанию. В образе загрузки Unix присутствует специальный процесс – init. При запуске он считывает файл, в котором имеется информация о количестве терминалов. Терминал (консоль) – это устройство ввода и вывода. Затем процесс развивается таким образом, чтобы каждому терминалу соответствовал один процесс. Если пароль правильный – процесс входа в систему запускает оболочку для обработки команд пользователя, которые в свою очередь могут запускать процессы. Т.О. все процессы в системе принадлежат одному дереву, начинающемуся с процесса init.
СТРУКТУРА ЯДРА
![]() |
Состоит из следующих слоев:
1) Средства аппаратной поддержки ОС. К ОС относят не все аппаратные средства компьютера, а только средства ее аппаратной поддержки, т.е. те, которые прямо участвуют в организации вычислительного процесса: - средства поддержки привилегированного режима; - система прерываний; - средства переключения контекстов процессов; - средства защиты области памяти.
2) Машинно-зависимые компоненты ОС (интегрированная схема, выполняющая определенные функции), низкоуровневый код (непосредственно с микросхемами), микрокод. Слоистая структура ядра делает всю ОС расширяемой (открытой), сл-но изменение какого либо из слоев ядра не затрагивает другие ее части.
3) Слой базовые механизмы – выполняет основные функции ядра (низкоуровневые: переключение контекстов процессора; загрузка-выгрузка страниц памяти; низкоуровневые операции ввод-выводода), ведет осн. таблицы. В этом слое не принимаются никакие решения относительно действий ядра в какой-либо ситуации; а выполняет лишь те директивы, которые приняты на более высоких слоях.
4) Менеджеры ресурсов (диспетчеры ресурсов) – состоят из модулей, решающих задачи по управлению основными ресурсами ОС.
Основные ресурсы:
- процессор, а точнее время, которое выделяется на определенные задачи;
- память;
- файловая система;
- устройство ввод-вывод.
Обычно на данном слое работают диспетчеры процессов, основной задачей которых является учет имеющихся ресурсов, освобождение и их распределение между потребителями (процессами). Каждый из менеджеров ведет учет ресурсов строго определенного типа и планирует их распределение в соответствии с запросами приложений. Все менеджеры используют табличную структуру. Для исполнения принятых решений менеджер обращается к нижестоящему слою базовых механизмов с запросами о загрузке-выгрузке конкретной страницы. Внутри слоя существуют тесные взаимные связи, отображающие тот факт, что для выполнения процессу нужен доступ единовременно к нескольким ресурсам, а именно: процессору, области памяти, к определенному файлу или устройству ввода-вывода.
5) Интерфейс системных вызовов – является самым верхним слоем ядра, он взаимодействует непосредственно с приложениями, системными утилитами и образует прикладной программный интерфейс (API). Функции API предоставляют доступ к ресурсам системе в удобной и компактной форме. Для осуществления таких действий системные вызовы обычно обращаются за помощью к функциям менеджеров ресурсов, причем для выполнения одного системного вызова может потребоваться несколько таких обращений.
ПЕРЕКЛЮЧЕНИЕ ПРОЦЕССОВ
Для реализации процессов ОС ведет информационную структуру, которая называется таблицей процессов. В ней столько строк - сколько процессов, и столько столбцов – сколько имеется параметров, описывающих данный процесс. Эти параметры можно разделить на три группы:
1 группа параметров относится к управлению процессами.
2 группа описывает используемую процессом память.
3 группа – параметры, которые описывают используемые файлы (ресурсы файловой системы). Во время работы в ОС содержатся коды ядра и коды процесса, который исполняется в данный момент. Если необходимо перейти к другому процессу – приходится загружать эти коды в оперативную память, но это можно сделать, только используя диск (обращение к диску). Но диск для ОС является внешним устройством, а это значит, что без прерывания здесь не обойтись. Однако прерывания могут потребоваться не обязательно тогда, когда необходимо переходить к другому процессу. Другой случай: работающий процесс может быть на время приостановлен ОС, если при определенных условиях какое-либо внешнее устройство попросит ОС сделать это. Если ОС требуется запустить новый процесс, то обращение к диску как к внешнему устройству неизбежно, поэтому начинается прерывание.
На начальной стадии этого процесса работают аппаратные средства процессора:
1) Аппаратно запоминается счетчик команд.
2) Заполняется слово состояния программы, а также содержимое одного или нескольких базовых регистров.
3) Завершают свою работу аппаратные средства тем, что считывают вектор прерывания диска (это начальный адрес процедуры прерываний) и запускают эту программу. С этого момента и почти до конца всего прерывания используются программные средства. Сначала вызывается процедура на Ассемблере, которая устанавливает временный стек и считывает основные параметры, которые являются столбцами в таблице процессов и заполняет соответствующую строку для данного процесса, который был остановлен. Такие действия, как установка стека, модификация регистров, а также их считывание – невозможно выразить на языке высокого уровня, поэтому все это делается на Ассемблере. После того, как строка в таблице модифицирована – эта программа на Ассемблере передает управление программе прерываний, написанной на языке высокого уровня. Далее процедура на языке высокого уровня главным образом буферизует данные и подготавливает их для обмена с внешним устройством. После завершения этой части программа на яз.выс.ур. вызывает программу на языке ассемблера, но прежде, планировщик, используя данные из таблицы процессов, может выбрать и подготовить для запуска другой процесс.
Содержимое таблицы процессов (ее столбцы)
Можно сгруппировать в двух частях:
1 часть столбцов – управление процессом:
1) Регистры (содержимое).
2) Счетчик команд.
3) Слово состояния программы.
4) Указатель стека.
5) Состояние процесса.
6) Приоритет.
7) Параметр планирования.
8) Идентификатор процесса (его PIT).
9) Родительский процесс (PPIT).
10) Принадлежность к группе процессов (если она есть).
11) Сигналы.
12) Время начала процесса.
13) Используемое процессорное время.
14) Процессорное время дочернего процесса.
15) Время следующего аварийного сигнала.
2 часть столбцов – управление памятью:
1) Указатель на текстовый сегмент.
2) Указатель на сегмент данных.
3) Указатель на сегмент стека.
3 часть столбцов - управление файлами:
1) Корневой каталог.
2) Рабочий каталог.
3) Дескрипторы файла (описатели).
4) Идентификатор файла (номер).
5) Идентификатор группы.
После того, как планировщик (менеджер процессов) закончил свою работу – управление передается программе на языке ассемблера, которая загружает регистры и карту памяти для вновь запускаемого процесса. Если ОС хотела запустить новый процесс – загружает карту памяти и регистры для нового процесса (если ОС имела в виду новый процесс), и старого процесса (если ОС имела в виду старый процесс).
Динамика переключения между процессами опирается на алгоритм прерываний и включает в себя следующие действия:
1) Аппаратное обеспечение сохраняет в стеке счетчик команд и т.п.
2) АО загружает новый счетчик команд из векторов прерываний.
3) Процедура на ассемблере сохраняет регистры.
4) Процедура на ассемблере устанавливает новый стек.
5) Запускается программа обработки прерываний на яз.выс.ур. (она считывает и буферизует входные и выходные данные).
6) Планировщик (часть ОС, программа на яз.выс.ур) выбирает следующий процесс (когда происходит переключение между процессами).
7) Программа на яз.выс.ур. передает управление процедуре на ассемблере.
8) Процедура на ассемблере запускает новый процесс.
ПОТОКИ. МОДЕЛЬ ПОТОКА
В универсальных ОС каждому процессу соответствует адресное пространство и одиночный управляющий поток. Фактически это и определяет процесс. Тем не менее, часто встречаются ситуации, в которых предпочтительно иметь несколько квазипараллельных управляющих потоков в одном адресном пространстве, как если бы они были различными процессами (но разделяющими одно адресное пространство). Модель процесса базируется на двух независимых концепциях: группирование ресурсов и выполнение программы. Иногда их необходимо разделять и здесь появляется понятие потока. У потока общее адресное пространство. У потока есть счетчик команд, отслеживающий выполнение действий; есть регистры, в которых хранятся текущие переменные; стек, содержащий протокол выполнения команд, где на каждую процедуру, вызванную, но еще не вернувшуюся, отведена часть стека. Хотя поток должен выполняться внутри процесса, следует разделять эти понятия. Процессы используются для группирования ресурсов, а потоки являются объектами, поочередно выполняемыми на центральном процессоре. Концепция потоков добавляет к модели процесса возможность одновременного выполнения в одном и том же процессе нескольких независимых программ. Несколько потоков, работающих параллельно в одном процессе аналогичны нескольким процессам, идущим квазипараллельно на одном компьютере. В первом случае потоки разделяют адресное пространство, открытые файлы и другие ресурсы. Во втором случае процессы совместно пользуются физической памятью, дисками, принтерами и др.ресурсами.