В каком состоянии находится процесс если в данный момент ему выделен центральный процессор

Обновлено: 06.07.2024

Процесс — фундаментальное понятие при изучении операционных систем.

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

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

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

Важно понимать различие между процессом и программой.

Процесс при его создании и управлении им операционной системой включает следующую основную информацию:

  • Счетчик команд (program counter - PC)– адрес текущей выполняемой команды процесса; обычно хранится в специальном системном регистре аппаратуры;
  • Стек (stack)– резидентная область основной памяти, выделяемая операционной системой при создании процесса, в которой хранятся локальные данные процедур процесса, их параметры (аргументы) и связующая информация между ними, необходимая для организации вычислений. При запуске очередной процедуры в стеке отводится запись активации (activation record),называемая также стековым фреймом (stack frame)и областью локальных данных (local data area)для хранения локальных данных текущего поколения (запуска)процедуры. По окончании ее выполнения запись активации удаляется из стека;
  • Секция данных ( data section ) –статическая (постоянно выделенная, неизменного размера) область основной памяти, выделяемая операционной системой процессу, в которой хранятся его глобальные переменные, массивы, структуры, объекты.
  • Исполняемый код (команды) процессапервоначально хранится во вторичной памяти (на диске) и загружается в основную память полностью или частично при обращении к нему.

Состояния процесса

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

Как видим, каждый процесс может находиться как минимум в двух состояниях: процесс исполняется и процесс не исполняется. Диаграмма состояний процесса в такой модели изображена на рисунке 2.1.

Рис 2.1. Простейшая диаграмма состояний процесса.

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

Рис. 2.2. Более подробная диаграмма состояний процесса.

Такая модель является очень грубой. Она не учитывает, в частности то, что процесс, выбранный для исполнения, может все еще ждать события, из-за которого он был приостановлен, и реально к выполнению не готов. Для того чтобы избежать такой ситуации, разобьем состояние процесс не исполняется на два новых состояния: готовность и ожидание (см. рисунок 2.2).

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

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

Наша новая модель хорошо описывает поведение процессов во время их жизни, но она не акцентирует внимания на появлении процесса в системе и его исчезновении из системы. Для полноты картины нам необходимо ввести еще два состояния процессов: рождение и закончил исполнение (см. рисунок 2.3).

Рис. 2.3. Диаграмма состояний процесса, принятая в курсе.

Теперь для появления в вычислительной системе процесс должен пройти через состояние рождение. При рождении процесс получает в свое распоряжение адресное пространство, в которое загружается программный код процесса; ему выделяются стек и системные ресурсы; устанавливается начальное значение программного счетчика этого процесса и т. д. Родившийся процесс переводится в состояние готовность. При завершении своей деятельности процесс из состояния исполнение попадает в состояние закончил исполнение.

Диспетчеризация процессов. Планировщики процессов.

Основные понятия диспетчеризации процессов

Диспетчеризация процессора – распределение его времени между процессами в системе. Цельдиспетчеризации – максимальная загрузка процессора, достигаемая с помощью мультипрограммирования.

Исполнение любого процесса можно рассматривать как цикл CPU / I-O– чередование периодов использования процессора и ожидания ввода-вывода.

Распределение периодов активности процессора ( bursts ) и ввода-вывода изображено на рис. 11.1.


  1. Рис. 11.1. Последовательность активных фаз процессора и фаз ввода-вывода.

Планировщики, выполняющие диспетчеризацию процессов

Планировщик –компонента ОС, которая выбирает один из нескольких процессов, загруженных в память и готовых к выполнению, и выделяет процессор для одного из них.

Решения по диспетчеризации могут быть приняты в случаях, если процесс:

  1. Переключается из состояния выполнения в состояние ожидания.
  2. Переключается из состояния выполнения в состояние готовности к выполнению.
  3. Переключается из состояния ожидания в состояние готовности.
  4. Завершается.

