下沙论坛

 找回密码
 注册论坛(EC通行证)

用新浪微博连接

一步搞定

QQ登录

QQ登录

下沙大学生网QQ群8(千人群)
群号:6490324 ,验证:下沙大学生网。
用手机发布本地信息严禁群发,各种宣传贴请发表在下沙信息版块有问必答,欢迎提问 提升会员等级,助你宣传
新会员必读 大学生的论坛下沙新生必读下沙币获得方法及使用
查看: 6029|回复: 27
打印 上一主题 下一主题

菜鸟请教个为位高手一个关于进程代码的编写!

[复制链接]
towny 该用户已被删除
跳转到指定楼层
1
发表于 2003-10-20 12:59:00 | 只看该作者 回帖奖励 |正序浏览 |阅读模式
create()  创建一个进程
4 W" E) ~  o! E: H7 z! }# ^要求:1 用c语言编写
- l: K! \1 c* G6 q         2 程序+PCB(ID的内外优先权,申请资源)# Q" T; d- F# i  h
只需做进程中”产生“这一步。
; k* }: c" d: R+ w% d; C以下是做了3分之1的范例:
5 D4 P! M# f, r) v2 C( L: c1 E#include "stdio.h" : M/ K$ w, e- l+ H4 a# W: l0 @
#define running 1 /*用running 表示进程处于运行态*/ % @9 U3 I3 i' k$ r
#define aready 2 /*用aready表示进程处于就绪态*/ 7 ^6 ~* w/ W5 {
#define blocking 3 /*用blocking表示进程处于等待态*/ , v- h' v; G4 \3 |' ?
#define sometime 5 /*用sometime 表示时间片大小*/
5 x8 t' V8 e+ ]& {1 ~#define n 10 /* 假定系统允许进程个数为10 */ - n5 D4 B1 ?  C5 }7 E1 Y

