亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關于我們
? 蟲蟲下載站

?? 3.txt

?? 操作系統 線程的調度根據時間片輪轉和消息緩沖區的通信
?? TXT
字號:

#include <stdlib.h>
#include <dos.h>
#include <stdio.h>

#define GET_INDOS 0x34
#define GET_CRIT_ERR 0x5d06

#define BLANK -1
#define FINISHED 0
#define RUNNING 1
#define READY 2
#define BLOCKED 3
#define NTCB 10
#define TL 1
#define NBUF 10
#define NTEXT 50

char far* indos_ptr=0;
char far* crit_err_ptr=0;

int timecount=0;
int current=-1;

typedef struct{
  int value;
  struct TCB* wq;
}semaphore;

semaphore mutexfb={1,NULL};
semaphore sfb={10,NULL};

semaphore empty={10,NULL};
semaphore full={0,NULL};

struct buffer{
  int sender;
  int size;
  char text[NTEXT];
  struct buffer* next;
}*freebuf;

struct TCB{
  unsigned char* stack;
  unsigned ss;
  unsigned sp;
  char state;
  char name[10];
  int value;
  struct TCB* next;
  struct buffer *mq;
  semaphore mutex;
  semaphore sm;
}tcb[NTCB];

struct int_regs{
  unsigned Bp,DI,SI,DS,ES,DX,CX,BX,AX,IP,CS,Flags,off,seg;
};

typedef int(far* codeptr)(void);

void interrupt(*old_int8)(void);

int DosBusy(void);
void InitIndos(void);
void InitTcb();
void interrupt new_int8(void);
void interrupt swtch();
void send(char *receiver,char *a,int size);
void receive(char *sender,char *a);
void p(semaphore *sem);
void v(semaphore *sem);

int Create(char* name,codeptr code,int stacklen,int value);


void Destroy(int i);

void f1()
{
  long i,j,k;
for(i=0;i<20;i++)
   {
      p(&empty);
      
      send("f2","f1 send message to f2",NTEXT);
      v(&full);
      for(j=0;j<1000;j++)
	 for(k=0;k<20000;k++);
   }     

  

 for(i=0;i<20;i++)
   {
    putchar('a');
      for(j=0;j<1000;j++)
	 for(k=0;k<20000;k++);
   }     
}

void f2()
{
  long i,j,k;
  char a[NTEXT];
for(i=0;i<10;i++)
  {
       p(&full);
  receive("f1",a);
  v(&empty);
  printf("%s",a);

          for(j=0;j<1000;j++)
	for(k=0;k<20000;k++);
  }

  p(&full);
  receive("f1",a);
  v(&empty);
  printf("%s",a);

 
 for(i=0;i<10;i++)
  {
     putchar('b');
     for(j=0;j<1000;j++)
	for(k=0;k<20000;k++);
  }

  printf("\n");
}

void InitInDos()
{
  union REGS regs;
  struct SREGS segregs;

  regs.h.ah=GET_INDOS;
  intdosx(&regs,&regs,&segregs);


  indos_ptr=MK_FP(segregs.es,regs.x.bx);

  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(&regs,&regs,&segregs);
      crit_err_ptr=MK_FP(segregs.ds,regs.x.si);
    }
}

int DosBusy(void)
{
  if(indos_ptr&&crit_err_ptr)
    return (*indos_ptr||*crit_err_ptr);
  else
    return(-1);
}
void InitTcb()
{
  int i;
  for(i=0;i<NTCB;i++)
  {
    tcb[i].state=BLANK;
    tcb[i].mq=NULL;
    tcb[i].mutex.value=1;
    tcb[i].mutex.wq=NULL;
    tcb[i].sm.value=0;
    tcb[i].sm.wq=NULL;
  }
}
void over()
{
  Destroy(current);
  swtch();
}
int Create(char* name,codeptr code,int stacklen,int value) 
{
  int i;
  char *p;
  struct int_regs* pt;
  for(i=1;i<NTCB;i++)
  {
    if(tcb[i].state==BLANK||tcb[i].state==FINISHED)
       break;
  }
  if(i==NTCB)
    return -1;
  tcb[i].value=value;
  strcpy(tcb[i].name,name);
  tcb[i].stack=p=(unsigned char*)malloc(stacklen); 
  p=p+stacklen;
  pt=(struct int_regs *)p;
  pt--;
  pt->Flags=0x200;
  pt->CS=FP_SEG(code);
  pt->IP=FP_OFF(code);
  pt->off=FP_OFF(over);
  pt->seg=FP_SEG(over);
  pt->DS=_DS;
  pt->ES=_ES;
  tcb[i].sp=FP_OFF(pt);
  tcb[i].ss=FP_SEG(pt);
  tcb[i].state=READY;
  return i;
}

