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

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

?? sched.c

?? 帶中文注釋的linux 0.11源碼 很好
?? C
?? 第 1 頁 / 共 2 頁
字號:
// 指定軟盤到正常運轉狀態所需延遲滴答數(時間)。// nr -- 軟驅號(0-3),返回值為滴答數。intticks_to_floppy_on (unsigned int nr){  extern unsigned char selected;	// 當前選中的軟盤號(kernel/blk_drv/floppy.c,122)。  unsigned char mask = 0x10 << nr;	// 所選軟驅對應數字輸出寄存器中啟動馬達比特位。  if (nr > 3)    panic ("floppy_on: nr>3");	// 最多4 個軟驅。  moff_timer[nr] = 10000;	/* 100 s = very big :-) */  cli ();			/* use floppy_off to turn it off */  mask |= current_DOR;  // 如果不是當前軟驅,則首先復位其它軟驅的選擇位,然后置對應軟驅選擇位。  if (!selected)    {      mask &= 0xFC;      mask |= nr;    }  // 如果數字輸出寄存器的當前值與要求的值不同,則向FDC 數字輸出端口輸出新值(mask)。并且如果  // 要求啟動的馬達還沒有啟動,則置相應軟驅的馬達啟動定時器值(HZ/2 = 0.5 秒或50 個滴答)。  // 此后更新當前數字輸出寄存器值current_DOR。  if (mask != current_DOR)    {      outb (mask, FD_DOR);      if ((mask ^ current_DOR) & 0xf0)	mon_timer[nr] = HZ / 2;      else if (mon_timer[nr] < 2)	mon_timer[nr] = 2;      current_DOR = mask;    }  sti ();  return mon_timer[nr];}// 等待指定軟驅馬達啟動所需時間。voidfloppy_on (unsigned int nr){  cli ();			// 關中斷。  while (ticks_to_floppy_on (nr))	// 如果馬達啟動定時還沒到,就一直把當前進程置    sleep_on (nr + wait_motor);	// 為不可中斷睡眠狀態并放入等待馬達運行的隊列中。  sti ();			// 開中斷。}// 置關閉相應軟驅馬達停轉定時器(3 秒)。voidfloppy_off (unsigned int nr){  moff_timer[nr] = 3 * HZ;}// 軟盤定時處理子程序。更新馬達啟動定時值和馬達關閉停轉計時值。該子程序是在時鐘定時// 中斷中被調用,因此每一個滴答(10ms)被調用一次,更新馬達開啟或停轉定時器的值。如果某// 一個馬達停轉定時到,則將數字輸出寄存器馬達啟動位復位。voiddo_floppy_timer (void){  int i;  unsigned char mask = 0x10;  for (i = 0; i < 4; i++, mask <<= 1)    {      if (!(mask & current_DOR))	// 如果不是DOR 指定的馬達則跳過。	continue;      if (mon_timer[i])	{	  if (!--mon_timer[i])	    wake_up (i + wait_motor);	// 如果馬達啟動定時到則喚醒進程。	}      else if (!moff_timer[i])	{			// 如果馬達停轉定時到則	  current_DOR &= ~mask;	// 復位相應馬達啟動位,并	  outb (current_DOR, FD_DOR);	// 更新數字輸出寄存器。	}      else	moff_timer[i]--;	// 馬達停轉計時遞減。    }}#define TIME_REQUESTS 64	// 最多可有64 個定時器鏈表(64 個任務)。// 定時器鏈表結構和定時器數組。static struct timer_list{  long jiffies;			// 定時滴答數。  void (*fn) ();		// 定時處理程序。  struct timer_list *next;	// 下一個定時器。}timer_list[TIME_REQUESTS], *next_timer = NULL;// 添加定時器。輸入參數為指定的定時值(滴答數)和相應的處理程序指針。// jiffies – 以10 毫秒計的滴答數;*fn()- 定時時間到時執行的函數。voidadd_timer (long jiffies, void (*fn) (void)){  struct timer_list *p;  // 如果定時處理程序指針為空,則退出。  if (!fn)    return;  cli ();  // 如果定時值<=0,則立刻調用其處理程序。并且該定時器不加入鏈表中。  if (jiffies <= 0)    (fn) ();  else    {      // 從定時器數組中,找一個空閑項。      for (p = timer_list; p < timer_list + TIME_REQUESTS; p++)	if (!p->fn)	  break;      // 如果已經用完了定時器數組,則系統崩潰?。      if (p >= timer_list + TIME_REQUESTS)	panic ("No more time requests free");      // 向定時器數據結構填入相應信息。并鏈入鏈表頭      p->fn = fn;      p->jiffies = jiffies;      p->next = next_timer;      next_timer = p;      // 鏈表項按定時值從小到大排序。在排序時減去排在前面需要的滴答數,這樣在處理定時器時只要      // 查看鏈表頭的第一項的定時是否到期即可。[[?? 這段程序好象沒有考慮周全。如果新插入的定時      // 器值 < 原來頭一個定時器值時,也應該將所有后面的定時值均減去新的第1 個的定時值。]]      while (p->next && p->next->jiffies < p->jiffies)	{	  p->jiffies -= p->next->jiffies;	  fn = p->fn;	  p->fn = p->next->fn;	  p->next->fn = fn;	  jiffies = p->jiffies;	  p->jiffies = p->next->jiffies;	  p->next->jiffies = jiffies;	  p = p->next;	}    }  sti ();}//// 時鐘中斷C 函數處理程序,在kernel/system_call.s 中的_timer_interrupt(176 行)被調用。// 參數cpl 是當前特權級0 或3,0 表示內核代碼在執行。// 對于一個進程由于執行時間片用完時,則進行任務切換。并執行一個計時更新工作。voiddo_timer (long cpl){  extern int beepcount;		// 揚聲器發聲時間滴答數(kernel/chr_drv/console.c,697)  extern void sysbeepstop (void);	// 關閉揚聲器(kernel/chr_drv/console.c,691)  // 如果發聲計數次數到,則關閉發聲。(向0x61 口發送命令,復位位0 和1。位0 控制8253  // 計數器2 的工作,位1 控制揚聲器)。  if (beepcount)    if (!--beepcount)      sysbeepstop ();  // 如果當前特權級(cpl)為0(最高,表示是內核程序在工作),則將超級用戶運行時間stime 遞增;  // 如果cpl > 0,則表示是一般用戶程序在工作,增加utime。  if (cpl)    current->utime++;  else    current->stime++;  // 如果有用戶的定時器存在,則將鏈表第1 個定時器的值減1。如果已等于0,則調用相應的處理  // 程序,并將該處理程序指針置為空。然后去掉該項定時器。  if (next_timer)    {				// next_timer 是定時器鏈表的頭指針(見270 行)。      next_timer->jiffies--;      while (next_timer && next_timer->jiffies <= 0)	{	  void (*fn) (void);	// 這里插入了一個函數指針定義?。?!??	  fn = next_timer->fn;	  next_timer->fn = NULL;	  next_timer = next_timer->next;	  (fn) ();		// 調用處理函數。	}    }  // 如果當前軟盤控制器FDC 的數字輸出寄存器中馬達啟動位有置位的,則執行軟盤定時程序(245 行)。  if (current_DOR & 0xf0)    do_floppy_timer ();  if ((--current->counter) > 0)    return;			// 如果進程運行時間還沒完,則退出。  current->counter = 0;  if (!cpl)    return;			// 對于超級用戶程序,不依賴counter 值進行調度。  schedule ();}// 系統調用功能 - 設置報警定時時間值(秒)。// 如果已經設置過alarm 值,則返回舊值,否則返回0。intsys_alarm (long seconds){  int old = current->alarm;  if (old)    old = (old - jiffies) / HZ;  current->alarm = (seconds > 0) ? (jiffies + HZ * seconds) : 0;  return (old);}// 取當前進程號pid。intsys_getpid (void){  return current->pid;}// 取父進程號ppid。intsys_getppid (void){  return current->father;}// 取用戶號uid。intsys_getuid (void){  return current->uid;}// 取euid。intsys_geteuid (void){  return current->euid;}// 取組號gid。intsys_getgid (void){  return current->gid;}// 取egid。intsys_getegid (void){  return current->egid;}// 系統調用功能 -- 降低對CPU 的使用優先權(有人會用嗎??)。// 應該限制increment 大于0,否則的話,可使優先權增大??!intsys_nice (long increment){  if (current->priority - increment > 0)    current->priority -= increment;  return 0;}// 調度程序的初始化子程序。voidsched_init (void){  int i;  struct desc_struct *p;	// 描述符表結構指針。  if (sizeof (struct sigaction) != 16)	// sigaction 是存放有關信號狀態的結構。    panic ("Struct sigaction MUST be 16 bytes");  // 設置初始任務(任務0)的任務狀態段描述符和局部數據表描述符(include/asm/system.h,65)。  set_tss_desc (gdt + FIRST_TSS_ENTRY, &(init_task.task.tss));  set_ldt_desc (gdt + FIRST_LDT_ENTRY, &(init_task.task.ldt));  // 清任務數組和描述符表項(注意i=1 開始,所以初始任務的描述符還在)。  p = gdt + 2 + FIRST_TSS_ENTRY;  for (i = 1; i < NR_TASKS; i++)    {      task[i] = NULL;      p->a = p->b = 0;      p++;      p->a = p->b = 0;      p++;    }  /* Clear NT, so that we won't have troubles with that later on */  /* 清除標志寄存器中的位NT,這樣以后就不會有麻煩 */  // NT 標志用于控制程序的遞歸調用(Nested Task)。當NT 置位時,那么當前中斷任務執行  // iret 指令時就會引起任務切換。NT 指出TSS 中的back_link 字段是否有效。  __asm__ ("pushfl ; andl $0xffffbfff,(%esp) ; popfl");	// 復位NT 標志。  ltr (0);			// 將任務0 的TSS 加載到任務寄存器tr。  lldt (0);			// 將局部描述符表加載到局部描述符表寄存器。  // 注意?。∈菍DT 中相應LDT 描述符的選擇符加載到ldtr。只明確加載這一次,以后新任務  // LDT 的加載,是CPU 根據TSS 中的LDT 項自動加載。  // 下面代碼用于初始化8253 定時器。  outb_p (0x36, 0x43);		/* binary, mode 3, LSB/MSB, ch 0 */  outb_p (LATCH & 0xff, 0x40);	/* LSB */// 定時值低字節。  outb (LATCH >> 8, 0x40);	/* MSB */// 定時值高字節。  // 設置時鐘中斷處理程序句柄(設置時鐘中斷門)。  set_intr_gate (0x20, &timer_interrupt);  // 修改中斷控制器屏蔽碼,允許時鐘中斷。  outb (inb_p (0x21) & ~0x01, 0x21);  // 設置系統調用中斷門。  set_system_gate (0x80, &system_call);}

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
久久99精品国产麻豆不卡| 欧美丝袜丝交足nylons图片| 精品视频一区二区不卡| 精品亚洲国内自在自线福利| 视频一区在线播放| 日韩国产在线观看一区| 日韩综合小视频| 奇米777欧美一区二区| 亚洲va国产天堂va久久en| 亚洲一二三四在线| 亚洲一区电影777| 日韩黄色片在线观看| 美女网站视频久久| 极品少妇一区二区三区精品视频| 韩国理伦片一区二区三区在线播放| 国产一区二区三区在线观看免费 | 亚洲亚洲精品在线观看| 国产成人在线观看| 成人久久视频在线观看| 色综合久久综合网欧美综合网| 一本色道亚洲精品aⅴ| 欧美军同video69gay| 91精品国产欧美一区二区| 久久综合狠狠综合| 综合久久久久久久| 丝袜美腿高跟呻吟高潮一区| 蜜臀国产一区二区三区在线播放| 国产毛片精品视频| 欧美在线影院一区二区| 欧美tickling挠脚心丨vk| 亚洲动漫第一页| 国产精品资源在线看| 一本大道久久精品懂色aⅴ| 欧美一区二区观看视频| 黄页视频在线91| jiyouzz国产精品久久| 8v天堂国产在线一区二区| 久久久久久久久久久电影| 一区二区三区资源| 国产激情91久久精品导航| 欧美日韩日本视频| 欧美国产日产图区| 日韩在线一区二区| 色婷婷综合激情| 国产视频视频一区| 免费在线成人网| 日本久久一区二区三区| 久久精品水蜜桃av综合天堂| 亚欧色一区w666天堂| 99re在线精品| 美女视频一区在线观看| 欧美专区日韩专区| 综合亚洲深深色噜噜狠狠网站| 九色porny丨国产精品| 欧美日韩高清一区二区不卡| 中文字幕一区日韩精品欧美| 国产一区二区视频在线| 日韩欧美中文字幕一区| 亚洲丰满少妇videoshd| 欧美亚洲一区三区| 国产黄人亚洲片| www久久精品| 麻豆精品一二三| 91精品国产一区二区三区| 一区二区在线观看视频| 91在线高清观看| 亚洲欧洲精品成人久久奇米网| 国产精品99久久久久久久vr| 26uuu亚洲综合色欧美 | 亚洲一卡二卡三卡四卡无卡久久 | 性做久久久久久免费观看| 色综合色狠狠综合色| 亚洲美女免费在线| 色综合久久六月婷婷中文字幕| 中文字幕制服丝袜一区二区三区| 成人的网站免费观看| 亚洲精品国产精品乱码不99| 免费高清在线一区| 欧美色国产精品| 日韩一区二区三区电影在线观看 | 亚洲国产综合91精品麻豆| 国产成人久久精品77777最新版本| 欧美v日韩v国产v| 国产综合色产在线精品| 久久久久久久久久久久久夜| 国产成人精品影视| 中文字幕在线不卡| 色狠狠桃花综合| 91 com成人网| 国产成人亚洲综合a∨猫咪| 中文字幕乱码日本亚洲一区二区 | 国产日韩欧美不卡| 波多野结衣中文一区| 国产精品毛片久久久久久久| 91在线免费播放| 欧美日本不卡视频| 韩国三级电影一区二区| 中文幕一区二区三区久久蜜桃| 国产91精品免费| 亚洲最快最全在线视频| 4438x亚洲最大成人网| 经典一区二区三区| 亚洲视频综合在线| 在线不卡一区二区| 国产69精品久久99不卡| 亚洲亚洲人成综合网络| 久久免费美女视频| 中文字幕精品综合| 欧美日韩国产bt| 不卡在线视频中文字幕| 婷婷丁香激情综合| 国产精品私人影院| 911精品产国品一二三产区| 福利一区在线观看| 日韩av一区二区三区四区| 日本一二三不卡| 日韩一区二区在线看| 不卡欧美aaaaa| 久久99久久99精品免视看婷婷| 亚洲黄色免费电影| 欧美国产激情一区二区三区蜜月| 在线看国产一区二区| 国产精品一区二区三区99| 偷拍一区二区三区四区| 中文字幕日韩一区| 久久嫩草精品久久久精品| 欧美福利一区二区| 在线观看91视频| av电影在线不卡| 国产不卡在线播放| 麻豆国产精品一区二区三区 | 色婷婷综合久久久中文一区二区| 精品一区二区三区av| 日韩和欧美一区二区三区| 艳妇臀荡乳欲伦亚洲一区| 欧美国产视频在线| 国产午夜精品美女毛片视频| 欧美一区二区三区爱爱| 欧美日韩三级视频| 欧美私人免费视频| 欧美主播一区二区三区| 91麻豆精品在线观看| 99re这里只有精品6| av在线一区二区三区| 成人性色生活片免费看爆迷你毛片| 精品一区二区三区蜜桃| 国产在线视频一区二区三区| 精品一区二区三区香蕉蜜桃| 美女mm1313爽爽久久久蜜臀| 日本视频中文字幕一区二区三区| 亚洲成人免费视| 亚洲成av人片在线观看| 欧美日本一区二区在线观看| 欧美视频在线一区二区三区| 欧美在线短视频| 欧美色电影在线| 欧美一区二区三区四区在线观看 | 欧美精三区欧美精三区| 欧美精品色综合| 欧美一区二区三区不卡| 精品88久久久久88久久久| 久久久久久免费网| 国产精品私房写真福利视频| 亚洲色图第一区| 性感美女久久精品| 久久99精品久久久久久国产越南 | 国产成人精品亚洲777人妖| 国产裸体歌舞团一区二区| 国产成人综合亚洲网站| 成人国产在线观看| 欧美这里有精品| 日韩精品专区在线影院重磅| 久久久久亚洲综合| 最新热久久免费视频| 午夜精品久久久久久久蜜桃app| 日产国产欧美视频一区精品| 精品一二三四区| 91视频你懂的| 日韩欧美国产综合一区| 精品亚洲欧美一区| 色偷偷一区二区三区| 日韩视频一区二区在线观看| 欧美国产欧美综合| 午夜婷婷国产麻豆精品| 国产一区二区导航在线播放| 91丝袜美女网| 26uuu久久天堂性欧美| 亚洲码国产岛国毛片在线| 久久精品国产一区二区| 99久久亚洲一区二区三区青草| 欧美日韩国产一级片| 国产欧美日韩不卡| 视频一区国产视频| 91在线观看下载| 久久亚洲精精品中文字幕早川悠里 | 综合av第一页| 青椒成人免费视频| 日本大香伊一区二区三区| 精品三级在线看| 视频一区二区中文字幕|