You are on page 1of 21

СИСТЕМСКИ

СОФТВЕР

ПРЕДАВАЊЕ 2 – ПРОЦЕСИ
доц. д-р Доне Стојанов
КОНЦЕПТ
 Процесот е програма во извршување !
 Процесот ја претставува тековната
активност, репрезентирана со вредноста
на програмскиот бројач и содржината
на регистрите на процесорот !
 Во глобала, процесот вклучува стек
(stack) кој содржи привремени податоци
(функции, параметри, локални адреси) и
податочна секција која што ги содржи
глобалните параметри !
СТРУКТУРА НА ПРОЦЕС
 Програмата не е процес; програмата е
пасивен ентитет, како на пример
датотека зачувана на диск која ја содржи
листата на иструкции, додека процесот е
активен ентитет со програмски бројач кој
ја специфицира наредната инструкција
што треба да се изврши и множество на
асоцирани ресурси.
 Програмата станува процес кога .exe
датотеката се вчитува во меморијата !
СОСТОЈБА НА ПРОЦЕС
 Како што процесот се извршува ја менува
својата состојба !
 Процесот може да се наоѓа во една од
следниве состојби:
 New (Нов). Процесот е креиран!

 Running (Извршување). Инструкциите се


извршуваат!
 Waiting (Чекање). Процесот чека да се случи
некој настан!
 Ready (Готовност). Процесот чека да биде
доделен на процесорот !
 Terminated (Завршен). Процесот завршил со
извршувањето !
СОСТОЈБА НА ПРОЦЕС
 Состојба на процес
КОНТРОЛЕН БЛОК НА ПРОЦЕС
(PROCESS CONTROL BLOCK)
 Контролен блок на процес
КОНТРОЛЕН БЛОК НА ПРОЦЕС
(PROCESS CONTROL BLOCK)
 Секој процес е репрезентиран во оперативниот систем со
контролен блок (process control block) кој ја содржи:
 Состојбата на процесот – new, ready, running, waiting, halted
...итн !
 Програмски бројач – ја содржи адресата на наредната
инструкција што треба да се изврши !
 CPU регистри !

 CPU информација за распоредување – овде е вклучена


информацијата за приоритет на процесите !
 Информација за управување со меморијата – ја вклучува
информацијата за базните и граничните регистри, табелите
на страници и сегменти !
 Accounting information – информација за употребата на
CPU во реално време !
 I/O статусна информација – Оваа информација ја вклучува
листата на I/O уреди алоцирани за процесот и листата на
отворени датотеки !
РАСПОРЕДУВАЊЕ НА ПРОЦЕСИ
 Распоредувачот на процеси избира еден од
достапните процеси за извршување на CPU !
 Сите процеси во системот се чуваат во т.н
работен ред (job queue) !
 Процесите кои се наоѓаат во главната
меморија и се во состојба на готовност и
чекаат за извршување се чуваат во листа
наречена ready queue (ред на готовност) !
 Овој ред е зачуван како поврзана листа !

 Редот на готовност е поврзана листа на PCBs


!
РАСПОРЕДУВАЊЕ НА ПРОЦЕСИ
 Ред на готовност
РАСПОРЕДУВАЊЕ НА ПРОЦЕСИ
 Во фаза на извршување на процес
може да се случи еден од следниве
настани:
 Процесот може да побара I/O барање !

 Процесот може да креира нов под-


процес и да чека под-процесот да
заврши !
 Процесот може насилно да биде
отстранет од процесорот, како
резултат на интерапт и повторно да
биде ставен/додаден во редот на
готовност !
РАСПОРЕДУВАЊЕ НА ПРОЦЕСИ
 Што може да се случи во фаза на
извршување на процес ??
КРЕИРАЊЕ НА ПРОЦЕС
 Процесот може да креира неколку нови
процеси !
 Процесот кој креира е наречен родител а
новите процеси се наречени деца на тој
процес !
 Забележете дека секој од новите процеси
може да креира свои нови процеси,
формирајќи стебло на процеси !
 За идентификација на секој процес му се
доделува единствен идентификатор на
процес (или pid) - целобројна вредност !
КРЕИРАЊЕ НА ПРОЦЕС
 Кога процес креира нов процес, постојат
