Jan 23, 2016
2 Windows 2003
2.1 2.2 2.3 2.4 2.5 2.6 2.7 2.8 2.9
2.1 2.1.12.1.22.1.3
CPUCPU
2.2 2.2.12.2.2
RunningCPUCPUReadyCPUCPUBlocked/Waited
N
PCB PCB
PCBPCBPCB
PCBCPU
PCB
PCBPCBPCBPCBPCBPCB
PCB
2.3 2.3.12.3.22.3.3
PCBPCBPCBPCB
PCBPCBPCBPCB
2.4 2.4.12.4.2PV2.4.3PV2.4.4PV
PVsqsqPCB struct semaphore { int value; pointer_PCB queue; }
PCB
PP(S){ S.value = S.value -1 ; if (S.value < 0) { PCBS.queue; }
VV(S){ S.value = S.value +1; if (S.value < = 0) { S.queue }}
PV mutex1 RCSPmutexVmutexsemaphore mutex=1Process i:main(){P(mutex);CS1;V(mutex);}
2-1PAPBRPVPAPBR
mutex1
PAPmutexRVmutexPBPmutexRVmutex
mutexmutex1mutex0mutex1
N
2-1PVN
PV
2-2P1P2P3
S2S3P1VS2VS3P2PS2P3PS3
2-2
S1S2P1VS1P2VS2P3PS1PS2
2-3
5S2S3S4S5S60
2-3CPIOP2-12
empty=1full=0emptyfull
CPWhile(1){PemptyVfullIOPWhile(1){PfullVempty
2-4
empty1empty2full1full2empty1full1Buffer1empty1=1full10empty2full2Buffer2empty2=1full2=0
PAWhile(1){Pempty1Buffer1Vfull1
PBWhile(1){Pfull1Pempty2Buffer1Buffer2Vfull2Pempty1
PCWhile(1){Pfull2Buffer2Vempty2
empty1empty2full1full2empty1=1full10empty2=1full2=0PAWhile(1){Pempty1Buffer1Vfull1
PBWhile(1){Pfull1Pempty2Buffer1Buffer2Vfull2Pempty1PCWhile(1){Pfull2Buffer2Vempty2
2.5 2.5.12.5.22.5.3
P1P2PmQ1Q2Qnn
mutex1 emptyn full0 inout0
W1readcount0mutexreadcount1
S1
Philosopher[i]While(1){P(i)P((i+1) mod 5)EatV(i)V((i+1) mod 5)Think}
PhilosopheriWhile (1) {P (mutex)count ++if (count>=4)P(W)V (mutex)P (fork[i]) P(fork[(i+1) % 5])
V (fork[i])V(fork[(i+1) % 5])P (mutex)count--if (count==3) V(W)V (mutex)}
2.6 2.6.12.6.22.6.3
PV
pipe
2.7 2.7.12.7.22.7.32.7.4
Windows 2000
2.8 2.8.1Windows 20032.8.2 Windows 20032.8.3 Windows 20032.8.4 Windows 20032.8.5 Windows 2003
1. ABCD2. ABCD3. ABCD
4. A BCD5. ABCD6. ABCD
7. ABCD8. ABCD9. PVABCD
10. PVS21A0B1C2D311. ABCD12. VABCD
13. ABCD14. ABCD
15. ABCD16. ABCD