void Destroy(int i)
{
  disable();
  if(tcb[i].state==RUNNING)
 {
    disable();
    tcb[i].state=FINISHED;
    strcpy(tcb[i].name,NULL);
    free(tcb[i].stack);
    enable();
 }
  return;

}

void tcb_state()
{
  int i;
  for(i=0;i<NTCB;i++)
     if(tcb[i].state!=BLANK)
     {
       switch(tcb[i].state)
       {
	 case FINISHED:
	   printf("tcb[%d] is FINISHED\n",i);
	   break;
	 case RUNNING:
	   printf("tcb[%d] is RUNNING\n",i);
	   break;
	 case READY:
	   printf("tcb[%d] is READY\n",i);
	   break;
	 case BLOCKED:
	   printf("tcb[%d] is BLOCKED\n",i);
	   break;
       }
     }
}

int Find()
{
  int i,j;
  for(i=0;i<NTCB;i++)
    if(tcb[i].state==READY&&i!=current)
      break;
  for(j=i+1;j<NTCB;j++)
  {
     if(tcb[j].state==READY&&j!=current)
       if(tcb[j].value>tcb[i].value)
	 i=j;
   }
  if(i==NTCB)
    return -1;
  return i;
}

void interrupt new_int8(void)
{
   int i;
   (*old_int8) ();
   timecount++;
   if(timecount==TL)
   {
     if(DosBusy)
     {
	disable();
	tcb[current].ss=_SS;
	tcb[current].sp=_SP;
	if(tcb[current].state==RUNNING)
	   tcb[current].state=READY;
	i=Find();
	if(i<0)
	  return ;
	_SS=tcb[i].ss;
	_SP=tcb[i].sp;
	tcb[i].state=RUNNING;
	current=i;
	timecount=0;
	enable();
     }
     else
       return;
   }
   else
     return;
}

void interrupt swtch()
{
  int i;
  if(tcb[current].state!=FINISHED&&current!=0&&tcb[current].state!=BLOCKED)
     return;
  i=Find();
  if(i<0)
     return ;
  disable();
  tcb[current].ss=_SS;
  tcb[current].sp=_SP;
  if(tcb[current].state==RUNNING)
    tcb[current].state=READY;
  _SS=tcb[i].ss;
  _SP=tcb[i].sp;
  tcb[i].state=RUNNING;
  current=i;
  enable();
}
int all_finished()
{
  int i;
  for(i=1;i<NTCB;i++)
    if(tcb[i].state==RUNNING||tcb[i].state==BLOCKED||tcb[i].state==READY)

       return 0;
  return 1;
}


void block(struct TCB** p)
{
  struct TCB* p1;
  tcb[current].state=BLOCKED;

  if((*p)==NULL)
	  *p=&tcb[current];
  else
  {
	  p1=*p;
	  while(p1->next!=NULL)
		  p1=p1->next;
	  p1->next=&tcb[current];
  }
  tcb[current].next=NULL;
  swtch();
}

void wakeup_first(struct TCB**p)
{
  struct TCB *p1;
  if((*p)==NULL)
	  return ;
  p1=(*p);
  (*p)=(*p)->next;
  p1->state=READY;
  p1->next=NULL;
}


void p(semaphore *sem)
{
  struct TCB**qp;

  disable();
    sem->value=sem->value-1;
    if(sem->value<0)
     {
      qp=&(sem->wq);
      block(qp);
     }
  enable();
}

void v(semaphore *sem)
{
  struct TCB **qp;
  disable();
    qp=&(sem->wq);
    sem->value=sem->value+1;
    if(sem->value>=0)
      wakeup_first(qp);
  enable();
}

struct buffer *Initbuf(void)
{

  struct buffer *p,*pt,*pt2;
  int i;
  pt2=pt=(struct buffer*)malloc(sizeof(struct buffer));
  pt->sender=-1;
  pt->size=0;
  strcmp(pt->text,"");
  pt->next=NULL;
  for(i=0;i<NBUF-1;i++)
  {
     p=(struct buffer*)malloc(sizeof(struct buffer)); 
     p->sender=-1;
     p->size=0;
     p->text[NTEXT]='\0';
     p->next=NULL;
     pt2->next=p;
     pt2=p;
  }
  return pt;
}
struct buffer *getbuf(void)
{
  struct buffer *buff;
  buff=freebuf;
  freebuf=freebuf->next;
  return(buff);
}

void putbuf(struct buffer* pt)
{
   struct buffer* p=freebuf;
   while(p->next!=NULL)
      p=p->next;
   p->next=pt;
   pt->next=NULL;
}

