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

正文內(nèi)容

進(jìn)程調(diào)度ppt課件(編輯修改稿)

2025-02-04 00:36 本頁(yè)面
 

【文章內(nèi)容簡(jiǎn)介】 直接在硬件條件等待,并且任何情況下都不可中斷。 Stopped 進(jìn)程被停止,通常是通過(guò)接收一個(gè)信號(hào)。正在被調(diào)試的進(jìn)程可能處于停止?fàn)顟B(tài)。 Zombie 這是由于某些原因被終止的進(jìn)程,但是在 task數(shù)據(jù)中仍然保留 task_struct結(jié)構(gòu)。 它象一個(gè)已經(jīng)死亡的進(jìn)程。 Task_struct ? 標(biāo)識(shí)號(hào)( Identifiers) 系統(tǒng)中每個(gè)進(jìn)程都有進(jìn)程標(biāo)志。進(jìn)程標(biāo)志并不是task數(shù)組的索引,它僅僅是個(gè)數(shù)字。每個(gè)進(jìn)程還有一個(gè)用戶(hù)與組標(biāo)志,它們用來(lái)控制進(jìn)程對(duì)系統(tǒng)中文件和設(shè)備的存取權(quán)限。 ? 調(diào)度信息( Scheduling Information) 調(diào)度器需要這些信息以便判定系統(tǒng)中哪個(gè)進(jìn)程最迫切需要運(yùn)行。主要包括 policy(策略)、priority(優(yōu)先級(jí))、 rtpriority(實(shí)時(shí)優(yōu)先級(jí))和 counter(計(jì)數(shù))。 ? 有關(guān)進(jìn)程間通訊的信息( InterProcess Communication ) Linux支持經(jīng)典的 Unix IPC機(jī)制,如信號(hào)、管道和信號(hào)量以及系統(tǒng) IPC機(jī)制。 Task_struct ? 有關(guān)進(jìn)程間通訊的信息( InterProcess Communication ) Linux支持經(jīng)典的 Unix IPC機(jī)制,如信號(hào)、管道和信號(hào)量、 共享內(nèi)存和消息隊(duì)列。系統(tǒng)利用這些信息實(shí)現(xiàn)進(jìn)程間的通訊。 Task_struct ? 進(jìn)程鏈信息( Links) Linux系統(tǒng)中除了初始化進(jìn)程外,任一進(jìn)程都有一個(gè)父進(jìn)程。每個(gè)新進(jìn)程都是從父進(jìn)程中復(fù)制過(guò)來(lái),或者從父進(jìn)程克隆而來(lái)的。 每個(gè)進(jìn)程對(duì)應(yīng)的 taskstruct結(jié)構(gòu)中包含有指向其父進(jìn)程和兄弟進(jìn)程(具有相同父進(jìn)程的進(jìn)程)以及子進(jìn)程的指針。另外,系統(tǒng)中所有進(jìn)程都用一個(gè)雙向鏈表鏈接起來(lái),而它們的根是 init進(jìn)程的 taskstruct數(shù)據(jù)結(jié)構(gòu)。這個(gè)鏈表被 Linux內(nèi)核用來(lái)尋找系統(tǒng)中的所有進(jìn)程。 ?時(shí)間和定時(shí)器( Times and Timers) 內(nèi)核需要記錄進(jìn)程的創(chuàng)建時(shí)間以及在其生命期中消耗的 CPU時(shí)間。時(shí)鐘每跳動(dòng)一次,內(nèi)核就要更新保存,記錄進(jìn)程在系統(tǒng)和用戶(hù)模式下消耗的時(shí)間量。 Task_struct ?文件系統(tǒng)信息( File system) 進(jìn)程可以自由地打開(kāi)或關(guān)閉文件,進(jìn)程的task_struct結(jié)構(gòu)中包含一個(gè)指向每個(gè)打開(kāi)文件描述符的指針 *file以及指向兩個(gè) VFS inode的指針 *fs 。一個(gè)指向進(jìn)程的根目錄,另一個(gè)指向其當(dāng)前目錄。這兩個(gè) VFS inode包含一個(gè) count域,當(dāng)多個(gè)進(jìn)程引用它們時(shí),它的值將增加。這就是為什么你不能刪除進(jìn)程當(dāng)前目錄,或者其子目錄的原因。 Task_struct Task_struct ? 存儲(chǔ)空間信息( Virtual memory) 多數(shù)進(jìn)程都有一些虛擬內(nèi)存, Linux內(nèi)核必須跟蹤虛擬內(nèi)存與系統(tǒng)物理內(nèi)存的映射關(guān)系。 mm_struct 每個(gè)進(jìn)程的虛擬內(nèi)存由一個(gè) mm_struct結(jié)構(gòu)來(lái)代表,該結(jié)構(gòu)實(shí)際上包含了當(dāng)前執(zhí)行映像的有關(guān)信息,其中包含了一個(gè)虛存隊(duì)列 mmap指向由若干 vmareastruc描述的虛存段。 Task_struct Task_struct ? 進(jìn)程上下文信息( Processor Specific Context) 進(jìn)程可以認(rèn)為是系統(tǒng)當(dāng)前狀態(tài)的總和。進(jìn)程運(yùn)行時(shí),它將使用處理器的寄存器以及堆棧等等。進(jìn)程被掛起時(shí),進(jìn)程的上下文 所有的 CPU相關(guān)的狀態(tài)必須保存在它的 task_struct結(jié)構(gòu)中。當(dāng)調(diào)度器重新調(diào)度該進(jìn)程時(shí),所有上下文被重新設(shè)定。 Task_struct 進(jìn)程狀態(tài) 在給定時(shí)刻,進(jìn)程處于六種狀態(tài)之一,進(jìn)程的當(dāng)前狀態(tài)記錄在 task_struct結(jié)構(gòu)的 state成員中 Struct task_struct{ Volatile long state。 …… } 進(jìn)程狀態(tài) ? include/linux/ ? define TASK_RUNNING 0 define TASK_INTERRUPTIBLE 1 define TASK_UNINTERRUPTIBLE 2 define TASK_STOPPED 4 define TASK_ZOMBIE 8 define TASK_DEAD 16 進(jìn)程狀態(tài)轉(zhuǎn)化 ? 調(diào)度用來(lái)確定 多任務(wù)環(huán)境下任務(wù)執(zhí)行的順序 和 在獲得 CPU資源后能夠執(zhí)行的時(shí)間長(zhǎng)度 。 ? 操作系統(tǒng)通過(guò)一個(gè) 調(diào)度程序 來(lái)實(shí)現(xiàn)調(diào)度功能。 – 調(diào)度程序以函數(shù)的形式存在,用來(lái)實(shí)現(xiàn)操作系統(tǒng)的調(diào)度算法。 – 調(diào)度程序本身并不是一個(gè)任務(wù),是一個(gè)函數(shù)調(diào)用,可在內(nèi)核的各個(gè)部分進(jìn)行調(diào)用。 調(diào)度 ? 調(diào)度要解決的問(wèn)題 – WHAT:按什么原則分配 CPU ? 任務(wù)調(diào)度算法 – WHEN:何時(shí)分配 CPU ? 任務(wù)調(diào)度的時(shí)機(jī) – HOW: 如何分配 CPU ? 任務(wù)調(diào)度過(guò)程 調(diào)度 調(diào)度 進(jìn)程調(diào)度要達(dá)到的目的: ? 公平 ? 效率 ? 響應(yīng)時(shí)間 ? 周轉(zhuǎn)時(shí)間 ? 吞吐量 進(jìn)程調(diào)度算法和調(diào)度策略 內(nèi)核調(diào)度管理程序可以在幾種情況下發(fā)生 。 如當(dāng)前進(jìn)程被放入等待隊(duì)列時(shí)發(fā)生 , 系統(tǒng)調(diào)用結(jié)束時(shí)發(fā)生 , 從系統(tǒng)模式返回用戶(hù)模式時(shí)發(fā)生 。 每次調(diào)度管理程序運(yùn)行時(shí)將執(zhí)行以下工作: ( 1) 處理內(nèi)核中的工作 ( 2) 處理當(dāng)前進(jìn)程 ( 3) 選擇進(jìn)程 ( 4) 進(jìn)程交換 ? 實(shí)時(shí)進(jìn)程:先進(jìn)先出或輪轉(zhuǎn)法 ? 非實(shí)時(shí)進(jìn)程:擴(kuò)展的輪轉(zhuǎn)法(把 CPU的時(shí)間分成片,把時(shí)間片按照一定規(guī)則分配給進(jìn)程,根據(jù)動(dòng)態(tài)的優(yōu)先級(jí)來(lái)確定把 CPU分配給哪個(gè)進(jìn)程) 調(diào)度策略 進(jìn)程管理的實(shí)現(xiàn) ? 等待隊(duì)列 Struct __wait_queue{ Unsigned int flags。 define WQ_FLAG_EXCLUSIVE 0x01 Struct task_struct *task。 Struct list_head task_list。 } ? 等待隊(duì)列的操作 _add_wait_queue _remove_wait_queue 進(jìn)程創(chuàng)建 當(dāng)建立新進(jìn)程的時(shí)候, Linux 為新的進(jìn)程分配一個(gè) task_struct 結(jié)構(gòu),然后將指針保存在 task 數(shù)組中。 分兩步: fork+exec 進(jìn)程創(chuàng)建 int do_fork(unsigned long clone_flags,unsigned long usp,struct pt_regs *regs) { 取一個(gè)空閑的 task數(shù)組表項(xiàng)和唯一的 PID號(hào); 根據(jù) clone_flags參數(shù)的值將父進(jìn)程的進(jìn)程表項(xiàng)拷貝到子 進(jìn)程表項(xiàng)中或設(shè)置為共享; 把進(jìn)程加入進(jìn)程圖表設(shè)置進(jìn)程的數(shù)據(jù)結(jié)構(gòu); 調(diào)用 hash_pid把新進(jìn)程置入 pidhash表中; 調(diào)用 wake_up_process設(shè)新進(jìn)程為 TASK_RUNNING,并置入 運(yùn)行隊(duì)列; return(p?pid)。 } 執(zhí)行另外的任務(wù) /*使用 fork和 exec*/ if ((result=fork())==0){ /*child code*/ …… if (exec(“new_program”,…)0 perror(“exec failed”)。 exit(1)。 }else if (result0){ perror(“fork failed”)。 } /*parent continues here*/ 進(jìn)程調(diào)度 調(diào)度時(shí)機(jī): (1)進(jìn)程狀態(tài)轉(zhuǎn)換時(shí)刻 (2)運(yùn)行隊(duì)列中增加一個(gè)進(jìn)程時(shí) (3)當(dāng)前進(jìn)程時(shí)間片用完時(shí) (4)進(jìn)程從系統(tǒng)調(diào)用返回時(shí) (5)內(nèi)核處理完中
點(diǎn)擊復(fù)制文檔內(nèi)容
教學(xué)課件相關(guān)推薦
文庫(kù)吧 www.dybbs8.com
備案圖片鄂ICP備17016276號(hào)-1