ЗНАЕТЕ ИНТУИТ, Лекция, Процеси и теми

Основни понятия

Програмата е последователност от команди, която реализира алгоритъм за решаване на проблем. Програмата може да бъде написана на език за програмиране (например Pascal, C ++, BASIC); в този случай той се съхранява на диск като текстов файл с разширение, съответстващо на езика за програмиране (напр. PAS, CPP, VB). Също така, програмата може да бъде представена с помощта на машинни инструкции; след това се съхранява на диск като двоичен изпълним файл, най-често с разширение .EXE. Изпълнимият файл се генерира от текста на програмата по време на компилацията.

Процесът е програма (потребител или система) в ход.

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

Ако операционната система е в състояние да стартира няколко процеса едновременно, това се нарича многозадачност (пример - Windows), в противен случай - еднозадачна (пример - MS DOS).

Процесът може да съдържа една или повече нишки - обекти, на които операционната система осигурява процесорно време. Самият процес не се изпълнява - неговите нишки се изпълняват. По този начин машинните инструкции, написани в изпълним файл, се изпълняват на процесора като част от нишка. Ако има няколко нишки, те могат да работят едновременно.

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

Операционните системи, които поддържат множество процесори, се наричат ​​многопроцесорни.

Ако системата позволява множество нишки в един процес, това се нарича многопоточност.

Многопоточността е средство за паралелизиране на действията в рамките на даден процес.

Коментирайте. Разбира се, ако два (или повече) потока искат да напишат нещо свое в една и съща клетка, ще има несигурност - кой първи? Това е един от подпроблемите на огромния проблем със синхронизацията.

Всяка нишка има собствена област на паметта - стека, който съхранява например локални променливи и параметри, предадени на функции. Освен това по време на изпълнението на нишката се променят стойностите на регистрите на процесора, които трябва да бъдат запазени при превключване към друга нишка. Тази информация е част от контекста на нишката, така че когато превключвате нишки, контекстите им се превключват (запазването на едната в паметта и зареждането на другата).

Структури на данни за процеси и нишки

В WRK мениджърът на процеси е отговорен за управлението на процеси (base \ ntos \ ps) и много важни структури от данни са описани в базовите \ ntos \ inc \ ps.h и base \ ntos \ inc \ ke.h заглавни файлове.

Процесът в Windows е описан от структурата на данните EPROCESS [5]. Тази структура в WRK се съдържа във файловата база \ ntos \ inc \ ps.h (ред 238). Помислете за някои от неговите полета.

  • Pcb (Блок за контрол на процесите) - е структура на KPROCESS, която съхранява данни, необходими за планиране на нишки, включително указател към списък с нишки на процеса (база на файла \ ntos \ inc \ ke.h, ред 944).
  • CreateTime и ExitTime - време за създаване и завършване на процеса.
  • UniqueProcessId - уникален идентификатор на процеса.
  • ActiveProcessLinks е двупосочен елемент от списъка (тип LIST_ENTRY), съдържащ активни процеси.
  • QuotaUsage, QuotaPeak, CommCharge - квоти (лимити) за използваната памет.
  • ObjectTable - таблица с дескриптор на процеса.
  • Token - маркер за достъп.
  • ImageFileName - името на изпълнимия файл.
  • ThreadListHead - двупосочен списък с нишки в процес.
  • Peb (Блок на процесна среда) - информация за изображението на изпълнимия файл (файл public \ sdk \ inc \ pebteb.h, ред 75).
  • PriorityClass - клас на приоритет на процеса (вижте лекция 9 „Планиране на нишки“).

Структурата за потока в Windows се нарича ETHREAD и е описана в основния файл \ ntos \ inc \ ps.h (ред 545). Основните му полета са както следва:

Създаване на процес

Процесите се създават или от потребителя, или от друг процес, или автоматично при стартиране на операционната система.

Процесът, създал друг процес, се нарича родител, а създаденият процес се нарича дете. Така се формира йерархия на процесите.

Всеки процес започва своята работа от основната (основна) или първична нишка, която може да стартира (създава) други нишки - така се формира йерархия от нишки.

В 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. Създаване на обект "Процес".

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

Нека да разгледаме някои важни действия, изпълнявани от функцията PspCreateProcess .

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

    4. Създаване на основната нишка.

    Структурата на данните ETHREAD, стекът и контекстът на нишката се формират и идентификаторът на нишката се генерира. Нишката се създава с помощта на функцията NtCreateThread, дефинирана в base \ ntos \ ps \ create.c, (ред 117), която извиква функцията PspCreateThread (същия файл, ред 295). В този случай се извършват следните действия:

    5. Известие на подсистемата на Windows.

    До подсистемата на Windows се изпраща съобщение за новосъздадения процес и основната му нишка, която включва техните манипулатори, идентификатори и друга информация. Подсистемата Windows добавя нов процес към общия списък на всички процеси и се подготвя за стартиране на основната нишка.

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

    Основната нишка стартира, но системните функции започват да се изпълняват, завършвайки създаването на процеса - той се инициализира .

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

    • Проверява дали процесът се изпълнява в режим за отстраняване на грешки;
    • проверява се дали е необходимо предварително извличане на блокове памет (тези области с памет, които са били използвани при последното стартиране през първите 10 секунди от процеса);
    • необходимите компоненти и структури от данни на процеса се инициализират, например мениджърът на купчини;
    • зареждат се библиотеки с динамични връзки (DLL - Dynamic Link Library);
    • стартовата функция на нишката започва да се изпълнява.

    В тази лекция са представени понятията "процес" и "поток". Разглеждат се структурите от данни, представляващи процес (EPROCESS) и поток (ETHREAD) в операционната система. Описва процеса на създаване на процес, използващ структури от данни и функции на Windows Research Kernel .

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