这是我自己做的一个版本,望斑竹给予指点!!!谢谢& U) d8 K: O/ `4 l R
7 w* x% s1 z/ }. }* H* L' l1 j2 l
#include
5 {9 n- t7 d. A' b#include
1 T: u: a( e7 C7 @$ q#include
$ k: @/ h: P, R: W# h#include1 [6 K% d$ V/ I
#define running 1 /*用running 表示进程处于运行态*/
v+ ? @! y+ d, x1 t+ H#define aready 2 /*用aready表示进程处于就绪态*/' o( s( n# E, [ i& Y
#define blocking 3 /*用blocking表示进程处于等待态*/
# G) Z9 x1 I0 S7 i4 ]4 \#define sometime 5 /*用sometime 表示时间片大小*/
0 t! x% J. H9 j. v# n m; D% y#define n 10 /* 假定系统允许进程个数为10 */
9 Y. o1 w6 K. U( a( q5 Pstruct% b9 Y. u7 `' d* u& x
{# i- Z* [- a. J
int name; /*进程标识符*/6 h* [/ W8 B5 n# | w; G M5 f
int status; /*进程状态*/
6 u, s v9 U) b, S7 s& Qint ax, bx, cx,dx; /*进程现场信息,通用寄存器内容*/: Z! u; C; ?6 V( y
int pc; /*进程现场信息,程序计数器内容*/
1 C3 V6 h W( l) [4 rint psw; /*进程现场信息,程序状态字寄存器内容*/
) H4 C3 h. E# q3 L. H( T' Jint next; /*下一个进程控制块的位置*/
# v4 Z) J0 e9 }5 B# ]}pcbarea[n]; /*定义模拟进程控制块区域的数组*/
. F$ ~3 G; R& ~6 U7 Yint PSW,AX,BX,CX,DX,PC,TIME; /*模拟寄存器*/
( y. W* _& z$ |! {: E) q% C; lint run; /*定义指向正在运行进程的进程控制块的指针*/
* h& s8 w1 g: q$ c% a/ a+ n' Istruct, w. V! z7 ]* `3 t" [8 |! `: ~
{8 n3 M( a2 o/ p) l9 g* C( L
int head;
+ @8 s, u+ ^$ ~3 b& Fint tail;
, \/ a4 Z6 k8 M}ready; /*定义指向就绪队列的头指针head和尾指针tail*/! E$ s6 n. \8 x1 J/ B
int block; /*定义指向等待队列的指针*/' v$ {. x+ Z( V9 `. X3 E- u
int pfree; /*定义指向空闲进程控制块队列的指针*/
2 Q, y% f( m; ^2 Lmain()
: j1 {& `3 v$ f) @# X{ int gdriver=DETECT,gmode;
3 J( ~. N' o8 @2 o; r3 S- \ int i,x,y;
; E% C1 M! N ^$ s0 ^ for(i=1;i<=n;i++)+ s- f7 v+ P. ^, _& _* ]
{ready.head=pcbarea.next;}+ S5 d% W+ v5 l- d) n v+ A( k
initgraph(&gdriver,&gmode,"");
, a, B7 `; s0 \6 M. t5 I setcolor(YELLOW);9 O3 A4 f4 D5 R0 ]
for(i=1;i<=4;i++)1 T, F# K; z- H5 b2 x! M, M
{ setfillstyle(8,i);
; j5 W y6 ^) {# ? circle(284+13*i,190,6);3 A" P/ `+ B& `. F) v4 E
floodfill(284+13*i,190,YELLOW);% G5 |9 \4 s- A* N
}
9 _3 W+ N% o; ~ setlinestyle(0,0,3);& ?+ U6 {8 Q5 m
circle(316,190,25);; J# S$ {6 s" Z. L" e, [. r) x
setcolor(5);
4 u7 z0 n9 B+ b" V* s settextstyle(3,0,4);! ]' B: m3 j3 m. Q Q M. L7 r
outtextxy(35,311,"press any key to create objects!");7 {. P' M ~7 T+ ` H+ b9 a. ?
getch();1 k# E p" | M4 f
setcolor(YELLOW);/ k( ~5 @# c# J4 U; x
line(300,215,290,235);
! v7 H8 d2 i+ | line(323,215,333,235);* z# h" ]! x% _' e
delay(50000);" @9 Y; y. Q8 ^- ^$ b6 }
setlinestyle(0,0,1);8 d' A; o0 b1 p# B( V
for(x=1;x<=2;x++)/ ]6 D3 V- t( }4 i! O3 J2 ]
{setfillstyle(8,x);. i- S4 d6 p# b: X
circle(267+13*x,246,6); y& \+ t {! K) a% X9 c
floodfill(267+13*x,246,YELLOW);7 r7 K. M5 Q$ } i+ R1 b+ c/ G& L
}$ h. Y1 P4 I J; b3 |1 c
for(y=3;y<=4;y++): j% ?- F% s& e( V
{setfillstyle(8,y);
' z7 y D- F& M" s circle(285+13*y,246,6);
, g3 j: n6 T$ p, U* o1 T floodfill(285+13*y,246,YELLOW);$ R% [" K9 a! ~+ g% S
}0 }0 G% C% `% M
setlinestyle(0,0,3);; V# X' ^6 q# ~7 u
circle(287,246,14);
& B; x. o6 L* B" e1 L5 K8 `- \2 \ setlinestyle(0,0,3);6 }" B0 n% [* Z0 y O
circle(330,246,14);: }) B6 L1 s) q( |6 e
delay(50000);: s" d( Q9 y& Z& M1 M/ C) N
line(281,260,281,280);; m6 Q: Z" _0 c. K% O- ]
line(293,260,293,280);4 q. A2 P' c* ~# s% J7 w7 g
line(322,260,322,280);
$ \9 s) |* G x3 v line(333,260,333,280);
) x+ d* X! i; Z9 u0 N' v# C delay(50000);5 j" z; d' X) ~) b
setlinestyle(0,0,1);
# P4 r8 f1 K, ?7 I0 N setfillstyle(8,1);
# X. _+ H2 i6 \2 ~; i circle(281,286,6);
$ L8 B# V& U3 s/ ]5 \' } floodfill(281,286,YELLOW);
: l2 m7 p! \4 U' c5 e2 s setfillstyle(8,2);
# Z3 X1 {( \2 k: [# k8 X circle(293,286,6);
$ B( A4 w2 E! X- l0 @ floodfill(293,286,YELLOW);
3 _1 [, F3 ]# T7 u2 |$ T setfillstyle(8,3);2 r% `3 t' `! f4 C: t8 y4 d5 \
circle(322,286,6);
* P6 a% |2 r0 T, x s floodfill(322,286,YELLOW);: s0 W3 s; A7 f/ ^8 {
setfillstyle(8,4);
) H0 h! S6 E4 q8 g3 I$ E C circle(333,286,6);
# F$ Q& H. s6 j* A" f, H4 C4 y floodfill(333,286,YELLOW);
9 e& U) A8 j5 C2 _ getch();9 P& ]; }+ E' B1 u0 B3 p# @
closegraph();
1 D: b; \$ k' J4 r* D& J}, B% J( n1 ^. Z( `' D
: |5 Q" n/ V: b" v% O1 }& ?
- M" A; |( W; a* f' ~/ P |