• 大小: 5KB
    文件类型: .rar
    金币: 1
    下载: 0 次
    发布日期: 2021-06-13
  • 语言: C/C++
  • 标签: 进程调度  

资源简介

进程调度 时间片轮转调度算法源代码(C语言)

资源截图

代码片段和文件信息

#include 
#include 
#include 
#include 
 /* 状态定义 */
#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(); /* 具有按时间片调度功能的新的时钟中断函数 */
void interrupt swtch(); /* 因其它原因引起CPU调度 */
void create(char*codeptrintint); /* 创建线程 */
int ALL_FINISHED(); /* 线程是否都已完成 */
int FIND(); /* 寻找优先权最高的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; /* 进程指针 */
      char state; /* 进程状态 */
      char name[10];
      int value;
      /*对TCB进行扩充*/
}tcb[TCBNUM];
 /* 现场保护和恢复的数据结构 */
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;
      }
}
/* 结束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


评论

共有 条评论