这是我自己做的一个版本,望斑竹给予指点!!!谢谢
4 v2 ~1 `- _( `7 C( L
9 w& u$ a' }9 B# K' w#include/ T2 `: E* G+ i& B; H# A1 u5 N
#include2 c1 b1 }- O9 w& w+ a! t9 M6 W
#include
- O6 m, L6 j5 U4 ~ c+ n$ c#include4 s1 g$ v- _' [ d8 _4 _) T
#define running 1 /*用running 表示进程处于运行态*/2 {) d) h4 ~; w4 z/ v: I+ _
#define aready 2 /*用aready表示进程处于就绪态*/" m2 C& v2 }# @" k* H) W
#define blocking 3 /*用blocking表示进程处于等待态*/" t V7 m5 L. j# B% P
#define sometime 5 /*用sometime 表示时间片大小*/
& z4 H" K4 f6 Q0 @9 }9 J! C/ L#define n 10 /* 假定系统允许进程个数为10 *// ~4 h4 p1 k- I
struct
/ j' W0 G7 T$ S1 X{$ t3 x, c; W3 Y4 X( ~+ B1 ~
int name; /*进程标识符*/4 r0 R! a7 z4 x; R
int status; /*进程状态*/$ u- `" J z- P- i* {% o! t
int ax, bx, cx,dx; /*进程现场信息,通用寄存器内容*/
8 v) F' i( T/ o) Cint pc; /*进程现场信息,程序计数器内容*/
: @. Q' j. f+ o- q. P5 oint psw; /*进程现场信息,程序状态字寄存器内容*/
: s. U: ?, `7 P- p" A1 k- eint next; /*下一个进程控制块的位置*/
- f. f/ E7 E, j+ y# y1 q ]3 m}pcbarea[n]; /*定义模拟进程控制块区域的数组*/
- W7 W$ F: |/ u) T' y# ?int PSW,AX,BX,CX,DX,PC,TIME; /*模拟寄存器*/) p; D4 T9 u% I$ a( _
int run; /*定义指向正在运行进程的进程控制块的指针*/ p% o- f# K/ Y# x+ w. H8 R3 W0 x+ n
struct0 }* F: ^) F5 b
{7 V8 e0 v0 Z# ?1 r7 v7 h: O
int head;9 |4 W6 z% {! d& z
int tail;; |0 } b0 Z% z$ C, k9 V
}ready; /*定义指向就绪队列的头指针head和尾指针tail*/
1 r1 `( D$ s* |8 D( y: M- g! iint block; /*定义指向等待队列的指针*/) a% _- Z/ c/ }1 ]' ?0 {$ c
int pfree; /*定义指向空闲进程控制块队列的指针*/- N9 G7 ?, y9 {7 ^* z
main()
% f% @& u, u' D2 e. _4 N{ int gdriver=DETECT,gmode;
2 p) X5 c2 Q3 B1 f int i,x,y;/ b. g( J2 @8 [
for(i=1;i<=n;i++)
C# S* ^5 J# g+ v) B. S {ready.head=pcbarea.next;}* M$ X2 y {/ o( d% x% @) e
initgraph(&gdriver,&gmode,"");
) V& l+ `& O, W' A setcolor(YELLOW);9 [( S$ Y0 {: N2 i& @) V6 L/ |
for(i=1;i<=4;i++)3 \7 i$ A, g! }% T
{ setfillstyle(8,i);0 g0 F$ J, O4 G8 _$ T- F0 F
circle(284+13*i,190,6);
$ w5 n" z) o8 G- R8 w) Z3 _6 n floodfill(284+13*i,190,YELLOW);
* j- x$ w4 w" A0 L( [ }6 G5 V" x5 E4 {1 w9 I7 w
setlinestyle(0,0,3);. K1 c' p$ h: l: M/ Q
circle(316,190,25);
# C! x! B" W8 V1 {! ~0 r0 v setcolor(5);
6 C6 i# \, W1 R' ^6 H5 M settextstyle(3,0,4);$ ^3 q4 j( ~( O- P5 `. C: B1 q: j) H) V
outtextxy(35,311,"press any key to create objects!");* h8 O4 t) M$ y+ \. D6 ]
getch();
9 r( H. t3 {& W+ E0 {8 A M setcolor(YELLOW);
! L" K5 A! T4 I* i4 I# \ line(300,215,290,235);
; B; e! d9 R$ b. L4 ]0 _ line(323,215,333,235);3 U, b; h' P2 Z: U$ W6 B$ p' s
delay(50000);: W! k( w8 g4 z! q0 p% \
setlinestyle(0,0,1);
. Q# n0 B7 G V q, B for(x=1;x<=2;x++): j! z3 j ^1 }& @# G9 ^1 B n2 R
{setfillstyle(8,x);
) |( d% J6 q) ~* B. F8 X circle(267+13*x,246,6);
% L! c0 h! h/ n$ D. u5 m floodfill(267+13*x,246,YELLOW);
$ I! I3 u. q0 \ }2 V0 n8 S2 z, w. j$ q
for(y=3;y<=4;y++)- V. w+ E$ s% V8 K1 e
{setfillstyle(8,y);
7 @ x- G) w% t. q circle(285+13*y,246,6);) p3 c8 u7 X1 h: W2 K! p
floodfill(285+13*y,246,YELLOW);
! {* }4 T6 f; P9 I( \% U+ o# s3 P }" @( w" }) ~/ R' P) A
setlinestyle(0,0,3);
1 C4 U( _6 E) M, T circle(287,246,14);
2 l: R' x' z' b: z- h setlinestyle(0,0,3);& D* \8 {! E! _1 X
circle(330,246,14);; J( B% D) X9 I4 m/ H4 q5 a
delay(50000);9 ~3 z& x9 ?0 s% x, I6 Q/ C, P
line(281,260,281,280);9 i6 k. R. |1 E6 l$ ~
line(293,260,293,280);
* _: r7 {& O: s: ~ line(322,260,322,280);
8 `3 G. y2 h2 i line(333,260,333,280);
1 ^% A* S, B" B3 ^ delay(50000);
9 j0 `6 h% h8 r9 L" E; E, r setlinestyle(0,0,1);. B# C) U# x8 P, i
setfillstyle(8,1);
1 `" o2 y+ g4 T0 X% Z P/ H9 `8 v circle(281,286,6);
1 `2 v$ [5 W% {% h8 t9 o+ a floodfill(281,286,YELLOW);; P* X$ ]$ ^, q1 h
setfillstyle(8,2);: G5 l0 U; f6 R
circle(293,286,6);" W4 s" i$ A# L; `# [: E
floodfill(293,286,YELLOW);) W9 |6 J" I, c' w7 f
setfillstyle(8,3);9 I. n3 _7 m) f
circle(322,286,6);
7 j7 b+ O$ @1 u" m& k floodfill(322,286,YELLOW);2 I% p' a3 n1 L
setfillstyle(8,4);; C9 [" k5 u) H1 b" j
circle(333,286,6);
; \6 x" l- w; e; {/ ^$ N/ M3 K floodfill(333,286,YELLOW);
6 N. R! B0 P! X8 W* o1 j getch();$ F# c' b4 G4 K/ r
closegraph();
/ X+ f, S! ^( M; c _0 n: q+ J8 l L}
, f; c# t0 N( j; l f: K" h Y
* O8 r+ q' Y0 ^; I$ I$ u4 l
% F) ^: Q% `! W2 k( B" \. [ |