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

正文內(nèi)容

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

2025-01-02 12:49 本頁面


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