Você está na página 1de 9

2016 -

1.
.
, , .

.
:
#define MAX_RESOURCES 5
int available_resources = MAX_RESOURCES;

decrease_count():
/* available_resources count */
/* 0 , */
/* -1 */
int decrease_count (int count) {
if (available_resources >= count) {
available_resources -= count;
return 0;
}
return -1;
}

increase_count():
/* available_resources count */
int increase_count (int count) {
available_resources += count;
return 0;
}

.
a) ,
.
b) , .

2.
.

. ; M
, ;
a)

b)

typedef int semaphore;

typedef int semaphore;

semaphore s1 = 1;
semaphore s2 = 0;
semaphore s3 = 0;

semaphore s1 = 1;
semaphore s2 = 0;
semaphore s3 = 0;

void procedure1(void) {
while(TRUE) {
down(&s1);
printf(" 1")
up(&s2);
}
}

void procedure1(void) {
while(TRUE) {
down(&s1);
printf(" 1")
up(&s2);
}
}

void procedure2(void) {
while(TRUE) {
down(&s2);
printf(" 2");
up(&s3);
}
}

void procedure2(void) {
while(TRUE) {
down(&s2);
up(&s1);
down(&s2);
printf(" 2");
up(&s3);
}
}

void procedure3(void) {
while(TRUE) {
down(&s3);
printf(" 3");
up(&s1);
}
}

void procedure3(void) {
while(TRUE) {
down(&s3);
printf(" 3");
up(&s1);
}
}

3.
x.
int x = 5;
void procedure1(void) {
int y;
y = 2*x;
x = y;
}
void procedure2(void) {
int z;
z = x+1;
x = z;
}

, procedure1
procedure2.
a) x
;
b) s (
1).
;
typedef int semaphore;
semaphore s = 1;
int x = 5;
void procedure1(void) {
int y;
down(&s);
y = 2*x;
x = y;
up(&s);
}
void procedure2(void) {
int z;
down(&s);
z = x+1;
x = z;
up(&s);
}

c) t
( 0).
;
typedef int semaphore;
semaphore t = 0;
int x = 5;
void procedure1(void) {
int y;
y = 2*x;
x = y;
up(&t);
}
void procedure2(void) {
int z;
down(&t);
z = x+1;
x = z;
}

4.

.
typedef int semaphore;
semaphore u = 3;
semaphore v = 0;
void procedure1(void) {
while(TRUE) {
down(&u);
printf("C")
up(&v);
}
}
void procedure2(void) {
while(TRUE) {
down(&v);
printf("A");
printf("B");
up(&v);
}
}
void procedure3(void) {
while(TRUE) {
down(&v);
printf("D");
}
}

,

.
,
.
.
a) , C ;
b) , D ;
c) ;
d) CABABDDCABCABD ;
e) CABACDBCABDD ;
f) U,V ;

5.
37, 2, , Andrew S. Tanenbaum.

6.
, ,
(round robin scheduling) 2 sec.
3 sec, 5 sec 6 sec . (process switch) CPU
0.5 sec. 0.
;

7.
(round robin
) 3 msec. P0, P1, P2 P3
6 msec, 15 msec, 10 msec 4 msec, 0
. CPU 0.5 msec.
/ . ;

8.
:

P0
P1
P2


0 sec
0,4 sec
1,0 sec


8 sec
4 sec
1 sec


. (nonpreemptive)

.
)
(First-Come First Served);

.
)
(Shortest Job First);
) (idle) 1
sec (Shortest
Job First);

9.
:


P0
P1
P2
P3
P4


0 sec
1 sec
3 sec
7 sec
10 sec


2 sec
7 sec
5 sec
4 sec
6 sec


( CPU I/O).
,
:
) Round-robin ,
. .
) P1 P3 , .
,

. round-robin
.
: =

10.
35, 2, , Andrew S. Tanenbaum.

11.
40, 2, , Andrew S. Tanenbaum.

12.
41 2, , Andrew S. Tanenbaum.

13.
20 2, , Andrew S. Tanenbaum.

14.
(round robin)
, . ,
;
;

15.
19 2, , Andrew S. Tanenbaum.

16.
13 2, , Andrew S. Tanenbaum.

1.
, (P0, P1, P2, P3 P4), (,
). :

P0

P1

P2

P3

P4

2.
, 4 (P0, P1, P2 P3), (, ).
:

P0

P1

P2

P3

(0 1 0) P1,
;

3.
22, 6, , Andrew S. Tanenbaum.
: "" "",
1 0.

4.
(P0, P1, P2, P3 P4) (,
). :

P0

P1

P2

P3

P4

, x, y
.

5.
17, 6, , Andrew S. Tanenbaum.

6.
18, 6, , Andrew S. Tanenbaum.

7.
24, 6, , Andrew S. Tanenbaum.


1.
, 10 min CPU .
) ;

) (
), o;
/ 50%.

2.
4, 3, , Andrew S. Tanenbaum.

3.
20 KB, 100 KB, 54 KB, 8 KB 512 KB, 300
KB 245 KB ( ). 7 KB, 200 KB, 128 KB, 50 KB
410 KB ( ) :
)
)
)
)

Você também pode gostar