这是我自己做的一个版本,望斑竹给予指点!!!谢谢
5 L" }5 j; x) c2 o2 m" k
& O! E5 Y; ?( r9 g3 D+ ^# }1 e#include
, |. _2 c' f0 E* Q* d#include
" I& E+ [) O: ^$ L, g9 l6 O1 Q#include
' b' R5 m9 I7 z# _; N9 @7 V#include
4 O a9 h" B- q. s: h#define running 1 /*用running 表示进程处于运行态*/1 G8 U% m. F3 u# Q5 K9 v
#define aready 2 /*用aready表示进程处于就绪态*/! U+ x1 y( f. u6 K4 j; _% b
#define blocking 3 /*用blocking表示进程处于等待态*/* L, m8 k V/ d$ F' Y" Q) H [2 d' b
#define sometime 5 /*用sometime 表示时间片大小*/
* I: u) N" _* d/ l* N#define n 10 /* 假定系统允许进程个数为10 */$ r: s4 D4 Y6 k3 O) y' w, c
struct: b1 G6 ~8 S: U* C! ^" C
{* F! `) O9 I$ q1 n
int name; /*进程标识符*/
7 [4 D! U. @! q9 r+ P- gint status; /*进程状态*/
1 K D f5 x5 P1 U4 Hint ax, bx, cx,dx; /*进程现场信息,通用寄存器内容*/% s% z: @- C& u/ S( [: X% Y$ G& J
int pc; /*进程现场信息,程序计数器内容*/
+ }& O, t& `" ]2 e* I) O$ wint psw; /*进程现场信息,程序状态字寄存器内容*/
" G1 s1 s2 w0 j6 Wint next; /*下一个进程控制块的位置*/
: {4 \# w! O6 e1 I: S) J}pcbarea[n]; /*定义模拟进程控制块区域的数组*/
- l0 @/ D. t8 p# c6 c. g% v2 tint PSW,AX,BX,CX,DX,PC,TIME; /*模拟寄存器*/% H E6 q. j2 d8 _6 C5 A6 z
int run; /*定义指向正在运行进程的进程控制块的指针*/
1 m4 S4 \- ~' |5 lstruct! v. M6 Z0 T3 c1 C. D5 T! P
{& t9 `. S& L& d* M9 X6 h5 Y
int head;
& v2 t( y& `8 hint tail;9 m, L# @( l6 m r+ f
}ready; /*定义指向就绪队列的头指针head和尾指针tail*/
7 g5 M" S3 ~! U7 A: @int block; /*定义指向等待队列的指针*/
& ^: a) J7 [! k2 `3 n# @+ C8 r7 jint pfree; /*定义指向空闲进程控制块队列的指针*/( ^' q3 n- e0 Q4 ~) j# o
main()
9 F2 n! a. G( ^& k7 m S{ int gdriver=DETECT,gmode;/ Q Z7 r- \! z5 W8 ]+ c2 U
int i,x,y;' n4 _, R$ c# l4 m) z
for(i=1;i<=n;i++)
/ g0 {' l- m: |. s8 g; y+ Z7 M; i {ready.head=pcbarea.next;}
8 S# K( S) N5 b8 m1 [! T) F initgraph(&gdriver,&gmode,"");
, r4 S5 u- @5 Y- G3 D3 d setcolor(YELLOW);& V' M4 }$ {- }* n: o; i. K
for(i=1;i<=4;i++)( x) I+ X' z- A$ a4 u
{ setfillstyle(8,i);% F9 k' m1 l/ G7 @# M
circle(284+13*i,190,6);
6 o: V% a; }5 L floodfill(284+13*i,190,YELLOW);
) b5 g% M A% v1 S }& N! Y: S% P; C
setlinestyle(0,0,3);$ e3 b& U+ D/ h8 [1 Y* f
circle(316,190,25);
1 S& u1 V0 V0 Y: f setcolor(5);
8 A1 N9 S3 b% s2 E4 Y3 Q# j settextstyle(3,0,4);* ]; k: v1 _' r3 Y# }) i Z# p3 \
outtextxy(35,311,"press any key to create objects!");
: t) O: Z4 X- v getch();9 Z- W7 b% M, U* _0 |4 t+ i' r
setcolor(YELLOW);: x, s/ j) y& |! w* }
line(300,215,290,235);* q$ s( |0 l: G+ h6 h% \ i0 P+ a
line(323,215,333,235);! Q; `1 l9 c2 C. d
delay(50000);
6 N" f) p# P- ?2 o setlinestyle(0,0,1);
' W/ ~& x2 J% j( k7 X for(x=1;x<=2;x++)5 x* q) M- ]; A1 c- r" \3 L
{setfillstyle(8,x);" V( V2 z' Z, g. A6 R
circle(267+13*x,246,6);
+ `) T: a' x; H3 d floodfill(267+13*x,246,YELLOW);: Q3 ?7 }7 L, @; T; i+ U
}$ S* |# U g9 w& i. F- { W
for(y=3;y<=4;y++)
4 m5 N- g/ X4 s( g7 T' I: d. ? {setfillstyle(8,y);
$ o% [& v3 P8 d) e3 L4 Z" } circle(285+13*y,246,6);
' `4 S$ J0 W# u7 h g floodfill(285+13*y,246,YELLOW);0 E- M6 @0 o1 } y; F
}
, o' R/ d/ _; D2 t/ A setlinestyle(0,0,3);
1 l3 N9 o( S1 n. x1 q0 U" W circle(287,246,14);
$ g" r6 ?# K( M7 L) ? setlinestyle(0,0,3);
8 V4 }3 H% d! V1 N: @1 | circle(330,246,14);
& g, D+ E$ O7 m- P delay(50000);
$ o/ t @. W7 K* U line(281,260,281,280);
; T( M* a- _& Z5 Y line(293,260,293,280);
) O) r n1 N& ^4 o line(322,260,322,280);
. Y$ R2 t/ b% r u) o4 u line(333,260,333,280);
; r1 y3 I) A# f9 _( E" N- @6 i delay(50000);1 ~4 x1 O' |, S% E1 U4 g+ t& H
setlinestyle(0,0,1); E; S A! A2 U0 ]0 a
setfillstyle(8,1);
. |6 C @7 R' l+ }! Y* J circle(281,286,6);
F& h- I: M* a4 N6 Q floodfill(281,286,YELLOW);5 M$ K& W0 C- r( W! x1 b
setfillstyle(8,2);8 q: w8 K# P: O I+ u5 H
circle(293,286,6);5 @. B1 T9 f4 w, ~
floodfill(293,286,YELLOW);/ [' @- L& r3 w
setfillstyle(8,3);' u8 a1 n H, t
circle(322,286,6);, f1 I" @* U* u. d
floodfill(322,286,YELLOW);' y% y4 `* b' h1 s$ b
setfillstyle(8,4);
' a& B: v* W% @" G# ]2 g circle(333,286,6);$ [( `: H- _3 Q E" Y
floodfill(333,286,YELLOW);' e' @8 O' T. f5 j# l
getch(); d! M6 A; e: _% S4 L
closegraph();6 @" V% v! n d( |( W z$ h. P3 s
}
/ I# V/ y! t( @' S/ m
+ s: c& f$ ]. Y/ {$ L0 q, x, y. C. X( T
|