В операционной системе диспетчеризация процессов выполняется обычно несколькими планировщиками,каждый из которых имеет свою периодичность вызовов и свою определенную задачу, которую он решает.

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

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

Для реализации режима разделения времени в систему может быть добавлен также планировщик откачки и подкачки процессов, определяющий, какие пользовательские процессы должны быть подкачаны в память или откачаны на диск.


Особенности планировщиков и процессов.Каждый планировщик имеет свои особенности поведения, как и каждый процесс.

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

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

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

Сами процессы также могут вести себя по-разному, с точки зрения их диспетчеризации. Процессы могут быть:

В ОС Windows 9x, NT, UNIX и др. реализована приоритетная (вытесняющая) многозадачность. Это означает, что ОС имеет право временно прекратить выполнение одной программы и переключить процессор на выполнение другой программы. Переключение происходит вне зависимости от желания каждой из программ, благодаря чему зависание одной программы не приводит к зависанию всей системы.

Достоинство: надежность, простота программирования. Недостатки: усложнение синхронизации между процессами, необходимость использовать многопоточную библиотеку при программировании.

Не вытесняющая многозадачность (кооперативная), пример – Windows 3.1, Novell Netware. Инициатором в данном случае выступает сам процесс. Достоинства: сокращение затрат на планирование, переключение производится синхронно, а следовательно, происходит упрощение обмена данными между процессами. Недостатки: сложность программирования, зависание всей системы при зависании одного процесса.

Процессы и потоки. Управление ими.

Термин ПРОЦЕСС (синоним - ЗАДАЧА) появился в 60-х годах, в настоящее время под процессом понимается программа, запущенная на выполнение под управлением операционной системы (ОС). В общем случае в вычислительной системе одновременно существуют несколько процессов. В некоторых многопоточных ОС (UNIX, WINDOWS) каждый процесс состоит из одного или нескольких параллельно выполняющихся потоков (thread), и применительно к этим ОС далее по тексту термин "процесс" следует заменять на термин "поток".

Запуская на выполнение какую-нибудь программу, вы создаёте новый процесс Процесс – это экземпляр программы, загруженный в память и запущенный на выполнение.

Процесс обычно определяют как “экземпляр” (иногда говорят, копию) вы­полняемого приложения. Для управления процессом система создаёт объект ядра “процесс”. Каждому объекту ядра выделяется в системе блок памяти, инициализируемый той или иной управляющей информацией, сопоставляется счетчик числа пользователей и описатель — идентификатор объекта (дескриптор). Сам по себе процесс ничего не исполняет — он просто “владеет” четырехгигабайтным адресным пространством, содержащим код и данные для ехе-файла программы. Помимо адресного пространства, процессу принадлежат такие ресурсы, как файлы, динамические области памяти и потоки. Ресурсы, создаваемые при жиз­ни процесса, обязательно уничтожаются при его завершении. Процесс – это «оболочка» над потоками.

Чтобы процесс что-нибудь выполнил, в нем нужно создать поток. Поток (thread) описывает последовательность исполнения кода внутри процесса. Первичный поток процесса создаётся системой автоматически во время создания процесса. Именно он отвечает за исполнение кода ехе-файла, помещенного в адресное пространство процесса. Потоку в системе сопоставляется объект ядра “поток”, используемый для управления потоком. Соответственно, этому объекту также выделяется в системе блок памяти, инициализируемый некоторой управляющей информацией, счетчиком числа пользователей и дескриптор.

Использование нескольких потоков в одном процессе очень важно по нескольким причинам. Во-первых, это позволяет добиться минимального простоя процессора, а значит – работать более эффективно. Во-вторых, потоки могут выполнять какие-либо дей­ствия в фоновом режиме относительно основной программы. В-третьих, потоки удобно использовать также в случае, если блокирование или подвисание какой-либо процедуры не должно стать причиной нарушений функционирования основной программы. Контекст потока – текущее состояние прерванного процесса (точнее область памяти, где хранится состояние). После выделения потока из процесса появилась идея о создании многопоточности в одном процессе (идея впервые появилась в Unix в 80-х годах). Поток – последовательность машинных команд, выполняющих определенные действия или текущее состояние процесса. Потоки как правило асинхронные. Потоки – «алгоритмы». Планировщик – распределяет процессорное время между потоками, часть ОС.

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

