这是我自己做的一个版本,望斑竹给予指点!!!谢谢
' H+ d! G3 }: f1 P3 `: p+ o2 u0 p( {& x' b# \
#include
& b# e; @" c9 H8 {#include
( _' E; A* l4 C j/ `" x2 n#include. t# C) |# `4 j9 u- A4 K& f
#include
3 B6 v, b3 x0 q4 f7 l#define running 1 /*用running 表示进程处于运行态*/9 `$ E2 n+ A1 F( D! \. ?
#define aready 2 /*用aready表示进程处于就绪态*/
0 v9 t" |+ ~6 F#define blocking 3 /*用blocking表示进程处于等待态*/) [1 S$ p0 k5 ~; M
#define sometime 5 /*用sometime 表示时间片大小*/
; l. l. ?- G+ h#define n 10 /* 假定系统允许进程个数为10 */$ W% c0 \+ W' [" }, ]
struct
. s; z, w# ~! h( ]* U( u{, E7 T* I5 }! o0 ?
int name; /*进程标识符*/3 C* P- j a# X3 r. e: E0 c( ], U; J
int status; /*进程状态*/! _# y6 V4 _6 X3 }8 H* R, C
int ax, bx, cx,dx; /*进程现场信息,通用寄存器内容*/
0 d A; G) }# y+ f# jint pc; /*进程现场信息,程序计数器内容*/( R K j6 F1 k. r
int psw; /*进程现场信息,程序状态字寄存器内容*/. Q5 ^" `! G# V' V4 s- @' w
int next; /*下一个进程控制块的位置*/' r1 E6 m: i3 H( o& o# q! m
}pcbarea[n]; /*定义模拟进程控制块区域的数组*/" O: B/ S5 \ b, U; _/ H- v% C( h
int PSW,AX,BX,CX,DX,PC,TIME; /*模拟寄存器*/
" g3 U6 z( {2 _: ^int run; /*定义指向正在运行进程的进程控制块的指针*/+ w% Y- a# n' ~$ S- D% |
struct
! k/ ?2 Z7 F+ p) P; a( ?. T8 H" e* ~ L* q{' X \3 }' ^+ W) Y9 w2 G# H
int head;
/ g, o# f; N+ \" {2 K; A% j- v& dint tail;3 r2 w! P5 v( C) t% I5 n9 C. R
}ready; /*定义指向就绪队列的头指针head和尾指针tail*/
) M; ]! G' Y3 `" Rint block; /*定义指向等待队列的指针*/
; V. a- r% U8 ~int pfree; /*定义指向空闲进程控制块队列的指针*/
; l& j6 [) J- P/ Rmain()
- K3 ^1 t4 n4 \; g{ int gdriver=DETECT,gmode;
2 R6 D$ C' B4 [7 I1 y: A1 H. s3 P int i,x,y;
9 y0 f' K \7 D! C/ o% M2 [ s. ? for(i=1;i<=n;i++)0 w* m) M! F/ |1 F1 b3 c
{ready.head=pcbarea.next;}
6 H& n( {! {- l initgraph(&gdriver,&gmode,"");1 P7 S3 H7 D' @! q! S9 N X+ y8 R
setcolor(YELLOW);6 W0 l: S% k8 X
for(i=1;i<=4;i++)3 X0 i2 r8 s( e6 B# ?. F% S
{ setfillstyle(8,i);' ?0 B8 Y& z: [8 @* _
circle(284+13*i,190,6);
' x8 a- D, F( N u# T) m( E floodfill(284+13*i,190,YELLOW);
) g" }7 y0 I. E/ l( D } Y7 a+ }7 ^& b- `: m0 s9 t+ }
setlinestyle(0,0,3);
4 @: }4 j! i8 t( g circle(316,190,25); m' }( X7 C# o
setcolor(5);" F5 I. x; |' r5 e, }6 T) _
settextstyle(3,0,4);
8 _) ?1 C( N3 v/ } outtextxy(35,311,"press any key to create objects!");) ^; H/ B1 Q7 n+ {7 V. ~
getch();8 q% n3 W$ f: y- M( {3 t
setcolor(YELLOW);$ U5 a; y& B0 x7 P& t
line(300,215,290,235);
; H9 _( T0 Y' m! F9 M0 w line(323,215,333,235);
8 V1 @. k7 W! R5 x) S R delay(50000);- h; ]- `4 y: ]6 T9 t
setlinestyle(0,0,1);: V" p# h$ z) ?3 B- U
for(x=1;x<=2;x++)
2 |! q1 h, y1 O {setfillstyle(8,x);
7 ~2 m) [. i) H: g* P( j circle(267+13*x,246,6);) W! D3 `: W+ ^3 M$ C# b+ V) @
floodfill(267+13*x,246,YELLOW);' j6 V$ N8 ~7 ?5 S
}
$ u3 K( X" B, e/ w- _ for(y=3;y<=4;y++)
2 P9 {; @5 x% x6 J5 Q- {8 O! y {setfillstyle(8,y);4 I/ S* @# g7 ~( G7 c
circle(285+13*y,246,6);
& S2 }) n# I. F3 n+ E8 h4 B floodfill(285+13*y,246,YELLOW);" R$ M' J9 Z3 _1 I+ V+ D' o+ V( t
}* |, Y5 D* t! ?, f" F$ v0 @
setlinestyle(0,0,3);$ l( l9 X4 S% ^! T
circle(287,246,14);
# V) j( N( q3 O$ a2 j2 W setlinestyle(0,0,3);0 w( a4 S! |* p
circle(330,246,14);$ M* r0 D" j y' k. a
delay(50000);
& t Y4 `" a. X5 Z line(281,260,281,280);+ Y ?& [0 u3 b% E0 e: F' p
line(293,260,293,280);
; m/ X/ X7 D0 }1 { A, `% _& p line(322,260,322,280);
! b2 I4 `, w$ J0 `% F6 g line(333,260,333,280);" M. T& n0 j" a
delay(50000);
) d& D6 w5 ~, S6 K5 ]2 m" k" X setlinestyle(0,0,1);% ^7 k* R2 } n. T
setfillstyle(8,1);
0 O3 Z6 _8 P5 X8 i circle(281,286,6);
6 S/ K8 ?$ E2 r' ~9 p; I8 k floodfill(281,286,YELLOW);: G( X% o8 @$ I, }! K- p9 E
setfillstyle(8,2);
4 u. e/ t/ h: n3 H circle(293,286,6);' ^# q. M+ `6 t" K
floodfill(293,286,YELLOW);( Z( |% A/ w6 u: Y0 u5 }
setfillstyle(8,3);
6 I& B+ |- a5 E" q. A/ U circle(322,286,6); t1 P) Z# h, w1 N3 d' x
floodfill(322,286,YELLOW);( c* D& t) `- X t6 k8 r
setfillstyle(8,4);
/ x, l7 j+ I2 K circle(333,286,6);
! R6 \) n8 o6 J+ ?! x" H; } floodfill(333,286,YELLOW);
8 _/ k, w8 S% T' m+ a! w% c getch();
% [/ Y' V9 W( @ closegraph();: S4 B: @0 @( s! U
}
2 g+ e5 `2 O( w4 P
6 U2 V' L$ e9 t- h4 x' a4 |7 D9 H* K. [9 C+ M2 U# A
|