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

正文內(nèi)容

操作系統(tǒng)教程-第八章 linux系統(tǒng)-文庫(kù)吧

2025-01-02 12:49 本頁(yè)面


【正文】 交換工作 ? 進(jìn)程的當(dāng)前狀態(tài)被記錄在 struct task_struct結(jié)構(gòu)的 state成員中 操作系統(tǒng)教程課件 第 27頁(yè) 機(jī)械工業(yè)出版社 操作系統(tǒng)教程課件 第 28頁(yè) 圖 84展示了 Linux系統(tǒng)中進(jìn)程狀態(tài)的變化關(guān)系 機(jī)械工業(yè)出版社 創(chuàng)建進(jìn)程 ? 系統(tǒng)啟動(dòng)時(shí)總是處于內(nèi)核模式,此時(shí)只有一個(gè)進(jìn)程:初始化進(jìn)程。 ? init內(nèi)核線程 (或進(jìn)程 )是系統(tǒng)的第一個(gè)真正的進(jìn)程,標(biāo)志符為 1。 ? 它負(fù)責(zé)完成系統(tǒng)的一些初始化設(shè)置任務(wù) (如打開系統(tǒng)控制臺(tái)與安裝根文件系統(tǒng) ),以及執(zhí)行系統(tǒng)初始化程序,如 /etc/init, /bin/init或者 /sbin/init,這些初始化程序依賴于具體的系統(tǒng)。 ? init程序使用 /etc/inittab作為腳本文件來創(chuàng)建系統(tǒng)中的新進(jìn)程。這些新進(jìn)程又創(chuàng)建各自的新進(jìn)程。 操作系統(tǒng)教程課件 第 29頁(yè) 機(jī)械工業(yè)出版社 ? 新進(jìn)程通過克隆老進(jìn)程或當(dāng)前進(jìn)程來創(chuàng)建。 ? 系統(tǒng)調(diào)用 fork或 clone可以創(chuàng)建新任務(wù),復(fù)制發(fā)生在內(nèi)核狀態(tài)下的內(nèi)核中。 ? 系統(tǒng)從物理內(nèi)存中分配出來一個(gè)新的 task_struct數(shù)據(jù)結(jié)構(gòu),同時(shí)還有一個(gè)或多個(gè)包含被復(fù)制進(jìn)程堆棧 (用戶與內(nèi)核 )的物理頁(yè)面。 ? 然后創(chuàng)建唯一地標(biāo)記此新任務(wù)的進(jìn)程標(biāo)志符。 ? 新創(chuàng)建的 task_struct將被放入 task數(shù)組中,將被復(fù)制進(jìn)程的task_struct中的內(nèi)容頁(yè)表拷入新的 task_struct中。 ? 復(fù)制完成后, Linux允許兩個(gè)進(jìn)程共享資源而不是復(fù)制各自的拷貝。(包括文件,信號(hào)處理過程和虛擬內(nèi)存) ? 進(jìn)程對(duì)共享資源用各自的 count來記數(shù) 操作系統(tǒng)教程課件 第 30頁(yè) 機(jī)械工業(yè)出版社 進(jìn)程的等待 ? 父進(jìn)程創(chuàng)建子進(jìn)程之后通常等待子進(jìn)程運(yùn)行終止。 ? 父進(jìn)程可用系統(tǒng)調(diào)用 wait3()等待它的任何一個(gè)子進(jìn)程終止;也可以用系統(tǒng)調(diào)用 wait4()等待某個(gè)特定的子進(jìn)程終止。 ? pid_t wait3(int *status, int options, struct rusage *rusage)。 ? pid_t wait4(pid_t pid, int *status, int options, struct rusage *rusage)。 ? pid,子進(jìn)程的進(jìn)程標(biāo)識(shí) ? status,子進(jìn)程的返回狀態(tài) ? options,等待選項(xiàng) ? rusage,死亡進(jìn)程的資源使用記錄。 ? 這兩個(gè)函數(shù)的返回值可以參考 waitpid()系統(tǒng)調(diào)用。 操作系統(tǒng)教程課件 第 31頁(yè) 機(jī)械工業(yè)出版社 ? waitpid(),等待子進(jìn)程中斷或結(jié)束。 ? pid_t waitpid(pid_t pid,int * status,int options); ? waitpid()會(huì)暫時(shí)停止目前進(jìn)程的執(zhí)行 ,直到有信號(hào)來到或子進(jìn)程結(jié)束。 ? 如果在調(diào)用 wait()時(shí)子進(jìn)程已經(jīng)結(jié)束 ,則 wait()會(huì)立即返回子進(jìn)程結(jié)束狀態(tài)值。 ? 子進(jìn)程的結(jié)束狀態(tài)值會(huì)由參數(shù) status返回 ,而子進(jìn)程的進(jìn)程識(shí)別碼也會(huì)一塊返回。如果不在意結(jié)束狀態(tài)值 ,則參數(shù) status可以設(shè)成NULL。 ? 參數(shù) pid為預(yù)期等待的子進(jìn)程識(shí)別碼 : ? pid1 等待進(jìn)程組識(shí)別碼為 pid絕對(duì)值的任何子進(jìn)程。 ? pid=1 等待任何子進(jìn)程 ,相當(dāng)于 wait()。 ? pid=0 等待進(jìn)程組識(shí)別碼與目前進(jìn)程相同的任何子進(jìn)程。 ? pid0 等待任何子進(jìn)程識(shí)別碼為 pid的子進(jìn)程。 ? 如果執(zhí)行成功則返回子進(jìn)程識(shí)別碼 (PID)。如果有錯(cuò)誤發(fā)生則返回,并返回值 1,將失敗原因存于 errno中。 操作系統(tǒng)教程課件 第 32頁(yè) 機(jī)械工業(yè)出版社 進(jìn)程的終止 ? 當(dāng)命令執(zhí)行完,需要終止自己時(shí),可在其程序末尾使用系統(tǒng)調(diào)用 exit()。用戶進(jìn)程也可使用 exit來終止自己。 ? 多種情況下都會(huì)出現(xiàn)進(jìn)程終止的現(xiàn)象 ? 正常終止 ? 異常終止 ? 等待進(jìn)程結(jié)束 ? 僵尸進(jìn)程( Zombie Process) 操作系統(tǒng)教程課件 第 33頁(yè) 機(jī)械工業(yè)出版社 ? 正常終止: ? 程序中調(diào)用 exit函數(shù),或者在 main函數(shù)中返回。 ? 異常終止: ? 程序接收到某些信號(hào),例如 SIGBUS、 SIGSEGV、SIGFPE等。默認(rèn)的 SIGINT(用戶在終端下按下了Ctrl+C)和 SIGTERM(由 kill命令發(fā)出)處理器會(huì)終止進(jìn)程?;蛘叱绦蛘{(diào)用 abort函數(shù)可以向自己的進(jìn)程發(fā)送一個(gè) SIGABRT信號(hào),這會(huì)使進(jìn)程終止并生成一個(gè) core文件?;蛘哌M(jìn)程接收到 SIGKILL信號(hào),用于直接立即殺死進(jìn)程。 ? 可以在自己的源代碼中調(diào)用 kill函數(shù)(需要先包含sys/和 兩個(gè)頭文件)來向子進(jìn)程進(jìn)程發(fā)送信號(hào)。 操作系統(tǒng)教程課件 第 34頁(yè) 機(jī)械工業(yè)出版社 ? 等待進(jìn)程結(jié)束: ? wait系統(tǒng)調(diào)用用于調(diào)用阻塞到此進(jìn)程的任何一個(gè)子進(jìn)程終止或者調(diào)用出現(xiàn)錯(cuò)誤。此調(diào)用返回一個(gè)整數(shù)型(int型)的指針,可以通過 WEXITSTATUS宏來獲得退出碼,可以通過 WIFEXITED來判斷進(jìn)程是否正常結(jié)束(即通過 exit函數(shù)或者在 main中返回)。如果不是正常結(jié)束,可以通過 WTERMSIG宏來得到導(dǎo)致進(jìn)程非正常結(jié)束的信號(hào)值。這里常用的 wait系統(tǒng)調(diào)用有:waitpid系統(tǒng)調(diào)用,指定要等待退出的子進(jìn)程 ID,而不是等待任何的子進(jìn)程 ID。 wait3調(diào)用,返回退出的子進(jìn)程的 CPU使用統(tǒng)計(jì)。 wait4調(diào)用,允許程序員給出額外的選項(xiàng)以指定要等待退出的進(jìn)程。 操作系統(tǒng)教程課件 第 35頁(yè) 機(jī)械工業(yè)出版社 ? 僵尸進(jìn)程( Zombie Process): ? 當(dāng)一個(gè)進(jìn)程已經(jīng)結(jié)束,但是沒有正確的清理的時(shí)候,它就是一個(gè)僵尸進(jìn)程。進(jìn)程的清理工作要由它的父進(jìn)程來完成,父進(jìn)程可以通過 wait調(diào)用來進(jìn)行清理。wait調(diào)用時(shí),如果沒有僵尸子進(jìn)程,它會(huì)阻塞到某個(gè)子進(jìn)程終止,并清理這個(gè)子進(jìn)程;如果有僵尸子進(jìn)程, wait立即清理此子進(jìn)程并返回。 ? 當(dāng)一個(gè)進(jìn)程結(jié)束時(shí),它的子進(jìn)程即使沒有被它清理,也仍然會(huì)被 init進(jìn)程(最初的、 PID始終是 1的進(jìn)程)自動(dòng)清理。 操作系統(tǒng)教程課件 第 36頁(yè) 機(jī)械工業(yè)出版社 線程狀態(tài)及轉(zhuǎn)換 ? 線程是同一個(gè)進(jìn)程中獨(dú)立的執(zhí)行上下文,它們?yōu)閱我贿M(jìn)程提供了一種同時(shí)處理多件事情的方法。 ? 同一線程組中的線程共享它們的全局變量并有相同的堆( heap) ? 使用 malloc給線程組中的一個(gè)線程分配的內(nèi)存可以被該線程組中的其它線程讀寫。但是它們擁有不同的堆棧(它們的局部變量是不共享的),并可以同時(shí)在進(jìn)程代碼不同的地方運(yùn)行。 操作系統(tǒng)教程課件 第 37頁(yè) 機(jī)械工業(yè)出版社 ? 在引入了線程以后,為了與傳統(tǒng)的進(jìn)程相區(qū)分,把具有線程的進(jìn)程實(shí)體稱之為任務(wù) (task)。 ? 線程可以看作進(jìn)程中指令的不同執(zhí)行路線。 Linux系統(tǒng)支持內(nèi)核空間的多線程,與大多數(shù)操作系統(tǒng)單獨(dú)定義線不同, Linux則把線程定義為進(jìn)程的“執(zhí)行上下文”。 ? 一個(gè)線程通??梢杂幸韵聨追N狀態(tài)。 ? ①、運(yùn)行態(tài),主要分為正在運(yùn)行態(tài) r和處在就緒隊(duì)列中的就緒態(tài) R ? ②、掛起態(tài) S,是指不能參與調(diào)度的的等待態(tài) ? ③、睡眠態(tài) W,線程按睡眠原因 (事件 )處在相應(yīng)的睡眠隊(duì)列中 ? ④、換出態(tài) O,線程在掛起或睡眠時(shí),可能被換出,換出時(shí),線程只釋放它所專有的內(nèi)核棧 ? ⑤、換入態(tài) I,正在從交換區(qū)中換入到主存的過程中 操作系統(tǒng)教程課件 第 38頁(yè) 機(jī)械工業(yè)出版社 ? 線程狀態(tài)轉(zhuǎn)換 ? 線程在創(chuàng)建時(shí),設(shè)置它的狀態(tài)為掛起態(tài) S,只有對(duì)它調(diào)用了 resume函數(shù)后,才把它轉(zhuǎn)入就緒態(tài) R或直接投入運(yùn)行態(tài) r。 ? 線程運(yùn)行過程中,動(dòng)態(tài)調(diào)整其狀態(tài)的一組函數(shù): ? Thread_suspend(),使指定線程掛起,此函數(shù)分兩部分,分別稱為 suspend1和 suspend2,第一部分將指定線程的狀態(tài)轉(zhuǎn)為掛起態(tài) S,第二部分則做具體掛起操作。 ? Thread_resume(),用來恢復(fù)指定的線程,與掛起操作的功能相反。 ? Assert_wait(),本函數(shù)僅作用于當(dāng)前線程,按睡眠事件把當(dāng)前線程掛入適當(dāng)?shù)乃哧?duì)列,并在該線程的 wait_event域中設(shè)置睡眠原因用于喚醒查詢。 ? Thread_block(),實(shí)現(xiàn)線程切換,作用于兩種線程,一是從就緒隊(duì)列中挑選一個(gè)優(yōu)先級(jí)最高的線程;二是阻塞當(dāng)前的運(yùn)行線程,將其切換到所選的線程。 ? Clear_wait(),thread_wakeup_prim(),這兩個(gè)函數(shù)均可用于喚醒相應(yīng)的線程 ? Thread_swapout(),用于釋放指定線程的內(nèi)核棧,該內(nèi)核棧用于線程的上下文切換。 ? Thread_swapin(),用于為指定線程分配一個(gè)內(nèi)核棧。 操作系統(tǒng)教程課件 第 39頁(yè) 機(jī)械工業(yè)出版社 進(jìn)程的調(diào)度 ? 進(jìn)程調(diào)度的數(shù)據(jù)結(jié)構(gòu) ? 進(jìn)程調(diào)度的時(shí)機(jī) ? 調(diào)度策略 操作系統(tǒng)教程課件 第 40頁(yè) 機(jī)械工業(yè)出版社 ? Linux能讓多個(gè)進(jìn)程并發(fā)執(zhí)行,由此必然會(huì)產(chǎn)生資源爭(zhēng)奪的情況( CPU是系統(tǒng)最重要的資源) ? 進(jìn)程調(diào)度就是進(jìn)程調(diào)度程序按一定的策略,動(dòng)態(tài)地把 CPU分配給處于就緒隊(duì)列中的某一個(gè)進(jìn)程,使之執(zhí)行。 ? 進(jìn)程調(diào)度的目的是使處理器資源得到最高效的利用。 ? 進(jìn)程調(diào)度的策略要考慮如下等原則: ? ⑴公平:保證每個(gè)進(jìn)程得到合理的 CPU時(shí)間; ? ⑵高效:使 CPU保持忙碌狀態(tài),即總是有進(jìn)程在 CPU上運(yùn)行; ? ⑶響應(yīng)時(shí)間:使交互用戶的響應(yīng)時(shí)間盡可能短; ? ⑷周轉(zhuǎn)時(shí)間:使批處理用戶等待輸出的時(shí)間盡可能短; ? ⑸吞吐量:使單位時(shí)間內(nèi)處理的進(jìn)程數(shù)量盡可能多。 操作系統(tǒng)教程課件 第 41頁(yè) 機(jī)械工業(yè)出版社 進(jìn)程調(diào)度的數(shù)據(jù)結(jié)構(gòu) ? 當(dāng)選定新進(jìn)程后,系統(tǒng)必須將當(dāng)前進(jìn)程的狀態(tài),處理器中的寄存器以及上下文狀態(tài)保存到 task_struct結(jié)構(gòu)中。同時(shí)它將重新設(shè)置新進(jìn)程的狀態(tài)并將系統(tǒng)控制權(quán)交給此進(jìn)程。為了將 CPU時(shí)間合理的分配給系統(tǒng)中每個(gè)可執(zhí)行進(jìn)程,調(diào)度管理器必須將這些時(shí)間信息也保存在 task_struct中。 操作系統(tǒng)教程課件 第 42頁(yè) 機(jī)械工業(yè)出版社 操作系統(tǒng)教程課件 第 43頁(yè) 表 81 task_struct結(jié)構(gòu)中的與調(diào)度有關(guān)的域 域名 含義 N e e d _ r e s c h e d 調(diào)度標(biāo)志 C o u n t e r 進(jìn)程可運(yùn)行的時(shí)間量 P o l i c y 進(jìn)程調(diào)度策略 N i c e 和 P r i o r i t y 優(yōu)先級(jí) R t _ p r i o r i t y 實(shí)時(shí)優(yōu)先級(jí) n e e d _ r e s c h e d 表示該進(jìn)程是否需要重新調(diào)度。在調(diào)度時(shí)機(jī)到來時(shí),檢測(cè)這個(gè)域的值,如果為 1 ,則調(diào)用 s c h e d u l e ( ) 。 機(jī)械工業(yè)出版社 ? Linux系統(tǒng)中常見的調(diào)度策略 (policy)針對(duì) Linux系統(tǒng)中存在普通與實(shí)時(shí)兩種進(jìn)程。實(shí)時(shí)進(jìn)程的優(yōu)先級(jí)要高于其它進(jìn)程。根據(jù)調(diào)度策略, Linux將進(jìn)程分為以下三種類型: ? SCHED_FIFO:先進(jìn)先出實(shí)時(shí)進(jìn)程。只有當(dāng)前進(jìn)程執(zhí)行完畢再調(diào)度下一優(yōu)先級(jí)最高的進(jìn)程。 ? SCHED_RR:循環(huán)實(shí)時(shí)進(jìn)程。在此策略下,每個(gè)進(jìn)程執(zhí)行完一個(gè)時(shí)間片后,會(huì)被掛起,然后選擇另一具有相同或更高優(yōu)先級(jí)的進(jìn)程執(zhí)行。 ? SCHED_OTHER:普通進(jìn)程。 操作系統(tǒng)教程課件 第 44頁(yè) 機(jī)械工業(yè)出版社 ? 優(yōu)先級(jí) (priority)的高低與 nice的值相關(guān)。 ? nice是在內(nèi)核外部用戶看見的優(yōu)先級(jí) ? nice值域?yàn)?20~20。 ? priority是調(diào)度管理器分配給進(jìn)程的優(yōu)先級(jí),用于計(jì)算非實(shí)時(shí)進(jìn)程調(diào)度時(shí)的 weight值和進(jìn)程 (不管是否為實(shí)時(shí)進(jìn)程 )每次獲得 CPU后可使用的時(shí)間量 (時(shí)間片 jiffies)。 ? 在內(nèi)核內(nèi)部使用的 priority優(yōu)先級(jí)是 1~40 ? 系統(tǒng)調(diào)用 renice可以改變進(jìn)程的優(yōu)先級(jí) ? 實(shí)時(shí)進(jìn)程的優(yōu)先級(jí) (rt_priority)的值由調(diào)度器來決定。 ? 調(diào)度器給每個(gè)實(shí)時(shí)進(jìn)程一個(gè)相對(duì)優(yōu)先級(jí): 1~99。普通進(jìn)程的值為0。 操作系統(tǒng)教程課件 第 45頁(yè) 機(jī)械工業(yè)出版社 ? 當(dāng)前執(zhí)行進(jìn)程剩余的時(shí)間 (counter)的處理方式對(duì)實(shí)時(shí)進(jìn)程和普通進(jìn)程有所不同。 ? 進(jìn)程處于運(yùn)行狀態(tài)時(shí)所剩余的時(shí)鐘滴答數(shù),其初值由priority算出。每次時(shí)鐘中斷到來時(shí),這個(gè)值就減 1。當(dāng)這個(gè)域的值變得越來越小,直至為 0時(shí),就把need_resched域置 1,從而引起新一輪調(diào)度。 ? 普通進(jìn)程的 counter值是其優(yōu)先級(jí)權(quán)值,而實(shí)時(shí)進(jìn)程的則是 counte
點(diǎn)擊復(fù)制文檔內(nèi)容
教學(xué)課件相關(guān)推薦
文庫(kù)吧 www.dybbs8.com
備案圖鄂ICP備17016276號(hào)-1