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

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

?? c_kernel.c

?? The kernel compiled with C
?? C
?? 第 1 頁 / 共 2 頁
字號:
        }
//_____________________DEBUG_____________TASK_____
        Debug_descr =p_gdt;
                                                         /* Second entry is kernel TSS descriptor*/
        set_tss_descriptor(p_gdt++,sizeof(TSS_SEGMENT)-1,
                    ( long)16*(long)_DS+(int)&TSS_Debug,DPL_USER);

        set_tss(&TSS_Debug,SelKCS,SelKDS,
                           (long)(SEGSIZE-1), nullSel);
       //       set_data_descriptor(p_gdt++,SEGSIZE-1,
       //                            KERNELBASE+ (_MAXPROCESS+1)*SEGSIZE,DPL_SYS);
        TSS_Debug.t3EFlags= 0x002;          /* Set tss is tailored for user we must correct */
        TSS_Debug.t3ESP   = 0x0ffff;
        TSS_Debug.t3EIP   = (unsigned int)DebugTask;
        TSS_Debug.t3SS0   = SelKDS;
        TSS_Debug.t3SS1   = SelKDS;
        TSS_Debug.t3SS2   = SelKDS;
//______________DEBUG____________________TASK______________
}

//********************************************************//
//** Setup_IDT             1993                         **//
//**                                                    **//
//********************************************************//

             set_gate_descriptor(&IDT[RECEIVE],
                  0L,SelKernel, TYPE_TASK_GATE,DPL_USER,PRESENT);
             set_gate_descriptor(&IDT[SEND],
                  0L,SelKernel,TYPE_TASK_GATE ,DPL_USER,PRESENT);
        /* Only those hw- interrupts are gated to kernel which can cause
           context switch */
        /* CLOCKINT stands here for any hardware int possible to cause context switch */
             set_gate_descriptor(&IDT[CLOCKINT],
                  0L,SelKernel,TYPE_TASK_GATE,DPL_USER,PRESENT);
             set_gate_descriptor(&IDT[DEBUGINT],
                  0L,SelDebug,TYPE_TASK_GATE,DPL_USER,PRESENT);

/* See Intel manuals for bitfields in descriptors */

int set_descriptor(     SEGMENT_DESCR   *segdesc,
                                        unsigned long   limit,
                                        unsigned long   base,
                                        unsigned int    type,
                                        unsigned int    segment,
                                        unsigned int    DPL,
                                        unsigned int    present,
                                        unsigned int    X
                                  )
{
        segdesc->limit_0 = limit &  0xffff; /* Set limit */
        segdesc->limit_16= limit >> 16;
        segdesc->base_0  =  base &  0xffff;
        segdesc->base_16 = (base &  0xff0000)   >> 16;
        segdesc->base_24 = (base &  0xff000000) >> 24;
        segdesc->type    = type ;
        segdesc->segment = segment ;
        /* Set Descriptor Privilege Level */
        segdesc->DPL     = DPL ;
        segdesc->present = present ;  /* Set present bit */
        segdesc->avail   = 0;
        segdesc->unused  = 0;
        segdesc->X       = X;
        segdesc->granul  = 0;

        return(TRUE);
}

//********************************************************//
//** set_gate_descriptor              1993              **//
//**                                                    **//
//********************************************************//
int set_gate_descriptor(GATE_DESCR              *gatedesc,
                                                unsigned long   offset,
                                                SELECTOR        selector,

                                                unsigned int    type,
                                                unsigned int    DPL,
                                                unsigned int    present

                                           )
{       long  int z;
        gatedesc->offset_0       =       offset & 0xffff;
        z                        =      (offset & 0x000f0000);
        gatedesc->offset_16      =      (int)( z >> 16);
        gatedesc->selector       =       selector;
        gatedesc->type           =       type ;
        gatedesc->DPL            =       DPL ;
        gatedesc->present        =       present;

        return(TRUE);
}

//********************************************************//
//** set-TSS-descriptor                                 **//
//**                                                    **//
//********************************************************//
int set_tss_descriptor(SEGMENT_DESCR    *segdesc,
                                           unsigned long        limit,
                                           unsigned long        base,
                                           unsigned int         dpl
                                          )
{
        set_descriptor(segdesc, limit, base, TYPE_TSS,SEG_SYS,dpl,PRESENT,X_BIT_TSS);
        return(TRUE);
}

