这是我自己做的一个版本,望斑竹给予指点!!!谢谢
1 i7 i- l& y) O% H% X
) G/ p6 T: n" Y: a5 R#include
% K. d) v4 h7 x! a8 t5 U#include
9 v6 D: t: z3 t$ ?4 p#include
/ \: F4 r- h4 {" [/ t. T#include
) M d2 Z+ R9 a8 a4 a! x! P& H#define running 1 /*用running 表示进程处于运行态*/
( B+ D% U) z( f$ |, u9 p#define aready 2 /*用aready表示进程处于就绪态*/
, _. b$ Z3 [9 M( s5 ]+ r% d8 L#define blocking 3 /*用blocking表示进程处于等待态*/
" o1 W0 o' k) O2 }#define sometime 5 /*用sometime 表示时间片大小*/
( R, d: l* A( I#define n 10 /* 假定系统允许进程个数为10 */! K2 ~( ~9 o! z8 v5 ]: v* D
struct
, O* N& |1 {4 |, V{" }4 M' i# E& m
int name; /*进程标识符*/
( Q2 \$ n( V1 d, A' K6 ^int status; /*进程状态*/
! p% r( R( j8 ~8 `/ N/ G5 xint ax, bx, cx,dx; /*进程现场信息,通用寄存器内容*/
) W$ G7 I5 K* j% X/ cint pc; /*进程现场信息,程序计数器内容*/3 i, u6 y# Z7 R" ~2 A/ |
int psw; /*进程现场信息,程序状态字寄存器内容*/
# n% G% Z7 B& w, \7 u! [; R8 fint next; /*下一个进程控制块的位置*/. X5 t& t9 A$ ~& d0 q9 j
}pcbarea[n]; /*定义模拟进程控制块区域的数组*/
! O( X( u) P8 Q1 Dint PSW,AX,BX,CX,DX,PC,TIME; /*模拟寄存器*/
, E1 R* O8 r- Q8 f7 z* ?' Bint run; /*定义指向正在运行进程的进程控制块的指针*/. h' }5 a) g$ t
struct
6 l) Y% ~9 ?; g6 s{$ K: L* A# z) M: d: w' c/ b# d1 }
int head;, K+ g. U9 s n2 B) Y- J' b: A0 A
int tail;
0 r4 ]* x! \9 v0 @2 |# p) u# q! z}ready; /*定义指向就绪队列的头指针head和尾指针tail*/2 s! x9 s# l8 M" U% ^8 D
int block; /*定义指向等待队列的指针*/
$ w4 P# k" k4 g4 y; [: Zint pfree; /*定义指向空闲进程控制块队列的指针*/
# \' {; f0 e u# R. ^* P0 ~main()
" s$ ~( w! _- ]' ^{ int gdriver=DETECT,gmode;; U0 }- s1 l( o, ]7 F# @0 B3 q5 E# n
int i,x,y;
! \0 ? Z, C5 Z# I z for(i=1;i<=n;i++)
7 E. J% ^0 [' g9 b i' i; r {ready.head=pcbarea.next;}5 g% u$ E9 `. A- b- B
initgraph(&gdriver,&gmode,"");
( C; v$ E6 A2 e. S setcolor(YELLOW);
7 U' [- o6 {* g2 }% q! g. U; D3 D for(i=1;i<=4;i++)
& R1 A- k0 e( @ { setfillstyle(8,i);
. F7 F2 e0 X# B( ]4 C circle(284+13*i,190,6);, m9 _2 M; w0 q- U5 ^ ]
floodfill(284+13*i,190,YELLOW);
2 ?8 {$ E" q6 z. j, c/ j, W }
2 l3 l# L* [* w/ `8 `$ } setlinestyle(0,0,3);/ m# [% s9 g3 |* E
circle(316,190,25);3 {" h$ q' Z r# P& q" g
setcolor(5);
1 P: U6 \3 d6 ]8 `9 m7 e( N; o settextstyle(3,0,4);+ ?! |, a; P4 e) w+ o
outtextxy(35,311,"press any key to create objects!");
5 Q9 z+ J* v4 e# Y1 j, S getch();! M0 @2 L3 W8 @, f- S+ `& V
setcolor(YELLOW);
" r8 @7 q- C: H line(300,215,290,235);3 k# e8 h0 c& O0 F2 r
line(323,215,333,235);( D9 F; L3 `5 P
delay(50000);
& S- E* g) C1 W setlinestyle(0,0,1);
% P7 ~' M: q& }. ~5 ~' K( R for(x=1;x<=2;x++)( l2 k" ]4 D O: V
{setfillstyle(8,x); y, I A$ J4 G% u# h3 `- J5 {
circle(267+13*x,246,6);
8 X. y/ f/ u% V$ t( p) N0 P floodfill(267+13*x,246,YELLOW);/ S) x4 N1 ~& G
}5 \- r- z9 Q9 Z* w9 `+ N" J
for(y=3;y<=4;y++)7 M; |1 |3 ?9 ?; U
{setfillstyle(8,y);9 d j& S& @ `# j
circle(285+13*y,246,6);" Z. M% s1 U" c* E
floodfill(285+13*y,246,YELLOW);
' K, f( R6 u' d% P }
: e4 h6 v3 m& x9 n* w. E4 Y setlinestyle(0,0,3);5 |' _: {4 x+ ^1 ~6 s( G$ Q
circle(287,246,14);
6 c0 A4 Y, ~. A& R setlinestyle(0,0,3);$ d- h3 z2 B3 p9 O/ O- E5 D
circle(330,246,14);
3 }2 E. _8 S3 N8 M; S; a delay(50000);
9 i. K, v! F% N8 T+ @* K' ^ line(281,260,281,280);
) R f, g7 e& ?: u* `' D' g line(293,260,293,280);
8 b5 O9 x8 [1 b. |) j! Y# @) \ line(322,260,322,280);8 }4 Y" a. `: W0 f- d# _0 ?
line(333,260,333,280);) u3 M1 J8 d( N# H$ B1 j) a3 v$ P7 X
delay(50000);) B# V n: U7 D# w: y# ~
setlinestyle(0,0,1);% H3 y6 s9 s/ x0 j7 P3 e2 ~
setfillstyle(8,1);- g3 [! l- _ }. {1 s4 G
circle(281,286,6);
+ M% J. M1 x7 h floodfill(281,286,YELLOW);# Q8 A' R" k; F- A1 m+ W5 z$ p$ [
setfillstyle(8,2);
7 y) S8 |8 R5 p& b8 s* y5 W. g circle(293,286,6);
$ K S* _ O- n6 ]: r# ? floodfill(293,286,YELLOW);
6 t6 {2 H, z* i. I5 V6 f8 M# R7 { setfillstyle(8,3);
9 o7 b% Q M) {: O! w" t$ x | circle(322,286,6);& Y$ y0 L y9 n0 `3 q! f
floodfill(322,286,YELLOW);9 @# X' t; h( q0 m) {% V2 l
setfillstyle(8,4);0 h. {/ y8 w1 w& @: e6 y t8 E
circle(333,286,6);
/ v% x% ?* a* m6 V* v floodfill(333,286,YELLOW);) H y: Y: Y; d# g# \
getch();. G7 a" _2 w, N" B
closegraph();! L% u: o, ^4 D3 N% k
}" P6 g8 q5 p# T4 g2 H+ v
6 j3 y( R4 m5 `( q
) T1 I9 A0 y' q2 r) s |