这是我自己做的一个版本,望斑竹给予指点!!!谢谢) a9 ~4 H7 D+ m
5 n. o I- q$ p6 S3 z7 y
#include! b% E* _8 U" z
#include
2 g: N9 ^- Y$ u; A#include- ?7 k' \6 g1 U" x6 T
#include
3 U: W v- @3 P#define running 1 /*用running 表示进程处于运行态*/1 e$ N( Y; ?4 V. ]
#define aready 2 /*用aready表示进程处于就绪态*/
6 Q5 i0 `5 B5 Q, R#define blocking 3 /*用blocking表示进程处于等待态*/
% @ u* A, L( ^+ ~#define sometime 5 /*用sometime 表示时间片大小*/
- M9 V+ K5 c; e#define n 10 /* 假定系统允许进程个数为10 */
: s; T$ l( E- |* }9 i& O% {4 g) Sstruct1 F+ g/ E! ^ X$ A# a' F. {
{0 Z9 p. ?2 @9 C% v8 A
int name; /*进程标识符*/
5 ^4 l M$ }0 Oint status; /*进程状态*/
# ^1 C" W' \% I8 l& Oint ax, bx, cx,dx; /*进程现场信息,通用寄存器内容*/: T. x5 R* L( A$ F( x
int pc; /*进程现场信息,程序计数器内容*/- q8 w. t6 k6 h+ ~( o8 B
int psw; /*进程现场信息,程序状态字寄存器内容*/5 s H' s, p6 B+ j/ m# z! T9 Z$ _
int next; /*下一个进程控制块的位置*/6 c W4 [$ }' u6 ] z/ G
}pcbarea[n]; /*定义模拟进程控制块区域的数组*/
" [& W! }& s% [3 ?0 w5 l7 P) hint PSW,AX,BX,CX,DX,PC,TIME; /*模拟寄存器*/, W9 T' x6 F3 x* f$ W( `& F, y
int run; /*定义指向正在运行进程的进程控制块的指针*/9 v0 ]: v# v5 P& }$ T' D, U
struct
& {$ G; q4 ]0 ~9 x Q/ m4 a9 q{5 }8 T" c" F' ^9 ?3 ?/ v1 \
int head;3 b+ x `6 h: H k
int tail;# E! z E! w7 n9 O* p2 d
}ready; /*定义指向就绪队列的头指针head和尾指针tail*/8 e2 m6 B/ ?! X; t' U- y+ `5 o
int block; /*定义指向等待队列的指针*/
! A+ q9 V9 a, fint pfree; /*定义指向空闲进程控制块队列的指针*/
$ e4 A2 D8 K& V; r9 g9 ]main(); z2 k8 u D! B3 e! ^# K p! X
{ int gdriver=DETECT,gmode;
6 D5 N8 F. n% A* s int i,x,y;3 @& Z- u6 d& g6 u+ @
for(i=1;i<=n;i++)
5 p+ J! B7 P, Y8 f( W {ready.head=pcbarea.next;}7 b$ L: h6 y$ `
initgraph(&gdriver,&gmode,"");' b* h3 G* H1 K; c8 U
setcolor(YELLOW);
+ y5 L0 }( y" H; |6 S. h9 g for(i=1;i<=4;i++)
/ g# e/ y; q& G$ y { setfillstyle(8,i);
: S+ h# F1 s$ M0 F4 T3 C. w circle(284+13*i,190,6);' N" Q% S4 `2 z! T
floodfill(284+13*i,190,YELLOW);0 o/ F+ ?, i% f
}8 F- @2 [- U9 W* V) J
setlinestyle(0,0,3);
0 e6 N. i) E% D: B6 x) P Y4 ~' J" T% u circle(316,190,25);6 D1 X% Z5 m1 l- H8 a
setcolor(5);
6 n% |: t, t- N9 z9 ~2 c9 P8 u% l* V settextstyle(3,0,4);
2 ^$ s. w0 A& I8 x8 l outtextxy(35,311,"press any key to create objects!"); Y3 J# X/ L e
getch();. J/ X% s7 @, Q3 B% w
setcolor(YELLOW);8 c7 w+ }6 c. }) w, \9 h* d
line(300,215,290,235);
' V3 @7 H3 W5 z5 Z' _+ [5 E/ j line(323,215,333,235);$ u4 T: V/ m' ?5 X' y0 D5 N( f
delay(50000);4 K1 H. a% V8 m% K3 s
setlinestyle(0,0,1);
+ i+ u9 _, [3 V+ H7 S. V% J for(x=1;x<=2;x++)
]4 n t) J6 z, N# Q- C( U' T {setfillstyle(8,x);
* r: E4 j' d2 H# Y circle(267+13*x,246,6);
* P' ~+ ]; t: g) b: f2 r# u0 R floodfill(267+13*x,246,YELLOW);
- Q1 h+ Q# p& Q* [3 f7 q3 Q }
4 {. j x5 P/ T; p# P; x" Z for(y=3;y<=4;y++)
& w, U! V) M6 P3 G Y3 z0 J {setfillstyle(8,y);1 |) P: M$ @8 `& w) e$ P% s- c
circle(285+13*y,246,6);
) r$ j8 Z9 S8 i2 h3 D' y floodfill(285+13*y,246,YELLOW);
. B5 f4 g2 b! [' s3 p y }/ `% u* }1 v# }1 a( Q) V _
setlinestyle(0,0,3);
8 a: r6 v2 [$ D6 D& J8 c6 b circle(287,246,14);& E. R& u. j1 Z3 p
setlinestyle(0,0,3);/ {1 z# @) ~5 U4 [& K7 M$ T2 t# P# o8 ~ M- q
circle(330,246,14);. I. @" p5 q3 g
delay(50000);
' T; I1 F$ L- _/ c4 P( Q# f) [ line(281,260,281,280);
% C3 v. e5 X- C5 V' T' E; k( l: r line(293,260,293,280);3 g$ k. `; S5 E2 P8 K6 [& Z
line(322,260,322,280);
5 |. P. L2 _/ K; ^5 y# y& B line(333,260,333,280);
& }. l5 s$ ?( L) F' M% j: D delay(50000);
# p) k0 s8 B; b6 W7 b setlinestyle(0,0,1);$ T) p* Q0 A! c3 l
setfillstyle(8,1);) s6 O4 H) S. h0 L- R8 v
circle(281,286,6);
. w* M4 x) ~% J- l1 z floodfill(281,286,YELLOW);3 Y1 N( i/ s# `
setfillstyle(8,2);
3 F4 C: d4 Q% a. ^" R+ r circle(293,286,6);
( n; j% v# G) X: A' T floodfill(293,286,YELLOW);
: d( y" T3 m; f9 f# g8 C5 a setfillstyle(8,3);
- R: {0 [+ u# N {' L+ {8 G circle(322,286,6);
# g/ h( G* v7 x3 l, A3 [" O# T floodfill(322,286,YELLOW);
' b4 i8 |! T1 H5 j( x$ s setfillstyle(8,4);
* J! {$ i, ], q4 ^* T circle(333,286,6);
& G; M0 l- h, D7 q6 e$ P# h' j floodfill(333,286,YELLOW);" h x; w# ?; @
getch();
* ~. n; b! z( h0 O closegraph(); y: w l4 y. c( O7 [' a
}( c6 X" M. V0 [+ X& l* _; E
* m% f8 o0 K7 |
9 w% i i$ { _0 ~ |