这是我自己做的一个版本,望斑竹给予指点!!!谢谢# W) t& K& E5 S* U0 N" ]
9 I1 j7 A1 B0 O4 T4 ^#include- ?4 d( [+ F& K6 X
#include
' n: K1 F& c8 y#include8 T9 }$ {- Q6 X9 p( _
#include
. i% x+ ~6 N0 W# e0 A1 w#define running 1 /*用running 表示进程处于运行态*/" I. x+ R+ P r% z/ G
#define aready 2 /*用aready表示进程处于就绪态*/) [5 [5 E8 Z5 J& T A$ w; L5 b5 d
#define blocking 3 /*用blocking表示进程处于等待态*/
# M0 ?- |& n( i2 B) s( m#define sometime 5 /*用sometime 表示时间片大小*/: o- u6 h& {1 a/ e
#define n 10 /* 假定系统允许进程个数为10 */
0 A; `/ J4 ^" `( @* |1 N9 bstruct3 R9 d$ Y: n5 `" n5 [6 H
{$ ^# Q x8 }! Q/ t3 j7 r
int name; /*进程标识符*/
! R1 X# w/ E2 w2 L# _" t8 nint status; /*进程状态*/) ?% b; v$ E% {# B( P! |
int ax, bx, cx,dx; /*进程现场信息,通用寄存器内容*/
! ]5 D/ c$ R' h; z. sint pc; /*进程现场信息,程序计数器内容*/! e/ k' m2 q3 \2 u3 y$ G. F' x
int psw; /*进程现场信息,程序状态字寄存器内容*/
* z, m, n2 z0 J, U2 C# i3 \4 yint next; /*下一个进程控制块的位置*/
. m: H; B+ ^+ ~/ v8 X5 f1 U8 r3 G6 _}pcbarea[n]; /*定义模拟进程控制块区域的数组*/
# M9 I& L8 H7 U/ W( O& fint PSW,AX,BX,CX,DX,PC,TIME; /*模拟寄存器*/
) h6 f5 F4 t3 Q, z) ?. @% Lint run; /*定义指向正在运行进程的进程控制块的指针*/- w) P/ \9 O# y# t9 H, o" h
struct3 k1 E0 w# Q- c7 v
{
4 ]$ |% w4 K% w0 R* Dint head;
- d2 r5 G5 r& Hint tail;1 z- Z# a1 {3 a5 W. Y
}ready; /*定义指向就绪队列的头指针head和尾指针tail*/- G4 j$ s0 D9 |6 h" f" y3 o/ s f
int block; /*定义指向等待队列的指针*/& Q& V. [4 a: A/ _
int pfree; /*定义指向空闲进程控制块队列的指针*/' J" ~# [' A8 n: g
main()
8 ^! h. K! ]# G{ int gdriver=DETECT,gmode;
: w" j) z5 g/ G int i,x,y;
+ r$ r* P& G8 F3 Q/ H for(i=1;i<=n;i++)& T9 p' ^0 l9 f: f
{ready.head=pcbarea.next;}/ C5 r, _& z0 y: e4 E
initgraph(&gdriver,&gmode,"");: Z. ?! v* c1 o2 p
setcolor(YELLOW);1 s6 q: }6 o- m: ]5 d
for(i=1;i<=4;i++)
# E5 x0 ?9 W4 `! Z3 i/ u8 x% i* Y { setfillstyle(8,i);
! u B L0 k9 P' |+ {/ `5 C: G circle(284+13*i,190,6);6 Y. P+ P5 u; b" B
floodfill(284+13*i,190,YELLOW);, m O& s4 W6 W/ D6 j' f
}0 i, K/ U* J& J* c1 K, w) T) c
setlinestyle(0,0,3);. }, k: U& @# x9 p% P
circle(316,190,25);: [! y% `. |% N1 K) A
setcolor(5);$ Q$ d+ e7 W' [* h7 ]
settextstyle(3,0,4);
/ Y( {7 {. t, r! S+ G) K' k outtextxy(35,311,"press any key to create objects!");) H+ L& s( N; u8 m
getch();
3 v7 ^% h Z1 l/ b. f setcolor(YELLOW);
! O0 G9 v9 H' x line(300,215,290,235);
1 @( C5 ], R: F7 Q line(323,215,333,235);
1 c8 l( ~- [9 V. J5 X3 ? delay(50000);; b# q* b! q' C( {! @; j
setlinestyle(0,0,1);: a/ B8 r- D% M0 T% S" W# \. o
for(x=1;x<=2;x++)
3 @. u& h2 j3 o4 H' {! @! ~ {setfillstyle(8,x);' p# ? |- s8 g! A8 O3 `. p
circle(267+13*x,246,6);
0 \ u/ j. N6 A- k5 P: X$ q. J9 i floodfill(267+13*x,246,YELLOW);/ m, e: z3 L. ~; |; r- [: N9 f
}
' H% I% S- L5 q- p% U* T3 r for(y=3;y<=4;y++)
7 d0 d U6 t+ [7 i {setfillstyle(8,y);) G8 ^) W4 v5 r F6 b. u
circle(285+13*y,246,6);
9 h8 d/ @9 B# `3 D) X floodfill(285+13*y,246,YELLOW);
# S( G. o6 W$ D3 w9 q% R }
; o) r* h9 S5 p2 A6 W setlinestyle(0,0,3);& X6 O, J& R* h0 k' @9 _
circle(287,246,14);5 ]0 f4 y5 h0 } ]
setlinestyle(0,0,3);4 @9 u( I" I# z9 P) g# y" {
circle(330,246,14);2 |9 Z$ G: p& g5 O& d
delay(50000);% [: C2 B) O2 l2 m% \3 t, |
line(281,260,281,280);
+ }3 A4 O0 |/ K+ A) i& s' t# k line(293,260,293,280);5 a0 o- Z v2 v2 ^9 H0 _+ P+ F
line(322,260,322,280);
! O( s) E8 ?' y$ y% [: o5 r line(333,260,333,280);% d* H" S, ~: \& h2 S, [$ }
delay(50000);4 N( }, c4 H* l* g7 d! @/ j. w
setlinestyle(0,0,1);
6 P3 {; y, b7 O3 r/ u setfillstyle(8,1);
2 l! v2 N+ l5 o* ~) d circle(281,286,6);
" O7 H. n2 Q4 a% ^% i8 j2 y. y; V floodfill(281,286,YELLOW);
@2 y ]) [2 X, T e- P G setfillstyle(8,2);
& J! M6 U4 o9 F N circle(293,286,6);$ j0 j& D0 ~* D
floodfill(293,286,YELLOW);
' J3 C3 D; r* e% C setfillstyle(8,3);/ J7 {4 `$ T" S" V
circle(322,286,6);
6 e2 W. ]: z7 c! D7 C floodfill(322,286,YELLOW);
# P6 b9 h! t% Z) H, g setfillstyle(8,4);
% r3 j# @) f) ^' w& _ circle(333,286,6);8 l1 [* }& \& V, A( {
floodfill(333,286,YELLOW);
& T; r/ x5 |; q9 h/ G getch();
6 C- c' I$ b1 [4 h closegraph();
# m: T! w, J8 T2 |0 s% L}
6 K* B: P/ i$ G' v0 f1 r# g; Y/ e7 s5 Q( A/ H6 _
' H9 W( o4 c- q4 ]
|