Поток находится в состоянии выполнения , если ему в данных момент времени выделен центральный процессор, если ему предоставлен квант процессорного времени. Поток находится в состоянии блокировки , если он ожидает появление некоторого события для продолжения его деятельности. готовности , если он мог бы сразу использовать процессор (квант процессорного времени - ), если ему была бы предоставлена возможность. Диспетчер управления переключает между 1, 2, 3 состояниями процессов. На более высоком уровне - переходом в состояния 4 или 5. Способ упорядочивания: по приоритету. Планировщик, который выбирает поток, которому дать , действует так: очередь потоков с разными приоритетами (обслуживание по приоритету). Приоритет влияет на очередность выделения потоку кванта времени для его выполнения. Пока в очереди готовых потоков есть более высокоприоритетные, потокам с низким уровнем кванты не выделяются. Количество процессорного времени, выделяемое конкретному потоку, определяется многими факторами. Во-первых, каждый процесс обладает собственным базовым уровнем приоритета, который присваивается всем принадлежащим ему потокам. Во-вторых, каждый из потоков обладает собственным приоритетом, который добавляется к базовому значению. ОС Windows поддерживает 4 класса приоритетов процессов: idle (простаивающий), normal (нормальный), high (высокий) и realtime (реального времени). Программы, запускаемые пользователем, в основном относятся к приложениям с классом приоритета normal. Приоритет idle идеален для приложений, занимающихся мониторингом системы или хранителя экрана (screen saver). Класс приоритета high следует использовать только при необ­ходимости. Класс приоритета realtime используют только: 1) в программе, напрямую “общающейся” с оборудованием, и 2) если приложение выполняет быстротечную операцию, которую нельзя прерывать ни в коем случае. Потоки, проводящие большую часть времени в состоянии блокировки, называются интерактивными, им присваивается наивысший приоритет. выделяется маленьким, большую часть жизни они проводят в состоянии блокировки; после наступления события попадают в состояние готовности, сразу же переходят на выполнение, затем возвращаются на блокировку. Есть чисто вычислительные потоки – малый приоритет , выделяют больше. Они выполняются, когда все интерактивные потоки сидят в блокировке.

Сам себя поток возобновить не может. Может это сделать, например таймер, ОС и т.д.

