这是我自己做的一个版本,望斑竹给予指点!!!谢谢4 U8 S) g7 I3 q5 c1 |2 K7 R( i
' e) c+ Q& { y+ e9 H8 F# F4 R#include* r5 v' ^8 g; F/ z9 C
#include: v5 X9 r- f6 Y( u7 P* y) x# d. o/ N
#include( I# a! i$ w1 \- q( d, S3 {1 E
#include
$ C( G' n/ ` ]% {5 x5 S#define running 1 /*用running 表示进程处于运行态*/
! x, f" U' A$ U( J#define aready 2 /*用aready表示进程处于就绪态*/+ y# W+ y7 I. P3 k
#define blocking 3 /*用blocking表示进程处于等待态*/
# h$ l! {$ F1 \7 m#define sometime 5 /*用sometime 表示时间片大小*/" g Q, h* N+ A3 |2 R
#define n 10 /* 假定系统允许进程个数为10 */1 h( Q& O5 O. e
struct/ P2 H {1 ~* F' |, [
{7 p# q1 q9 O d, Q; D
int name; /*进程标识符*/
) Y! i- \5 K5 G# ?/ W6 fint status; /*进程状态*/
1 J. g9 k# o# p6 N! bint ax, bx, cx,dx; /*进程现场信息,通用寄存器内容*/
# v0 h5 ?& k4 A3 j" A/ q+ f6 aint pc; /*进程现场信息,程序计数器内容*/
( \! {+ j/ N dint psw; /*进程现场信息,程序状态字寄存器内容*/
3 @3 ^7 @" K& rint next; /*下一个进程控制块的位置*/' z# p1 t! x1 f+ d! h
}pcbarea[n]; /*定义模拟进程控制块区域的数组*/6 ?+ j3 b; g: b8 r, B
int PSW,AX,BX,CX,DX,PC,TIME; /*模拟寄存器*/ v, D/ K! K# G3 ` C
int run; /*定义指向正在运行进程的进程控制块的指针*/
! Q+ Z6 T+ C1 H- g9 U, Wstruct( t* F4 w t7 g o/ {. \- }. |/ P
{
" X( }& Z3 f' {int head;
$ E9 Q! v9 \9 o; _. o: f, |9 t+ W1 oint tail;
( ^' l5 i% a7 w) H/ z}ready; /*定义指向就绪队列的头指针head和尾指针tail*/
. t4 }% n" r5 G1 g+ Jint block; /*定义指向等待队列的指针*/
7 h$ H5 S6 H4 u/ P3 Z" ~int pfree; /*定义指向空闲进程控制块队列的指针*/7 k. j" [; `0 N' {6 Z# H
main()6 E8 \1 W& o5 c: G* ]3 C" P
{ int gdriver=DETECT,gmode;
) g+ p# ~7 M9 E int i,x,y;
" b$ \& O. Q: y for(i=1;i<=n;i++)6 h# h' m* Z$ t; p( J) n( r
{ready.head=pcbarea.next;}& ]$ L- ~, h' W. [! p0 ~
initgraph(&gdriver,&gmode,"");
3 L4 h2 {- i% z3 W setcolor(YELLOW);
e4 B2 u1 Z, F, [, h, j! E# D. } for(i=1;i<=4;i++)
$ V3 w% V8 e/ l0 p! S) G { setfillstyle(8,i);! B# j8 o1 k8 K: |
circle(284+13*i,190,6);
9 W$ x# V+ g7 u- ^3 j) }: j5 O floodfill(284+13*i,190,YELLOW);
/ l( c- u( w( N$ X* S! N/ d s }
3 J8 f3 Q( j$ a% X' k setlinestyle(0,0,3);2 q( Y5 P# ]8 G# Y' D) X' _# M* J
circle(316,190,25);( L* S& S, Q9 q) N& Y# T
setcolor(5);. m! y* e0 Y2 b+ B
settextstyle(3,0,4);
) ] G, I% y$ F6 S outtextxy(35,311,"press any key to create objects!");+ b9 z2 V4 N+ \0 Z2 c5 |& H
getch();
0 B1 a3 J% j8 l setcolor(YELLOW);: W/ q" L+ e, z6 h
line(300,215,290,235);
1 S2 ^3 Q3 }5 c line(323,215,333,235); _0 y' ~# |# C6 P
delay(50000);( ^! X+ X9 _7 {" j2 n
setlinestyle(0,0,1);; r2 ~* G; @% S$ K% r ? m' t
for(x=1;x<=2;x++)
$ J: E3 J* m# S" g1 o# l; J5 t0 G/ L {setfillstyle(8,x);
4 B2 {- e" R( h- l+ U& ? circle(267+13*x,246,6);( g" u: p# K; V& s; `/ }
floodfill(267+13*x,246,YELLOW);! ~% a I) A. |+ b e' x
}
+ l( E& S, k4 S# Q1 O k7 ` for(y=3;y<=4;y++)
4 a2 D9 x( u9 Y# ^" u {setfillstyle(8,y);0 `9 x8 x, u( U$ ?
circle(285+13*y,246,6);1 H4 a. ~) L& A8 M5 l
floodfill(285+13*y,246,YELLOW);
0 l( z; N) E0 \# h% m }! o7 E* {" ~% i2 v {
setlinestyle(0,0,3);. K4 N/ y* G! }) h% D' }: ~+ O
circle(287,246,14);7 s, @% m# `+ b
setlinestyle(0,0,3);: i: h9 ^0 U( u1 ~- C" h( v7 L3 i
circle(330,246,14);4 H P( s0 G0 S9 L8 T
delay(50000);& _( i' z: }' _0 P3 W
line(281,260,281,280);. T# J2 j( E( Z+ z
line(293,260,293,280);( F6 |' L/ |3 [
line(322,260,322,280);6 N' |/ k4 v2 J/ b3 y& [: K3 l
line(333,260,333,280);
1 k' S( @2 R$ ~3 ~4 {; _ delay(50000);
( N2 s2 v0 Y# @5 s4 \! e- ]8 p setlinestyle(0,0,1);, E5 C- P' N2 | D9 e7 d5 O
setfillstyle(8,1);1 N- m) ^- P7 ~' ?* H
circle(281,286,6);
1 V+ j5 L6 E8 a floodfill(281,286,YELLOW);. Z8 O' L; [. m$ s
setfillstyle(8,2);
2 j( p0 _- z- f: p P* H& E circle(293,286,6);! W3 t# f, p+ \' h: i5 A1 P# h
floodfill(293,286,YELLOW);; } L& b) ]6 `7 `4 A) N
setfillstyle(8,3);& m; i- ^+ @. C0 ?- b* |. b: c
circle(322,286,6);
' w5 t7 o, ^; t7 r: ` floodfill(322,286,YELLOW);
) d1 X( {: n: F3 i) P, I setfillstyle(8,4);
, g8 f. g7 A: Z5 ] circle(333,286,6);7 C( V( E) f6 M* O4 g
floodfill(333,286,YELLOW);
m$ }% f& N2 e* U; C getch();
5 D! M. C7 o- k) _3 P# q% A/ V closegraph();$ v- P; ]( N' L6 ^" z5 p$ Z
}
% |1 f5 N6 b7 ^2 f) i- H( D7 D: |" o! X; t5 L
- `% p2 }1 h. \& d1 F8 g% C( ^
|