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

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

?? signal.c

?? 帶中文注釋的Linux+0.11+源代碼
?? C
字號:
/** linux/kernel/signal.c** (C) 1991 Linus Torvalds*/#include <linux/sched.h>	// 調度程序頭文件,定義了任務結構task_struct、初始任務0 的數據,// 還有一些有關描述符參數設置和獲取的嵌入式匯編函數宏語句。#include <linux/kernel.h>	// 內核頭文件。含有一些內核常用函數的原形定義。#include <asm/segment.h>	// 段操作頭文件。定義了有關段寄存器操作的嵌入式匯編函數。#include <signal.h>		// 信號頭文件。定義信號符號常量,信號結構以及信號操作函數原型。volatile void do_exit (int error_code);	// 前面的限定符volatile 要求編譯器不要對其進行優化。// 獲取當前任務信號屏蔽位圖(屏蔽碼)。intsys_sgetmask (){  return current->blocked;}// 設置新的信號屏蔽位圖。SIGKILL 不能被屏蔽。返回值是原信號屏蔽位圖。intsys_ssetmask (int newmask){  int old = current->blocked;  current->blocked = newmask & ~(1 << (SIGKILL - 1));  return old;}// 復制sigaction 數據到fs 數據段to 處。。static inline voidsave_old (char *from, char *to){  int i;  verify_area (to, sizeof (struct sigaction));	// 驗證to 處的內存是否足夠。  for (i = 0; i < sizeof (struct sigaction); i++)    {      put_fs_byte (*from, to);	// 復制到fs 段。一般是用戶數據段。      from++;			// put_fs_byte()在include/asm/segment.h 中。      to++;    }}// 把sigaction 數據從fs 數據段from 位置復制到to 處。static inline voidget_new (char *from, char *to){  int i;  for (i = 0; i < sizeof (struct sigaction); i++)    *(to++) = get_fs_byte (from++);}// signal()系統調用。類似于sigaction()。為指定的信號安裝新的信號句柄(信號處理程序)。// 信號句柄可以是用戶指定的函數,也可以是SIG_DFL(默認句柄)或SIG_IGN(忽略)。// 參數signum --指定的信號;handler -- 指定的句柄;restorer –原程序當前執行的地址位置。// 函數返回原信號句柄。intsys_signal (int signum, long handler, long restorer){  struct sigaction tmp;  if (signum < 1 || signum > 32 || signum == SIGKILL)	// 信號值要在(1-32)范圍內,    return -1;			// 并且不得是SIGKILL。  tmp.sa_handler = (void (*)(int)) handler;	// 指定的信號處理句柄。  tmp.sa_mask = 0;		// 執行時的信號屏蔽碼。  tmp.sa_flags = SA_ONESHOT | SA_NOMASK;	// 該句柄只使用1 次后就恢復到默認值,// 并允許信號在自己的處理句柄中收到。  tmp.sa_restorer = (void (*)(void)) restorer;	// 保存返回地址。  handler = (long) current->sigaction[signum - 1].sa_handler;  current->sigaction[signum - 1] = tmp;  return handler;}// sigaction()系統調用。改變進程在收到一個信號時的操作。signum 是除了SIGKILL 以外的任何// 信號。[如果新操作(action)不為空]則新操作被安裝。如果oldaction 指針不為空,則原操作// 被保留到oldaction。成功則返回0,否則為-1。intsys_sigaction (int signum, const struct sigaction *action,	       struct sigaction *oldaction){  struct sigaction tmp;// 信號值要在(1-32)范圍內,并且信號SIGKILL 的處理句柄不能被改變。  if (signum < 1 || signum > 32 || signum == SIGKILL)    return -1;// 在信號的sigaction 結構中設置新的操作(動作)。  tmp = current->sigaction[signum - 1];  get_new ((char *) action, (char *) (signum - 1 + current->sigaction));// 如果oldaction 指針不為空的話,則將原操作指針保存到oldaction 所指的位置。  if (oldaction)    save_old ((char *) &tmp, (char *) oldaction);// 如果允許信號在自己的信號句柄中收到,則令屏蔽碼為0,否則設置屏蔽本信號。  if (current->sigaction[signum - 1].sa_flags & SA_NOMASK)    current->sigaction[signum - 1].sa_mask = 0;  else    current->sigaction[signum - 1].sa_mask |= (1 << (signum - 1));  return 0;}// 系統調用中斷處理程序中真正的信號處理程序(在kernel/system_call.s,119 行)。// 該段代碼的主要作用是將信號的處理句柄插入到用戶程序堆棧中,并在本系統調用結束// 返回后立刻執行信號句柄程序,然后繼續執行用戶的程序。voiddo_signal (long signr, long eax, long ebx, long ecx, long edx,	   long fs, long es, long ds,	   long eip, long cs, long eflags, unsigned long *esp, long ss){  unsigned long sa_handler;  long old_eip = eip;  struct sigaction *sa = current->sigaction + signr - 1;	//current->sigaction[signu-1]。  int longs;  unsigned long *tmp_esp;  sa_handler = (unsigned long) sa->sa_handler;// 如果信號句柄為SIG_IGN(忽略),則返回;如果句柄為SIG_DFL(默認處理),則如果信號是// SIGCHLD 則返回,否則終止進程的執行  if (sa_handler == 1)    return;  if (!sa_handler)    {      if (signr == SIGCHLD)	return;      else	do_exit (1 << (signr - 1));	// [?? 為什么以信號位圖為參數?不為什么!??]// 這里應該是do_exit(1<<signr))。    }// 如果該信號句柄只需使用一次,則將該句柄置空(該信號句柄已經保存在sa_handler 指針中)。  if (sa->sa_flags & SA_ONESHOT)    sa->sa_handler = NULL;// 下面這段代碼將信號處理句柄插入到用戶堆棧中,同時也將sa_restorer,signr,進程屏蔽碼(如果// SA_NOMASK 沒置位),eax,ecx,edx 作為參數以及原調用系統調用的程序返回指針及標志寄存器值// 壓入堆棧。因此在本次系統調用中斷(0x80)返回用戶程序時會首先執行用戶的信號句柄程序,然后// 再繼續執行用戶程序。// 將用戶調用系統調用的代碼指針eip 指向該信號處理句柄。  *(&eip) = sa_handler;// 如果允許信號自己的處理句柄收到信號自己,則也需要將進程的阻塞碼壓入堆棧。  longs = (sa->sa_flags & SA_NOMASK) ? 7 : 8;// 將原調用程序的用戶的堆棧指針向下擴展7(或8)個長字(用來存放調用信號句柄的參數等),// 并檢查內存使用情況(例如如果內存超界則分配新頁等)。  *(&esp) -= longs;  verify_area (esp, longs * 4);// 在用戶堆棧中從下到上存放sa_restorer, 信號signr, 屏蔽碼blocked(如果SA_NOMASK 置位),// eax, ecx, edx, eflags 和用戶程序原代碼指針。  tmp_esp = esp;  put_fs_long ((long) sa->sa_restorer, tmp_esp++);  put_fs_long (signr, tmp_esp++);  if (!(sa->sa_flags & SA_NOMASK))    put_fs_long (current->blocked, tmp_esp++);  put_fs_long (eax, tmp_esp++);  put_fs_long (ecx, tmp_esp++);  put_fs_long (edx, tmp_esp++);  put_fs_long (eflags, tmp_esp++);  put_fs_long (old_eip, tmp_esp++);  current->blocked |= sa->sa_mask;	// 進程阻塞碼(屏蔽碼)添上sa_mask 中的碼位。}

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
欧美裸体bbwbbwbbw| 亚洲精品国产精华液| 日韩激情av在线| 日韩视频免费直播| 国产在线一区观看| 中文一区二区完整视频在线观看| 92国产精品观看| 麻豆精品在线看| 欧美经典一区二区| 欧美无砖砖区免费| 国产一区二区三区电影在线观看| 最新不卡av在线| 69堂国产成人免费视频| 成人不卡免费av| 日本视频在线一区| 亚洲乱码中文字幕| 亚洲一区二区三区四区五区中文| 精品日韩av一区二区| av一区二区三区四区| 久草在线在线精品观看| 亚洲成人自拍偷拍| 国产精品久久久久aaaa樱花| 日韩欧美资源站| 精品免费视频一区二区| 国产亚洲一区二区三区四区 | 色狠狠色噜噜噜综合网| 免费观看在线综合色| 亚洲日本护士毛茸茸| 一区二区三区四区在线播放 | 亚洲免费观看高清完整版在线| 精品久久久久久久久久久院品网| 久久这里只有精品6| 欧美日韩精品一区二区天天拍小说| eeuss鲁片一区二区三区| 91影视在线播放| 免费成人在线观看| 国产成人av福利| 亚洲综合激情小说| 日本亚洲视频在线| 国产精品一区在线| 国产在线视频一区二区三区| 国产成人高清视频| 色婷婷av久久久久久久| 成人av网站免费观看| 欧美亚洲日本一区| 欧美成人在线直播| 亚洲欧洲精品一区二区三区 | 久久精品夜色噜噜亚洲a∨| 亚洲欧洲一区二区在线播放| 午夜欧美视频在线观看 | 国产精品影视在线| 丰满亚洲少妇av| 欧美专区日韩专区| 91啪九色porn原创视频在线观看| 色国产精品一区在线观看| 9191久久久久久久久久久| 久久久天堂av| 国产欧美一区二区精品久导航| 亚洲欧美激情插| 久久91精品久久久久久秒播| 在线中文字幕不卡| ww亚洲ww在线观看国产| 亚洲一区在线看| 国产91丝袜在线播放0| 4438x成人网最大色成网站| 国产精品国产精品国产专区不片| 琪琪一区二区三区| 日本道精品一区二区三区| 26uuu国产日韩综合| 天堂一区二区在线| 91麻豆精品一区二区三区| 久久先锋影音av| 免费不卡在线视频| 欧美自拍偷拍午夜视频| 亚洲图片欧美激情| 国产高清一区日本| 日韩视频不卡中文| 亚洲电影第三页| 色综合久久天天| 欧美激情综合五月色丁香| 久久精品国产亚洲高清剧情介绍| 国产九色sp调教91| 欧美肥妇free| 亚洲一区二区在线免费看| 成人av电影在线播放| 国产欧美一区二区精品性色| 久久电影国产免费久久电影| 欧美日韩精品三区| 亚洲另类在线视频| 色综合天天综合色综合av| 欧美日韩大陆一区二区| 亚洲女人****多毛耸耸8| 国产成人99久久亚洲综合精品| 久久综合av免费| 精品一二三四区| 日韩欧美一级二级三级久久久| 亚洲国产成人一区二区三区| 麻豆国产91在线播放| 欧美一区二区视频免费观看| 精品三级在线看| 蜜臀av性久久久久av蜜臀妖精| 欧美日韩午夜精品| 久久久精品国产免大香伊| 麻豆国产精品视频| 亚洲精品一区二区三区香蕉 | 丁香啪啪综合成人亚洲小说 | 中文字幕一区av| 成人一区二区三区视频在线观看 | 日韩综合在线视频| 欧美日韩国产综合草草| 性做久久久久久免费观看| 欧美日韩免费观看一区三区| 三级不卡在线观看| 欧美一级国产精品| 久久精品国产99国产精品| 日韩欧美一区在线观看| 精品一区二区三区视频| 久久久久久久久久看片| 成人黄色一级视频| 亚洲视频香蕉人妖| 欧美怡红院视频| 天天av天天翘天天综合网色鬼国产 | 午夜激情一区二区| 51久久夜色精品国产麻豆| 免费在线成人网| 国产欧美1区2区3区| 白白色 亚洲乱淫| 亚洲一区二区三区中文字幕在线| 91精品国产91久久久久久最新毛片| 美国欧美日韩国产在线播放| 国产亚洲短视频| 色综合天天性综合| 日韩中文字幕91| 久久久久久**毛片大全| 99久久99久久精品免费观看| 午夜精品一区在线观看| 欧美tickle裸体挠脚心vk| 成人禁用看黄a在线| 一区二区免费在线播放| 日韩欧美国产精品| 成人动漫一区二区| 午夜欧美电影在线观看| 精品国产三级a在线观看| 99视频在线精品| 视频一区欧美日韩| 日本一区二区成人在线| 欧美亚洲综合一区| 国产精品一区二区三区网站| 亚洲激情图片qvod| 欧美videos中文字幕| 99视频精品免费视频| 天堂蜜桃91精品| 欧美国产乱子伦 | 亚洲欧美日本韩国| 欧美一二三四区在线| 不卡的av电影| 免费成人在线网站| 1024亚洲合集| 精品国产1区二区| 在线观看国产一区二区| 国产一区在线精品| 亚洲国产日韩一级| 色妞www精品视频| 六月丁香婷婷色狠狠久久| av色综合久久天堂av综合| 欧美日韩亚洲另类| 成人午夜看片网址| 奇米综合一区二区三区精品视频| 国产精品卡一卡二| 欧美成人精品3d动漫h| 欧洲一区在线观看| 国产a区久久久| 麻豆成人免费电影| 亚洲午夜在线观看视频在线| 国产精品三级av| www.欧美亚洲| 美脚の诱脚舐め脚责91 | 亚洲一级电影视频| 日本一区二区三区久久久久久久久不 | 色婷婷综合在线| 成人午夜伦理影院| 老司机精品视频线观看86| 亚洲成av人片一区二区梦乃| 综合久久一区二区三区| kk眼镜猥琐国模调教系列一区二区| 久久久久久久久久久99999| 成人午夜视频在线| 理论电影国产精品| 亚洲国产综合在线| 亚洲另类在线制服丝袜| 国产精品国产自产拍高清av王其| 久久在线观看免费| 欧美一区二区性放荡片| 欧美欧美午夜aⅴ在线观看| 色综合中文字幕| av激情综合网| 暴力调教一区二区三区| 成人免费高清在线| 高清免费成人av| 国产成人一区在线|