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

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

?? linux內核原代碼sched.c的注釋.txt

?? 學習(編程技巧_編程知識_程序代碼),是學習編程不可多得的學習精驗
?? TXT
字號:
linux內核原代碼sched.c的注釋
 

--------------------------------------------------------------------------------
 
第八軍團 時間:2004-1-23 15:49:44 
   
 /*
  * 'sched.c' is the main kernel file. It contains scheduling primitives
  * (sleep_on, wakeup, schedule etc) as well as a number of simple system
  * call functions (type getpid(), which just extracts a field from
  * current-task
  */
  #include 
  #include 
  #include 
  #include 
  #include 
  #include 
  #include 
#define LATCH (1193180/HZ) 

extern void mem_use(void); 

extern int timer_interrupt(void);
  extern int system_call(void); 

union task_union {
  struct task_struct task;
  char stack[PAGE_SIZE];
  }; 

static union task_union init_task = {INIT_TASK,}; 

long volatile jiffies=0;
  long startup_time=0;
  struct task_struct *current = &(init_task.task), *last_task_used_math =
  NULL; 

struct task_struct * task[NR_TASKS] = {&(init_task.task), }; 

long user_stack [ PAGE_SIZE>>2 ] ; 

struct {
  long * a;
  short b;
  } stack_start = { & user_stack [PAGE_SIZE>>2] , 0x10 };
  /*
  * 'math_state_restore()' saves the current math information in the
  * old math state array, and gets the new ones from the current task
  */
  void math_state_restore() @@協處理器狀態保存
  {
  if (last_task_used_math)
   __asm__("fnsave %0"::"m" (last_task_used_math->tss.i387));
  if (current->used_math)
   __asm__("frstor %0"::"m" (current->tss.i387));
  else {
   __asm__("fninit"::);
   current->used_math=1;
  }
  last_task_used_math=current;
  } 

/*
  * 'schedule()' is the scheduler function. This is GOOD CODE! There
  * probably won't be any reason to change this, as it should work well
  * in all circumstances (ie gives IO-bound processes good response etc). 

* The one thing you might take a look at is the signal-handler code
  here.
  *
  * NOTE!! Task 0 is the 'idle' task, which gets called when no other
  * tasks can run. It can not be killed, and it cannot sleep. The 'state' 

* information in task[0] is never used.
  */
  void schedule(void)
  {
  int i,next,c;
  struct task_struct ** p; 

/* check alarm, wake up any interruptible tasks that have got a signal
  */ 

for(p = &LAST_TASK ; p >&FIRST_TASK ; --p)
   if (*p) {
   if ((*p)->alarm && (*p)->alarm signal |= (1alarm = 0;
   }
   if ((*p)->signal && (*p)->state==TASK_INTERRUPTIBLE)
   (*p)->state=TASK_RUNNING;
   }
  @@ task 1 如何變為TASK_RUNNING??signal 如何得到,alarm如何變非0且state == TASK_RUNNING && (*p)->counter >c)
   c = (*p)->counter, next = i;
   }
   if (c) break; @@記數大于零
   for(p = &LAST_TASK ; p >&FIRST_TASK ; --p)
   if (*p)
   (*p)->counter = ((*p)->counter >>1) +
   (*p)->priority;
  }
  switch_to(next);
  } 

int sys_pause(void)
  {
  current->state = TASK_INTERRUPTIBLE; @@任務可中斷
  schedule();
  return 0;
  } 

void sleep_on(struct task_struct **p)
  {
  struct task_struct *tmp; 

if (!p)
   return;
  if (current == &(init_task.task))
   panic("task[0] trying to sleep");
  tmp = *p;
  *p = current;
  current->state = TASK_UNINTERRUPTIBLE;
  schedule();
  if (tmp) @@激活p,什么時候回來?喚醒上次睡眠的進程
   tmp->state=0;
  } 

void interruptible_sleep_on(struct task_struct **p)
  {
  struct task_struct *tmp; 

if (!p)
   return;
  if (current == &(init_task.task))
   panic("task[0] trying to sleep");
  tmp=*p;
  *p=current;
  repeat: current->state = TASK_INTERRUPTIBLE;
  schedule();
  if (*p && *p != current) {
   (**p).state=0;
   goto repeat;
  }
   @@好象下不來
  *p=NULL;
  if (tmp)
   tmp->state=0;
  } 

void wake_up(struct task_struct **p)
  {
  if (p && *p) {
   (**p).state=0; @@喚醒該進程running
   *p=NULL; @@睡眠棧為0
  }
  } 