Понятие процесс(process) введено разработчиками ОС с 60-х годов, как программа во время выполнения. Заметим, что программа - это всего лишь файл в формате загрузки, сохраняемый на диске, а процесс расположен в памяти на этапе выполнения.
Состояния процесса
Для процесса характерен ряд дискретных состояний, причем смену этих состояний могут вызывать различные события. Первоначально ограничимся рассмотрением трех основных состояний процесса.
Процесс находится в состоянии выполнения, если в данный момент ему выделен центральный процессор (ЦП).
Процесс находится в состоянии готовности, если он мог бы сразу использовать центральный процессор, предоставленный в его распоряжение.
Процесс находится в состоянии блокировки, если он ожидает некоторого события, чтобы получить возможность продолжать выполнение.
Заметим, что в однопроцессорной машине в состоянии выполнения может в каждый конкретный момент времени находится только один процесс. В состояниях же готовности и блокировки могут находиться несколько процессов, т.е. есть возможность создать список готовых и список заблокированных процессов.
Список готовых процессов упорядочен по приоритету, первым в распоряжение получает ЦП первый процесс из списка. При создании списка готовых процессов, каждый новый процесс помещается в конец списка, а по мере завершения выполнения предыдущих процессов продвигается в головную часть списка. Список же заблокированных процессов не упорядочен, т.к. разблокировка процессов осуществляется в том порядке, в котором происходят ожидаемые ими события.
Рассмотрим диаграмму переходов процесса X из состояния в состояние - смену состояний процесса.
Запуск, или выбор процесса для выполнения - это предоставление ЦП первому процессу из списка готовых процессов. Запуск осуществляется с помощью программы - диспетчер. Обозначим такую смену состояний следующим образом: операционная система linux
Для предотвращения монопольного захвата ресурсов ЦП одним процессом, ОС устанавливает в специальном таймере прерываний определенный временной интервал, который отводится для данного процесса, по истечении кванта времени, таймер вырабатывает сигнал прерывания, по которому управление передается ОС и процесс переводится из состояния выполнения в состояние готовности, а первый процесс из списка готовых - в состояние выполнения.
Блокирование процесса - это освобождение ЦП процессом до истечения отведенного ему кванта времени, т.е. когда выполняющийся процесс инициирует, например, операцию ввода-вывода, и, таким образом, добровольно освобождает ЦП в ожидании завершения указанной операции.
Пробуждение процесса осуществляется тогда, когда происходит какое-либо событие, ожидаемое процессом, и он переходит из состояния блокировки в состояние готовности. Так в выше описанном случае, после завершения операции ввода-вывода.
Итак, мы определили четыре возможные смены состояния процесса.
Отметим, что единственная смена состояния, инициируемая самим процессом - это блокирование, остальные инициируются объектами, внешними по отношению к данному процессу.
Операции над процессами
Системы, управляющие процессами, должны иметь возможность выполнять над ними ряд операций.
Создание процесса. операционная система linux
Создание процесса включает присвоение имени процессу; включение его имени в список имен процессов; определение начального приоритета процесса; формирование блока управления процессом РСВ; выделение процессу начальных ресурсов.
Процесс может породить новый процесс и в этом случае, первый будет называться родительским, а второй дочерним процессом, причем у одного родительского процесса может быть несколько дочерних, а у дочернего только один родительский. Таким образом, создается иерархическая структура процессов.
ОС UNIX, являясь в своей основе средством управления процессами, сама по себе может рассматриваться как система параллельных взаимодействий процессов с древовидной структурой. Общий прародитель всех процессов в ОС UNIX - процесс init, находится в вершине генеалогического дерева, этот процесс постоянно присутствует в системе, все другие процессы порождаются по унифицированной схеме с помощью системного вызова fork().
Каждому созданному процессу UNIX назначает уникальный идентификатор процесса - PID , который идентифицирует процесс для ОС. Кроме того, каждый процесс имеет еще PPID (parent process), который представляет собой не что иное как PID его родителя.
Используя в UNIX команду ps можно видеть идентификаторы текущих процессов в системе.
Уничтожение процесса.
При уничтожении процесса, ресурсы ему выделенные передаются системе, имя из любых списков и таблиц удаляется, а блок управления процессом освобождается.
Приостановка процесса.
Приостановленный процесс может продолжить свое выполнение тогда, когда его активизирует какой-либо другой процесс.
Возобновление процесса.
Операция подготовки процесса к повторному запуску с той точки , в которой он был приостановлен, называется - возобновлением.
Изменение приоритета процесса.
Эта операция означает модификацию значения приоритета процесса в РСВ.
Кроме того, используются операции блокирования, пробуждения и запуска процесса.
С учетом введенных понятий приостановки и возобновления процесса картина смены состояний процесса, приведенная на рис.1 может быть несколько дополнена.
Например, диспетчер UNIX - это программа, которая позволяет процессам конкурировать между собой за время ЦП. Приостановка и возобновление процессов происходит много раз в секунду, поэтому создается эффект непрерывного протекания процесса. Схема разделения времени ЦП может быть представлена следующим образом:
Блок управление процессом
Блок управления процессом (РСВ - process control block) - это объект, который определяет процесс для операционной системы и является структурой данных, сосредотачивающей всю ключевую информацию о процессе:
текущее состояние процесса;
уникальный идентификатор процесса;
приоритет процесса;
указатели памяти процесса;
указатели выделенных процессу ресурсов;
область сохранения регистров (когда ОС переключает ЦП с процесса на процесс, она использует области сохранения регистров, предусмотренные в РСВ, чтобы запомнить информацию, необходимую для повторного запуска каждого процесса, когда он получит в очередной раз в свое распоряжение ЦП).
Концепция процессов является базовой для ОС UNIX. По сути порождение любого процесса - это создание некоторой виртуальной машины. Она имеет свое собственное адресное пространство, куда помещается процедурный сегмент и сегмент данных.
Дескриптор и контекст процесса. Системные данные, используемые для идентификации процесса, которые существуют в течение всего времени его жизни, образуют дескриптор (описатель) процесса. Множество дескрипторов образуют таблицу процессов - в современных версиях UNIX это несколько сотен процессов.
Дескриптор процесса содержит следующие параметры процесса:
расположение (адрес в памяти);
размер выгружаемой части образа процесса;
идентификатор процесса и пользователя.
Другая важная информация о процессе хранится в таблице пользователя (называемой также - контекст процесса), здесь записаны:
идентификационные номера пользователей, для определения привилегий доступа к файлам;
ссылки на системную таблицу файлов для всех открытых процессом файлов;
указатель на индексный дескриптор текущего каталога в таблице индексных дескрипторов;
список реакций на различные сигналы.
Обработка прерываний
Прерывание(interrupt) - это событие, при котором меняется нормальная последовательность команд, выполняемых процессором. Если произошло прерывание, то
управление передается ОС;
ОС запоминает состояние прерванного процесса;
ОС анализирует тип прерывания и передает управление соответствующей программе обработки прерывания.
Рассмотрим основные типы прерываний.
SVС(supervisor call instruction)-прерывания.
Инициатором этих прерываний является работающий процесс, который выполняет команду SVС, т.е. генерируемый программой пользователя запрос на предоставление конкретной системной услуги (например, на выполнение операции ввода-вывода, на увеличение размера выделенной памяти и т.п.). Механизм SVC позволяет защитить ОС от пользователей.
Прерывания ввода-вывода.
Инициируются аппаратурой ввода-вывода и сигнализируют ЦП о том, что произошло изменение состояния канала или устройства ввода-вывода, например, произошло завершение операции ввода-вывода, возникла ошибка или устройство перешло в состояние готовности.
Внешние прерывания.
Причинами таких прерываний могут быть различные внешние события, например, истечение кванта времени, заданного на таймере прерываний.
Прерывания по рестарту.
Эти прерывания происходят по команде рестарта ОС.
Прерывания по контролю программы.
Причинами таких прерываний являются различные виды ошибок, возникающих в выполняющемся процессе, например попытка деления на ноль.
Прерывания по контролю машины.
Эти прерывания вызываются аппаратными ошибками.
Переключение контекста
Процедуру обработки прерываний, в зависимости от их типа, выполняют входящие в состав ОС соответствующие программы - обработчики прерываний (IH - interrupt handler).
При возникновении прерываниия, ОС должна обеспечивать запоминание состояния прерванного процесса и передачу управления соответствующему обработчику прерывания. Это может быть реализовано с использованием способа переключение контекста(context switching).
При реализации этого способа используются слова состояния программы PSW(program status word), которые управляют порядком выполнения команд и сожержат ряд сведений о состоянии процесса.
В однопроцессорной машине существует одно текущее PSW, которое содержит адрес следующей команды, подлежащей выполнению, а также типы прерываний, разрешенных и запрещенных на данный момент. Шесть новых PSW, которые содержат адреса размещения соответствующих обработчиков прерываний, и шесть старых PSW - по одному для каждого типа прерываний.
Когда происходит прерывание, то в первую очередь проверяется не является ли оно запрещенным (тогда оно либо задерживается либо игнорируется). Если прерывание является разрешенным, то аппаратурно производится следующее переключение PSW:
текущее PSW становится старым PSW для прерывания этого типа;
новое PSW для прерывания этого типа становится текущим PSW.
После такого замещения слов состояния, текущее PSW содержит адрес соответствующего обработчика прерываний, который начинает обрабатывать данное прерывание. Когда обработка прерывания завершается, ЦП начинает обслуживать либо тот процесс, который выполнялся в момент прерывания, либо готовый процесс с наивысшим приоритетом.
Описанная схема обработки прерываний не является единственно возможной.
Ядро операционной системы
Все операции, связанные с процессами, выполняются под управлением той части ОС, которая называется ядро.
Ядро обычно размещается в оперативной памяти, в то время как другие части ОС перемещаются во внешнюю память и обратно по мере необходимости.
Функции ядра
Ядро ОС, как правило, должно содержать программы для реализации следующих функций:
обработка прерываний;
операции над процессами;
синхронизация процессов;
организация взаимодействия между процессами;
манипулирование блоками управления процессами;
поддержка операций ввода-вывода;
поддержка работы файловой системы;
поддержка механизма вызова-возврата при обращении к процедурам;
ряд учетных функций.
Иерархический подход к процессу проектирования ОС заключается в следующем.
В основе иерархии находится аппаратура компьютера, так называемая "чистая машина”.
На следующем уровне иерархии находятся различные функции ядра, в совокупности с которыми компьютер становится "расширенной машиной”.
Эти дополнительные функции, реализуемые при помощи ядра, часто называют примитивами(primitives).
Над ядром в иерархии находятся различные процессы ОС, которые обеспечивают поддержку процессов пользователя - например, процессы управления внешними устройствами.
На вершине иерархии располагаются сами процессы пользователей.
Опыт создания ОС показывает, что такие иерархические системы легче отлаживать, модифицировать и тестировать, чем такие, когда функции ядра
распределяются на нескольких уровнях иерархии.
Архитектура ОС Linux
Достаточно широкое растространение в настоящее время получила система Linux (автор базовой версии Линус Торвальдс). Усиление влияния Linux подтвердилось в очередной раз на выставке LinuxWorldExpo в начале февраля 2000 года в Нью-Йорке. В IBM активно разрабатываются приложения для Linux, что подтверждает высокую оценку этой ОС. "Сегодня Linux развивается такими же быстрыми темпами, как Internet в начале 90-х годов, а популярность ее даже выше, чем популярность электронного бизнеса”,- заметил Ирвинг Владавски-Бергер, вице-президент подразделения IBM Enterprise System Group . Аппаратные требования Linux минимальны, пожалуй только MS DOS является менее требовательной к аппаратуре компьютера, чем Linux. Запустить Linux можно даже на 386SX/16, 1Mб ОП, но это тот минимум, который только даст возможность убедиться в работоспособности системы. Базовый набор команд, утилит администрирования и командный интерпретатор займут 10 Мб.
Linux может "сожительствовать” на компьютере с другими системами, например, с MS DOS, MS Windows или OS/2, в этом случае каждая из систем должна располагаться в отдельном разделе диска, а при запуске компьютера будет предложена альтернатива запуска той или иной ОС.
Linux является UNIX- подобной системой, и, поэтому принципы ее архитектуры мало чем отличаются от стандартой UNIX. Самый общий взгляд позволяет увидеть двухуровневую модель системы, как она представлена на рис. А.
В центре находится ядро системы. Ядро непосредственно взаимодействует в аппаратной частью компьютера, изолируя прикладные программы от особенностей ее архитектуры. Ядро имеет набор услуг, предоставляемых прикладным программам. К услугам ядра относятся:
операции ввода/вывода (открытия, чтения, записи и управления файлами),
создание и управление процессами, их синхронизация и межпроцессные взаимодействия.
Все приложения запрашивают услуги ядра посредством системных вызовов.
Второй уровень составляют приложения или задачи, как системные, определяющие функциональность системы, так и прикладные, обеспечиваюшие пользовательсткий интерфейс Linux. Набор приложений, составляющих второй уровень модели и определяет тот или иной дистрибутив Linux.
Ядро системы
Ядро обеспечивает базовую функциональность ОС: создает процессы и управляет ими, распределяет память и обеспечивает доступ к файлам и периферийным устройствам.
Взаимодействие прикладных задач с ядром происходит посредством стандартного интерфейса системных вызовов. Интерфейс системных вызовов представляет собой набор услуг ядра и определяет формат запросов на услуги. Процесс запрашивает услугу посредством системного вызова определенной процедуры ядра, внешне похожего на вызов обычной библиотечной функции.
Ядро состоит из трех основных подсистем:
файловая подсистема;
подсистема управления процессами и памятью;
подсистема ввода/вывода.
Файловая подсистема
Файловая подсистема обеспечивает унифицированный интерфейс доступа к данным, расположенным на дисковых накопителях, и к периферийным устройствам. Одни и те же функции open(2), read(2), write(2) могут использоваться как при чтении или записи данных на диск, так и при выводе текста на принтер или терминал.
Файловая подсистема контролирует права доступа к файлу, выполняет операции размещения и удаления файла, а также выполняет запись/чтение данных файла. Поскольку большинство прикладных функций выполняется через интерфейс файловой системы, права доступа к файлам определяют привилегии пользователя в системе.
Файловая подсистема обеспечивает перенаправление запросов, адресованных периферийным устройствам, соответствующим модулям подсистемы ввода/вывода.
Подсистема управления процессами
Запущенная на выполнение программа порождает в системе один или более процессов, в задачи подсистемы управления процессами входит:
создание и удаление процессов;
распределение системных ресурсов (памяти, вычислительных ресурсов) между процессами;
синхронизация процессов;
межпроцессное взаимодействие.
Планировщик процессов(scheduler) - специальный модуль ядра, который разрешает конфликты между процессами и конкуренцию за системные ресурсы. Планировщик запускает процесс на выполнение, следя за тем, чтобы процесс монопольно не захватил разделяемые ресурсы. Процесс освобождает процессор, ожидая длительной операции ввода/вывода, или по прошествии кванта времени. В этом случае планировщик выбирает следующий процесс с наивысшим приоритетом.
Модуль управления памятью обеспечивает размещение оперативной памяти для прикладных задач. В случае, если для всех процессов недостаточно оперативной памяти, ядро перемещает части процесса или несколько процессов во вторичную память, как правило, в специальную область жесткого диска, освобождая ресурсы для выполняющегося процесса. Все современные ОС реализуют виртуальную память: процесс выполняется в собственном логическом адресном пространстве, которое может значительно превышать доступную физическую память. Управление виртуальной памятью процесса также входит в задачи модуля управления памятью.
Модуль межпроцесcного взаимодействия отвечает за уведомление процессов о событиях с помощью сигналов и обеспечивает возможность обмена данными между различными процессами.
Подсистема ввода/вывода
Подсистема ввода/вывода выполняет запросы файловой подсистемы и подсистемы управления процессами для доступа к периферийным устройствам (дискам, терминалам и т.п.). Она обеспечивает необходимую буферизацию данных и взаимодействует с драйверами устройств - специальными модулями ядра, непосредственно обслуживающими внешние устройства.

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

