这是我自己做的一个版本,望斑竹给予指点!!!谢谢. b: B6 I* ^9 F$ W) j5 o
( |" N; N i9 x
#include, r0 y' a' C5 v9 { E) t- w, u: F2 [5 q
#include. f1 G) H! i ?; x
#include+ E! P) f- P( p1 Y5 `! i4 h
#include& ^% C2 j4 `% l. b
#define running 1 /*用running 表示进程处于运行态*/
1 Q. W' v8 ^9 ]#define aready 2 /*用aready表示进程处于就绪态*/
# J1 F! B+ M% C" R( n( P' F, i#define blocking 3 /*用blocking表示进程处于等待态*/
, i5 h T: W% q#define sometime 5 /*用sometime 表示时间片大小*/
- V% h- C2 h3 e1 V#define n 10 /* 假定系统允许进程个数为10 */$ O, x$ c' N$ w# c6 ~ N* A' c4 b
struct
5 N0 G6 ?1 b8 X. s7 {* A& z# T$ \{
) p' ?4 x3 M5 t1 H/ i/ ]int name; /*进程标识符*/
8 o3 Z! o9 E/ _1 ~6 _int status; /*进程状态*/
) p, w+ j2 T3 H: N$ Q0 v& q3 {int ax, bx, cx,dx; /*进程现场信息,通用寄存器内容*/3 a# l& q: Q4 t
int pc; /*进程现场信息,程序计数器内容*/
! J- O6 `9 a. y6 E* k" a7 }int psw; /*进程现场信息,程序状态字寄存器内容*/
- w- f; t- n6 q& [6 wint next; /*下一个进程控制块的位置*/
+ u4 }" [ b. O4 m( H% ?}pcbarea[n]; /*定义模拟进程控制块区域的数组*/! F q+ m: T0 Z' ^
int PSW,AX,BX,CX,DX,PC,TIME; /*模拟寄存器*/
+ o9 q& a* y! x& `; _int run; /*定义指向正在运行进程的进程控制块的指针*/6 i; m, m' @( U" O- r) ]+ n& A
struct
`% e, R0 @3 N9 N. a{' B+ ^5 J' G/ c6 ~
int head;
0 v" e% i' s, e: b' @* ?int tail;! [8 G) f( b; S* s; g* ^
}ready; /*定义指向就绪队列的头指针head和尾指针tail*/
0 d4 V3 p6 O* l8 s, l! Cint block; /*定义指向等待队列的指针*/( L2 ?9 Y6 ~4 T! i0 [* u8 l* S1 i/ F8 \
int pfree; /*定义指向空闲进程控制块队列的指针*/, R! p3 w& r, i6 W+ J3 m# e) d" ^3 s8 C
main()
+ ?# w. D* A8 E! c9 ^! K% h{ int gdriver=DETECT,gmode;
5 N9 O: z! i) @: @0 ? int i,x,y;
" A( k0 w1 [* M: E# G for(i=1;i<=n;i++), S0 ]* f2 ]7 P2 b& w
{ready.head=pcbarea.next;}4 h2 Z9 S1 m% f) t, C
initgraph(&gdriver,&gmode,"");
1 f9 P0 w3 [ z7 w8 p setcolor(YELLOW);4 j; E9 e7 G( |' h. ?
for(i=1;i<=4;i++)- q; t/ e$ j' C7 }$ t
{ setfillstyle(8,i);
9 U6 G2 y8 v/ C' r! h- s, [ circle(284+13*i,190,6);5 J2 V$ T$ j8 r s
floodfill(284+13*i,190,YELLOW);2 V* ` E% W9 v( t7 K' u) b/ S, W
}
* G1 q7 E8 e6 `' ` setlinestyle(0,0,3);- i5 S0 ^- P; S6 ^) q' {- u* q
circle(316,190,25);: d7 ]( `+ ^2 M4 |3 O
setcolor(5);
$ m6 ?2 [. K, x, P( M3 x% h( E# { settextstyle(3,0,4);! @+ e* S. m" C& f
outtextxy(35,311,"press any key to create objects!");
! u" y t% H/ x getch();
' ^% [6 @& d6 R, S1 Z setcolor(YELLOW);) h% H, f# O6 l1 ]" Q
line(300,215,290,235);
0 {1 p5 Z O. L line(323,215,333,235);, p7 i! E. @4 n% j
delay(50000);- r) ~ ~5 |+ l q- A. k
setlinestyle(0,0,1);! y' N1 n0 D( N6 b
for(x=1;x<=2;x++)
. o( B* f+ @( d! a {setfillstyle(8,x);
0 |3 p& F$ ]+ ^" n circle(267+13*x,246,6);: c( E" u A# S) H3 a0 J( \7 S
floodfill(267+13*x,246,YELLOW);" e Q' g% v% L( v
}. T6 ~" [& w% }: e
for(y=3;y<=4;y++)
: K5 |$ Z$ l- E; N( f2 `+ ~ {setfillstyle(8,y);$ Z/ s* @/ E! m/ O9 S5 q
circle(285+13*y,246,6);6 W1 c. u8 E/ p7 t# N b
floodfill(285+13*y,246,YELLOW);
% y/ S" ^ X' } A& D4 {& U: r2 ` }
2 I& ~7 B* w: N# h. A5 L! D setlinestyle(0,0,3);
! Y; J( R8 Y$ H0 I circle(287,246,14); D( |2 e: p: ~' {& p4 S5 s
setlinestyle(0,0,3);
. y! O$ u5 q: |8 q0 C0 L0 y6 G# o circle(330,246,14);+ \" z* g: h. }, n/ X7 k- g/ a
delay(50000);
; E( Q0 E) h5 B/ g7 U6 C3 n line(281,260,281,280);0 i. Q. D. U9 ?4 s' f/ I/ k5 p
line(293,260,293,280);& T- J$ _% G D
line(322,260,322,280);+ b. k4 S, ]3 E* \! M
line(333,260,333,280);& {9 {0 J6 s( K. O
delay(50000);
9 S) t( u6 Q6 X0 K. x- p+ r' F setlinestyle(0,0,1);) c0 {- `# N7 t) J8 e$ t
setfillstyle(8,1);
" W+ Y5 z) m% A1 Q( n K* R circle(281,286,6);' d: q' M0 A% r4 a4 Y6 H# W
floodfill(281,286,YELLOW);0 R& d; r- x: S9 ]( o8 q5 {
setfillstyle(8,2);1 u* F, `# l( b. R+ A& O
circle(293,286,6);, u# `8 n W \/ t3 A
floodfill(293,286,YELLOW);4 D: s# G0 Q, { u! L T* A
setfillstyle(8,3);
D$ e1 T8 Y# n3 k. E; s! R circle(322,286,6);
8 I' Z2 |0 C% ?" C8 X4 ^0 r( x floodfill(322,286,YELLOW); K+ f% E9 Z8 }8 U8 D
setfillstyle(8,4);" M9 \$ t6 E- j0 x9 X6 [6 y k3 P6 V
circle(333,286,6);
3 A" A7 G3 }, [5 T' E floodfill(333,286,YELLOW);
- A" T% B" ^* e getch();
" d7 F, ~' |8 c8 f( e closegraph();- D8 t, }7 X V/ w
}8 I# M4 ?7 P8 P
4 W5 ^) ~; k+ c( z8 O
) o/ c7 P% w, c# x |