void do_timer(long cpl) @@定時調度
  {
  if (cpl)
   current->utime++; @@用戶態時間加一
  else
   current->stime++; @@系統態時間加一
  if ((--current->counter)>0) return; @@當前記數減一
  current->counter=0;
  if (!cpl) return;
  schedule();
  } 

int sys_alarm(long seconds)
  {
  current->alarm = (seconds>0)?(jiffies+HZ*seconds):0;
  return seconds;
  } 

int sys_getpid(void)
  {
  return current->pid;
  } 

int sys_getppid(void)
  {
  return current->father;
  } 

int sys_getuid(void)
  {
  return current->uid;
  } 

int sys_geteuid(void)
  {
  return current->euid;
  } 

int sys_getgid(void)
  {
  return current->gid;
  } 

int sys_getegid(void)
  {
  return current->egid;
  } 

int sys_nice(long increment)
  {
  if (current->priority-increment>0)
   current->priority -= increment;
  return 0;
  } 

int sys_signal(long signal,long addr,long restorer)
  {
  long i; 

switch (signal) {
   case SIGHUP: case SIGINT: case SIGQUIT: case SIGILL:
   case SIGTRAP: case SIGABRT: case SIGFPE: case SIGUSR1:
   case SIGSEGV: case SIGUSR2: case SIGPIPE: case SIGALRM:
   case SIGCHLD:
   i=(long) current->sig_fn[signal-1];
   current->sig_fn[signal-1] = (fn_ptr) addr;
   current->sig_restorer = (fn_ptr) restorer;
   return i;
   default: return -1;
  }
  } 

