-
大小: 5KB文件類型: .rar金幣: 2下載: 0 次發(fā)布日期: 2021-06-13
- 語言: C/C++
- 標(biāo)簽: 進(jìn)程調(diào)度??
資源簡介
進(jìn)程調(diào)度 時間片輪轉(zhuǎn)調(diào)度算法源代碼(C語言)

代碼片段和文件信息
#include?
#include?
#include?
#include?
?/*?狀態(tài)定義?*/
#define?START??????-1
#define?FINISHED????0
#define?RUNNING????1
#define?READY??????2
#define?BLOCKED????3
#define?RUNCOUNT?10000
#define?TCBNUM?????6
#define?LEN????????100
#define?GET_INDOS?0x34
#define?GET_CRIT_ERR?0x5d06
#define?INT_MIN????-32767
#define?WoKao??????1
/*?人性化一點?*/
int?TLE=6;
int?current=-1;
int?timecount=0;
int?tcb_num=6;
char?far?*indos_ptr=0;
char?far?*crit_err_ptr=0;
typedef?int?(far*?codeptr)();
int?DosBusy();
void?InitDos();
void?InitTCB();
void?InitView();
void?Begin();
void?Wait();
void?FUN();
void?over();
void?tcb_state();
void?interrupt?(*old_int8)();?/*?原來的時間中斷程序?*/
void?interrupt?new_int8();?/*?具有按時間片調(diào)度功能的新的時鐘中斷函數(shù)?*/
void?interrupt?swtch();?/*?因其它原因引起CPU調(diào)度?*/
void?create(char*codeptrintint);?/*?創(chuàng)建線程?*/
int?ALL_FINISHED();?/*?線程是否都已完成?*/
int?FIND();?/*?尋找優(yōu)先權(quán)最高的READY線程?*/
void?thread_1();?/*線程集*/
void?thread_2();
void?thread_3();
void?thread_4();
void?thread_5();
/*?TCB?*/
struct?TCB
{
??????unsigned?char?*?stack;?/*?堆棧起始地址?*/
??????unsigned?ss;?/*?堆棧斷址?*/
??????unsigned?sp;?/*?進(jìn)程指針?*/
??????char?state;?/*?進(jìn)程狀態(tài)?*/
??????char?name[10];
??????int?value;
??????/*對TCB進(jìn)行擴(kuò)充*/
}tcb[TCBNUM];
?/*?現(xiàn)場保護(hù)和恢復(fù)的數(shù)據(jù)結(jié)構(gòu)?*/
struct?int_regs
{
??????unsigned?DPDISIDSESDXCXBXAXIPCSFLAGSoffseg;
};
?/*InitInDos
*Funtion?to?get?the?addresses?of?INDOS?and?CRIT_ERR?flags
*/
int?Random()?
{int?mseed;?
?randomize();?
?seed=random(100)?;
if?(seed<0)?m=-seed;?
else?m=seed;
seed=(25173*seed+13849)%65536;
return?(m/32767.0);?
}
void?InitInDos()
{
??????union?REGS?regs;
??????struct?SREGS?segregs;
??????/*?get?the?address?of?INDOS?flag?*/
??????regs.h.ah=GET_INDOS;
??????intdosx(®s®s&segregs);
??????indos_ptr=MK_FP(segregs.esregs.x.bx);
??????/*?get?the?address?of?CRIT_ERR?flag?*/
??????if(_osmajor<3)?crit_err_ptr=indos_ptr+1;
??????else?if(_osmajor==3?&&?_osminor==0)?crit_err_ptr=indos_ptr-1;
??????else?
??????{
??????????regs.x.ax=GET_CRIT_ERR;
??????????intdosx(®s®s&segregs);
??????????crit_err_ptr=MK_FP(segregs.dsregs.x.si);
??????}
}
/*DosBusy
*Function?return?non_zero?if?DOS?is?busy
*/
int?DosBusy()
{
??????/*?IninInDos()?hasn‘t?been?called?*/
??????if(indos_ptr?&&?crit_err_ptr)?return?(*indos_ptr?||?*crit_err_ptr);
??????else?return?-1;
}
?/*?初始化TCB?*/
void?InitTCB()
{
??????int?i;
??????for(i=0;i ??????{
??????????tcb[i].state=START;
??????}
}
/*?結(jié)束TCB?*/
void?over()
{
??????if(tcb[current].state==RUNNING)
??????{
??????????disable();
??????????tcb[current].state=FINISHED;
??????????free(tcb[current].stack);
??????????enable();
??????}
??????swtch();
}
void?tcb_state(int?flag)
{
??????int?i;
??????printf(“\n“);
??????if(!flag)printf(“The?Main?Thread?is?READY\n“);
??????for(i=1;i ??????{
??????????if(tcb[i].state==START)continue;
??????????switch(tcb[i].state)
??????????{
?屬性????????????大小?????日期????時間???名稱
-----------?---------??----------?-----??----
?????文件???????9877??2008-06-12?19:04??新建文件夾\24\pp.c
?????目錄??????????0??2008-06-12?19:04??新建文件夾\24
?????文件???????4523??2008-06-12?18:48??新建文件夾\27\procee.c
?????目錄??????????0??2008-06-12?19:04??新建文件夾\27
?????文件??????????0??2008-06-12?18:38??新建文件夾\新建?Microsoft?Word?文檔.doc
?????目錄??????????0??2008-06-12?19:05??新建文件夾
-----------?---------??----------?-----??----
????????????????14400????????????????????6
- 上一篇:模糊c均值聚類+FCM算法的c++代碼
- 下一篇:二維粒子群算法的matlab源程序
評論
共有 條評論