void insert(struct buffer** mq,struct buffer *buff)
{
  struct buffer *temp;

  if(buff==NULL) return ;
  buff->next=NULL;
  if(*mq==NULL)
    *mq=buff;
  else
  {
    temp=*mq;
    while(temp->next!=NULL)
      temp=temp->next;
    temp->next=buff;
  }
}

void send(char *receiver,char *a,int size)
{
  struct buffer *buff;
  int i,id=-1;

  disable();

  for(i=0;i<NTCB;i++)
  {
    if(strcmp(receiver,tcb[i].name)==0)
    {  id=i;
       break;
    }
  }
  if(id==-1)
  {
    printf("Error:Receiver not exist!\n");
    enable();
    return ;
  }

  p(&sfb);
  p(&mutexfb);
  buff=getbuf();
  v(&mutexfb);

  buff->sender=current;
  buff->size=size;
  buff->next=NULL;
  for(i=0;i<buff->size;i++,a++)
    buff->text[i]=*a;

  p(&tcb[id].mutex);
  insert(&(tcb[id].mq),buff);
  v(&tcb[id].mutex);
  v(&tcb[id].sm);

  enable();
}

void receive(char *sender,char *a)
{
  struct buffer *buff;
  int i;
  disable();
  for(i=0;i<NTCB;i++)
     if(strcmp(sender,tcb[i].name)==0)
	break;
  if(i==NTCB)
  {
      printf("Error:Sender not exist!\n");
      enable();
      return ;
  }
  if(tcb[current].mq==NULL)
      return ;
  p(&tcb[current].mutex);
  buff=tcb[current].mq;
  tcb[current].mq=tcb[current].mq->next;
  for(i=0;i<buff->size;i++,a++)
    (*a)=buff->text[i];
  v(&tcb[current].mutex);
  p(&mutexfb);
  buff->sender=-1;
  buff->size=0;
  strcmp(buff->text,"");
  buff->next=NULL;
  putbuf(buff);
  v(&mutexfb);
  p(&sfb);
  p(&tcb[current].sm);
  
}

