这是我自己做的一个版本,望斑竹给予指点!!!谢谢" v( z. E# t( \/ a" s! p* J: v
0 K- |; a4 r2 H# @- O#include1 `+ H/ b. f4 P8 o
#include: R, ^8 Z" S2 e% t" B1 e8 B9 d
#include
% Z/ d' q- ~* E) g#include
- F$ K9 W( l$ a% R$ ~* R#define running 1 /*用running 表示进程处于运行态*/* I# z% m* W# \2 \; ~4 b9 w8 t
#define aready 2 /*用aready表示进程处于就绪态*/
7 C6 y8 |) W3 A- M) z! r#define blocking 3 /*用blocking表示进程处于等待态*/
, t. f, _+ r4 Y7 Z4 M#define sometime 5 /*用sometime 表示时间片大小*/" c3 }+ [) q7 v- B! ?
#define n 10 /* 假定系统允许进程个数为10 */' H! e. G% j0 H& u1 |9 X2 d; x
struct
. G/ C, O& k3 R{
) d& t+ `. p) x6 D7 d( I* Uint name; /*进程标识符*/4 y: f6 i# w4 w- x
int status; /*进程状态*/
4 }& K2 i' ^$ I7 ]( N1 M: eint ax, bx, cx,dx; /*进程现场信息,通用寄存器内容*/
* N1 n0 H+ g& x1 k. h* ]+ }+ Cint pc; /*进程现场信息,程序计数器内容*/
9 x1 O% V& O8 D/ w: ^' J9 u/ k, Qint psw; /*进程现场信息,程序状态字寄存器内容*/$ k5 [9 i3 Z' \" L* q' M
int next; /*下一个进程控制块的位置*/- i3 A$ k0 W8 I+ n- A
}pcbarea[n]; /*定义模拟进程控制块区域的数组*/
0 \/ M+ b/ b9 B H9 Cint PSW,AX,BX,CX,DX,PC,TIME; /*模拟寄存器*/& i G: ?7 }/ o o+ Q* h, o
int run; /*定义指向正在运行进程的进程控制块的指针*/
+ s3 `7 K e; J7 k' J" wstruct/ _+ G3 ]* l; o- L+ v0 S
{" G7 Z& B3 ^9 F( v1 a7 ` @
int head;
; Q( O5 a' ?. k2 a9 @( h0 uint tail;
4 Y+ ^5 s5 Z) X9 `}ready; /*定义指向就绪队列的头指针head和尾指针tail*/+ W6 W+ O. l+ K+ {- F
int block; /*定义指向等待队列的指针*/
5 L" o8 A; u9 c% ]4 Hint pfree; /*定义指向空闲进程控制块队列的指针*/
4 h) r g' j9 N" \' Nmain()1 z& o9 _. D( N, A6 B
{ int gdriver=DETECT,gmode;
1 i1 b( F x8 X ]$ U int i,x,y;3 J* X5 Y9 v D' l
for(i=1;i<=n;i++)
1 Z% @* D, g9 j2 |" h8 z1 ^2 i3 F {ready.head=pcbarea.next;}
. ^" | T8 r( T$ T4 ? initgraph(&gdriver,&gmode,"");' C" D0 X B+ v' }
setcolor(YELLOW);9 q3 O }2 J r3 U" g+ b
for(i=1;i<=4;i++)
/ F0 o+ Z7 C0 Y+ w" k7 X { setfillstyle(8,i);# D# R; _' U) z3 d# H4 W
circle(284+13*i,190,6);' z2 ^! Y9 F; y& c* v0 N! s
floodfill(284+13*i,190,YELLOW); [ |$ z$ F% B P4 [' s% g. y9 O
}
+ ?' u1 i, z; L4 r setlinestyle(0,0,3);2 K: F$ W$ P( C+ J9 ?, Z% a
circle(316,190,25);: m# b" Y1 x! I1 c& h
setcolor(5);
, J, _+ F% c8 f8 }, a settextstyle(3,0,4);
. c6 ]/ f! z! t' N: H outtextxy(35,311,"press any key to create objects!");4 \/ b/ R8 X7 k& O
getch();
: D* d5 b9 B9 ^0 P, _ setcolor(YELLOW);
" D ~2 S X; r line(300,215,290,235);/ K; ]/ Q6 Y( n, B% r( ]
line(323,215,333,235);
, |" a; p( D, o" }. { delay(50000);
% Q4 U0 R) m- y/ p setlinestyle(0,0,1);1 \' q) [+ z& Y
for(x=1;x<=2;x++). A6 r6 U& U9 ]/ ^
{setfillstyle(8,x);
_7 ^ x$ ~2 i% }" G circle(267+13*x,246,6);) \2 F9 e3 d; C* K+ A
floodfill(267+13*x,246,YELLOW);
* m0 e. Z9 w9 C! s5 W }
- ]2 C7 w$ G+ l for(y=3;y<=4;y++)
' S0 q" `$ ?. O( Q2 I {setfillstyle(8,y);
! {) ~8 t8 m3 d% X circle(285+13*y,246,6);
! }2 L) o/ i* S floodfill(285+13*y,246,YELLOW);
0 O9 f- v) x: j/ E }
' m; M& u( t( a; V3 A setlinestyle(0,0,3);+ `. E! K, i: N! J9 a, W: @& ?7 }
circle(287,246,14);" P& U) u- ]4 X$ J
setlinestyle(0,0,3);
& o8 }- B( Y: D5 Y circle(330,246,14);
0 S- u: L+ t6 M2 [1 p! u0 ~0 }) _ delay(50000);
; j* Q+ O$ @0 W( f: e! [; x line(281,260,281,280);) G: e5 ~/ n) F
line(293,260,293,280);2 e# T) [$ `) C
line(322,260,322,280);
* Q0 K* _2 {+ s, H2 \. L7 D line(333,260,333,280);
6 N8 ? ^8 n1 Z0 t% a1 T delay(50000);9 ?$ H/ N8 t' }
setlinestyle(0,0,1);7 W) g& l9 ?5 i! q; G w5 r
setfillstyle(8,1);
+ T/ e5 \$ e/ t2 g( ]0 a circle(281,286,6);
- a* V8 e/ \& {0 ~) F" {" r: \ floodfill(281,286,YELLOW);- d0 A5 V& `& [) o [
setfillstyle(8,2);
* e Z) m1 m. L+ q' C circle(293,286,6);
5 K3 N8 _6 t7 }5 h9 P0 z% q! N: ~ floodfill(293,286,YELLOW);# H" u0 y; ^: w0 Z$ g! k& n
setfillstyle(8,3);* A, |/ h, s8 C# q# l o
circle(322,286,6);6 h2 Y3 J6 J$ a4 U2 Z5 T5 f0 _0 Z2 G
floodfill(322,286,YELLOW);. c; s6 x4 y k p5 f$ c7 m, e
setfillstyle(8,4);
- r8 K( T, j F+ N& R circle(333,286,6);* N! U/ Q6 f: L9 V! J6 A
floodfill(333,286,YELLOW);
/ O+ Q0 x# E9 O: m# ^2 \8 u getch();
0 ~# x* ~3 y! ]! N6 J5 Y closegraph();: h: n6 o0 V e( O4 L5 t: _% s
}' T3 r0 Z, Y: F& I+ ^/ f4 K/ [
* m. m! e$ z$ |6 j5 w. R- d S& e9 c7 p
7 r- a- r. j9 I& I u |