void sched_init(void)
  {
  int i;
  struct desc_struct * p; 

set_tss_desc(gdt+FIRST_TSS_ENTRY,&(init_task.task.tss));@@init task tss 

set_ldt_desc(gdt+FIRST_LDT_ENTRY,&(init_task.task.ldt));@@init ldt
  p = gdt+2+FIRST_TSS_ENTRY;
  for(i=1;ia=p->b=0;
   p++;
   p->a=p->b=0;
   p++;
  }
  ltr(0); @@調入task 0的tss
  lldt(0); @@調入task 0的ldt
  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); @@irq 0 時鐘中斷
  outb(inb_p(0x21)&~0x01,0x21);
  set_system_gate(0x80,&system_call);
  }

 
 

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
欧美日韩一区二区三区高清| 97aⅴ精品视频一二三区| 亚洲一区二区三区不卡国产欧美 | 亚洲三级在线观看| 久久蜜臀精品av| 日本一区二区三区久久久久久久久不| 欧美电影免费观看完整版| 日韩一级成人av| 久久久影视传媒| 中文文精品字幕一区二区| 国产免费观看久久| 一区二区三区久久久| 一区二区三区不卡视频在线观看 | 欧美人妖巨大在线| 欧美剧情片在线观看| 日韩视频免费观看高清完整版在线观看 | 奇米影视一区二区三区| 蜜臀91精品一区二区三区| 久久99精品久久久久久| 国内外成人在线视频| 极品少妇xxxx精品少妇| 国产高清在线精品| 色综合天天综合狠狠| 精品视频免费在线| 91精品午夜视频| 日本一区二区在线不卡| 一区二区三区日韩欧美| 美女被吸乳得到大胸91| 国产很黄免费观看久久| 色综合久久综合| 91.麻豆视频| 国产欧美日韩麻豆91| 夜夜嗨av一区二区三区网页| 日韩不卡一区二区三区| 国产成人日日夜夜| 欧美三级日韩在线| 日本一区二区三区久久久久久久久不| 亚洲人妖av一区二区| 久久不见久久见免费视频7| 欧美电影影音先锋| 国产女人18水真多18精品一级做| 一区二区三区在线观看欧美| 久久精品国产99国产| 色哟哟在线观看一区二区三区| 日韩欧美电影一二三| 亚洲综合一区二区| 不卡欧美aaaaa| 久久伊人中文字幕| 人人精品人人爱| 在线观看91精品国产入口| 久久精品人人爽人人爽| 日韩精品成人一区二区三区 | 欧美在线啊v一区| 国产日产欧美一区二区三区| 午夜视频久久久久久| 91丨九色丨尤物| www亚洲一区| 日本大胆欧美人术艺术动态| 欧洲生活片亚洲生活在线观看| xnxx国产精品| 久久成人18免费观看| 777久久久精品| 五月天网站亚洲| 色天天综合色天天久久| 日本一区二区三区免费乱视频| 久久99九九99精品| 91麻豆精品国产91久久久资源速度 | 另类的小说在线视频另类成人小视频在线 | 国产拍欧美日韩视频二区| 日韩av一二三| 5566中文字幕一区二区电影| 一区二区三区国产豹纹内裤在线| 不卡电影一区二区三区| 亚洲欧洲精品天堂一级| av电影一区二区| 国产精品成人免费| 99精品欧美一区二区蜜桃免费| 国产亚洲欧美一区在线观看| 国产精品亚洲午夜一区二区三区 | 欧美四级电影在线观看| 一区二区在线观看免费视频播放| 99精品视频在线播放观看| 国产精品每日更新| www.日本不卡| 亚洲一区二区三区视频在线| 欧美探花视频资源| 日本午夜精品一区二区三区电影| 日韩欧美电影一区| 国产成人免费视频一区| 国产精品久久久久久久久免费桃花| 成人午夜视频在线观看| 亚洲视频免费在线观看| 欧美自拍偷拍午夜视频| 日本伊人色综合网| 久久久久综合网| 99久久精品国产导航| 亚洲精品乱码久久久久久久久 | 日韩黄色免费电影| 精品国精品国产尤物美女| 国产伦理精品不卡| 亚洲欧美乱综合| 欧美精品视频www在线观看| 精品综合久久久久久8888| 国产精品另类一区| 欧美裸体一区二区三区| 国产一区二区调教| 亚洲精品中文在线影院| 欧美一三区三区四区免费在线看| 国产一区二区三区不卡在线观看 | 三级欧美在线一区| 国产欧美综合在线观看第十页| 99久久国产综合精品女不卡| 日日骚欧美日韩| 国产视频一区在线观看| 欧美在线免费观看视频| 国产一区二区免费看| 亚洲三级视频在线观看| 精品精品欲导航| 欧美日韩一区国产| 成人av动漫网站| 麻豆精品在线观看| 国产成人av电影在线播放| 一区二区三区欧美久久| 久久久久国产成人精品亚洲午夜| 欧美性受xxxx| 成人深夜视频在线观看| 久久精品久久综合| 午夜视频在线观看一区二区三区| 国产欧美日韩精品一区| 日韩一区二区三区视频在线| 色婷婷久久久久swag精品| 国产乱子伦一区二区三区国色天香| 一区二区三区高清不卡| 欧美极品美女视频| 2020国产精品久久精品美国| 欧洲一区二区三区在线| 99re这里都是精品| 风间由美一区二区三区在线观看| 五月综合激情日本mⅴ| 亚洲另类色综合网站| 国产精品美女久久久久高潮| 精品欧美一区二区三区精品久久| 欧美无人高清视频在线观看| av动漫一区二区| 成人小视频在线| 成人午夜精品在线| 高清成人在线观看| 国产高清视频一区| 国产传媒日韩欧美成人| 国内成人精品2018免费看| 麻豆中文一区二区| 精品系列免费在线观看| 卡一卡二国产精品| 国内不卡的二区三区中文字幕| 日韩黄色免费电影| 日本午夜精品一区二区三区电影 | ww久久中文字幕| 国产午夜精品福利| 中文字幕欧美日韩一区| 欧美激情中文不卡| 亚洲女爱视频在线| 亚洲在线观看免费| 亚洲无线码一区二区三区| 婷婷中文字幕综合| 日本aⅴ亚洲精品中文乱码| 久久99精品久久只有精品| 精品一区二区三区在线播放视频| 蜜桃视频一区二区三区在线观看| 久久www免费人成看片高清| 激情伊人五月天久久综合| 国产剧情在线观看一区二区| 91精品国产欧美一区二区| 精品盗摄一区二区三区| 欧美极品xxx| 亚洲综合激情另类小说区| 日韩极品在线观看| 国产91在线观看| 日本乱人伦一区| 欧美一区日本一区韩国一区| 2欧美一区二区三区在线观看视频| 久久久精品免费网站| 一区二区三区欧美亚洲| 日韩国产一区二| 成人黄色在线视频| 欧美猛男男办公室激情| 26uuu国产电影一区二区| 亚洲女厕所小便bbb| 另类小说一区二区三区| 91在线看国产| 欧美成人精品3d动漫h| 国产精品视频一二| 日韩精品1区2区3区| 9人人澡人人爽人人精品| 欧美一区二区在线播放| 中文字幕一区二区三区在线观看| 五月婷婷久久综合| 99精品视频在线免费观看| 欧美变态口味重另类| 亚洲国产成人av| 成人av小说网|