freepeople性欧美熟妇, 色戒完整版无删减158分钟hd, 无码精品国产vα在线观看DVD, 丰满少妇伦精品无码专区在线观看,艾栗栗与纹身男宾馆3p50分钟,国产AV片在线观看,黑人与美女高潮,18岁女RAPPERDISSSUBS,国产手机在机看影片

正文內(nèi)容

生產(chǎn)者與消費者問題0-資料下載頁

2025-03-25 06:03本頁面
  

【正文】 。 // 并且不得是 SIGKILL。 54 = (void (*)(int)) handler。 // 指定的信號處理句柄。 55 = 0。 // 執(zhí)行時的信號屏蔽碼。 56 = SA_ONESHOT | SA_NOMASK。 // 該句柄只使用 1 后就恢復到默認值, // 并允許信號在自己的處理句柄中收到。 57 = (void (*)(void)) restorer。 // 保存恢復處理函數(shù)指針。 58 handler = (long) currentsigaction[signum1].sa_handler。 59 currentsigaction[signum1] = tmp。 60 return handler。 61 } 62// sigaction()系統(tǒng)調(diào)用。改變進程在收到一個信號時的操作。signum 是除了 SIGKILL 以外的任何 // 信號。[如果新操作(action)不為空]則新操作被安裝。如果 oldaction 指針不為空,則原操作 // 被保留到 oldaction。成功則 返回 0,否則為1。 63 int sys_sigaction(int signum, const struct sigaction * action, 64 struct sigaction * oldaction) 65 { 66 struct sigaction tmp。 67// 信號值要在(132)范圍內(nèi),并且信號 SIGKILL 的處理句柄不能被改變。 68 if (signum1 || signum32 || signum==SIGKILL) 69 return 1。 // 在信號的 sigaction 結(jié)構(gòu)中設置新的操作(動作)。 70 tmp = currentsigaction[signum1]。 71 get_new((char *) action, 72 (char *) (signum1+currentsigaction))。 // 如果 oldaction 指針不為空的話,則將原操作指針保存到 oldaction 所指的位置。 73 if (oldaction) 74 save_old((char *) amp。tmp,(char *) oldaction)。 // 如果允許信號在自己的信號句柄中收到,則令屏蔽碼為 0,否則設 置屏蔽 本信號。 75 if (currentsigaction[signum1].sa_flags amp。 SA_NOMASK) 76 currentsigaction[signum1].sa_mask = 0。 77 else 78 currentsigaction[signum1].sa_mask |= (1(signum1))。 79 return 0。 80 } 81// 系統(tǒng)調(diào)用中斷處理程序中真正的信號處理程序(在 kernel/,119 行)。 // 該段代碼的主要作用是將信號的處理句柄插入到用戶程序堆棧中,并在本系統(tǒng)調(diào)用結(jié)束 // 返回后立刻執(zhí)行信號句柄程序,然后繼續(xù)執(zhí)行用戶的程序。 82 void do_signal(long signr,long eax, long ebx, long ecx, long edx, 83 long fs, long es, long ds, 84 long eip, long cs, long eflags, 85 unsigned long * esp, long ss) 86 { 87 unsigned long sa_handler。 88 long old_eip=eip。 89 struct sigaction * sa = currentsigaction + signr 1。 //currentsigaction[signu1]。 90 int longs。 91 unsigned long * tmp_esp。 9293 sa_handler = (unsigned long) sasa_handler。 // 如果信號句柄為 SIG_IGN(忽略),則返回;如果句柄為 SIG_DFL(默認處理),則如果信號是 // SIGCHLD 則返回,否 則終止進程的執(zhí)行 94 if (sa_handler==1) 95 return。 96 if (!sa_handler) { 97 if (signr==SIGCHLD) 98 return。 99 else 100 do_exit(1(signr1))。 // 為什么以信號位圖為參數(shù)?不為什么!?? // 這里應該是 do_exit(1(signr))。 101 } // 如果該信號句柄只需使用一次,則將該句柄置空(該信號句柄已經(jīng)保存在 sa_handler 指針中)。 102 if (sasa_flags amp。 SA_ONESHOT) 103 sasa_handler = NULL。 // 下面這段代碼將信號處理句柄插入到用戶堆棧中,同時也將 sa_restorer,signr,進程屏蔽碼(如果 // SA_NOMASK 沒置位),eax,ecx,edx 作為參數(shù)以及原調(diào)用系統(tǒng)調(diào)用的程序返回指針及標志寄存器值 // 壓入堆棧。因此在本次系統(tǒng)調(diào)用中斷(0x80)返回用戶程序時會首先執(zhí)行用戶的信號句柄程序,然后 // 再繼續(xù)執(zhí)行用戶程序。 // 將用戶調(diào)用系統(tǒng)調(diào)用的代碼指針 eip 指向該信號處理句柄。 104 *(amp。eip) = sa_handler。 // 如果允許信號自己的處理句柄收到信號自己,則也需要將進程的阻塞碼壓入堆棧。 // 注意,這里 longs 的結(jié)果應該選擇(7*4):(8*4),因為堆棧是以 4 字節(jié)為單位操作的。 105 longs = (sasa_flags amp。 SA_NOMASK)?7:8。 // 將原調(diào)用程序的用戶堆棧指針向下擴展 7(或 8)個長字(用來存放調(diào)用信號句柄的參數(shù)等), // 并檢查內(nèi)存使用情況(例如如果內(nèi)存超界則分配新頁等)。 106 *(amp。esp) = longs。 107 verify_area(esp,longs*4)。 // 在用戶堆棧中從下到上存放 sa_restorer, 信號 signr, 屏蔽碼 blocked(如果 SA_NOMASK 置位), // eax, ecx, edx, eflags 和用戶程序原代碼指針。 108 tmp_esp=esp。 109 put_fs_long((long) sasa_restorer,tmp_esp++)。 110 put_fs_long(signr,tmp_esp++)。 111 if (!(sasa_flags amp。 SA_NOMASK)) 112 put_fs_long(currentblocked,tmp_esp++)。 113 put_fs_long(eax,tmp_esp++)。 114 put_fs_long(ecx,tmp_esp++)。 115 put_fs_long(edx,tmp_esp++)。 116 put_fs_long(eflags,tmp_esp++)。 117 put_fs_long(old_eip,tmp_esp++)。 118 currentblocked |= sasa_mask。 // 進程阻塞碼(屏蔽碼)添上 sa_mask 中的碼位。 119 }
點擊復制文檔內(nèi)容
教學課件相關推薦
文庫吧 www.dybbs8.com
備案圖鄂ICP備17016276號-1