//********************************************************//
//** set-code-descriptor                                **//
//**                                                    **//
//********************************************************//
int set_code_descriptor(SEGMENT_DESCR   *segdesc,
                                                unsigned long   limit,
                                                unsigned long   base ,
                                                unsigned int    dpl
                                          )
{
        set_descriptor(segdesc, limit, base,TYPE_CODE ,SEG_DC,dpl,PRESENT,X_BIT_C);
        return(TRUE);
}

//********************************************************//
//** set-data-descriptor                                **//
//**                                                    **//
//********************************************************//
int set_data_descriptor(SEGMENT_DESCR   *segdesc,
                                                unsigned long   limit,
                                                unsigned long   base,
                                                unsigned int    dpl

                                              )
{
        set_descriptor(segdesc, limit, base,TYPE_DATA ,SEG_DC,dpl,PRESENT,X_BIT_D );
        return(TRUE);
}


//********************************************************//
//** set-tss                                            **//
//**                                                    **//
//********************************************************//
int set_tss( TSS_SEGMENT  *tss_seg,
                         SELECTOR         codesel,
                         SELECTOR         datasel,
                         long             stack,
                         SELECTOR         sel_LDT
                   )
{
        tss_seg->t3BackLink     =0;                                                     //** TSS backlink
        tss_seg->d1             =0;                                                                     //** Reserved
        tss_seg->t3ESP0         =(unsigned long)stack;          //** Stack 0 pointer (CPL=0)
        tss_seg->t3SS0          =(unsigned int) datasel;        //** Stack 0 segment
        tss_seg->d2             =0;                                                             //** Reserved
        tss_seg->t3ESP1         =(unsigned long)stack;          //** Stack 1 pointer (CPL=1)
        tss_seg->t3SS1          =(unsigned int) datasel;        //** Stack 1 segment
        tss_seg->d3             =0;                                                                     //** Reserved
        tss_seg->t3ESP2         =(unsigned long)stack;          //** Stack 2 pointer (CPL=2)
        tss_seg->t3SS2          =(unsigned int)  datasel;       //** Stack 2 segment
        tss_seg->d4             =0;                                                             //** Reserved
        tss_seg->t3CR3          =0L;                                                    //** CR3
        tss_seg->t3EIP          =0L;                                                            //** Instruction pointer
        tss_seg->t3EFlags       =0x03202;                                       //** Extended flags, interrupts off
        tss_seg->t3EAX          =0L;                                                            //** Task general registers
        tss_seg->t3ECX          =0L;
        tss_seg->t3EDX          =0L;
        tss_seg->t3EBX          =0L;
        tss_seg->t3ESP          =(unsigned long)stack-DPL_3_STACK_OFFSET;
        tss_seg->t3EBP          =0L;
        tss_seg->t3ESI          =0L;
        tss_seg->t3EDI          =0L;
        tss_seg->t3ES           =(unsigned int) datasel;/*datasel;*/                    //** Task segment registers
        tss_seg->d5             =0;                                                                     //** Reserved
        tss_seg->t3CS           =(unsigned int) codesel;
        tss_seg->d6             =0;                                                             //** Reserved
        tss_seg->t3SS           =(unsigned int) datasel;
        tss_seg->d7             =0;                                                                     //** Reserved
        tss_seg->t3DS           =(unsigned int) datasel;
        tss_seg->d8             =0;                                                             //** Reserved
        tss_seg->t3FS           =(unsigned int) SelScreen;  /* Screen selector */
        tss_seg->d9             =0;                                                             //** Reserved
        tss_seg->t3GS           =(unsigned int) SelShm;  /* Shared memory selector */
        tss_seg->d10            =0;                                                             //** Reserved
        tss_seg->t3LDT          =(unsigned int) sel_LDT;                        //** Task local descriptor table
        tss_seg->d11            =0;                                                             //** Reserved
        tss_seg->t3Trap         =0;                                                     //** Holds debug trap bit (T)
        tss_seg->d12            =0;                                                             //** Reserved
        tss_seg->t3IOOfs        =sizeof(TSS_SEGMENT);                   //** I/O map address offset
        tss_seg->terminator     =0xff;                                          //** Terminator 0FFh

        return(TRUE);
}


/* Check have we now processes ready to run*/
/**********************************************************/
/* 注: 這里可能是 schedule() 函數體,我沒有對代碼進行修改          */
/********************************************************* /

while( ( AP >= 0 ) || ( ( ACOUNT > 0) && ( AP == -1 ) ) )
 {                              /* Either old active process " AP" or some else*/
 if( (ACOUNT > 0 ) && (  AP == -1 ) )
  {
  --ACOUNT;                    /* Decrement READY  process count */
  while(++AP <_MAXPROC)        /* Find highest priority ready process */
   if(PCB[AP].STATE == READY )break;  /* Finding high priority process takes*/
                               /* small amount of processing time */
  PCB[AP].STATE=RUNNING;
  TSS_Addr[1]  =Sel_TSS[AP];   /* Set Task state segment as jump adders */
  }

