6.1
:
( )
( )
, ,
void philosopher (int i)
{
while(true)
{
think();
take_forks(i);
eat();
put_forks(i);
}
}
void take_forks (int i)
{
mutex.wait();
state[i] = HUNGRY;
test(i); //
mutex.signal();
s[i].wait(); //,
}
void put_forks (int i)
{
mutex.wait();
state[i] = THINKING;
test(LEFT); //
test(RIGHT);
mutex.signal();
}
}
void test (int i) //
{
if (state[i] == HUNGRY && state[LEFT]!=EATING && state[RIGHT]!=EATING)
{
state[i] = EATING;
s[i].signal();
}
}
7. (deadlocks)
7.1
, , .
:
, ;
, ;
, , .
7.2
:
;
.
, , .
, , .
:
;
.
, , , , .
, , , .
:
;
.
, , .
, , , .
7.3
.
T1 |
T2 |
P |
, , :
|
|
: 1 , 2;
: 1 , 2;
7.4
, .
, , .
1 ( ).
, , , , .
,
. . . . , . , . ( ).
, , , . , , . , , , v. , . , , .
,
: 1, 2, , , 1. 1 , , , 2. , 1 , , -1. , .. , 1. , .
7.5
, .
G .
H G , :
H ;
, G\ H H, G\H , H .
2 ( )
, , , , .
1.
7.6
, .
:
(preemption).
(termination).
(rollback).
, .
|
|
, .
, , .
. :
, ;
, .
, .
.
.
.
.
.
, .
,
:
, .
.
.
7.7
, :
.
.
.
.
:
, .. .
, , .
:
.
() ()
, .
:
, .
7.8
.
(1965)
.
:
.
.
.
.
.
:
.
:
, .
.
, .
10 .
. 10 | ||
A | ||
B | ||
C | ||
D |
. 2 | ||
A | ||
B | ||
C | ||
D |
. 1 | ||
A | ||
B | ||
C | ||
D |
|
|
1
, = 1, 5, : i, i = 1, 9
:
1 | 2 | T3 | T4 | T5 | |
1 | 2, 6 | 3 | 7, 8 | 5, 9 | |
7, 9 | 8 | 5 | 6 |
, .
, : 1, 2, 4, 5.
.
|
(2,4) (4, 5) (5, 2), .
2
n , m R. Rk k , , = 1, n.
1. , , j, n = 5, m = 20, j = 3, Mk = (5, 10, 5, 10, 3) Rk = (4, 7, 1, 5, 0).
.
. 17, 3.
, : (1, 3, 4, 5, 3)
, , 1 R 1.
, 3 3 1 = 2 R.
2. 3 3 R. ?
. 3 2 , 3 .
8.
8.1
, , .
, , .
, , .
, , .
, .
, , .
T1 | B1 | K1 | M | K2 | B2 | T2 |
1, 2 . 1, 2 -. 1, 2 . .
1 2 :
1 1, .
1 1 .
2 2.
|
|
2 2.
, FIFO.
-, .
:
;
.
, .
, , .
8.2
, .
(), () .
:
;
.
, , .
.
:
1 - > 1 .
1 - > N N .
N - > 1 N
N - > M N .
○
□ -
→ -
, N - > 1 .
, N - > M .
, , .
, , .
:
connect .
disconnect .
, , .
8.3
:
send ;
receive .
.
send receive .
:
send(P, message) ;
receive(Q, message) Q.
send receive , , .
:
send(S, message) S;
receive(R, message) R.
, R.
.
, .
.
-
-.
, send(Server, message).
, receive(Connection, message).
|
|
listen ().
, , .
8.4
.
, send, , .
.
, receive, , , .
.
, , .
.
, .
(rendezvous . ).
.
8.5
, , .
:
( ), ;
( ), , , ;
( ), .
8.6 Windows
, , .
, , .
, , .
;
;
;
;
.
;
;
;
.
, - - .
- , .
- :
;
hStdInput, hStdOutput hStdError STARTUPINFO;
WM_COPYDATA;
.
CreatePipe ;
WriteFile ;
ReadFile .
8.7 Windows
, , .
, , .
, , .
, ;
, ;
, ;
, ;
.
;
;
;
;
;
.
CreateNamedPipe ;
ConnectNamedPipe ;
DisconnectNamedPipe ;
WaitNamedPipe ;
CreateFile ;
WriteFile ;
ReadFile ;
PeekNamedPipe ;
TransactNamedPipe ;
GetNamedPipeHandleState ;
SetNamedPipeHandleState ;
GetNamedPipeInfo ;
9.
9.1
1 |
2 |
n |
(CPU central processing unit)
- (RAM random access memory)
1, 2, , n
(),
;
.
, .
, , .
, , .
3 :
=
=
=
:
, ;
, ;
, .
9.2
, .
: .
, , .
1. .
2. .
.
. (DSP digital signal processor).
, / .
/.
. , RS 232.
(8, 16, 32 64 )
, .
9.3
() |
. |
;
:
.
- -
:
;
.
, :
;
;
.
:
PC (program counter)
IR (instruction register)
MemPtr .
while (true)
{
IR = MemPtr[PC];//
++PC; //
if (InstructionCode(IR) == Jump)
PC = JumpAddress(IR);
else
Execute(IR); //
}
.
:
( )
( )
, ( )
9.4
.
.
.
, .. , .
.
. .
, , , .. .
.
, , .
.
, , .
() | |||
() | () | ||
() | |||
, .. .
:
;
;
:
, , . ;
, , .
(), .
NMI |
INTA |
INTR |
IR0 |
IR1 |
IR7 |
;
;
IR0, , IR7
INTR
INTA
NMI
INTR.
IR0, , IR7.
, .
NMI . , , .
, IR0, , IR7.
, IR0, , IR7 .
, , .
.
, .. INTR IR0, , IR7 .
.
IR0, , IR7 .
INTR.
INTR , INTA.
INTA .
.
, .
(PSW processor state word), .
: // PSW
;
;
;
: // PSW
10.
10.1
, , .
, , , , .
, .
, .
, .
.
, .
, .
, , , .
.
, .
↓ |
↓ |
.
, .
, , .
10.2
, :
, 4, ;
, ;
, .
.
, , (swap files).
x | ||||
x | ||||
x | ||||
x | ||||
x | ||||
) : | r | d |
r | ||
d | ||
) | v | d |
v | ||
d |
, , .
, .
f | a | r |
f , .
a .
r .
( )
, . b + v.
f = 1, .
f = 0, . :
.
r .
f 1.
, , r, , d.
10.3
, .
, .
: .
.
1. FIFO
.
2. LRU (least recently used)
, .
3. NRU (not recently used)
, .
, .
4. LFU (least frequently used)
,
, .
.
, .
, , , , , .
, , , , , , .
, .
10.4
, .
- , .
, , .
, - , , .
.
, , - , - .
, .
10.5 Windows
Windows .
, :
Windows
31 22 | 21 12 | 11 0 |
p | v | d |
p
v
d
Windows , .
.
.
.
, .
31 27 | 26 7 | 6 3 | 2 0 |
p | a | f | s |
s
f
a
p
s , .
:
(invalid page)
(valid page)
(valid dirty page)
(invalid page in transition)
((invalid dirty page in transition)
f .
, 16 .
a , , .
, , 220 .
. 4, 220*4 = 4 .
p , :
PAGE_NOACCESS ;
PAGE_READONLY ;
PAGE_READWRITE .
10.6 Windows
Windows , (Virtual Memory Manager VMM)
.
:
(valid);
(modified);
(standby);
, (free);
(zeroed);
(bad).
Windows .
.
, .
Windows LRU, , , , .