0 ~4 m2 N, K  f& P  Z9 x& ustruct
  z6 o( t& D8 A" B9 n8 U+ d{
* \5 `8 k2 k: ?int name; /*进程标识符*/ / v; v: R& Q6 [- I- v; h
int status; /*进程状态*/ ; I. L# u$ h7 D, I
int ax, bx, cx,dx; /*进程现场信息,通用寄存器内容*/ 7 U) @- t. y& p- x
int pc; /*进程现场信息,程序计数器内容*/
/ W* s% j( D: k& c7 C+ I+ F; hint psw; /*进程现场信息,程序状态字寄存器内容*/ ; L( ]9 {& Y+ A, K' d
int next; /*下一个进程控制块的位置*/ 3 e. {9 J% G4 V! g
}pcbarea[n]; /*定义模拟进程控制块区域的数组*/ 4 O6 `- Z, y+ \# Q9 B
/ o, a- J- L. {9 O
int PSW,AX,BX,CX,DX,PC,TIME; /*模拟寄存器*/
5 f4 O7 ^6 b$ ]7 r# X* x/ G$ a- j, x% l5 ~
int run; /*定义指向正在运行进程的进程控制块的指针*/
; ^2 y, Q" k. h0 Istruct
0 M1 L- R9 h$ V" V4 _: \6 B{
$ w# M+ u( x. U3 h7 F2 n0 Hint head;
1 s! K) M+ K' y. z- w# ?: oint tail; 1 G0 f: [, H3 V  Y9 J! B3 W" G% F
}ready; /*定义指向就绪队列的头指针head和尾指针tail*/ + `; R. _/ ]- a
int block; /*定义指向等待队列的指针*/
" S* \' O; x0 Oint pfree; /*定义指向空闲进程控制块队列的指针*/3 W! T+ M4 V9 ]5 Z. ~9 f

+ \% U0 m5 Z' a, c' A麻烦各位高手了,望帮忙解决一下,急啊!~~!!!!![em00]
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享分享 顶 踩 转发到微博
  • TA的每日心情
    无聊
    2015-1-16 14:36
  • 签到天数: 3 天

    [LV.2]偶尔看看I

    28
    发表于 2003-12-30 20:24:00 | 只看该作者
    空的。http://www.bb1459.com/beibei1.htm是你的主页?/ \  n0 I+ q) D3 n/ ?
    以下是引用andycl在2003-12-22 22:35:00的发言:
    8 g* I# n7 s* v! H
      ]0 L. Z; T1 s
    ; `+ b$ n. ?6 q! m; o9 [. X6 g  W www.bb1459.com% R: S5 r3 W' \9 V
    3 ~( V* X* w8 X3 L: k

    6 u3 Y* j# k6 R: u' C1 r+ R( ~
    [此贴子已经被作者于2003-12-22 22:43:33编辑过]
    : h0 K* D4 k( G

    该用户从未签到

    27
    发表于 2003-12-22 22:35:00 | 只看该作者
    - X: _# a; g6 Z& @# Q: {6 ?
    ) G% I; u1 F: {* e% r
      M$ D" Q9 {  k
    www.bb1459.com! d3 k" i+ M( o( ?

    $ n6 |7 x2 k( Y& B6 p  z- C7 H) G$ E& [3 E) d% f& ^$ n
    [此贴子已经被作者于2003-12-22 22:43:33编辑过]

    ( g8 H: O% \" w  F( R! }$ P

    该用户从未签到

    26
    发表于 2003-12-8 21:03:00 | 只看该作者
    想学好编程,看了书以后就拼命的去看代码,网上找,然后不懂查书,查资料,自己试着写代码,就会发现,哎呀,我怎么也成高手了。
    1 b8 I$ T% `9 t' j' I2 J声明:本人菜鸟
    bigfoot 该用户已被删除
    25
    发表于 2003-10-31 22:36:00 | 只看该作者
    我感到楼主有把课堂作业拿到这里请人代劳之嫌,嘿嘿
  • TA的每日心情
    奋斗
    2015-9-17 00:58
  • 签到天数: 1 天

    [LV.1]初来乍到

    24
    发表于 2003-10-28 21:20:00 | 只看该作者
    不是吧,我好心帮你思考,花费时间,我哪里伤害你??
    towny 该用户已被删除
    23
     楼主| 发表于 2003-10-28 20:07:00 | 只看该作者
    嘿嘿!!. d/ C4 \: B) V$ c3 L
    好向是你们说话伤人在先啊!!
    8 S! M; Y( O" y) P0 L' u# y' O' @我只是以牙还牙而已罢!!
  • TA的每日心情
    奋斗
    2015-9-17 00:58
  • 签到天数: 1 天

    [LV.1]初来乍到

    22
    发表于 2003-10-27 13:29:00 | 只看该作者
    由于我没有TC(现在开发都在用VC),所以你程序我也没有去编译和仔细看过,语法或者逻辑问题统统也就忽略了。: S3 T$ H! _5 K3 T; b' ]* b* ~
    5 g4 [! k% ~0 s8 O1 o
    另外欢迎侮辱我,但是不要侮辱这个版块 ok?
    - A/ T$ X- l# I- \* u$ P: q这里毕竟来的大都是初学的人,你侮辱这里不就是在侮辱他们?
    3 s0 g! j" W) c4 t, F你以后水平真的很强了,那么我想就不会怎么急噪了,生怕别人不知道你很牛了。
    " W) f) R& v, S) N5 K1 t2 j( R% t
    [此贴子已经被作者于2003-10-27 13:32:55编辑过]

    1 ^- ~" @' F. c/ S
  • TA的每日心情
    奋斗
    2015-9-17 00:58
  • 签到天数: 1 天

    [LV.1]初来乍到

    21
    发表于 2003-10-27 13:27:00 | 只看该作者
    你学习的是操作系统还是炸药系统?是吃了火药吗?  L- ^3 L, [, z9 E" i- |
    那么在这里这么样的叫嚷到底是为了什么呢?
    # ^; {0 c1 i. n5 H/ o代码也贴出来了,大家也看了,然后要我怎么样?
    8 K7 p* x3 _- j说:“哇!好强的代码!”?我想你自己都会起鸡皮疙瘩吧?2 C7 s& G6 e1 Y! i3 T
    难道我欠了你钱五年没有给你利息?还是我欠了你什么?+ k8 S  v1 _& |8 K7 A

    . \7 Y, O; \+ k, S1 y# E1 }$ h另外说实话,你的这段程序模拟了最基本的进程创建,同时并没有考虑到更深的东西,看你的tcb的结构就知道了(古老的教学tcb),建议去看看linux的代码,看看那里都为进程的正常运行都准备了什么,如果你不管进程是要运行东西的,只管能够建立和灭亡,那么就到此为止就行了。另外能说什么呢?难道说你在等待allfish的时候每次设置中断函数 setvect(8,old_int8); 比较浪费?好象没有什么意思。因为你程序的目的就是能跑完,那么现在应该是能跑完了,那么就结了啊。  n! l4 k- Q9 g! J$ n/ B# ^
    [此贴子已经被作者于2003-10-28 7:59:52编辑过]
    ' U: \( [  w5 \8 Q% p  t' f# ~
    towny 该用户已被删除
    20
     楼主| 发表于 2003-10-27 11:58:00 | 只看该作者
    我不想灌水,也根本不想在这样的版块浪费时间!!
    towny 该用户已被删除
    19
     楼主| 发表于 2003-10-27 11:56:00 | 只看该作者
    完成了你们看吧! 2 d9 O, k2 t3 [! ] . J/ ~. W8 s' ]$ F' F#include " q: l: Y# Y B #include * g0 ^( H6 t. l% H+ I #include 4 }, F$ K/ k0 A0 r#define GET_INDOS 0x34 ! }% }* I0 {: e/ ^9 e#define GET_CRIT_ERR 0x5d06+ y0 t( o6 l5 S2 C( C3 ` #define FINISHED 0 , J |- y) a+ Z9 ?#define RUNNING 1 * Y: w4 r1 L; h& L4 J( B& g5 q8 |* S#define READY 2 4 Q+ S7 d2 U- k# h( X0 d#define BLOCKED 3 " P! v6 X+ [6 C4 w( T; Y( z#define Ntcb 8 , t! V. E' m$ F2 d8 [#define TL 16 B7 ?# e: P5 v struct tcb{/ S# `) I; T P ^0 b M unsigned int * stack;/*堆栈的起始地址*/) @5 \) ~( d' ?% \0 U unsigned ss; /*堆栈段址*/ 3 F f( x! w1 |; d; d- \ unsigned sp; /*堆栈指针址*/: L( l! b% ^0 W* o, _5 m char state; /*进程状态*/ ) C' ?6 V( P2 @+ U char name[10];/*线程的外部标识符*/ # n! U7 u* z- z }tcb[Ntcb]; /* 系统允许最多的任务数 *// S; a1 y4 \8 Y: Q& l int timecount=0; / J- ]- j, O6 \; `+ P# hchar far *indos_ptr=0; * f; U7 W9 u3 G$ l3 Z7 L& A8 Tchar far *crit_err_ptr=0;. v2 B8 J& T; b* ?4 r int num=0,current=0,i;- O# k1 `0 ]& K6 d/ J* s( c9 K4 y void over();/ O) w* l8 N4 C. y1 n* G5 ? typedef int (far*codeptr)(void); 8 j0 U4 Q( @: {& N$ _* u; Bint create(char *name ,codeptr code ,int stacklen)% x7 E _! k7 m: w/ ` {$ V5 E, P( Y L$ x unsigned int * s;. [" l' m9 @, R& Z2 s a num++; 6 L! o% n; m1 J/ g7 f- rtcb[num].stack =(unsigned int*) malloc( stacklen*sizeof(int));* ?8 E6 C8 S+ [ tcb[num].state = READY;& e3 P: F% y g9 t+ G9 K: Z strcpy( tcb[num].name ,name); 9 u: m1 a. b' t tcb[num].ss = FP_SEG(tcb[num].stack);- ~4 U. i$ ^5 M5 T) L: O | tcb[num].sp = FP_OFF(tcb[num].stack+stacklen-14);0 r/ }# x, u2 h *(tcb[num].stack+stacklen-1) = FP_SEG(over);0 ?6 ?* A! _7 x4 _2 z *(tcb[num].stack+stacklen-2) = FP_OFF(over); $ C j h) k& R6 I' Z( ~ *(tcb[num].stack+stacklen-3) = 0x200; : m" f- ^+ n l2 y5 y *(tcb[num].stack+stacklen-4) = FP_SEG(code);4 T- P5 c' i& h+ F) h *(tcb[num].stack+stacklen-5) = FP_OFF(code);/ a$ s' a' K# S9 _! Y *(tcb[num].stack+stacklen-10) = FP_SEG(tcb[num].stack);6 c5 o+ I& G1 J3 b/ Y. w. J9 u *(tcb[num].stack+stacklen-11) = FP_SEG(tcb[num].stack); / y) ]9 H% f# o3 Z* i return num; 0 Z. L7 C# g" W4 Z. c4 n0 n; P2 m} ;4 r2 j6 ]$ E! B, G3 n9 } void interrupt (* old_int8)(void); 6 A6 R5 G; R; ]2 f5 @: q2 [$ s void interrupt new_int8(void) 0 I, G4 M) O4 b% x3 |" r A5 z{2 L, I+ P: Y9 J/ f5 B0 s (*old_int8)(); & {. c) N- C: C% Q" h4 ?2 l timecount++;, M: ~! ]$ I/ [5 ?1 `1 Q' z if(timecount>=TL); 0 [6 k- \+ u6 w. [, S8 D! l: b( D if(!DosBusy()) * {( R. K) \3 B1 s: m' \: v {% m* t: Z8 ~. A; h Q5 L disable();8 w$ A8 x, S4 h- ]0 H tcb[current].ss=_SS;" Z; |% |' [- C" R# H tcb[current].sp=_SP;* y% U- h6 S9 W& ?8 b& S' [ if(tcb[current].state==RUNNING)0 A1 |' \2 N1 T+ y G tcb[current].state=READY;- [7 o* s) e7 ]) g8 \' x p current=3-current; . D$ ^& E4 a7 M/ n l3 @& |if(tcb[current].state==READY) 3 \, `/ n, M [/ I0 u{ _SS=tcb[current].ss; d, C+ J2 j) c2 u( U _SP=tcb[current].sp;& b5 {6 d$ r7 a3 v K tcb[current].state=RUNNING; 7 E t, v3 n$ r& c. y, n timecount=0;' K; c j6 {) V6 R9 {3 e enable(); 8 R2 S1 F* ]9 R: f} + m2 `( \7 e/ u: n$ m5 b2 x}0 j1 U8 @+ ~2 ` };* A0 [% z% _, e# p7 n. h3 h- Z% T void tcb_state() 1 g4 Q5 h/ p! N! f1 r# _/ I' t- |{) _1 i" y! {9 s5 c6 k3 N' C4 B7 u int i;) T9 n& U0 b4 f W- Z for(i=1;i<=num;i++), f) h" g. D7 M5 t printf("Thread %s is %d ",tcb.name,tcb.state);1 M! b0 l4 d% D6 ~+ u8 W; B) O };- p6 H8 a7 h1 V int all_finished()/ t" i7 @! P! V/ t2 q/ R% r { . q* x: C* t, W* }1 R/ m int i; k1 A! P& {* W! x for(i=1;i<=num;i++); O8 E8 [4 O5 G6 V if (tcb.state!=FINISHED)2 D: t) ^3 \/ u: [0 c return 0;8 U& p o& n1 D& q return 1;4 L' Y0 ]$ d9 u' o9 }+ ?0 l4 { ; Z& `6 l' L3 A2 D! _ }; * J& |( T6 u/ v G/ p5 z0 evoid interrupt swtch(void) 3 r/ O( m2 \# o) w( M. T{ a) q& ~5 G- F( `" E* k5 J4 dint i;- Y; t6 t: X7 l+ S1 ]- N& F disable(); 9 b8 i9 N% z5 C# V+ q+ X# i tcb[current].ss=_SS; Q4 D7 X- [5 `( c" d) l& ?2 h tcb[current].sp=_SP;0 {9 |1 n! N6 L" ]5 ^, ~' y if(tcb[current].state==RUNNING) 6 c0 u) @- l7 ^2 S+ D tcb[current].state=READY; " o& A% r; R+ e4 k3 y" k6 X for( i= current+1 ; i <= num;i++)' y7 G t2 C8 a( t { if(tcb.state == READY ) 5 o- p2 h% i, Y6 S3 }% O" q goto excute;$ q, }5 Y% L: N+ I8 `0 j } . K- H, b* r+ ^ z& t for( i = 1 ; i <= current ; i++) : X2 Q5 `1 F1 P+ Q$ P! P5 c { if(tcb.state == READY); V- v4 |4 d0 b2 U* y% F. f/ g goto excute; / V) U3 M8 {0 R5 k' h5 _! d }: @# o6 f+ d7 h/ |$ D2 c i = 0 ; 7 U! o) d" N; E5 N, T( u excute: : b$ x$ q1 T, v$ y _SS = tcb.ss;- F4 k) t1 O; J# [# n3 v D! R _SP = tcb.sp;# M+ ~! v9 A q$ D- ]3 `" H tcb.state = RUNNING;9 f" y0 H. }; l! Q( R6 P- v* r current = i;6 [) `$ {8 J o' _( b3 n enable();; |( R4 W- j! u. [4 Q6 [ }8 T3 E7 p) c7 Z /*-------------------------------------------------------------------------*/ 1 k! K5 H6 d" [8 _5 V, n! Avoid over()+ ^1 [' f3 b6 q1 r { E& M1 Y9 R# m4 U% D6 z1 | int i=current; $ c F* E, ]2 N! D9 V /*strcpy(tcb[current].name,'\0');*/ 6 w. u/ M/ V5 K, }- q3 ~ tcb[current].state=FINISHED; " ^% j& p: n( E1 Y4 S( [ swtch(); 0 v+ `8 d( k9 |, l5 G3 R6 Q free(tcb.stack);' N5 n, ]" q7 X; B, ` }; % D9 z2 J5 {4 B0 I. ] R& U/*---------------------------------------------------*/ ! N' b. y/ ]- P% \: Hvoid InitInDos(void) 0 E% n5 `) l5 t/ ?$ E K{ 4 g: ]( n/ L2 } union REGS regs; : f! l- ]! Y2 m9 ? struct SREGS segregs;1 f- ]5 [* O, L2 v* Q; L7 R j M /* get the address to INDOS flag*/" G+ O7 l$ \ M; @4 A regs.h.ah=GET_INDOS; ( w) ?' j, d! I! I B2 ^ intdosx(®s,®s,&segregs);) A8 F$ y% Q" f+ z8 r/ Q- Y indos_ptr=MK_FP(segregs.es,regs.x.bx); 5 R4 d6 f" T( o# \- g /*get the address to CRIT_ERR flag*/ 7 _# J: i# ]) o s I1 n5 F4 A if(_osmajor<3)2 ]+ ~ n6 ^3 b8 R crit_err_ptr=indos_ptr+1;2 |$ b% B- y! m5 n& v( `/ E else if (_osmajor==3&&_osminor==0)* \. a3 u' @# S3 B2 I. F crit_err_ptr=indos_ptr-1; * a- @6 L9 F8 _0 [3 p* P else5 y* y k/ q- H) M, @ {4 h9 h4 q ?# P- G1 B2 O, b8 @ regs.x.ax=GET_CRIT_ERR;; {8 Y& q' m I7 Q intdosx(®s,®s,&segregs); * y6 k" I$ @. i- e) z8 a( R2 n crit_err_ptr=MK_FP(segregs.ds,regs.x.si); ; \. p, ~/ W# [( h$ X1 M7 w } # N" i8 T* }0 Q* P};0 ]. r9 j6 v' [ int DosBusy(void) 8 p4 O0 i5 U4 f, l{3 o4 s6 [2 ~4 a6 p if(indos_ptr&&crit_err_ptr)7 p9 b( E4 A. z6 K* y3 d: G: ` return(*indos_ptr&&*crit_err_ptr); 4 k7 F3 W9 A7 S }+ ? else2 l# h- H3 L }. }3 G0 b1 @ return( -1);/ e" l4 B+ S! `! g) e3 y };& d. M) p; X# j' c2 }' H void f1(void)0 Q5 _1 m: h8 I0 b5 n0 u { / s' f; H; @" `% I/ |4 Q& P int i,j,k;! ~' V: P5 d) T' a+ ]$ u3 K2 o for(i=0;i<40;i++) : N+ H! J; {9 t$ N1 f8 J$ l {- z& x: _1 z: |: z putchar('a'); 5 D7 x7 f: i& E' t$ | ) I9 ^% @; m3 ]# v$ @ for(j=0;j<1000;j++); U4 y9 ^" z/ e" q% m: ^ for(k=0;k<100;k++) + x! f8 {4 X; T0 M3 I1 p% y ; ! @# J& b/ f0 E" Q4 N }; X& }6 M5 N" O5 l- I };8 S( }! O' [9 y) B- v void f2(void) . H9 W5 u1 C' W( B{ - a0 E+ [9 W1 a5 O+ M: [: N I int i,j,k;+ c$ L: l. E1 O for(i=0;i<30;i++); O z" f; b- m- K6 Q& E& N* ^$ Z { . O0 y( D! [+ O' w# Z0 v putchar('b'); , [# l! U* }4 N* v4 [( _! u for(j=0;j<1000;j++)( m6 R% `$ F8 ?# F* y2 V for(k=0;k<50;k++) . f( x! D* j6 W5 I ; 6 z6 Y& M! w" L7 E4 X, a }: D4 j- C1 L9 [3 V+ e( n: J N, A }; # m1 }) U$ F7 ]* Z1 }3 Q, [( |/*------------------------------------------*/) J G% m7 N' K& G% j2 A main()4 x; f* Z$ Q& U! _, B( A1 D& a { s5 l; u; y8 P- D" _# q v InitInDos(); # B9 O( F9 s# O6 t0 V; E% A old_int8=getvect(8);4 j: i1 }0 ?; B K strcpy(tcb[0].name,"main"); - \& h: X% b; S, K7 z# L! h) h tcb[0].state=RUNNING; * ^' f l6 @' n+ L* L- W current=0;7 W$ @# _' L! c! n create("f1",(codeptr) f1,1024);* g5 |) M& A$ H5 m6 U" U create("f2",(codeptr) f2,1024); % M, x1 p) q4 N( F tcb_state(); g! A6 A- q+ v$ ?6 z setvect(8,new_int8);6 W' w9 h5 g# W+ e* Z3 i! I* ^7 D swtch();. p {4 o9 n" i9 N6 {, Z6 J while(!all_finished());; ^: ?+ G( P8 I2 v% j strcpy(tcb[0].name,'\0');7 {" t. y/ A% k$ Z2 c9 p) D9 @ tcb[0].state=FINISHED;8 M8 H" y6 d" K) \ o; s setvect(8,old_int8); * a4 [2 U% {& c: v8 n F. B" | tcb_state(); ) r( e( v, O$ v5 n$ t8 d% ?0 v printf("\n Multi_task system terminanted.\n"); 4 f% ~" g# S0 A# c& z};
  • TA的每日心情
    无聊
    2015-1-16 14:36
  • 签到天数: 3 天

    [LV.2]偶尔看看I

    18
    发表于 2003-10-27 10:57:00 | 只看该作者
    感觉楼主有踢馆的味道哦。HOHO,还是希望楼主先把自己写过的代码全贴出来吧,不然我们就怀疑楼主是不是弄懂了操作系统的进程原理呢,而怀疑楼主是不是随便到网络上拷一段牛头不对马嘴的代码过来,要我们怎么看?因为从上面的代码看,没有完整的代码数据结构都搞不零清啊,况且为你解答不是我们必尽的义务,也希望态度好一点,如果是希望斑竹退位,哈哈……,随便啦。
  • TA的每日心情
    奋斗
    2015-9-17 00:58
  • 签到天数: 1 天

    [LV.1]初来乍到

    17
    发表于 2003-10-25 16:47:00 | 只看该作者
    我一直都等待强人的参与,十分欢迎。我没有权限加你为斑竹,‘煎饼’ 看到请满足他。
  • TA的每日心情
    奋斗
    2015-9-17 00:58
  • 签到天数: 1 天

    [LV.1]初来乍到

    16
    发表于 2003-10-25 16:39:00 | 只看该作者
    您来,我让位
    towny 该用户已被删除
    15
     楼主| 发表于 2003-10-24 21:58:00 | 只看该作者
    你要是不懂就让位!
    . h8 I  C% J7 d* d2 Z别占着茅坑不拉屎!$ h. I; I. d# ~) f" t) H. d
    towny 该用户已被删除
    14
     楼主| 发表于 2003-10-24 21:48:00 | 只看该作者
    操!. ~  g) h2 H' S
    搞什么脾气啊!一个斑竹有什么了不起的啊垃圾!!
  • TA的每日心情
    奋斗
    2015-9-17 00:58
  • 签到天数: 1 天

    [LV.1]初来乍到

    13
    发表于 2003-10-24 18:02:00 | 只看该作者
    指点什么呢?效率?方法?还是编程格式?% u) ~/ I/ O: S9 |
    给一篇代码给别人叫别人指点?我从来没有过。
    towny 该用户已被删除
    12
     楼主| 发表于 2003-10-23 23:08:00 | 只看该作者
    做了一半的半成品望斑竹指点!! " H0 i+ V! D9 M7 k; C* Y2 d % h8 H/ z0 c/ u! d' Z8 T$ fint timecount=0;; S! C& [2 x9 I4 Y0 O; y char far *indos_ptr=0; & z3 ]6 i1 {' @4 j" uchar far *crit_err_ptr=0; 8 g: V: o8 N4 K$ z3 X/ Sint num=0,current=0,i;* a8 ~' J; ?9 \- l I* X void over(); ' G9 r k$ m( b3 t+ C& ?3 ~, ktypedef int (far*codeptr)(void); 2 S/ E& B, U% k2 S' b2 V7 @int create(char *name ,codeptr code ,int stacklen) " q1 H: b% n+ x{ 7 t* V) G7 T: \2 c* |6 E: }unsigned int * s; % B2 F: j6 S- H0 f) ~num++; - I4 v# l( I! Z$ @tcb[num].stack =(unsigned int*) malloc( stacklen*sizeof(int));3 Q7 C9 Y+ k' z/ d. i1 o" m1 X* R# d! _ tcb[num].state = READY; C' f) I. n# ]0 c7 B strcpy( tcb[num].name ,name);. A& ]4 F6 m7 J5 L7 i tcb[num].ss = FP_SEG(tcb[num].stack);$ V& y. k3 P% h9 h tcb[num].sp = FP_OFF(tcb[num].stack+stacklen-14);7 t! ^& u% n1 a: _! ?2 R% M *(tcb[num].stack+stacklen-1) = FP_SEG(over); 1 `5 K/ A) {9 O* {5 S *(tcb[num].stack+stacklen-2) = FP_OFF(over);# F/ [; b s8 y- ]' L& J) t7 q$ X *(tcb[num].stack+stacklen-3) = 0x200; $ A8 b, o# V6 T2 m* p5 k d *(tcb[num].stack+stacklen-4) = FP_SEG(code);, \! ?' ?8 g; C9 A" \ a3 J6 _ *(tcb[num].stack+stacklen-5) = FP_OFF(code);, d& K, @( a2 }% c" G$ x *(tcb[num].stack+stacklen-10) = FP_SEG(tcb[num].stack); 0 Y7 n1 s; ~' U; T8 D$ W% M4 K& ^ *(tcb[num].stack+stacklen-11) = FP_SEG(tcb[num].stack); 7 y# r( H) V* ^! _- L return num;7 \! f/ g1 n4 w' l9 B2 I1 H, _) g } ; ! P2 I" V7 d$ u: g j cvoid interrupt (* old_int8)(void); 3 p$ l# {6 B& ]8 j: y1 K void interrupt new_int8(void)4 q( }$ |3 E+ Q) z! R) l { : z1 ` I3 o# e% @0 p) T9 J E2 f (*old_int8)(); % ^- S/ G" v* C' @9 u3 Y3 Q& g timecount++; - l& Y0 y9 y6 S& y+ k if(timecount>=TL);( d, b7 L% ?6 i. z if(!DosBusy()), z }' H7 D$ ~: `5 }/ R! L3 @6 a { 5 G8 q& Q6 s. ?* O- d disable();: c& L- L/ D) x9 Z7 T$ @. K tcb[current].ss=_SS;) y8 c& v3 ^1 L5 E* X tcb[current].sp=_SP; ; T. I4 P' E8 C7 U& e, S' f7 D( F if(tcb[current].state==RUNNING) 6 d% C: K# h$ s tcb[current].state=READY;$ p' }4 K* z9 b/ q current=3-current; , P3 A+ n. J$ i, T# J! k# a% cif(tcb[current].state==READY)) l4 G% o) g0 V& E { _SS=tcb[current].ss;, F. Q) ?- z% a5 t& d: R _SP=tcb[current].sp; ( O7 {( ?7 [' F5 T9 R- o tcb[current].state=RUNNING;) a) g( c4 x) N+ n5 K3 z6 _ timecount=0; ) }% y/ C j( c' l5 d4 ~2 x5 R enable(); ' E7 W: `9 X5 Q' s# y P}* Z, J3 D; o% X$ E } * D5 @* J& F/ ^8 I$ [, X};% D$ Z( m* P4 m7 j* ~+ V7 v3 a9 g void tcb_state() + H/ G& Q% s4 r& M K{& r' G/ a! d1 h' J' H* G6 q7 M4 l0 G int i;9 [3 b& p, O N% w+ R3 a$ K% Z5 n" s for(i=1;i<=num;i++) g9 @# A8 K3 q# v$ a printf("Thread %s is %d ",tcb.name,tcb.state);$ V. Z0 z) v, u }; & z3 p( N3 Z9 E3 m* ^' {int all_finished() " u3 K& S/ g' A; c+ p" c0 U{ 5 \! O9 ]; T B/ J8 C- ^* O* k8 l int i; ) x" T* V" E& ?' W8 I; Y: d for(i=1;i<=num;i++) 8 W* r x- U2 o X, O% S( E if (tcb.state!=FINISHED)( R5 j3 v' ^2 M4 ^2 F return 0; # D2 r7 ?1 ]/ l4 k( V9 p; r$ j R return 1;- d& f% W% K) r" j" A+ C6 l' u " ?( M+ f1 y; N; ~3 S: U9 ~4 E}; + O! }% ^0 J, W' t! N9 |$ f1 \9 jvoid interrupt swtch(void) 0 b6 o# [1 L+ @: M" z{) b* [5 a* Q/ G3 t- W" G3 ?$ C5 h int i; $ j3 g" C j# L3 n disable();& d1 ~7 @* j; W6 b5 `7 Z tcb[current].ss=_SS; ( I2 p. D1 L( Z1 I: M6 \/ v& s$ | tcb[current].sp=_SP;7 Q; ^9 a4 W/ \- l1 T if(tcb[current].state==RUNNING) 4 G7 @% b$ A4 e8 q+ M tcb[current].state=READY; 0 E/ Y% L" U4 D) s& m: T for( i= current+1 ; i <= num;i++) 0 c3 A! t/ B2 ?4 ^8 ^; f { if(tcb.state == READY ), O1 [5 w8 a, y1 K+ S goto excute; ' R( K! f1 j* h }' G( w3 w; m/ F) \5 Y/ t for( i = 1 ; i <= current ; i++) ( T( K3 F+ h) ` M( G8 ? { if(tcb.state == READY) . t- K9 P& U( F" b" l2 j- X4 { goto excute; ' K; c6 n* X6 M$ d. E( d# P- I }: y; c. N4 Z" W3 ^1 S$ v i = 0 ;# D. V& n; I% z R excute:+ p' J) Z' i( h- s _SS = tcb.ss; 1 B! ^9 L3 h1 j9 J _SP = tcb.sp; $ ~) _( @# P* U1 a U tcb.state = RUNNING; 9 m; j( k9 i# I& E3 ]2 M current = i;+ t( v3 f3 d% A. f% B enable();9 J2 X$ ~" F; K( j; | A8 N# ~$ N }
  • TA的每日心情
    无聊
    2015-1-16 14:36
  • 签到天数: 3 天

    [LV.2]偶尔看看I

    11
    发表于 2003-10-22 21:09:00 | 只看该作者
    等待楼主的高见。
  • TA的每日心情
    无聊
    2015-1-16 14:36
  • 签到天数: 3 天

    [LV.2]偶尔看看I

    10
    发表于 2003-10-22 21:09:00 | 只看该作者
    狂晕,这个手误也太离谱了。
    关闭

    下沙大学生网推荐上一条 /1 下一条

    快速回复 返回顶部 返回列表