这是我自己做的一个版本,望斑竹给予指点!!!谢谢5 u9 i7 E( D# b; s4 R4 Y% @; q
$ l: ?) R: ?& l' s
#include
* N* l5 v* L" ]* i1 _#include
! C, t; V0 B& G/ ?- r& V5 f' n#include
: R' j- A; w! }; m6 N* O#include8 S/ m5 r1 m, t
#define running 1 /*用running 表示进程处于运行态*/8 g4 M B" t y8 K9 z$ t( R
#define aready 2 /*用aready表示进程处于就绪态*/; n% l D* m; }0 h. R- L# d" w# I
#define blocking 3 /*用blocking表示进程处于等待态*/: X4 G& k& F$ ?& D4 \
#define sometime 5 /*用sometime 表示时间片大小*/. b, K$ e: m9 o- i- Y% C
#define n 10 /* 假定系统允许进程个数为10 */
5 C/ E* ]' i H! Gstruct" {8 V; E7 K. |
{7 Y; @# c( n% _* {# R8 p3 j# O1 \
int name; /*进程标识符*/
9 |$ _! t# h- Qint status; /*进程状态*/
) ?/ D7 M- {) h5 p) K! Tint ax, bx, cx,dx; /*进程现场信息,通用寄存器内容*/
% j5 y5 `0 F" \# d9 `8 Sint pc; /*进程现场信息,程序计数器内容*/" {4 O! R6 H- l- ?4 ]2 L
int psw; /*进程现场信息,程序状态字寄存器内容*/
9 n. t i7 b1 p0 mint next; /*下一个进程控制块的位置*/
' y9 V; e1 [- d9 m- [}pcbarea[n]; /*定义模拟进程控制块区域的数组*/) j) w, N0 N s7 c" S, I
int PSW,AX,BX,CX,DX,PC,TIME; /*模拟寄存器*/9 y4 u& q. F/ P1 {0 R& V' q+ i
int run; /*定义指向正在运行进程的进程控制块的指针*/; n+ R5 k& S, h
struct
7 U. L; C1 y, Z0 F{
/ c+ L7 S8 m; N$ y$ \( _4 Yint head;
2 ^4 }. E% L4 J+ F* v( k; dint tail;
, K2 h- ~* @ A- A}ready; /*定义指向就绪队列的头指针head和尾指针tail*/
7 l4 p6 |. A5 c. T0 J1 hint block; /*定义指向等待队列的指针*/$ B6 D2 b: I4 v- b: s
int pfree; /*定义指向空闲进程控制块队列的指针*/
N% P! R$ ]6 L ]; D2 g9 zmain()
' j9 V: |9 ^) Z/ r! H* W{ int gdriver=DETECT,gmode;$ N; e/ J* }, L$ |! h
int i,x,y;
/ {' \' N3 y3 N9 r# `3 v% ` for(i=1;i<=n;i++)9 B( x$ s1 ?3 L1 k
{ready.head=pcbarea.next;}
0 k# J& c2 i+ `8 \ initgraph(&gdriver,&gmode,"");5 h" V. }" d) d `) _( k
setcolor(YELLOW);
# M: O/ Q1 M; y& O( q+ @ for(i=1;i<=4;i++)
9 J. ~3 n2 c1 A1 ^: f { setfillstyle(8,i);* l! f0 x5 w+ W2 z* ?
circle(284+13*i,190,6);
( o1 T5 y1 h3 p floodfill(284+13*i,190,YELLOW);
' t* I A' z2 ^: N/ Z' g }8 D$ Z" O. G: Z8 a' @
setlinestyle(0,0,3);
3 D0 B' l) x& ]. i. N1 J1 r) n circle(316,190,25);
/ R2 f6 i" C/ i& l setcolor(5);7 o9 q" F7 d8 F
settextstyle(3,0,4);
/ M3 Z2 ]. J5 d& C! t* e% C outtextxy(35,311,"press any key to create objects!");
$ P+ A/ P* P7 n' d, c" w getch();
; E8 O3 b: p0 f1 k4 ]" m setcolor(YELLOW);
8 w. F* ]9 \! U& Z( K line(300,215,290,235);
: A! n; U' h& N' k3 D2 i) B3 ` line(323,215,333,235);- Q7 J- V2 I& [0 e5 A6 L
delay(50000);& I# D3 m/ ~* k% L6 m: ^+ ^
setlinestyle(0,0,1);0 c, S" \0 q' O9 {9 ~( e
for(x=1;x<=2;x++)
8 A2 n+ O7 U; g6 e {setfillstyle(8,x);$ ?& s6 I$ n; y g; c
circle(267+13*x,246,6);3 i8 F) l$ m% c. q$ ]+ Z' d
floodfill(267+13*x,246,YELLOW);
. J7 J; q/ v$ d, p' W+ d }
1 T. V9 \$ f* `, l' D G0 z for(y=3;y<=4;y++)
% v3 }$ R$ q) h( k0 ]& E& _/ T {setfillstyle(8,y);) \6 q+ f. K8 O
circle(285+13*y,246,6);8 G! M( h$ w* t4 j2 h4 Z
floodfill(285+13*y,246,YELLOW);+ z7 I+ t4 b/ A6 M5 Q
}
, R X. I1 \- ^ setlinestyle(0,0,3);
" r6 C1 }4 I4 F# \7 e circle(287,246,14);5 v% ^9 C- j, P% o3 f x
setlinestyle(0,0,3);
, b' T& h: U+ h% c; m3 j circle(330,246,14);, B s# |$ c3 W+ B% o& M! c7 _
delay(50000);8 g. z! }" y, D$ h- m
line(281,260,281,280);
3 E5 j+ G/ A& v% b2 C line(293,260,293,280);2 \) k2 P% W3 {& B9 H F
line(322,260,322,280);
! n4 m8 L$ v/ v8 [+ u9 T% w line(333,260,333,280);* y* z- p+ d7 [; Z6 d- h
delay(50000);
) i+ `" H; r/ m# r6 u1 j setlinestyle(0,0,1);
. Q: c, F/ o7 }8 f2 \" g4 k setfillstyle(8,1);
+ h8 m/ I3 H- s# ?% {. K) [4 k; S+ A circle(281,286,6); D% a$ C: Y6 |" Z
floodfill(281,286,YELLOW);
. f6 J) E* x5 c6 N+ E7 o setfillstyle(8,2);' {8 t4 c" h; T0 h
circle(293,286,6);/ M$ F8 W# ]" J) Y- F
floodfill(293,286,YELLOW);
' g) P+ ~; F6 ]$ z/ }/ o setfillstyle(8,3);4 y+ T: C4 {. V2 D' P6 f
circle(322,286,6);
1 O! {* X$ P# Q floodfill(322,286,YELLOW);6 Q1 g/ b( E% U
setfillstyle(8,4);
$ \0 M9 z) S7 w+ h* j9 y4 `( s circle(333,286,6);; p4 r4 R0 \- {) a9 P! t+ p
floodfill(333,286,YELLOW);
/ q6 ?; L7 f0 r+ y. D* I2 a5 V( ?: ` getch();
1 j* p7 T ^$ E- i closegraph();& B7 O( H$ b( N. b
}
* Z4 T2 }% M) w+ z$ ^& m
5 c( \/ F9 }7 h( l0 n! E) L
9 N( }& v! {! q/ w8 M Z |