две монжности од аспект на извршување:
1. Родителот продолжува да се извршува
конкурентно со детето !
2. Родителот чека додека некои или сите
свои деца не завршат !
 Постојат две можности од аспект на
адресниот простор:
1. Детето е дупликат на родителот
( родителот и детето делат иста програма
и податоци ) !
2. Детето вчитува/извршува нова програма !
КРЕИРАЊЕ НА ПРОЦЕСИ ВО UNIX
 Креирање на дете со fork();
КРЕИРАЊЕ НА ПРОЦЕСИ ВО UNIX
 #include <sys/types.h>
 #include <stdio.h>

 #include <unistd.h>

 int main()

 {

 pid-t pid;

 /* fork a child process */

 pid = fork();

 if (pid < 0) {/* error occurred */

 fprintf(stderr, "Fork Failed");

 exit (-1) ;

 }

 else if (pid == 0} {/* child process */

 execlpf"/bin/Is","Is",NULL);

 }

 else {/* parent process */

 /* parent will wait for the child to complete */

 wait(NULL);

 printf("Child Complete");

 exit (0) ;

 }

 }
ТЕРМИНАЦИЈА НА ПРОЦЕС
 Процесот терминира откако ќе ја изврши
и последната негова наредба и побарува
од оперативниот систем да биде
избришан со употреба на exit()
системскиот повик !
 Во тој момент, процесот може да го врати
статусот (целобројна вредност) на својот
родител (преку wait() системскиот повик) !
 Сите ресурси на процесот – физичка и
виртуелна меморија, отворени датотеки и
I/O бафери се деалоцирани од
оперативниот систем !
ТЕРМИНАЦИЈА НА ПРОЦЕС
 Еден процес може да предизвика терминација на друг
процес преку соодветен системски повик
(TerminateProcess() кај Win32) !
 Вообичаено таков системски повик може да биде
повикан само од родителот на процес што треба да се
терминира !
 Родителот може да го прекине извршувањето на еден
од своите деца поради следниве причини:
- Детето претерало со употребата на ресурсите кои му
биле алоцирани !
- Задачата која е зададена на детето не е веќе потребна !
- Родителот е во состојба на излегување и оперативниот
систем не дозволува детето да продолжи ако родителот
излегува/терминира !
 Во UNIX, системскиот повик за терминирање на процес е
exit() !
 Во UNIX, wait() системскиот повик резултира со чекање
МЕЃУПРОЦЕСНА КОМУНИКАЦИЈА
 Процесите кои се извршуваат конкурентно
во оперативниот систем можат да бидат
независни или кооперативни !
 Процесот е независен ако не може да
афектуира или да биде афектуиран од друг
процес кој се извршува во системот !
 Процес кој не споделува податоци со ниту
еден друг процес велиме дека е назависен !
 Процесот е кооперативен ако може да
афектуриа или да биде афектуиран од други
процеси кои се извршуваат во системот !
МЕЃУПРОЦЕСНА КОМУНИКАЦИЈА
 Постојат повеќе причини за овозможување на
меѓупроцесна комуникација:
 Делење на информации – конкурентен
пристап до исто парче информации !
 Пресметковно забрзување – Ако сакаме
конкретна задача да се изврши побрзо,
истата мора да ја поделиме на подзадачи,
така што секоја од овие подзадачи се
извршува паралелно со останатите !
 Модуларност – делење на системските
фунцкии во одделни процеси или нитки !
 Погодност – корисникот може да работи на
повеќе задачи едновремено !
МЕЃУПРОЦЕСНА КОМУНИКАЦИЈА
 Постојат два модели на меѓупроцесна
комуникација:
1. Shared memory (делење на меморија)

2. Message passing (проследување на пораки)


 Кај shared memory, кооперативни процеси
делат еден ист сегмент од меморијата !
 Кај message passing моделот, кооперативните
процеси комуницираат меѓусебно преку/со
разменување на пораки !
 Shared memory е побрз од message passing !

 Message passing мора да обезбеди барем две


функционалности: send(message) и
receive(message) !
МЕЃУПРОЦЕСНА КОМУНИКАЦИЈА
 Message passing и shared memory

You might also like