这是我自己做的一个版本,望斑竹给予指点!!!谢谢3 [& X' ?" D8 g0 ]0 ]! z* m% Y
4 I" o/ R& t) {$ }/ l" \. [, [#include
( p* _. W @1 l$ h#include
+ U# u: ~3 y8 f5 w# r, S: T( s#include
5 g- x; ]( a: M, S1 Y: ]( `3 r#include8 i) Q. x# F' _
#define running 1 /*用running 表示进程处于运行态*/& A$ w5 ~* M1 w5 B/ q/ H8 h( |
#define aready 2 /*用aready表示进程处于就绪态*/
- `" Z7 W0 J4 l& z+ n: R#define blocking 3 /*用blocking表示进程处于等待态*/; Y/ H& a1 |4 t) b1 i, {
#define sometime 5 /*用sometime 表示时间片大小*// V5 D# U' E# g$ V, Q6 G& c
#define n 10 /* 假定系统允许进程个数为10 */
3 D5 N0 x2 L/ Jstruct
! X7 Q, Q9 t6 f/ |* _{ r( [7 L3 V) C' e8 Z& H; B, h
int name; /*进程标识符*/
2 b1 C7 \$ N. ^ x; z% fint status; /*进程状态*/
5 T [4 z+ e; `) J3 E6 R7 D6 Tint ax, bx, cx,dx; /*进程现场信息,通用寄存器内容*/
* b: `5 [: T, g% pint pc; /*进程现场信息,程序计数器内容*/& |7 l* W1 C" y: }5 C- h* S0 F# `
int psw; /*进程现场信息,程序状态字寄存器内容*/
% N; E b3 V! K$ R- q7 [int next; /*下一个进程控制块的位置*/
& b% w5 V5 V7 q" N}pcbarea[n]; /*定义模拟进程控制块区域的数组*/
+ }# k. E8 E- x+ O9 v- pint PSW,AX,BX,CX,DX,PC,TIME; /*模拟寄存器*/
8 S. j0 L: @! @4 n& j: g# _int run; /*定义指向正在运行进程的进程控制块的指针*/5 O) V7 v+ f2 y- }
struct. g( o- `9 l0 _! H" f# Y
{8 c' B! `3 j, o3 q
int head;/ h4 B- r8 D, O; R2 D
int tail;
* t+ f( H9 k$ l7 \4 Q}ready; /*定义指向就绪队列的头指针head和尾指针tail*/
$ u. R) x& R6 }. w( E( pint block; /*定义指向等待队列的指针*/: Z7 [* a# c5 l; ?5 {' M
int pfree; /*定义指向空闲进程控制块队列的指针*/
4 E( B* ?6 F" t8 z! _! U, bmain()
4 w" _- o. t8 [/ B. G{ int gdriver=DETECT,gmode;
+ [: g: Y& e7 Z% S. J; f int i,x,y;4 A9 T, V9 B0 Z9 ?# a/ Q0 N
for(i=1;i<=n;i++) O0 Z1 W# N2 i0 G
{ready.head=pcbarea.next;}
) |9 e! Z1 I8 Z. i initgraph(&gdriver,&gmode,"");
; Q; ?" l! |" s; p- t% M setcolor(YELLOW);' b! y& f: }' p% E5 [- k& r
for(i=1;i<=4;i++)
. L: m( i8 M# X; N9 {. u { setfillstyle(8,i);
5 e0 B2 }$ P; Z2 @+ E, k1 \! ] circle(284+13*i,190,6);
4 n+ P. D- f1 Z% q/ B( L5 i floodfill(284+13*i,190,YELLOW);( j5 X1 X8 c( r8 _* L! S
}0 I n$ \+ X3 b2 n" w9 r
setlinestyle(0,0,3);
+ M; }7 ~( w3 C% J" P% N; D7 T circle(316,190,25);2 Z3 {& x1 Q' x
setcolor(5);
1 u4 V9 a3 P: Q1 E" ^& a settextstyle(3,0,4);
$ S" A) k; A3 s# O% u. `0 \ outtextxy(35,311,"press any key to create objects!");
: \, u$ f/ d! R' L& f( t4 R k6 O getch();& M8 v$ D0 O5 B) {; R* G: D
setcolor(YELLOW);
! c& N! H% D& @9 ^$ t$ \ line(300,215,290,235);- J* j! [% V1 t: a# d2 V) ?
line(323,215,333,235);
6 H, N) d) `/ b2 | delay(50000);% A" a1 [% W2 e/ W
setlinestyle(0,0,1);9 q. ]0 y' t7 a% Q, Q
for(x=1;x<=2;x++)$ ^5 r! J3 R; h( w5 a
{setfillstyle(8,x);) |( Q, g5 p o. C
circle(267+13*x,246,6);
( H" x9 k* P! o5 m floodfill(267+13*x,246,YELLOW);
1 \# C; L3 Z: k+ D3 w3 M }
& s2 f. U: m6 M+ T+ S% d, X for(y=3;y<=4;y++)) b7 X9 v8 i- ]; b$ g& ]; T2 J+ H
{setfillstyle(8,y);
) r( t) _3 u# o8 a: w circle(285+13*y,246,6);8 @ ^& b' ?4 u
floodfill(285+13*y,246,YELLOW);" A T5 `5 {& m z; \$ h( D" |/ A
}
9 }3 _3 |# f" T' f2 N; S setlinestyle(0,0,3);
. @$ @, x0 ~+ N; k' r, I8 S( y+ _5 N circle(287,246,14);+ ?* `; J. h. i+ m! o
setlinestyle(0,0,3);( r; [! z6 k/ G1 G1 _) X9 X0 d
circle(330,246,14);7 J9 t5 I! T0 W, v+ Q% c0 x' H
delay(50000);6 o% x4 @9 N5 f* n' }% G
line(281,260,281,280);4 o' o3 l8 ~' g; A2 l% g
line(293,260,293,280);9 P. A' C$ _5 B& N2 s
line(322,260,322,280);
n0 g) B% g2 J! ~8 X line(333,260,333,280);
/ J; x; |+ A' S( X2 X0 S# k delay(50000);
3 t. _2 ]% f8 f: i. s" H setlinestyle(0,0,1);
! O- n( d. [: m0 U% z setfillstyle(8,1);
0 i# |' `( Y5 Z" [( P* d circle(281,286,6);
1 z; H# L% ]8 m8 t! U0 ]$ z floodfill(281,286,YELLOW);. U( A! r0 h' ^
setfillstyle(8,2);
" X, L' w7 n( S+ `0 n' B$ V circle(293,286,6);
$ d+ I" Y7 B& D5 K1 t: }7 Q* l2 c% y5 q floodfill(293,286,YELLOW);
, _; b6 z4 t2 K, ?9 U0 ]; N+ v0 ~) Z: E setfillstyle(8,3);
0 r9 B4 A$ h7 i! e. P circle(322,286,6);
6 M+ A2 `. f% | floodfill(322,286,YELLOW);8 r( p, _2 m& x5 A0 k' z
setfillstyle(8,4);6 G+ |# c! V* @7 s
circle(333,286,6);6 l3 i9 |* x9 V
floodfill(333,286,YELLOW);
j' b% N! b: l2 m getch();9 _5 [+ U0 `2 i5 {6 N
closegraph();
1 R9 D& f) w$ H- g# A w}
' r$ F7 Y0 j* @' `" {1 X* _0 B0 R* H
5 W% D) G& t0 c& W6 c |