Жизнь каждого процесса - дискретные преобразования из одного состояния в другое, т.е. он всё время находится в каких-то состояниях, которые переключаются между собой.
Атрибуты:

1)Счётчик (процессов, команд)


Каждый процесс безраздельно владеет центральным процессором

Выполняется последовательно во времени. Для разных процессов скорость выполнения неодинаковая.
Основные состояния процесса:

- СОСТОЯНИЕ ВЫПОЛНЕНИЯ в момент работы (т.е. центральный процессор выделяет процессу время и в этот момент наша программа выполняется) = ЗАПУСК ПРОГРАММЫ

- СОСТОЯНИЕ БЛОКИРОВКИ (наша программа работает и в какой-то момент, а мы ожидаем доступ к определённой информации) = ЕДИНСТВЕННОЕ СОСТОЯНИЕ, В КОТОРОЕ МОЖЕТ ПЕРЕЙТИ САМ ПРОЦЕСС

- СОСТОЯНИЕ ГОТОВНОСТИ (причина для блокировки отсутствует)
Замечание: они последовательно переходят из одного состояния в другое
Состояние выполнения (running state) - состояние процесса, если ему в данный момент выделен процессор.

Состояние блокировки (blocked state) - состояние процесса, в котором он ожидает наступление определённого события (например, завершения операции ввода/вывода). Процесс в этом состоянии не может использовать процессор, даже если он свободен.

