这是我自己做的一个版本,望斑竹给予指点!!!谢谢* a8 j9 N- B, H) \) r9 A
6 C$ M" L3 [* F4 f2 q
#include
5 V! |+ D' R& W3 L5 `, m#include
' x; R. l! k1 @# }# F, `- Z1 h#include
! m) T, x- [: ~: C, y$ F#include- o( D$ ]; y; j1 S: L
#define running 1 /*用running 表示进程处于运行态*/
3 ?1 g( D# D: ]8 {4 k, U. D3 C. I#define aready 2 /*用aready表示进程处于就绪态*/0 X/ O. V' V1 X8 w
#define blocking 3 /*用blocking表示进程处于等待态*/! d) k! H2 d1 v, v. n) {
#define sometime 5 /*用sometime 表示时间片大小*/
- W6 t" f, ]8 k# D$ D#define n 10 /* 假定系统允许进程个数为10 */ f' |" K8 R. J/ z3 A
struct& b4 O3 A$ ?% \6 _7 `; M
{
! E2 q4 t! t9 j" J, n$ Q) Q, A& Wint name; /*进程标识符*/+ ^: M$ j* h2 w3 J; ^
int status; /*进程状态*/' G$ U* G1 u+ ?5 `9 K9 S- d
int ax, bx, cx,dx; /*进程现场信息,通用寄存器内容*/; K, z. U" |9 p& r5 a: d* U. }
int pc; /*进程现场信息,程序计数器内容*/
0 |6 j( p" J+ w4 V8 A% _- }int psw; /*进程现场信息,程序状态字寄存器内容*/
% y) w2 f) P4 j7 ^: R9 lint next; /*下一个进程控制块的位置*/
5 J+ f5 m& |) ^ z5 P. D/ R2 O}pcbarea[n]; /*定义模拟进程控制块区域的数组*/. n$ P+ L; s0 K4 x( O
int PSW,AX,BX,CX,DX,PC,TIME; /*模拟寄存器*/
# M; M& {2 K# H+ e5 Y% u9 Kint run; /*定义指向正在运行进程的进程控制块的指针*/+ g1 n9 M; B$ _3 M8 z4 X. P4 R
struct
( h' e1 ?9 b( S( y{- q! W: s$ k2 l& K2 S0 y9 X
int head;- Z+ S: e! K6 s j9 G0 p- m
int tail;: C, J' k. S. P( M
}ready; /*定义指向就绪队列的头指针head和尾指针tail*/1 v% Q/ j7 k1 r! I$ X0 S
int block; /*定义指向等待队列的指针*/
/ N' l/ Y3 I1 a" eint pfree; /*定义指向空闲进程控制块队列的指针*/
+ R) T9 O% E5 J, K# omain()2 ]7 Z& V# m8 F7 r& m# m2 R- x; O
{ int gdriver=DETECT,gmode;0 r O: c( A- c6 D3 R: v/ _' \' n* K. Z
int i,x,y;
# R. D+ }( x# B$ O; J for(i=1;i<=n;i++)
, E% l. S% I1 g2 [6 s4 y$ ^4 U6 k {ready.head=pcbarea.next;}: S: l; G7 a; ^, X7 O4 s D
initgraph(&gdriver,&gmode,"");
' L; D" ]& W7 g3 h, g; n' Y* @ setcolor(YELLOW);
5 \+ l6 G. r" A/ s+ J* Z4 ] for(i=1;i<=4;i++) N+ }5 H" z" v* _4 W) \
{ setfillstyle(8,i);; r5 R% f" v7 ]! l4 P* M' q: o
circle(284+13*i,190,6);
. Q/ A, F* ~; n( ]9 Y& M floodfill(284+13*i,190,YELLOW);* R @5 o/ c( y% \; k1 u; h
}* b" x3 s3 J& P- v6 y
setlinestyle(0,0,3);: j \, Z4 M* _2 V5 M9 f' k
circle(316,190,25);
! C2 c1 H7 v# m# D setcolor(5);
; I" C* N) R0 Z3 }* T settextstyle(3,0,4);5 {& L4 U: j3 f" y" E; l: S
outtextxy(35,311,"press any key to create objects!");
, i/ F, k' j5 }7 e; e getch();
+ J+ b5 U2 N' g setcolor(YELLOW);
* W9 p. I1 ]' r2 l- B P line(300,215,290,235);" q' X( C$ r% ~& Q( G
line(323,215,333,235);6 e7 Q; @& H* ^6 [# z% ]
delay(50000);
& L% L2 h+ z. _" q* ~. M* V setlinestyle(0,0,1);
7 ~, C" b" l1 J7 Q2 @5 ~" S for(x=1;x<=2;x++)
- o5 E, s3 f3 q- K" b {setfillstyle(8,x);
; H. w& a5 L. z( [) W! j circle(267+13*x,246,6);, o* S c9 c# N4 d3 V$ o3 p# Q
floodfill(267+13*x,246,YELLOW);* t9 k6 o- X' N& t/ z1 k5 i# ^5 b
}
3 [: r$ T6 ]4 }) V- ^0 q0 } for(y=3;y<=4;y++)! b8 V8 P! F0 n7 A+ j: ^
{setfillstyle(8,y);
' {$ L1 x$ V3 B N4 O2 n circle(285+13*y,246,6);# X! V; S8 t) k! W! i0 |; S
floodfill(285+13*y,246,YELLOW);
) {" M0 z* X4 |" B1 b5 ? }9 N2 A- q3 b9 E
setlinestyle(0,0,3);. i- S: d* O b$ U: {
circle(287,246,14);
/ ? e$ F( W# x' A" v X setlinestyle(0,0,3);6 H; } c+ I! P) E. S9 q
circle(330,246,14); K) g# j* T) ?& f7 L
delay(50000);
1 I: J* G: a- h line(281,260,281,280);
; m0 c' L( |5 s9 S5 m- k line(293,260,293,280);. W/ L+ Q4 l+ D! x5 K% |
line(322,260,322,280);
' ^: W6 c+ S% S3 {5 M+ c9 v5 k* h line(333,260,333,280);
8 z O( j, L& y2 j/ [& f6 B7 K delay(50000);3 G0 w% I8 {+ k( Q2 Z v c0 t( g' E5 }
setlinestyle(0,0,1);. m$ w; p8 d6 F- O- w% u" }# M
setfillstyle(8,1);. B6 Z: n/ \$ k
circle(281,286,6);
^0 V" {- f$ N0 ~' r! q; @) u floodfill(281,286,YELLOW);9 a4 v2 C2 P+ g
setfillstyle(8,2);% y/ }" B& x3 X2 \0 ]6 q
circle(293,286,6);
5 w( {- G" K/ v# s3 s floodfill(293,286,YELLOW);
- z* `& M$ T3 u7 }) P% d- i setfillstyle(8,3);4 t: u. |- n: f8 i" J
circle(322,286,6);- p0 l6 B8 R* i L6 }) [. N: Y
floodfill(322,286,YELLOW);9 K% T7 ~ @ K- ], f; g
setfillstyle(8,4);3 {! S+ Q6 q+ f" T. g
circle(333,286,6);# T$ V& U& ~" W0 P# [- D" w
floodfill(333,286,YELLOW);( P, _ k! T' n
getch();
7 G) K* @9 Y+ ]& Q! }8 f0 }$ T closegraph();, @- w+ M$ C6 l/ f- \+ `( R
}: K; m: x$ {/ d& d* {' }& p/ p2 \" L
. R3 @8 a: \, J! d9 G$ I1 S
8 R2 l) d5 f& m! [- k! }$ G0 [4 Q |