Escolar Documentos
Profissional Documentos
Cultura Documentos
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)
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 ( ) :
)
)
)
)