Состояние готовности (ready state) - состояние процесса, в котором он сразу мог бы использовать процессор, предоставленный в его распоряжение
Список готовых к выполнению процессов - структура данных ядра, в которой в упорядоченном виде хранятся указатели на все заблокированные процессы. Данный список не упорядочен по приоритету.

ОС сама в порядке приоритета выделяет готовому процессу время центрального процессора

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

Количество выполняемых процессов – количество ядер (в определённый момент времени)

Вопросы для самопроверки:

1) Правда ли, что в каждый конкретный момент времени в системе может выполняться только 1 процесс?

Нет, т.к. многопроцессорной системе в каждый конкретный момент времени может выполняться столько процессов, сколько процессоров установлено в системе.
2) Верно ли, что список заблокированных процессов хранится в упорядоченном виде?

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

2.3 Переходы процесса из состояния в состояние

Действиями над процессами управляет диспетчер процессов.

Диспетчер процессов - специальная программа, которая входит в ядро ОС. Диспетчер меняет то или иное состояние процессов.

Квант – промежуток времени, в течение которого процессор остаётся выделенным одному процессору. Использование квантов позволяет предотвратить монопольный захват процессора одним процессом.
Принцип работы диспетчера:

- каждому процессу, который диспетчер выбрал для приготовления ему ОС, выделяется некоторое количество квантов времени (промежуток времени), в течение которого процессор работает только с этим процессом

