这是我自己做的一个版本,望斑竹给予指点!!!谢谢
' O3 [: u+ K1 U8 C6 y
% c* J2 f; c: i% n% m5 x' H: L#include& j4 @5 U) [5 b3 H6 v
#include
* t# @2 u; P; a' L#include
, |: {2 ?9 |+ o( Q#include
" {4 u) w7 S/ W1 r/ Y7 f2 x#define running 1 /*用running 表示进程处于运行态*/
0 N4 N6 O: H6 W: S- t& @: N#define aready 2 /*用aready表示进程处于就绪态*/
4 k- i& M" _$ R7 W#define blocking 3 /*用blocking表示进程处于等待态*/) ^& n6 |$ B+ h/ m9 c- S
#define sometime 5 /*用sometime 表示时间片大小*/1 @0 f G$ a1 M$ Z. F" B1 Z/ o1 G5 _
#define n 10 /* 假定系统允许进程个数为10 */
: O/ ?- J3 C$ ~% {% [struct8 f% R/ H3 i' S7 `; v; i
{2 {: S2 l! v% ?; s
int name; /*进程标识符*/
& C: ]- j! O' ]9 F9 aint status; /*进程状态*/. K) u. d6 W$ B3 z! k
int ax, bx, cx,dx; /*进程现场信息,通用寄存器内容*/
+ m, c6 x' f+ Q; X3 j8 `1 Y- ]int pc; /*进程现场信息,程序计数器内容*/
2 Y" D' z$ \( ]" V3 p9 F% `int psw; /*进程现场信息,程序状态字寄存器内容*/
0 S; {! g4 x* i" E+ Yint next; /*下一个进程控制块的位置*/
: t2 D: w! Z. h5 O! a}pcbarea[n]; /*定义模拟进程控制块区域的数组*/: z, [( t! o' o" o
int PSW,AX,BX,CX,DX,PC,TIME; /*模拟寄存器*/4 v! k4 @) ~% y7 `+ M
int run; /*定义指向正在运行进程的进程控制块的指针*/8 e8 C% o- O% Q J' H/ ^8 d
struct
1 }5 z: K1 _: y3 d{3 `6 t. K. k8 C) C9 j, m+ k
int head;9 N8 E+ m( ^& j& s
int tail;
/ B! v4 d& v3 t) y$ E) I' V}ready; /*定义指向就绪队列的头指针head和尾指针tail*/
2 ^% `( }1 U5 }0 l3 ]( r: jint block; /*定义指向等待队列的指针*/
# k( D7 y9 B f7 u8 o4 O- ?: _int pfree; /*定义指向空闲进程控制块队列的指针*/% v) x3 J- I) s: |9 n8 b
main()! l5 Z$ b$ [+ u- `1 J
{ int gdriver=DETECT,gmode;; Y! i+ D& g# U$ Q7 H r
int i,x,y;$ v; T0 E$ \) G
for(i=1;i<=n;i++)4 r1 L, m( L: A" r
{ready.head=pcbarea.next;}
. [3 {) e8 n4 c( q# c# m initgraph(&gdriver,&gmode,"");
* O0 x" T# I6 |0 B0 ~ setcolor(YELLOW);! v1 S$ s+ G, g' X7 `
for(i=1;i<=4;i++)
5 a4 w3 `. i; K- r" K; P2 i5 Z1 K { setfillstyle(8,i);4 ]7 A0 d& C0 \1 _
circle(284+13*i,190,6);+ ~; h2 e9 F, m9 c B
floodfill(284+13*i,190,YELLOW);5 Z6 L3 m8 T' y F8 P3 H. F
}2 V# V; f: x( x6 k6 T4 N" t A$ i: I
setlinestyle(0,0,3);- Y9 p7 b H. V& O% f3 O
circle(316,190,25);3 _/ p+ y. ~5 L7 w' g4 Y
setcolor(5);
% ] x M- M: ~, {9 l( Z settextstyle(3,0,4);
5 E- e/ E. N. ~# e! D( x outtextxy(35,311,"press any key to create objects!");% v6 [, l2 r4 _0 H
getch();
/ d- v* ^* Y$ ?$ H% R- O setcolor(YELLOW);: U3 r$ ]: c1 l' W! _
line(300,215,290,235);( S1 w- @1 @& I
line(323,215,333,235);2 p" }5 A) O1 D6 `& i
delay(50000);3 t) [/ o7 U! s$ Q, T
setlinestyle(0,0,1);+ B% C8 R: l5 W T' k
for(x=1;x<=2;x++)% [- Z- O' _/ v
{setfillstyle(8,x);# L- b+ L4 ? r" c" v
circle(267+13*x,246,6);0 c/ E2 J* R' l& M; m3 E8 T! o- R
floodfill(267+13*x,246,YELLOW);4 v: X0 w3 ^! L1 K' ]
}. d" L. G) f- J
for(y=3;y<=4;y++)
5 ]+ z( f6 |% |! H, u! z. n; Y {setfillstyle(8,y);
$ d4 b2 g$ m- z3 O& b circle(285+13*y,246,6);4 a h2 ~* F+ X6 j4 p* C# d0 v
floodfill(285+13*y,246,YELLOW);& M& r' S* [ t5 J2 P# B
}1 g8 C+ m& x1 z7 u
setlinestyle(0,0,3);' S0 F9 u9 E* }+ U4 m
circle(287,246,14);+ a/ l# @- s# r
setlinestyle(0,0,3);
5 s' j) [! l) y( m* x) v- Z0 g circle(330,246,14);$ ?; s g8 y! T4 ^: s- D% ^$ K& E- _
delay(50000);
5 E" `5 O* t8 I& t7 z$ p line(281,260,281,280);
4 C$ R( G7 ?# o- F2 _7 }+ V1 O line(293,260,293,280);) z- C7 n B! c6 r% w M8 Z
line(322,260,322,280);
; z8 k& M" x& v# b% O. v9 d line(333,260,333,280); E: c' p! o+ d
delay(50000);$ R; o4 x1 I( Y1 w
setlinestyle(0,0,1);
( ]4 U& G$ ]( d6 c4 o9 N setfillstyle(8,1);& @# n. T' m2 [4 W4 i
circle(281,286,6);
! b8 N1 x, A- O! L, }6 e floodfill(281,286,YELLOW);
8 \' n. y. g! U. d2 U- g setfillstyle(8,2);
3 {6 `+ x/ Z( U- F$ v5 s" ? circle(293,286,6);, B7 T% f6 [, I- b* F+ O0 S& X
floodfill(293,286,YELLOW);
% q. V$ `$ c% d8 O; | setfillstyle(8,3);8 i, X: T- r- j) a" W* d
circle(322,286,6);6 v2 C7 s9 {3 I# E" D( t+ }+ }, w
floodfill(322,286,YELLOW);& `5 x& }0 r3 r; M$ t) r% {/ L
setfillstyle(8,4);
" M; ^* e: h8 d3 Z( z% Y$ j circle(333,286,6);- B3 s+ K3 F+ u0 e
floodfill(333,286,YELLOW);, f6 a# H- V& Q% s( y
getch();. S: W8 X$ n! _6 `9 E. r1 d
closegraph();) E1 ^ N& T! w
}
0 k! d0 z& @2 _ u, ]9 {# t* k C
" E6 k. L; h) F( o" t: N; ~' M: U" T |