日本免费全黄少妇一区二区三区-高清无码一区二区三区四区-欧美中文字幕日韩在线观看-国产福利诱惑在线网站-国产中文字幕一区在线-亚洲欧美精品日韩一区-久久国产精品国产精品国产-国产精久久久久久一区二区三区-欧美亚洲国产精品久久久久

Linux 核心--5.Linux進程

第四章 進程管理

本章重點討論Linux內(nèi)核如何在系統(tǒng)中創(chuàng)建、管理以及刪除進程 。

進程在操作系統(tǒng)中執(zhí)行特定的任務 。而程序是存儲在磁盤上包含可執(zhí)行機器指令和數(shù)據(jù)的靜態(tài)實體 。進程或者任務是處于活動狀態(tài)的計算機程序 。

進程是一個隨執(zhí)行過程不斷變化的實體 。和程序要包含指令和數(shù)據(jù)一樣 , 進程也包含程序計數(shù)器和所有CPU寄存器的值 , 同時它的堆棧中存儲著如子程序參數(shù)、返回地址以及變量之類的臨時數(shù)據(jù) 。當前的執(zhí)行程序 , 或者說進程 , 包含著當前處理器中的活動狀態(tài) 。Linux是一個多處理操作系統(tǒng) 。進程具有獨立的權限與職責 。如果系統(tǒng)中某個進程崩潰 , 它不會影響到其余的進程 。每個進程運行在其各自的虛擬地址空間中 , 通過核心控制下可靠的通訊機制 , 它們之間才能發(fā)生聯(lián)系 。

進程在生命期內(nèi)將使用系統(tǒng)中的資源 。它利用系統(tǒng)中的CPU來執(zhí)行指令 , 在物理內(nèi)存來放置指令和數(shù)據(jù) 。使用文件系統(tǒng)提供的功能打開并使用文件 , 同時直接或者間接的使用物理設備 。Linux必須跟蹤系統(tǒng)中每個進程以及資源 , 以便在進程間實現(xiàn)資源的公平分配 。如果系統(tǒng)有一個進程獨占了大部分物理內(nèi)存或者CPU的使用時間 , 這種情況對系統(tǒng)中的其它進程是不公平的 。

系統(tǒng)中最寶貴的資源是CPU , 通常系統(tǒng)中只有一個CPU 。Linux是一個多處理操作系統(tǒng) , 它最終的目的是:任何時刻系統(tǒng)中的每個CPU上都有任務執(zhí)行 , 從而提高CPU的利用率 。如果進程個數(shù)多于CPU的個數(shù) , 則有些進程必須等待到CPU空閑時才可以運行 。多處理是的思路很簡單;當進程需要某個系統(tǒng)資源時它將停止執(zhí)行并等待到資源可用時才繼續(xù)運行 。單處理系統(tǒng)中 , 如DOS , 此時CPU將處于空等狀態(tài) , 這個時間將被浪費掉 。在多處理系統(tǒng)中 , 因為可以同時存在多個進程 , 所以當某個進程開始等待時 , 操作系統(tǒng)將把CPU控制權拿過來并交給其它可以運行的進程 。調(diào)度器負責選擇適當?shù)倪M程來運行 , Linux使用一些調(diào)度策略以保證CPU分配的公平性 。

Linux支持多種類型的可執(zhí)行文件格式 , 如ELF , JAVA等 。由于這些進程必須使用系統(tǒng)共享庫 , 所以對它們的管理要具有透明性 。


4.1Linux進程
為了讓Linux來管理系統(tǒng)中的進程 , 每個進程用一個task_struct數(shù)據(jù)結(jié)構來表示(任務與進程在Linux中可以混用) 。數(shù)組task包含指向系統(tǒng)中所有task_struct結(jié)構的指針 。

這意味著系統(tǒng)中的最大進程數(shù)目受task數(shù)組大小的限制 , 缺省值一般為512 。創(chuàng)建新進程時 , Linux將從系統(tǒng)內(nèi)存中分配一個task_struct結(jié)構并將其加入task數(shù)組 。當前運行進程的結(jié)構用current指針來指示 。

Linux還支持實時進程 。這些進程必須對外部時間作出快速反應(這就是“實時”的意思) , 系統(tǒng)將區(qū)分對待這些進程和其他進程 。雖然task_struct數(shù)據(jù)結(jié)構龐大而復雜 , 但它可以分成一些功能組成部分:


State
進程在執(zhí)行過程中會根據(jù)環(huán)境來改變state 。Linux進程有以下狀態(tài):
Running
進程處于運行(它是系統(tǒng)的當前進程)或者準備運行狀態(tài)(它在等待系統(tǒng)將CPU分配給它) 。
Waiting
進程在等待一個事件或者資源 。Linux將等待進程分成兩類;可中斷與不可中斷 ??芍袛嗟却M程可以被信號中斷;不可中斷等待進程直接在硬件條件等待 , 并且任何情況下都不可中斷 。
Stopped
進程被停止 , 通常是通過接收一個信號 。正在被調(diào)試的進程可能處于停止狀態(tài) 。
Zombie
這是由于某些原因被終止的進程 , 但是在task數(shù)據(jù)中仍然保留task_struct結(jié)構 。它象一個已經(jīng)死亡的進程 。

推薦閱讀