这是我自己做的一个版本,望斑竹给予指点!!!谢谢
9 X E! E% Y2 }( b& K* V5 Q( I& V( X; o1 K$ Y+ R: K* B( ~9 h
#include- J5 q2 N3 J% q9 q* Z
#include
+ j/ J1 w7 d8 ^& c#include8 m4 ~8 o/ i( p
#include
/ X6 k" ~; G$ ?; ^) E9 D#define running 1 /*用running 表示进程处于运行态*/
( f, f% G! t7 q8 v#define aready 2 /*用aready表示进程处于就绪态*/% ?' R+ h/ G0 |1 A8 @2 Y
#define blocking 3 /*用blocking表示进程处于等待态*// N; m$ j: X: L: J
#define sometime 5 /*用sometime 表示时间片大小*/; K" J5 ?+ P& b" @) q
#define n 10 /* 假定系统允许进程个数为10 */
/ o5 ~3 q% q9 s0 N2 I- J6 ?struct
. _9 g6 B- z% e2 k: a{
0 a! e. u; |7 R- g1 ?1 Fint name; /*进程标识符*/$ O( x! v+ }" L" Q5 C0 v: t
int status; /*进程状态*/$ ]$ N6 f7 X: ]2 D& @0 @3 l6 n5 S
int ax, bx, cx,dx; /*进程现场信息,通用寄存器内容*/
7 V3 n9 I0 R6 n3 _. H6 Q3 j" X. bint pc; /*进程现场信息,程序计数器内容*/& V, t+ |& M$ m/ m' D# `5 {- C
int psw; /*进程现场信息,程序状态字寄存器内容*/' B- H# {$ c. S+ c4 V, B
int next; /*下一个进程控制块的位置*/
- C: J3 ^6 H6 d; p}pcbarea[n]; /*定义模拟进程控制块区域的数组*/
0 H& ?+ C' N Q) j+ jint PSW,AX,BX,CX,DX,PC,TIME; /*模拟寄存器*/
+ l: ^1 x# R, B) gint run; /*定义指向正在运行进程的进程控制块的指针*/
* N* o7 ~( V+ F3 W, Ostruct8 ~: {4 k4 y1 ?# r4 _3 N% K/ D
{' \3 K/ r4 |0 i7 }- K9 F& r7 d
int head;
$ N5 p1 B& v/ Q0 u; Qint tail;+ E; m& k5 W; I% X5 H
}ready; /*定义指向就绪队列的头指针head和尾指针tail*/
5 v& Y3 u# B, Q8 aint block; /*定义指向等待队列的指针*/2 [3 O" s. o5 E
int pfree; /*定义指向空闲进程控制块队列的指针*/" e4 N+ P A& H: Q+ A6 q
main()
; v" ]2 d0 U+ \( O# K1 m! ~8 h: r{ int gdriver=DETECT,gmode;9 e2 @/ Z' d* X/ Y, k$ v
int i,x,y;
2 }0 D& h- k* b- h; D for(i=1;i<=n;i++)! c5 ^9 G/ r0 V5 K# }5 M
{ready.head=pcbarea.next;}
/ p2 U$ c7 g/ E/ r: {. { initgraph(&gdriver,&gmode,"");
2 F% _: y: X# ]4 F setcolor(YELLOW);- z3 a" C3 x: w3 m) n1 f
for(i=1;i<=4;i++)
& @% L% X3 o3 D& b: f: Q { setfillstyle(8,i);
* ]" X+ m/ [8 G0 u' \2 [5 ` circle(284+13*i,190,6);/ K6 x# W5 L/ S0 }
floodfill(284+13*i,190,YELLOW);, U9 d, u1 k: l$ Y9 T2 J
}
3 ^3 D! r% d; v$ ? setlinestyle(0,0,3);
/ O7 J* i4 U4 Z. J; r& K circle(316,190,25);
% j1 z* L7 p3 i. A P setcolor(5);# L! ^, b% ?# {
settextstyle(3,0,4);
A: V) q- q3 X! O outtextxy(35,311,"press any key to create objects!");0 p6 J7 y& }2 J1 _2 p
getch();
" O( Y" t0 B% | B setcolor(YELLOW);
8 v0 ~9 e2 c$ R( \5 i1 u line(300,215,290,235);
& _0 y# l/ q, w# T line(323,215,333,235);
+ Q+ `! }0 z" t3 y: s- B& n delay(50000);
* W5 n2 r1 z- n0 @0 B3 [ setlinestyle(0,0,1);
2 N7 B- r' d( h1 N# s for(x=1;x<=2;x++)
$ _, k& h6 q* A* z7 {9 R {setfillstyle(8,x);
* u1 e5 N8 i! V6 q circle(267+13*x,246,6);5 p3 Q- R- Z ~. [. ?
floodfill(267+13*x,246,YELLOW);; ~0 q6 M- ?* ?0 G6 P: \5 H% s
}
" K: I; W2 R9 T3 P for(y=3;y<=4;y++)5 S- n/ h$ V6 j- O
{setfillstyle(8,y);
( }7 r: b- @8 B circle(285+13*y,246,6);
. }; z& h9 c' m( S floodfill(285+13*y,246,YELLOW);+ c* M, @9 @2 W
}
5 i& e2 w: W" \# t* E setlinestyle(0,0,3);, U7 O$ Q$ x' D" F, ]
circle(287,246,14);
, ]0 D9 i; \, M6 b setlinestyle(0,0,3);5 q; @; }& v& Q
circle(330,246,14);* j+ W k0 C- E; a0 e2 |" m8 U
delay(50000);& e6 K2 Z4 @; u% h6 D
line(281,260,281,280);' W! W7 Y+ r1 ^6 n) }. }8 U
line(293,260,293,280);$ G& |+ M; r7 N1 A" o E, O8 u
line(322,260,322,280);
* `" e& y: C R line(333,260,333,280);
. n& h$ Z( f# @7 X: N9 [ delay(50000);
% M, j5 o9 c, C' x" b setlinestyle(0,0,1);
2 H4 @5 |7 K/ L6 n3 _0 } setfillstyle(8,1);$ }6 N8 g* T/ u# y* Q
circle(281,286,6);) ?8 Y( E1 ^- O6 Q5 C1 j3 Y
floodfill(281,286,YELLOW);
" h6 p% I0 ?, X setfillstyle(8,2);
_1 `; a, @) {0 C, K. H9 ~ circle(293,286,6);8 t: I2 C1 D) v/ d v
floodfill(293,286,YELLOW);
, R: z8 _! x5 @ setfillstyle(8,3);- `6 f" }+ Z; C
circle(322,286,6);+ k! T. o8 Y. O, m8 c7 q
floodfill(322,286,YELLOW);; K3 S7 i/ z6 C: B$ l
setfillstyle(8,4);8 W4 r' N k, m( b, W* C
circle(333,286,6);
. D' x+ U7 r( p' j/ D; q% h floodfill(333,286,YELLOW);
/ T4 F e4 S; K, \; h8 u+ N getch();+ ]( V& f5 o8 K% X7 C$ a
closegraph();4 u0 w4 e+ u9 m' y6 i! l
}
' [# h$ @8 q+ s2 q: q2 D* S* ?4 Q4 r* G/ W, d% `
) D* f, r, T7 c$ V, [3 ]' U |