7 Переключение процессов
Для реализации процессов ОС ведет информационную структуру, которая называется таблицей процессов. В ней столько строк — сколько процессов, и столько столбцов – сколько имеется параметров, описывающих данный процесс. Эти параметры можно разделить на три группы:
1 группа параметров относится к управлению процессами.
2 группа описывает используемую процессом память.
3 группа – параметры, которые описывают используемые файлы (ресурсы файловой системы). Во время работы в ОС содержатся коды ядра и коды процесса, который исполняется в данный момент. Если необходимо перейти к другому процессу – приходится загружать эти коды в оперативную память, но это можно сделать, только используя диск (обращение к диску). Но диск для ОС является внешним устройством, а это значит, что без прерывания здесь не обойтись. Однако прерывания могут потребоваться не обязательно тогда, когда необходимо переходить к другому процессу. Другой случай: работающий процесс может быть на время приостановлен ОС, если при определенных условиях какое-либо внешнее устройство попросит ОС сделать это. Если ОС требуется запустить новый процесс, то обращение к диску как к внешнему устройству неизбежно, поэтому начинается прерывание.
На начальной стадии этого процесса работают аппаратные средства процессора:
1) Аппаратно запоминается счетчик команд.
2) Заполняется слово состояния программы, а также содержимое одного или нескольких базовых регистров.
3) Завершают свою работу аппаратные средства тем, что считывают вектор прерывания диска (это начальный адрес процедуры прерываний) и запускают эту программу. С этого момента и почти до конца всего прерывания используются программные средства. Сначала вызывается процедура на Ассемблере, которая устанавливает временный стек и считывает основные параметры, которые являются столбцами в таблице процессов и заполняет соответствующую строку для данного процесса, который был остановлен. Такие действия, как установка стека, модификация регистров, а также их считывание – невозможно выразить на языке высокого уровня, поэтому все это делается на Ассемблере. После того, как строка в таблице модифицирована – эта программа на Ассемблере передает управление программе прерываний, написанной на языке высокого уровня. Далее процедура на языке высокого уровня главным образом буферизует данные и подготавливает их для обмена с внешним устройством. После завершения этой части программа на яз.выс.ур. вызывает программу на языке ассемблера, но прежде, планировщик, используя данные из таблицы процессов, может выбрать и подготовить для запуска другой процесс.
Содержимое таблицы процессов (ее столбцы)
Можно сгруппировать в двух частях:
1 часть столбцов – управление процессом:
1) Регистры (содержимое).
2) Счетчик команд.
3) Слово состояния программы.
4) Указатель стека.
5) Состояние процесса.
7) Параметр планирования.
8) Идентификатор процесса (его PIT).
9) Родительский процесс (PPIT).
10) Принадлежность к группе процессов (если она есть).
12) Время начала процесса.
13) Используемое процессорное время.
14) Процессорное время дочернего процесса.
15) Время следующего аварийного сигнала.
2 часть столбцов – управление памятью:
1) Указатель на текстовый сегмент.
2) Указатель на сегмент данных.
3) Указатель на сегмент стека.
3 часть столбцов — управление файлами:
1) Корневой каталог.
2) Рабочий каталог.
3) Дескрипторы файла (описатели).
4) Идентификатор файла (номер).
5) Идентификатор группы.
После того, как планировщик (менеджер процессов) закончил свою работу – управление передается программе на языке ассемблера, которая загружает регистры и карту памяти для вновь запускаемого процесса. Если ОС хотела запустить новый процесс – загружает карту памяти и регистры для нового процесса (если ОС имела в виду новый процесс), и старого процесса (если ОС имела в виду старый процесс).
Динамика переключения между процессами опирается на алгоритм прерываний и включает в себя следующие действия:
1) Аппаратное обеспечение сохраняет в стеке счетчик команд и т.п.
2) АО загружает новый счетчик команд из векторов прерываний.
3) Процедура на ассемблере сохраняет регистры.
4) Процедура на ассемблере устанавливает новый стек.
5) Запускается программа обработки прерываний на яз.выс.ур. (она считывает и буферизует входные и выходные данные).
6) Планировщик (часть ОС, программа на яз.выс.ур) выбирает следующий процесс (когда происходит переключение между процессами).
Таблица процессов
В информатике таблица процессов — это табличная структура данных , содержащая по одной записи для каждого запущенного процесса . Это называется блоком управления процессом ( контекст процесса ; англ. P rocess c ontrol b lock или t ask c ontrol b lock , short PCB или TCB ). Блок управления процессом содержит информацию о состоянии процесса, его счетчике команд , регистре ЦП, указателе стека, а также о распределении памяти и состоянии его открытых файлов. Дополнительным содержимым в записи данных является информация о планировании и управлении, а также вся информация, которая должна быть сохранена, когда процесс переходит из «активного» состояния в состояние «готов» или «заблокирован», чтобы гарантировать непрерывное продолжение после прерывания .
Эти перерывы необходимы по двум причинам: с одной стороны, пользователь хочет высокой степени параллелизма. С другой стороны, количество запущенных программ (процессов) намного больше, чем количество доступных процессоров (даже с многоядерными процессорами). Таким образом, таблица процессов представляет собой структуру данных, поддерживаемую операционной системой, чтобы иметь возможность выполнять прерывания во время выполнения в процессах.
В Linux блоки управления процессом представлены C- структурой task_struct.
3.2. Жизнь процесса
С точки зрения ядра процесс представляет собой запись в таблице процессов. Эта запись содержит данные, существующие в течение всего времени жизни процесса, и сведения о его состоянии. Размер таблицы процессов позволяет запускать несколько сотен процессов одновременно. Другая важная информация о процессе — например, таблица всех открытых процессом файлов — хранится в его адресном пространстве. Запись в таблице процессов и пространство процесса вместе составляют контекст, или окружение, процесса. В него входят:
? PID — идентификатор процесса. Он принудительно назначается планировщиком при запуске процесса.
? PPID — идентификатор родительского процесса (о порождении процессов — дальше в этом же параграфе).
? TTY — имя управляющего терминала (терминал, с которого запущен процесс).
? WD — текущий каталог процесса, от которого отсчитываются относительные пути.
? RID, RGID — реальные ID и групповой ID пользователя, запустившего процесс.
? EUID, EGID — эффективные ID и GID: см. п.2.1.4.8.
? NICE — показатель уступчивости. Процессы выполняются в режиме разделения времени, то есть время центрального процессора делится между готовыми к выполнению процессами с учетом их приоритета. Чем выше показатель уступчивости, тем ниже приоритет.
? Переменные окружения.
Системные вызовы fork() и exec() или как размножаются процессы
Каждый процесс порождается другим процессом, использующим для этого системный вызов fork(). Таким образом, структура процессов, подобно файловой системе, древовидна. Корнем этого дерева служит init — процесс инициализации системы. Он запускается ядром первым, получает идентификатор 1 и порождает еще несколько процессов (сколько и каких, можно узнать из его конфигурационного файла /etc/inittab), которые, в свою очередь, при участии пользователя порождают другие процессы.
В результате системного вызова fork() родительский процесс полностью копирует свое окружение, включая адресное пространство, в дочерний, так что в момент рождения дочерний процесс отличается только своим ID. Потом дочерний процесс с помощью вызова exec() загружает в свое адресное пространство какой-нибудь исполняемый файл и начинает исполнять содержащуюся в нем программу.
Может случиться и так, что процесс выполняет вызов exec() без fork(): тогда не возникает нового процесса, но в старом начинает выполняться другая программа. Например, программа login выполняется с привилегиями суперпользователя, поскольку ей нужен доступ к файлу паролей. Проверив пароль, она устанавливает себе права зарегистрировавшегося пользователя и выполняет вызов exec(), замещая свой код кодом командной оболочки. После этого из командной оболочки изменить свои привилегии обратно на root нельзя, потому что кода программы login в текущем процессе уже нет.
Рис. 3.3. Как размножаются процессы
Каждый процесс, завершившись, возвращает родительскому процессу какое-то значение, называемое кодом завершения или кодом возврата. По соглашению разработчиков, нулевой код возврата означает успешное завершение, а ненулевые — разнообразные ошибки. Процесс-родитель может приостановить свое выполнение до завершения потомка и выполнить разные действия в зависимости от возвращенного дочерним процессом значения, а может и не делать этого.
Снимок протекающих в системе процессов — команда ps
Моментальный снимок протекающих в системе процессов можно посмотреть с помощью команды ps (process status). Без аргументов она покажет список процессов, связанных с текущей консолью (или виртуальным терминалом). Список возможных ключей команды можно, как обычно, получить по команде ps —help. Вот некоторые полезные из них:
? -p <список_PID>: только процессы с указанными ID;
? -u <список_USERID>: только запущенные указанными пользователями;
? -е: все процессы в системе;
? -f: полная форма вывода;
? -Н: вывод иерархии процессов в форме дерева.
Рис. 3.4. Фрагмент иерархии процессов
Динамика процессов — команда top
Представление о динамике процессов дает команда top. Она выводит список процессов, отсортированный по количеству запятой памяти или использованного процессорного времени, и обновляет его через указанные промежутки времени (по умолчанию через каждые 3 секунды).
Процессы делятся на три категории:
? Системные. Они порождаются ядром особым образом в процессе загрузки и выполняют системные функции (например, планирование процессов или смену страниц виртуальной памяти). Выполняемая ими программа берется не из исполняемого файла, а является частью ядра.
? Пользовательские. Как правило, они порождаются во время сеанса работы пользователя и связаны с терминалом. Если пользовательский процесс работает в интерактивном режиме, то он захватывает терминал в монопольное владение и, пока он не завершится, пользователь не имеет доступа к командной строке на этом терминале. Пользовательские процессы могут работать также в фоновом режиме, освободив командную строку.
? Демоны. Запускаются после инициализации ядра. Выполняются в фоновом режиме, не связаны ни с одним пользователем, обеспечивают работу различных служб (например, управление сетью). Главным демоном считается init — процесс инициализации системы.
Название «демон» (daemon) не имеет ничего общего с потусторонними существами: это просто сокращение от Disk And Execution MONitor.
Данный текст является ознакомительным фрагментом.
Продолжение на ЛитРес
Читайте также
Жизнь до блога
Жизнь до блога Сфера влияния и сфера забот В «Семи навыках высокоэффективных людей» Стивен Кови вводит понятия «круг влияния» и «круг забот». Если рассматривать их в трехмерном мире, то круги становятся сферами. Чтобы блогосфера не превратилась для вас в сферу забот, вы
Жизнь с блогом
Жизнь с блогом Важное и несрочное дело Блогородная репутация Метки: репутацияКогда компания обычно задумывается над своей репутацией? Как правило, когда уже нет времени на ее исправление: в кризисной ситуации, или при усилившейся конкуренции, или перед изменением
Жизнь
Жизнь В зависимости от правил администрирования домена первого уровня возможна регистрация имен на различные периоды времени. Например, в домене COM можно регистрировать имена на срок от одного года до десяти лет. Обычно в течение первых 30–60 дней после регистрации смена
7.3.2. Концепции, касающиеся основных средств производственного процесса организации Основные средства производственного процесса организации (ППО)
7.3.2. Концепции, касающиеся основных средств производственного процесса организации Основные средства производственного процесса организации (ППО) Организация устанавливает и сопровождает набор основных средств производственного процесса, как показано на рис. 4.1. К
Игра" Жизнь"
Игра" Жизнь" Исходный файл: gameoflife.fla Игра "Жизнь" известна как результат серьезных разработок в области искусственного интеллекта и одновременно как популярная игра. Она была изобретена математиком Джоном Конвэйем и приобрела известность благодаря опубликованной в 1970
Жизнь насекомых
Жизнь насекомых Вряд ли в далеких сороковых годах инженеры, доставшие из чрева компьютера Mark II виновницу замыкания — крохотную мошку, могли предвидеть, какая судьба уготована брошенному ими мимоходом словечку «bug». В наши дни, когда не в меру расплодившиеся компьютерные
«Жизнь» в Интернете
«Жизнь» в Интернете Билл Гейтс и Рей Оззи (новый технический директор Microsoft) обратились к сотрудникам с призывом, практически повторяющим строки нашей известной песни: «Вставай, страна огромная, вставай на смертный бой:». Все на приступ Интернета. Большая Игра в
Жизнь без прокладки
Жизнь без прокладки Автор: Алекс ЭкслерБольшинство домашних пользователей компьютера в какой-то момент вдруг выясняют, что в их квартире — в которой, казалось бы, проложены все мыслимые и немыслимые провода, — не хватает одного-единственного, но очень важного проводочка —
Утопия и жизнь
Утопия и жизнь Автор: Киви БердЖурналисты английской газеты Daily Mail провели любопытное исследование нынешних масштабов государственной слежки за населением. Для максимальной выразительности, вероятно, в качестве объекта анализа была выбрана квартира Джорджа Оруэлла на
Наука и жизнь
Наука и жизнь Тибетский горючий лёд обогреет Китай Михаил Карпов После такого заголовка сразу же представляются огромные грузовики, гружёные льдом и снующие повсюду предприимчивые китайцы. На самом деле, всё прозаичнее: китайские власти планируют начать разработку
Наука и жизнь
Наука и жизнь "Великое объединение" для нейтронных звезд Сергей Попов (ГАИШ МГУ) Опубликовано 12 мая 2010 года В современной физике высоких энергий есть такое важное и красивое понятие, как «Великое объединение». Это та самая «теория всего» или
Лучшая жизнь в трехмерном онлайне: Жизнь в метаверсе как часть «просто жизни»
Лучшая жизнь в трехмерном онлайне: Жизнь в метаверсе как часть «просто жизни» Автор: Анатолий ЛевенчукЯ не буду даже обсуждать многопользовательские онлайн-игры — где есть понятие квеста, где есть геймплей. Я буду обсуждать метаверсы — многопользовательские