void main()
{

 InitInDos();
 InitTcb();
 freebuf = Initbuf();
 old_int8=getvect(8);

 strcpy(tcb[0].name,"main");
 tcb[0].state=RUNNING;
 tcb[0].value=0;

 current=0;

 Create("f1",(codeptr)f1,1024,5);
 Create("f2",(codeptr)f2,1024,6);
 tcb_state();

 setvect(8,new_int8);
 swtch();
 while(!all_finished());
 tcb[0].name[0]='\0';
 tcb[0].state=FINISHED;
 setvect(8,old_int8);
 tcb_state();
 printf("\n Muli_task system teminated \n");

} 

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
亚洲成人免费视| 国产亚洲精品免费| 欧美美女直播网站| 欧美三级视频在线播放| 欧美日韩一区二区三区四区| 欧美日韩精品一区二区| 91精品黄色片免费大全| 欧美一区二区三区精品| 久久久美女艺术照精彩视频福利播放| 日韩欧美第一区| 亚洲欧洲无码一区二区三区| 亚洲免费三区一区二区| 视频一区视频二区中文字幕| 国产一二三精品| 一本大道久久a久久综合婷婷 | 欧美老年两性高潮| 欧美成人精品二区三区99精品| 久久精品欧美一区二区三区麻豆| 国产精品久久久久久久久免费丝袜| 中文字幕在线不卡国产视频| 一区二区三区国产| 国产在线精品不卡| 欧美猛男男办公室激情| 国产精品久久久久久久久搜平片 | 久久精品亚洲麻豆av一区二区| 欧美国产一区二区| 蜜臀久久99精品久久久画质超高清 | 久久精品国产久精国产爱| 成人一区二区三区在线观看| 欧美日韩一级视频| 亚洲影院在线观看| 亚洲午夜久久久久| 色综合咪咪久久| 中文字幕久久午夜不卡| 久久草av在线| 欧美变态凌虐bdsm| 蜜臀久久99精品久久久画质超高清 | 91女人视频在线观看| 国产精品毛片无遮挡高清| 精品一区二区三区在线播放| 欧美一区二区视频在线观看| 亚洲va中文字幕| 精品视频1区2区3区| 亚洲成av人片一区二区三区| 欧美日韩免费一区二区三区| 亚洲一区二区综合| 7799精品视频| 国产精品中文字幕欧美| 亚洲国产电影在线观看| 91同城在线观看| 一区二区三区在线免费观看| 91官网在线免费观看| 天天综合天天做天天综合| 日韩一区二区电影网| 国产精品1区2区| 亚洲综合清纯丝袜自拍| 欧美一区二区播放| 成人av动漫在线| 日韩精品乱码av一区二区| 久久网站最新地址| 欧美亚洲免费在线一区| 精品亚洲国产成人av制服丝袜| 久久久久久久久久久黄色| 色哟哟一区二区在线观看| 美女一区二区三区在线观看| 亚洲视频 欧洲视频| 在线成人av网站| 99久久免费国产| 蜜桃av一区二区在线观看 | 美女视频黄 久久| 亚洲日本一区二区| 久久久午夜精品理论片中文字幕| 欧美日韩精品欧美日韩精品 | 欧美国产丝袜视频| 日韩你懂的电影在线观看| 日本精品一区二区三区高清| 国产成人精品1024| 国产在线播放一区二区三区| 天天综合色天天| 五月天久久比比资源色| 伊人色综合久久天天| 国产精品久久久久久久裸模| 国产欧美日韩在线| 精品国产一区二区三区四区四 | 亚洲综合在线免费观看| 中文字幕一区二区三区不卡在线| 久久亚洲影视婷婷| 国产婷婷色一区二区三区四区 | 国产白丝精品91爽爽久久| 狠狠色狠狠色综合| 精品一区二区三区免费视频| 另类的小说在线视频另类成人小视频在线| 亚洲综合色网站| 日韩国产欧美三级| 久久成人免费日本黄色| 国产精品白丝av| eeuss鲁片一区二区三区在线看| 99免费精品在线| 91精品国产综合久久久久久久久久| 日韩一卡二卡三卡四卡| 欧美日韩国产免费| 99综合影院在线| 国产伦精一区二区三区| 中文字幕一区二区三区色视频| 777午夜精品视频在线播放| 99热在这里有精品免费| 久久精品国产久精国产爱| 国内偷窥港台综合视频在线播放| 国产成人av一区二区三区在线| av亚洲产国偷v产偷v自拍| 欧美美女直播网站| 国产精品久久久久婷婷二区次| 一区二区成人在线观看| 狠狠网亚洲精品| 欧美男人的天堂一二区| 自拍偷在线精品自拍偷无码专区| 综合久久一区二区三区| 亚洲一线二线三线视频| www.久久精品| 欧美精品一区男女天堂| 亚洲a一区二区| 色久综合一二码| 国产蜜臀av在线一区二区三区| 亚洲国产日产av| 欧美在线观看你懂的| 国产拍揄自揄精品视频麻豆| 蜜臀久久久99精品久久久久久| 欧美日韩一区二区电影| 亚洲一区二三区| 欧美久久婷婷综合色| 亚洲午夜激情网站| 在线一区二区观看| 一区二区三区国产豹纹内裤在线 | 97精品久久久午夜一区二区三区| 日韩一区二区三区电影在线观看 | 99re成人在线| 亚洲精品成人少妇| 欧美欧美午夜aⅴ在线观看| 午夜影院在线观看欧美| 精品日韩在线观看| 国产精品一区二区在线看| 国产情人综合久久777777| 成人一区二区三区中文字幕| 亚洲三级电影网站| 7777精品伊人久久久大香线蕉经典版下载 | 国产精品88av| 亚洲美女视频在线| 欧美大黄免费观看| a美女胸又www黄视频久久| 中文字幕综合网| 日韩免费一区二区| 91免费视频网址| 久久精品99国产国产精| 亚洲色图另类专区| 欧美精品一区二区三区久久久 | 日本一区二区三区国色天香 | 亚洲国产精品人人做人人爽| 欧美大片国产精品| 欧美性大战久久| 9色porny自拍视频一区二区| 天堂成人国产精品一区| 亚洲欧洲精品天堂一级| 日韩欧美的一区| 欧美日韩激情一区二区三区| 国产精品系列在线播放| 国产在线精品免费| 蜜桃久久精品一区二区| 午夜精品久久久久久久99樱桃| 国产精品私人自拍| 国产性天天综合网| 久久蜜桃一区二区| 日韩精品一区二区三区在线| 91精品国产综合久久久蜜臀图片| 一本色道综合亚洲| 色欧美88888久久久久久影院| 国产suv精品一区二区三区| 国产盗摄一区二区| 国产乱人伦精品一区二区在线观看| 免费高清在线视频一区·| 日韩av不卡在线观看| 欧美aⅴ一区二区三区视频| 视频在线观看91| 精品一二线国产| 成人激情av网| 欧美视频你懂的| 精品日韩一区二区三区| 日本一区二区三区dvd视频在线| 国产精品人成在线观看免费| 亚洲国产精品成人综合色在线婷婷 | 欧美国产一区二区在线观看 | av在线免费不卡| 欧美日韩国产天堂| 欧美成人猛片aaaaaaa| 国产人妖乱国产精品人妖| 亚洲一区国产视频| 免费av网站大全久久| 国产成人亚洲综合色影视| 欧美体内she精高潮| 久久久不卡网国产精品一区| 亚洲夂夂婷婷色拍ww47 |