- выделением квантов управляет только диспетчер

- выполняется с помощью таймера прерываний
Таймер прерываний - аппаратно реализованный таймер, вырабатывающий сигналы прерывания через определённые промежутки времени (называемые квантами) для того, чтобы не допускать монопольного захвата процессора одним процессом.
Диаграмма переходов процесса из состояния в состояние


Два активных (awake) состояния процесса:

Неактивное состояние (asleep) (спящее):

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

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

После этого происходит некое событие, а процесс переходит в состояние готовности.

Wakeup - переход в состояние готовности из заблокированного состояния. Его отслеживает диспетчер процессов.

После этого тот квант времени, который был выделен программе, истекает, происходит прерывание по времени (Timer run out).

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

Запуск - переход из состояния готовности в состояние работы.

Пробуждение - событие, которое позволяет процессу из заблокированного состояния перейти в состояние готовности.

Заблокировать себя может только сам процесс- это единственный переход, который выполняет сам процесс.

Вопросы для самопроверки:

1) Верно ли, что все переходы между состояниями процесса осуществляет планировщик процессов?

Нет. Планировщик процессов осуществляет запуск, пробуждение, перевод процесса из состояния выполнения в состояние готовности по истечении кванта времени. Блокирование осуществляется самим процессом.
2) Возможен ли переход процесса из состояния готовности в состояние блокировки?

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

Нет. По завершении операции ввода-вывода процесс не может быть сразу направлен на выполнение, т.к. в это время процессор может быть занят более приоритетным процессом.

Читайте также: