Процесс это программа в момент ее выполнения

Программа (program) – это последовательность команд, реализующая алгоритм решения задачи. Программа может быть записана на языке программирования (например, на Pascal , С++, BASIC); в этом случае она хранится на диске в виде текстового файла с расширением, соответствующим языку программирования (например, .PAS, . CPP , .VB). Также программа может быть представлена при помощи машинных команд; тогда она хранится на диске в виде двоичного исполняемого файла ( executable file ), чаще всего с расширением .EXE. Исполняемый файл генерируется из текста программы при компиляции.

Процесс (process) – это программа (пользовательская или системная) в ходе выполнения.

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

ОС #2-1. Основы процессов

Если операционная система умеет запускать в одно и то же время несколько процессов, она называется многозадачной ( multitasking ) (пример – Windows ), иначе – однозадачной (пример – MS DOS ).

Процесс может содержать один или несколько потоков ( thread ) – объектов, которым операционная система предоставляет процессорное время . Сам по себе процесс не выполняется – выполняются его потоки. Таким образом, машинные команды, записанные в исполняемом файле, выполняются на процессоре в составе потока. Если потоков несколько, они могут выполняться одновременно.

Замечание. «Одновременное» (или «параллельное») выполнение потоков подразумевает одну из двух принципиально разных ситуаций, зависящих от количества процессоров (ядер) на компьютере. В том случае, если имеется всего один процессор с одним ядром, в один момент времени может выполняться только один поток . Однако операционная система может быстро переключать процессор с выполнения одного потока на другой и вследствие высокой частоты процессоров у пользователя возникает иллюзия одновременной работы нескольких программ. Такая ситуация называется псевдопараллельное выполнение потоков. Если в компьютере установлен многоядерный процессор или количество процессоров больше одного, то возможно истинно параллельное или просто параллельное выполнение потоков.

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

Если система допускает наличие нескольких потоков в одном процессе, она называется многопоточной ( multithreading ).

Многопоточность – это средство распараллеливания действий внутри процесса.

  1. В современных браузерах каждой вкладке соответствует свой поток.
  2. В текстовом редакторе один поток может управлять вводом текста, второй – проверять орфографию, третий – выводить документ на принтер.
  3. В компьютерной игре-стратегии за обработку действий каждого игрока отвечает отдельный поток.

Каждый процесс имеет свое собственное виртуальное адресное пространство (см. лекцию 11 » Управление памятью «), в котором независимо друг от друга работают все потоки процесса. Например, поток 1 может записывать данные в ячейку с адресом 100, а поток 2 читать данные из ячейки с адресом 101.

ЧТО ТАКОЕ ПРОЦЕСС?

Замечание. Конечно, если два (или более) потоков захотят записать что-то свое в одну и ту же ячейку, возникнет неопределенность – кто раньше? Это одна из подзадач обширной проблемы синхронизации.

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

Структуры данных для процессов и потоков

В WRK за управление процессами отвечает диспетчер процессов (basentosps), а многие важные структуры данных описаны в заголовочных файлах basentosincps.h и basentosincke.h.

Процесс в Windows описывается структурой данных EPROCESS [5]. Эта структура в WRK содержится в файле basentosincps.h (строка 238). Рассмотрим некоторые её поля.

  • Pcb (Process Control Block – блок управления процессом) – представляет собой структуру KPROCESS , хранящую данные, необходимые для планирования потоков, в том числе указатель на список потоков процесса (файл basentosincke.h, строка 944).
  • CreateTime и ExitTime – время создания и завершения процесса.
  • UniqueProcessId – уникальный идентификатор процесса.
  • ActiveProcessLinks – элемент двунаправленного списка (тип LIST_ENTRY ), содержащего активные процессы.
  • QuotaUsage , QuotaPeak , CommitCharge – квоты (ограничения) на используемую память.
  • ObjectTable – таблица дескрипторов процесса.
  • Token – маркер доступа.
  • ImageFileName – имя исполняемого файла.
  • ThreadListHead – двунаправленный список потоков процесса.
  • Peb (Process Environment Block – блок переменных окружения процесса) – информация об образе исполняемого файла (файл publicsdkincpebteb.h, строка 75).
  • PriorityClass – класс приоритета процесса (см. лекцию 9 «Планирование потоков»).
Читайте также:
Какие программы для linux

Структура для потока в Windows называется ETHREAD и описывается в файле basentosincps.h (строка 545). Её основные поля следующие:

  • Tcb (Thread Control Block – блок управления потоком) – поле, которое является структурой типа KTHREAD (файл basentosincke.h, строка 1069) и необходимо для планирования потоков.
  • CreateTime и ExitTime – время создания и завершения потока.
  • Cid – структура типа CLIENT_ID , включающая два поля – идентификатор процесса-владельца данного потока и идентификатор самого потока.
  • ThreadsProcess – указатель на структуру EPROCESS процесса-владельца.
  • StartAddress – адрес системной стартовой функции потока. При создании потока сначала вызывается системная стартовая функция, которая запускает пользовательскую стартовую функцию.
  • Win32StartAddress – адрес пользовательской стартовой функции.

Создание процесса

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

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

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

В Windows для создания процессов применяется одна из следующих WinAPI-функций: CreateProcess, CreateProcessAsUser, CreateProcessWithTokenW, CreateProcessWithLogonW [10]. Далее при описании будем использовать функцию CreateProcess.

Создание процессов в Windows включает 7 этапов [5; 2].

1. Проверка и преобразование параметров.

Параметры функции CreateProcess проверяются на корректность и преобразуются к внутреннему формату системы.

2. Открытие исполняемого файла.

Происходит поиск файла, который содержит запускаемую программу. Обычно это файл с расширением .EXE, но могут быть также расширения . COM , . PIF , .BAT, . CMD . Определяется тип исполняемого файла:

  • Windows приложение (.EXE) – продолжается нормальное создание процесса;
  • приложение MS-DOS или Win16 (.EXE, .COM, .PIF) – запускается образ поддержки Ntvdm.exe;
  • командный файл (.BAT, .CMD) – запускается образ поддержки Cmd.exe;
  • приложение POSIX – запускается образ поддержки Posix.exe.

3. Создание объекта «Процесс».

Формируются структуры данных EPROCESS, KPROCESS, PEB , инициализируется адресное пространство процесса. Для этого вызывается системная функция NtCreateProcess ( файл basentospscreate.c, строка 826), которая затем вызывает функцию NtCreateProcessEx (тот же файл , строка 884), а та, в свою очередь , функцию PspCreateProcess (тот же файл , строка 1016).

Замечание. Начиная с Windows Vista при создании процесса вызов нескольких функций ( NtCreateProcess, NtWriteVirtualMemory, NtCreateThread ) заменен вызовом одной функции NtCreateUserProcess.

Рассмотрим некоторые важные действия, выполняемые функцией PspCreateProcess .

  • Если в параметрах функции PspCreateProcess указан процесс-родитель:
  • по его дескриптору определяется указатель на объект EPROCESS (функция ObReferenceObjectByHandle , строка 1076);
  • наследуется от процесса родителя маска привязки к процессорам (Affinity, строка 1092).

4. Создание основного потока.

Формируется структура данных ETHREAD , стек и контекст потока, генерируется идентификатор потока. Поток создается при помощи функции NtCreateThread, определенной в файле basentospscreate.c, (строка 117), которая вызывает функцию PspCreateThread (тот же файл , строка 295). При этом выполняются следующие действия:

  • создается объект ETHREAD (строка 370).
  • Заполняются поля структуры ETHREAD , связанные с процессом-владельцем, – указатель на структуру EPROCESS (ThreadsProcess) и идентификатор процесса ( Cid.UniqueProcess ) (строки 396 и 398).
  • Генерируется уникальный идентификатор потока (функция ExCreateHandle ) и сохраняется в поле Cid.UniqueThread структуры EPROCESS (строки 400–402).
  • Заполняются стартовые адреса потока, системный ( StartAddress ) и пользовательский ( Win32StartAddress ) (строки 468-476).
  • Инициализируются поля структуры KTHREAD при помощи вызова функции KeInitThread (строки 490–498 для потока пользовательского режима и 514–522 для потока режима ядра).
  • Функция KeStartThread заполняет остальные поля структуры ETHREAD и вставляет поток в список потоков процесса (строка 564).
  • Если при вызове функции PspCreateThread установлен флаг CreateSuspended («Приостановлен») поток переводится в состояние ожидания (функция KeSuspendThread , строка 660); иначе вызывается функция KeReadyThread (строка 809), которая ставит поток в очередь готовых к выполнению потоков (см. лекцию 9 «Планирование потоков»).

5. Уведомление подсистемы Windows.

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

6. Запуск основного потока.

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

7. Инициализация процесса.

  • Проверяется, не запущен ли процесс в отладочном режиме;
  • проверяется, следует ли производить предвыборку блоков памяти (тех участков памяти, которые при прошлом запуске использовались в течение первых 10 секунд работы процесса);
  • инициализируются необходимые компоненты и структуры данных процесса, например, диспетчер кучи;
  • загружаются динамически подключаемые библиотеки (DLL – Dynamic Link Library);
  • начинается выполнение стартовой функции потока.
Читайте также:
Как включить 1 программу

Резюме

В этой лекции введены понятия «процесса» и «потока». Рассмотрены структуры данных, представляющие в операционной системе процесс ( EPROCESS ) и поток ( ETHREAD ). Описан ход создания процесса с использованием структур данных и функций Windows Research Kernel .

Следующая лекция посвящена алгоритмам планирования потоков и реализации этих алгоритмов в Windows .

Контрольные вопросы

  1. Приведите определение понятий «программа», «процесс», «поток», «стек».
  2. Опишите основные поля структуры EPROCESS .
  3. Какой структурой является поле Pcb структуры EPROCESS ? Опишите поля этой структуры.
  4. Опишите основные поля структуры ETHREAD .
  5. Перечислите этапы создания процесса.
  6. Опишите этапы создания объекта «процесс».
  7. Опишите этапы создания основного потока.

Источник: intuit.ru

Распределение ресурсов ЭВМ между процессами

Процесс – это программа в момент ее выполнения. После запуска программы создается соответствующий ей процесс, которому выделяются ресурсы ЭВМ. Каждый процесс получает адресное пространство в ОЗУ, содержащее стек, регистры, счетчик команд и другие необходимые элементы. Также ресурсами являются время процессора и доступ к устройствам ввода-вывода.

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

— создание – подготовка условий для исполнения процессором;

— выполение – непосредственное исполнение процессором;

— ожидание по причине занятости какого-либо требуемого ресурса;

— готовность – процесс не исполняется, но все необходимые для выполнения процесса, кроме времени процессора, предоставлены;

— завершение – нормальное или аварийное окончание работы процесса, после которого время процессора и другие ресурсы ему не предоставляются.

Процесс могут породить ОС, пользователь или другой процесс. ОС может выполнять несколько процессов одновременно, однако в каждый момент времени выполняется только один процесс. Таким образом, создается иллюзия многозадачности за счет мгновенного перераспределения ресурсов ЭВМ, прежде всего, времени процессора. Завершение процесса осуществляется ОС, другими процессами или пользователем, например, закрывающим программу.

Специальная программа планировщик, являющаяся частью ОС, распределяет ресурсы ЭВМ между процессами. Таким образом, процессы конкурируют за ресурсы. Каждый процесс имеет приоритет, в соответствии с которым он получает ресурсы ЭВМ. Наибольший приоритет имеют компоненты ОС, наименьший – программы пользователя.

Приоритет процесса зависит также от частоты запроса процессом ресурсов. Чем более требователен процесс к ресурсам, тем он имеет более высокий приоритет.

Пример распределения времени процессора между процессами представлен на рис. 10.3.

Процесс 1 – высокий приоритет.

Процесс 2 – средний приоритет.

Процесс 3 – низкий приоритет.

Рис. 10.3. Пример распределения времени процессора
между процессами

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

Пример распределения оперативной памяти между процессами представлен на рис. 10.4.

Рис. 10.4. Пример распределения оперативной памяти
между процессами

После запуска процесса ему выделяется адресное пространство. В памяти могут располагаться несколько процессов, причем один процесс не имеет доступ к адресному пространству другого процесса. Если объема ОЗУ не хватает для выполнения всех процессов, то выделяется виртуальная память на жестком диске, где хранится часть данных процесса. Жесткий диск, на котором располагается виртуальная память, гораздо медленнее, чем ОЗУ, поэтому в виртуальной памяти хранятся процессы, остановленные в данный момент или с самым низким приоритетом.

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

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

Кроме этого, создание и удаление потоков осуществляется намного быстрее, чем создание и удаление процессов, что ускоряет работу процесса в целом.

Читайте также:
Как скопировать все программы с фанука

Источник: lektsia.com

Процессы и потоки

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

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

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

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

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

Таблица процессов — массив структур, по одной на каждый существующий в данный момент процесс.

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

Демоны (daemon) – фоновые процессы, связанные с прикладными задачами (почта, Интернет, новости, вывод на печать).

В больших системах работают десятки демонов.

Создать процесс – это прежде всего создать дескриптор (описатель) процесса.

Дескриптор — это одна или несколько информационных структур, содержащих все сведения о процессе, необходимые ОС для его управления.

В дескрипторе содержится:

  1. идентификатор процесса,
  2. данные о расположении в памяти исполняемого модуля,
  3. приоритет процесса,
  4. права доступа и прочее.

В разных ОС эти описатели процессов называются по-разному, и могут быть по-разному организованы. Например, в OS/2 это управляющий блок процесса PCB (Process Control Block), в UNIX – дескриптор процесса, в Windows NT – объект-процесс (object-process).

Реализация процессов

В однопроцессорной ЭВМ активным может быть только один процесс. Количество заблокированных — неограниченно.

При передаче управления процессу, ОС ставит для него «квант» времени, определяющий занимаемое процессорное время. Если освобождение по истечении кванта не наступило, — процесс переводится в состояние готовности.

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

Возможны три состояния процесса:

1. Активный (использующий в этот момент процессор).

2. Готовый (процесс приостановлен, чтобы выполняться другому процессу).

3. Блокированный (процесс не может быть запущен прежде, чем произойдет некое внешнее событие).

Запускает и останавливает готовые к работе процессы программа ОС, называемая планировщиком. Планировщик использует таблицу процессов, в которую он записывает и из которой считывает информацию о состоянии процессов.

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

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

Поток выполняется всегда в рамках процесса.

Ресурсы процесса – это

— адресное пространство (содержащее текст программы и данные),

— различная учетная информация.

Внутри процесса может быть несколько потоков.

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

потоки – это объекты, поочередно выполняющиеся на центральном процессоре в рамках одного процесса (справедливо для однопроцессорных ЭВМ).

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

Источник: studfile.net

Рейтинг
( Пока оценок нет )
Загрузка ...
EFT-Soft.ru