asm jmp dword ptr [TSS_Addr];/* Context switch is made by jump to TSS*/


/* Servicing of software system call "receive message"*/
void Receive(int Box,int Timeout)
 {
  if( MailBox[Box].WaitCount >0 || MailBox[Box].Head == MailBox[Box].Tail )/* Must wait? */
  {
   ++MailBox[Box].WaitCount;           /* We must wait- message (sleeping) */
   PCB[AP].TIMEOUT = TCOUNT + Timeout; /* Store timeout time */
   PCB[AP].MBptr   = Box;              /* Pointer to Box from PCB*/
   PCB[AP].STATE   = WAITING;          /* Process now waiting*/
   AP              = -1;               /* ACTIVE PROCESS IS NO MORE ACTIVE */
   Schedule();
}
 else { if( MailBox[Box].Head != MailBox[Box].Tail)
                PCB[AP].Message = GetBuff(&MailBox[Box]);
      } /* There was  message waiting */
}

/* system call send message service */
void Send(int Box, int Message)
{
 static iy,iold;
 
 if(  MailBox[Box].WaitCount > 0 )   /* There are waiting processes? */
  {
   MailBox[Box].WaitCount--;
   for( iy = 0 ;iy <_MAXPROC ; iy++) /* Seek highest priority waiting process */
   if(PCB[iy].MBptr == Box )
   {
    iold = iy;                       /* Save found process */
    iy   =_MAXPROC;                  /* Out of the loop */
    PCB[iold].STATE   = READY;       /* Found process ready to schedule */
    ACOUNT++;                        /* Increment active process count*/
    PCB[iold].TIMEOUT = -1;          /* Clear timeout */
    PCB[iold].Message = Message;     /* Give message to the waiting process */
    PCB[iold].MBptr   = -1;          /* Process is no more waiting any message queue*/
   }
   if( iold < AP )
      {
        PCB[AP].STATE = READY;     /* Active process is now only READY  */
        ACOUNT++;
        AP            = -1;        /* No active process */
           Schedule();            
      }
    
 }
else { PutBuff(&MailBox[Box],Message);
/* Save message in the circular buffer of the box */

}

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
欧美高清视频不卡网| 国产成人亚洲综合a∨婷婷图片| 99国产欧美久久久精品| 欧美精品一区二区三区在线 | 成人av在线网站| 国产精品色哟哟网站| 99精品视频一区| 性做久久久久久免费观看| 日韩一区二区三区电影 | 黑人精品欧美一区二区蜜桃| 精品国产亚洲一区二区三区在线观看 | 亚洲成人av在线电影| 日韩无一区二区| 高清不卡一区二区在线| 亚洲色图第一区| 欧美一区二区三区色| 国产精品一二三| 亚洲久草在线视频| 欧美放荡的少妇| 久久er精品视频| 中文字幕在线播放不卡一区| 欧美在线不卡视频| 韩国一区二区三区| 一区二区三区日韩精品视频| 日韩欧美国产一区二区三区| a在线欧美一区| 日本在线不卡视频一二三区| 欧美激情综合在线| 欧美性猛交xxxx黑人交| 激情五月激情综合网| 中文字幕日韩精品一区| 日韩免费福利电影在线观看| 国产suv精品一区二区6| 亚洲国产视频一区二区| 国产亚洲欧美一区在线观看| 欧美日韩中文字幕一区| 国产大陆亚洲精品国产| 视频在线观看国产精品| 中文字幕在线观看一区二区| 日韩午夜中文字幕| 91伊人久久大香线蕉| 国产麻豆精品theporn| 亚洲妇熟xx妇色黄| 亚洲丝袜美腿综合| 337p粉嫩大胆噜噜噜噜噜91av| 91官网在线免费观看| 国产成人精品免费视频网站| 亚洲成av人在线观看| 亚洲欧洲日韩综合一区二区| 欧美精品一区二区三区蜜桃视频| 欧美在线不卡视频| 99热在这里有精品免费| 国产美女在线精品| 久久国产婷婷国产香蕉| 亚洲福利视频一区二区| 国产精品国模大尺度视频| 久久亚洲欧美国产精品乐播 | 亚洲精品高清视频在线观看| 国产午夜精品久久久久久免费视 | 美女在线视频一区| 亚洲国产欧美在线| 亚洲人成7777| 亚洲老妇xxxxxx| 亚洲桃色在线一区| 国产精品色呦呦| 中文字幕不卡在线| 欧美国产精品中文字幕| 国产欧美精品区一区二区三区| 日韩欧美黄色影院| 亚洲精品在线观看视频| 欧美一区二区三区男人的天堂| 欧美三级日韩三级| 欧美视频第二页| 欧美亚洲一区二区在线观看| 欧洲精品在线观看| 欧洲av在线精品| 欧美裸体一区二区三区| 欧美午夜一区二区| 欧美精品色综合| 777奇米成人网| 日韩视频一区二区三区| 日韩欧美在线123| 欧美不卡一二三| 久久亚洲一区二区三区四区| 国产欧美视频一区二区三区| 国产欧美视频一区二区三区| 国产精品对白交换视频| 一区二区成人在线| 日韩福利视频导航| 美女在线观看视频一区二区| 国产一区二区在线影院| 国产宾馆实践打屁股91| 色综合亚洲欧洲| 欧美三级日本三级少妇99| 日韩亚洲欧美中文三级| 精品久久国产字幕高潮| 中文字幕+乱码+中文字幕一区| 国产精品护士白丝一区av| 一区二区三区精品视频| 日韩高清在线电影| 国产高清一区日本| 色呦呦国产精品| 欧美精品在线视频| 久久久综合视频| 亚洲三级在线免费观看| 视频一区欧美精品| 国产一区二区福利视频| 一本高清dvd不卡在线观看| 欧美日本一区二区在线观看| 久久亚洲春色中文字幕久久久| 中文字幕视频一区| 免费在线观看一区二区三区| 国产精品影视网| 91精品办公室少妇高潮对白| 日韩欧美在线综合网| 中文字幕制服丝袜一区二区三区 | 欧美成人bangbros| 日韩一区在线播放| 人禽交欧美网站| 99久久精品免费| 日韩欧美在线影院| 亚洲最新视频在线播放| 激情成人午夜视频| 在线观看免费成人| 国产亚洲一区二区三区| 亚洲国产欧美在线人成| 国产成人av一区二区| 69堂成人精品免费视频| 国产精品成人在线观看| 久久精品国产久精国产爱| 在线观看一区日韩| 久久精品一区二区三区不卡牛牛| 亚洲成人一区二区| 91老师片黄在线观看| 久久夜色精品国产欧美乱极品| 亚洲国产综合91精品麻豆| 成人一级黄色片| 久久综合九色欧美综合狠狠| 午夜久久电影网| 色婷婷激情久久| 国产精品污网站| 国产一区二区影院| 7777精品伊人久久久大香线蕉超级流畅 | 欧美一区二区日韩| 亚洲综合在线观看视频| av亚洲精华国产精华精华| 精品99999| 精品在线观看免费| 欧美一区二区性放荡片| 午夜久久久久久久久久一区二区| 91热门视频在线观看| 国产三级一区二区三区| 久草在线在线精品观看| 欧美久久久一区| 亚洲影院久久精品| 色老汉一区二区三区| 日韩美女啊v在线免费观看| 国产不卡一区视频| 国产三区在线成人av| 国产精品一区二区三区网站| 日韩三级av在线播放| 日韩高清不卡一区二区三区| 欧美蜜桃一区二区三区| 亚洲成在线观看| 欧美视频在线观看一区二区| 亚洲黄色在线视频| 色激情天天射综合网| 亚洲综合久久久久| 欧洲av一区二区嗯嗯嗯啊| 一二三区精品福利视频| 欧美在线高清视频| 亚洲国产精品久久人人爱| 欧美精品久久天天躁| 日本va欧美va瓶| 欧美v日韩v国产v| 激情文学综合插| 国产精品天美传媒| 一本久久综合亚洲鲁鲁五月天| 伊人开心综合网| 欧美精品丝袜中出| 久久不见久久见免费视频7| 久久精品一区八戒影视| 成人免费av在线| 一区二区免费在线播放| 欧美三级午夜理伦三级中视频| 日本成人在线看| 精品不卡在线视频| 高清不卡一区二区在线| 亚洲人成网站精品片在线观看| 欧美日韩亚洲综合在线 | 久久国产精品无码网站| 国产日韩欧美制服另类| 99这里只有久久精品视频| 亚洲激情av在线| 日韩欧美亚洲另类制服综合在线| 国内精品伊人久久久久影院对白| 国产欧美日韩综合精品一区二区| 日本高清不卡aⅴ免费网站| 免费成人结看片| 国产精品免费观看视频|