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

正文內(nèi)容

操作系統(tǒng)2進(jìn)程與線程課件-資料下載頁

2025-01-19 21:49本頁面
  

【正文】 標(biāo)識(shí),稱為組標(biāo)識(shí)符。組標(biāo)識(shí)符存放在進(jìn)程 PCB的字段 gid里。 返回目錄 ? Linux的幾種鏈接信息 進(jìn)程鏈表 1. . . Linux啟動(dòng)時(shí),創(chuàng)建了一個(gè)非常特殊的進(jìn)程,它的名字是 init,進(jìn)程標(biāo)識(shí)符 PID為 1。 每個(gè)進(jìn)程的 PCB里有兩個(gè) task_struct型指針字段,作用是: prev_task:向前指針,指 向鏈表中本進(jìn)程前面的那個(gè)進(jìn)程 的 PCB; next_task:向后指針,指 向鏈表中本進(jìn)程后面的那個(gè)進(jìn)程的 PCB。 init進(jìn)程的 PCB next_task prev_task 進(jìn)程 1的 PCB next_task prev_task 進(jìn)程 2的 PCB next_task prev_task 進(jìn)程 3的 PCB next_task prev_task 進(jìn)程 n的 PCB next_task prev_task 系統(tǒng)中的所有進(jìn)程 “可運(yùn)行”隊(duì)列 2. PCB里有名為 prev_run和 next_run的兩個(gè) task_struct型指針字段,作用是: prev_run:向前指針,指向鏈表中本進(jìn)程前的那個(gè)“可運(yùn)行”狀態(tài)進(jìn)程的 PCB; next_run:向后指針,指向鏈表中本進(jìn)程后的那個(gè)“可運(yùn)行”狀態(tài)進(jìn)程的 PCB。 . . 為提高調(diào)度時(shí)的查找速度, Linux是以優(yōu)先級(jí)為依據(jù)建立“可運(yùn)行”隊(duì)列的。 Linux進(jìn)程優(yōu)先級(jí)的允許范圍從 0到 139,因此系統(tǒng)總共維護(hù)著 140個(gè)“可運(yùn)行”的隊(duì)列。 利用散列表 pidhash里的pidhash_next和 pidhash_pprev,以及進(jìn)程 PCB里的字段pidhash_next和 pidhash_pprev,就能基于散列表的索引值形成一個(gè)個(gè)進(jìn)程 PCB的雙向鏈表。 PID散列鏈表 2. . 為了加快查找過程,理想的做法是通過某個(gè)函數(shù),利用進(jìn)程的 PID值算出進(jìn)程 PCB所在的位置。這實(shí)際上就是所謂的散列技術(shù)。 . Linux引入了散列技術(shù),并利用鏈地址法來處理 PID沖突。即如果兩個(gè)不同的 PID計(jì)算出的 PCB在散列表的索引值相同(沖突),那么就把這兩個(gè) PCB組成鏈表鏈接在一起。 pidhash_next pidhash_pprev pidhash_pprev pidhash_next pidhash_next pidhash_pprev pidhash_next pidhash_pprev pidhash_next pidhash_pprev pidhash_next pidhash_pprev pidhash散列表 0 199 散列表的 一個(gè)元素 進(jìn)程的 PCB 進(jìn)程的 PCB 進(jìn)程的 PCB 進(jìn)程的 PCB 為實(shí)現(xiàn) PID散列鏈表, Linux開辟了名為 pidhash的數(shù)組作為散列表。該表的每個(gè)元素由兩個(gè) task_struct型指針組成: pidhash_next指向 pidhash散列 表里該索引值鏈表中的下一個(gè) PCB; pidhash_pprev指向 pidhash散列 表里該索引值鏈表中的前一個(gè) PCB。 .. 4. 進(jìn)程家族關(guān)系鏈 . . p_opptr:指向初始父進(jìn)程的指針; 創(chuàng)建進(jìn)程的進(jìn)程稱為父進(jìn)程,被創(chuàng)建的進(jìn)程稱為子進(jìn)程。如果一個(gè)進(jìn)程創(chuàng)建了若干個(gè)子進(jìn)程,那么這些子進(jìn)程之間就是兄弟關(guān)系。 Linux的 PCB里專門有反映進(jìn)程間關(guān)系的 task_struct型指針字段 。 p_pptrr:指向父進(jìn)程的指針; p_cptr:指向最新子進(jìn)程的指針; p_ysptr:指向弟進(jìn)程的指針; p_osptr:指向兄進(jìn)程的指針。 P0 P1 P2 P3 P4 指向父進(jìn)程 指向兄進(jìn)程 指向弟進(jìn)程 指向最新子進(jìn)程 圖例 : 各種家族指針 ( 1) ( 2) ( 3) ( 4) ( 5) 比如,進(jìn)程 P0創(chuàng)建三個(gè)子進(jìn)程, PP P3,進(jìn)程 P3又創(chuàng)建了一個(gè)進(jìn)程 P4。那么,這五個(gè)進(jìn)程間的關(guān)系如圖所示。從圖中看出,進(jìn)程 P0是進(jìn)程 P P P3的父進(jìn)程;進(jìn)程 P3是進(jìn)程 P4的父進(jìn)程; P1是 P2的兄進(jìn)程, P2是 P3的兄進(jìn)程; P2是 P1的弟進(jìn)程,P3是 P2的弟進(jìn)程; P3是 P1的最新子進(jìn)程,P4是 P3的最新子進(jìn)程;如此等等。 .返回目錄 ? Linux進(jìn)程的生存過程 Linux初啟時(shí)運(yùn)行在內(nèi)核態(tài)。完成系統(tǒng)引導(dǎo)和初始化后,誕生了第一個(gè)進(jìn)程: init進(jìn)程。該進(jìn)程為當(dāng)前的每個(gè)終端創(chuàng)建管理進(jìn)程,接收用戶的登錄信息。用戶正確登錄后,就為其創(chuàng)建名為 shell的進(jìn)程。此后用戶與系統(tǒng)交互時(shí),就由 shell進(jìn)程接收并解釋用戶輸入的命令,創(chuàng)建子進(jìn)程執(zhí)行該命令。執(zhí)行命令的子進(jìn)程又可能再創(chuàng)建子進(jìn)程,從而形成了一棵倒長(zhǎng)的樹:根在上面,樹枝在下面。 . 系統(tǒng)中的進(jìn)程個(gè)數(shù) 1. 32位 /字 1024個(gè)字 pidmap_array位圖 當(dāng)這位為 1時(shí),表示系統(tǒng)里有 PID等于 3的進(jìn)程 這位不用 . Linux中同時(shí)存在的進(jìn)程數(shù)目是受限的,缺省情況下最大的 PID值是 32767。當(dāng)PID達(dá)到這個(gè)上限值時(shí),就必須使用已閑置的小 PID值。 . Linux在內(nèi)核里開辟一個(gè)有 1024個(gè)字、每個(gè)字 32個(gè)二進(jìn)制位的區(qū)域,用它各位的順序來表示 PID值。整個(gè)區(qū)域稱為一個(gè)“位圖”,取名 pidmap_array。位圖里的某位為“ 1”,表示該位代表的 PID值已被進(jìn)程使用;某位為“ 0”,表示該位代表的 PID值還沒使用,可作為新進(jìn)程的PID。 進(jìn)程的創(chuàng)建 2. 除了 init進(jìn)程外,運(yùn)行在 Linux系統(tǒng)中的其他進(jìn)程,都是用系統(tǒng)調(diào)用fork和 clone創(chuàng)建的。調(diào)用 fork和 clone的進(jìn)程是父進(jìn)程,被創(chuàng)建的進(jìn)程是子進(jìn)程。 .. 子進(jìn)程通過復(fù)制父進(jìn)程而得到創(chuàng)建。使用 fork和 clone的區(qū)別是: fork是全部復(fù)制,是把父進(jìn)程使用的所有資源全部通過復(fù)制而“傳”給子進(jìn)程; clone則是通過設(shè)置各種參數(shù),對(duì)資源做有選擇地復(fù)制,沒有被復(fù)制的就通過指針的復(fù)制讓子進(jìn)程共享。 . 不管是 fork還是 clone,它們都是調(diào)用內(nèi)核函數(shù) do_fork()來完成對(duì)子進(jìn)程的創(chuàng)建。 . 在 fork或 clone調(diào)用結(jié)束時(shí),父進(jìn)程和子進(jìn)程同時(shí)存在,都可以運(yùn)行。這時(shí),父進(jìn)程的返回點(diǎn)與子進(jìn)程的開始執(zhí)行點(diǎn)是一樣的(因?yàn)樽舆M(jìn)程基本繼承了父進(jìn)程的一切),Linux用返回值來區(qū)分不同情況。 進(jìn)程的執(zhí)行 3. 為一個(gè)進(jìn)程注入新“靈魂”的任務(wù),在 Linux里是由系統(tǒng)調(diào)用 exec()來完成的。 . . exec()有三個(gè)參數(shù):待執(zhí)行的文件名、參數(shù)列表、環(huán)境變量表。調(diào)用 exec()就做下面的三件事情:用所給的執(zhí)行程序代替原先的代碼段;廢棄原有的數(shù)據(jù)段,為新程序分配新的數(shù)據(jù)段;廢棄原有的堆棧段,為新程序分配所需的堆棧段。 . 一個(gè)進(jìn)程執(zhí)行 exec()后,除進(jìn)程的 PID沒有改變外,它的代碼段、數(shù)據(jù)段、堆棧段全都變了,成了一個(gè)不是原進(jìn)程(代碼段、數(shù)據(jù)段、堆棧段全是新的)的原進(jìn)程(因?yàn)镻ID是原來的)。 返回目錄
點(diǎn)擊復(fù)制文檔內(nèi)容
教學(xué)課件相關(guān)推薦
文庫吧 www.dybbs8.com
備案圖鄂ICP備17016276號(hào)-1