Централни теми при изграждане на ОС:
- многопрограмна работа
- многопроцесорна работа
- разпределени процеси
Конкуренция на процеси - 3 различни аспекта:
- много на брой активни приложения едновременно
- структурирани приложения - за повишаване на ефективността някои приложения
се програмират като множества от конкурентни процеси
- структурата на ОС
char a;
void echo() { cin >> a; cout << a; } |
procedure echo;
var out, in: character; begin input(in, keyboard); out := in; output(out, display); end. |
PROCESS 0
. . while (turn != 0) do {nothing}; <critical section> turn := 1; . |
PROCESS 1
. . while (turn != 1) do {nothing}; <critical section> turn := 0; . |
PROCESS 0
. . while (flag[1]) do {nothing}; flag[0] := true; <critical section> flag[0] := false; . |
PROCESS 1
. . while (flag[0]) do {nothing}; flag[1] := true; <critical section> flag[1] := false; . |
PROCESS 0
. . flag[0] := true; while (flag[1]) do {nothing}; <critical section> flag[0] := false; . |
PROCESS 1
. . flag[1] := true; while (flag[0]) do {nothing}; <critical section> flag[1] := false; . |
PROCESS 0
. . flag[0] := true; while (flag[1]) do begin flag[0] := false; <delay for a short time> flag[0] := true; end; <critical section> flag[0] := false; . |
PROCESS 1
. . flag[1] := true; while (flag[0]) do begin flag[1] := false; <delay for a short time> flag[1] := true; end; <critical section> flag[1] := false; . |
procdure P0;
begin repeat tlag[0] := true; turn := 1; while (flag[1] and turn==1) do { nothing }; <critical section> flag[0] := false; <remainder> forever end; |
procdure P1;
begin repeat tlag[1] := true; turn := 0; while (flag[0] and turn==0) do { nothing }; <critical section> flag[1] := false; <remainder> forever end; |
function testset(var i: integer): boolean;
begin if i = 0 then begin i := 1; testset := true; end else testset:=false; end; |
bool testset(int & i)
{ if (i==0) { i = 1; return true; } return false; } |