这是我自己做的一个版本,望斑竹给予指点!!!谢谢7 S2 o& M# F1 S8 ]
; q5 R! S# D( }! l" V#include
}* F# B6 {3 E/ |: X#include
/ j2 r, J I# R% K#include' |4 I2 q+ _+ b3 v2 l9 o. v
#include
$ B7 ~$ r1 }, b' [6 e0 Y7 t! o5 Z#define running 1 /*用running 表示进程处于运行态*/
2 s: g: ]' g3 @#define aready 2 /*用aready表示进程处于就绪态*/
& T9 W( [2 m, {% P2 P2 \#define blocking 3 /*用blocking表示进程处于等待态*/$ }: D a, |/ H/ N% ?, y
#define sometime 5 /*用sometime 表示时间片大小*/
3 c8 k7 }! b/ T6 |2 Y9 M L#define n 10 /* 假定系统允许进程个数为10 */5 \2 h% U, ]+ { g5 C& |% j, z
struct
& b! m# C) j# R7 Q{
- i# h# o9 b5 Sint name; /*进程标识符*/
( T$ q* b' I$ x5 e& c& Dint status; /*进程状态*// G+ K/ C) t# Z- U$ [+ L7 U
int ax, bx, cx,dx; /*进程现场信息,通用寄存器内容*/. d& w1 F- R# W
int pc; /*进程现场信息,程序计数器内容*/
?: W4 _! f8 L' o- vint psw; /*进程现场信息,程序状态字寄存器内容*/* F: C' z. d- }0 m
int next; /*下一个进程控制块的位置*/
% A, w' Q6 h. a# \; a) a}pcbarea[n]; /*定义模拟进程控制块区域的数组*/3 V o. m" r/ V0 ~* M9 ~) h+ i
int PSW,AX,BX,CX,DX,PC,TIME; /*模拟寄存器*/
% n! L; [! c; D7 x( Jint run; /*定义指向正在运行进程的进程控制块的指针*/
; i4 |9 z4 A6 m3 astruct
0 y+ d0 f+ r, i" ]" P7 i. d! E{
! l# [1 N+ Q/ j% M1 I G/ X; ?int head;9 u- k$ o0 b/ O
int tail;+ x* L+ l2 y- G
}ready; /*定义指向就绪队列的头指针head和尾指针tail*/" O! P2 J+ D# C, s
int block; /*定义指向等待队列的指针*/
* k: l7 j4 e0 D4 \int pfree; /*定义指向空闲进程控制块队列的指针*/
& H- K# ^2 y+ a8 t& D5 Qmain()
1 a* M/ l( g4 t1 N{ int gdriver=DETECT,gmode;8 n- ]- W( L3 n
int i,x,y;
! w$ I& T7 M' t } for(i=1;i<=n;i++)
! ]( {) C# z7 i0 G {ready.head=pcbarea.next;}
. [/ k) j' n; r; S initgraph(&gdriver,&gmode,"");% t0 D. ?9 Q H
setcolor(YELLOW);
7 | t* o. b" l4 q for(i=1;i<=4;i++)
u5 \7 ]) m1 e t5 h G3 f( M9 e { setfillstyle(8,i);
% X7 F: u: x1 y8 M6 r. ^ circle(284+13*i,190,6);
% r1 p% d: p* d( A- G floodfill(284+13*i,190,YELLOW);
+ V4 \: X8 n) e/ K9 h* S& E }
' V; N0 z% Y' {5 c, w4 o* f setlinestyle(0,0,3);) ^- `* M& X; `& |& H
circle(316,190,25);
( q }! p/ p* o% ^# h$ g0 B setcolor(5);, E: o: t2 z6 y- v1 F; Y
settextstyle(3,0,4);
, w3 i5 B4 e7 r3 I6 x0 `9 v outtextxy(35,311,"press any key to create objects!");( D s3 ^2 ?! J2 {0 X a
getch();
. p3 Z5 X; y5 I' i( s3 J setcolor(YELLOW);
& J& i; o7 P7 J) X0 C3 S; a# c line(300,215,290,235);, c& e' M* d1 @1 Q/ l% D
line(323,215,333,235);
) c# `* w) @, j4 i delay(50000);" P! T6 v/ }& U. m1 c
setlinestyle(0,0,1);
' ]0 Q# ?3 v! l; t% U6 U2 A for(x=1;x<=2;x++)
& X# g% H: S w$ g {setfillstyle(8,x);
* d' z# s+ L& y; M1 A6 |; G5 j circle(267+13*x,246,6);8 N5 c2 @8 ~- ]) }* f6 h
floodfill(267+13*x,246,YELLOW);
5 i6 H* A* A1 ~' T9 N; L- l }: Q+ i0 _* h. ]& g: }& ?
for(y=3;y<=4;y++)1 K1 T, M6 y9 B5 E0 [
{setfillstyle(8,y);, Q0 I* i7 Y1 f5 Q
circle(285+13*y,246,6);
2 @% w" `9 Q& y, m7 n* X1 X) f floodfill(285+13*y,246,YELLOW);# i$ [: ~; H9 n0 v+ X
}
* l# q: K6 j" a+ R( z# x5 { setlinestyle(0,0,3);
" Q" i$ w% d( A+ r/ j( D circle(287,246,14);1 O1 b) Q0 D" T) c0 v
setlinestyle(0,0,3);8 K, X7 i8 K' ~5 T# x3 V
circle(330,246,14);
" S* A$ W1 R. P delay(50000);
; L5 L3 o7 F4 L& B line(281,260,281,280);' y( {$ }/ {7 f+ |* x4 h
line(293,260,293,280);
7 |1 L7 d- D g( \" h line(322,260,322,280);
3 y4 I3 [ y( j+ P m line(333,260,333,280);4 j& Y2 c2 d4 K, A$ n) ]4 P
delay(50000);& U0 l! E) M* B ?4 o( p
setlinestyle(0,0,1);: ]/ c2 p! T5 }2 I
setfillstyle(8,1);
* L! C l: R2 j circle(281,286,6);
5 H; l( m W) y* u2 h2 }) z floodfill(281,286,YELLOW);9 u- B0 S; Y. l4 n) r
setfillstyle(8,2);
) T$ @' g% G1 O) E$ ` circle(293,286,6);& Q/ T( b$ n ~5 j5 j1 X
floodfill(293,286,YELLOW);
0 C6 p7 P6 k/ F- O( p' L" C setfillstyle(8,3);
, i9 }0 u4 B% f7 D8 M circle(322,286,6);
: z9 r; G2 u$ a floodfill(322,286,YELLOW);4 s2 G- d I8 i& T v
setfillstyle(8,4);
. M$ q, Q O) k, F: {6 w+ B$ }- o8 h circle(333,286,6);+ E' O+ ]$ |8 E
floodfill(333,286,YELLOW);: d b* ]6 Q! `5 d3 o/ Z" b. r
getch();* W6 n2 H% a6 X5 M; q; y9 U
closegraph();/ T1 w9 z8 r8 m$ r6 f6 D# K, @
}. P% p* B. n6 g
. `5 G9 B$ F1 y( w9 Y% I: J0 \
/ t6 m' @% a% t o; i |