这是我自己做的一个版本,望斑竹给予指点!!!谢谢1 q6 Y+ t9 k4 O0 @3 \
& w3 z. ?! f% Z( J0 [9 n#include
, S; U2 D( P# u5 z5 `#include3 w/ A3 P& T2 P! Y3 O
#include
; Y/ J, A" I6 ]2 Z5 l9 C1 Q' L: Y#include
8 ?. b6 W. y- }. L* t#define running 1 /*用running 表示进程处于运行态*/3 @1 M8 ^. B5 r* S& ~ L
#define aready 2 /*用aready表示进程处于就绪态*/
4 [: X% [4 _" F- ?#define blocking 3 /*用blocking表示进程处于等待态*/. F% j7 P- {- p
#define sometime 5 /*用sometime 表示时间片大小*/, b" Y% W' E7 R# S/ ?+ c
#define n 10 /* 假定系统允许进程个数为10 */
( A8 g: H W" Z& u: R: {. gstruct
- I* B' r8 f2 c& F# S* z& g8 F{) w; p, B1 M9 G! Q% E& i! m
int name; /*进程标识符*/; P4 _9 i: f: t. }
int status; /*进程状态*/! ~. g2 o4 Q: U4 m
int ax, bx, cx,dx; /*进程现场信息,通用寄存器内容*/
' D v7 T, r. q: y& bint pc; /*进程现场信息,程序计数器内容*/
. Y0 u/ u2 X+ l% J* Lint psw; /*进程现场信息,程序状态字寄存器内容*/
' f1 e( f+ l+ uint next; /*下一个进程控制块的位置*/8 ]& ?0 Q$ B* R" v0 A
}pcbarea[n]; /*定义模拟进程控制块区域的数组*/" ]. q- D% o: b# I
int PSW,AX,BX,CX,DX,PC,TIME; /*模拟寄存器*/8 Y) j4 r8 O2 s
int run; /*定义指向正在运行进程的进程控制块的指针*/: }# y& x" S2 f$ {4 T5 U" c
struct6 q) B- B8 {6 ?- Q
{1 R; S0 c9 \7 z* W
int head;
4 F' n; i- Z0 Wint tail;) c& I+ @3 N- H$ O' _ v/ E$ j
}ready; /*定义指向就绪队列的头指针head和尾指针tail*/3 O' W' m' P/ F$ c9 U, A. D, \
int block; /*定义指向等待队列的指针*/3 \3 c- d n: q& E" @$ O
int pfree; /*定义指向空闲进程控制块队列的指针*/
" j \6 H4 w6 cmain()
' r: J/ ]5 Y4 l ?{ int gdriver=DETECT,gmode;
0 m' V' W7 [6 d) G: Q int i,x,y;
2 {, J( Q! t2 X2 a: r$ @ for(i=1;i<=n;i++). N6 J% P6 U2 A) D1 z
{ready.head=pcbarea.next;}+ K% u) Y* G8 v& Z
initgraph(&gdriver,&gmode,"");8 m& U& }7 L0 j# y! h
setcolor(YELLOW);+ {- Y S T4 |6 w
for(i=1;i<=4;i++)7 s9 f. P: m5 c- ?
{ setfillstyle(8,i);
5 z$ I( `; m Z6 N( P) W2 [" Q: Y4 F circle(284+13*i,190,6);) k" f% F M- T9 ]+ j: ~
floodfill(284+13*i,190,YELLOW);
6 I( y" q8 }* Q s; W ?" c$ w }3 H% M& Z, j4 z# m
setlinestyle(0,0,3);
: Y' M' M5 c8 P, m# r- M1 B circle(316,190,25);; r# J5 a; }% Z) P
setcolor(5);
$ [- K, A& E2 ] settextstyle(3,0,4);
9 k* @4 y& `/ ^: v outtextxy(35,311,"press any key to create objects!");
$ q0 u2 z& n, ]# r& D getch();, `1 y! x- |6 y" t$ o* q4 c3 N+ O
setcolor(YELLOW);# T# o! F1 T9 i2 k3 U
line(300,215,290,235);
. q& S6 ~6 K3 _) } J) q line(323,215,333,235);) \' z6 R# {* U/ G( X* I
delay(50000);7 N1 G' @& p+ s( }
setlinestyle(0,0,1);) {4 n1 `% q! u& s# u$ ~% c8 D, c
for(x=1;x<=2;x++)# u8 v7 D) O$ u) w% @' V4 {
{setfillstyle(8,x);8 n8 q0 Y/ E( D6 G
circle(267+13*x,246,6);
" t6 V2 N, g. `4 t t floodfill(267+13*x,246,YELLOW);
2 [0 y' J/ `( q6 r: Y f }
: h4 }" J( {' L; m# [0 z# U$ I( y* Y4 u" ]% n for(y=3;y<=4;y++)6 G" ?4 Q8 Q, s5 Z1 ?( i
{setfillstyle(8,y);. e; ~9 B0 L& _) Y
circle(285+13*y,246,6);
, r4 _* Z1 N- z" J floodfill(285+13*y,246,YELLOW);
6 z4 `3 [0 ^1 J4 o% X }/ w6 }0 J& m% s# e8 s
setlinestyle(0,0,3);
* ]3 @0 T1 q# j, h circle(287,246,14);
$ \4 T& Y+ n$ U! [+ N setlinestyle(0,0,3); q3 Z* o4 M( [: J6 a) L
circle(330,246,14);
3 \8 P; v& d) U! Y0 x* C delay(50000);
$ P; t: E9 ]' [. O* O% q line(281,260,281,280);9 Y$ K/ H2 C8 V
line(293,260,293,280);
! |5 q2 i: c0 I6 W; ? line(322,260,322,280);) S2 M' j! q/ f+ L0 }
line(333,260,333,280);
$ f( @3 V2 N2 B7 J1 \( k$ D delay(50000);+ o* a$ G$ [/ p) X
setlinestyle(0,0,1);
: H$ j% m5 n3 T( X4 D setfillstyle(8,1);6 ^, |+ D4 p! z/ S
circle(281,286,6);
5 L" |, k; |) U4 y/ a" @+ E floodfill(281,286,YELLOW);
# |% V& A6 U$ e" m setfillstyle(8,2);( ?! H3 A. f( n$ ^- O' l; o% P
circle(293,286,6);
" [6 O ~: P1 l& Y floodfill(293,286,YELLOW);, N) I, p$ N% \9 o. u2 R) m% p
setfillstyle(8,3);
" z7 o# t! V! g9 e0 y/ d" X circle(322,286,6);8 U% ?) V7 i. p) @0 R/ k: B8 T
floodfill(322,286,YELLOW);
9 T0 T Y( r( b. B/ d setfillstyle(8,4);
c! r: i0 f% E circle(333,286,6);
# O3 h' Z) ^7 `7 R% L/ G floodfill(333,286,YELLOW);* m5 r# c8 e1 `7 _
getch();
1 h$ A" t8 T2 g, Y% I) [1 n: o; ] closegraph();
I3 e# z0 l! Z}. g; I. _# D7 R! _: D6 m
0 u' `% W" j; P, @6 Y- P' s/ h+ e" q- R
|