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

Linux 核心--5.Linux進程( 二 )



Scheduling Information
調(diào)度器需要這些信息以便判定系統(tǒng)中哪個進程最迫切需要運行 。

Identifiers
系統(tǒng)中每個進程都有進程標志 。進程標志并不是task數(shù)組的索引 , 它僅僅是個數(shù)字 。每個進程還有一個用戶與組標志 , 它們用來控制進程對系統(tǒng)中文件和設(shè)備的存取權(quán)限 。

Inter-Process Communication
Linux支持經(jīng)典的Unix IPC機制 , 如信號、管道和信號燈以及系統(tǒng)V中IPC機制 , 包括共享內(nèi)存、信號燈和消息隊列 。我們將在IPC一章中詳細討論Linux中IPC機制 。

Links
Linux系統(tǒng)中所有進程都是相互聯(lián)系的 。除了初始化進程外 , 所有進程都有一個父進程 。新進程不是被創(chuàng)建 , 而是被復制 , 或者從以前的進程克隆而來 。每個進程對應(yīng)的task_struct結(jié)構(gòu)中包含有指向其父進程和兄弟進程(具有相同父進程的進程)以及子進程的指針 。我們可以使用pstree 命令來觀察Linux系統(tǒng)中運行進程間的關(guān)系:

init(1)- -crond(98)
|-emacs(387)
|-gpm(146)
|-inetd(110)
|-kerneld(18)
|-kflushd(2)
|-klogd(87)
|-kswapd(3)
|-login(160)---bash(192)---emacs(225)
|-lpd(121)
|-mingetty(161)
|-mingetty(162)
|-mingetty(163)
|-mingetty(164)
|-login(403)---bash(404)---pstree(594)
|-sendmail(134)
|-syslogd(78)
`-update(166)


另外 , 系統(tǒng)中所有進程都用一個雙向鏈表連接起來 , 而它們的根是init進程的task_struct數(shù)據(jù)結(jié)構(gòu) 。這 個鏈表被Linux核心用來尋找系統(tǒng)中所有進程 , 它對ps或者kill命令提供了支持 。

Times and Timers
核心需要記錄進程的創(chuàng)建時間以及在其生命期中消耗的CPU時間 。時鐘每跳動一次 , 核心就要更新保存在jiffies變量中 , 記錄進程在系統(tǒng)和用戶模式下消耗的時間量 。Linux支持與進程相關(guān)的interval定時器 , 進程可以通過系統(tǒng)調(diào)用來設(shè)定定時器以便在定時器到時后向它發(fā)送信號 。這些定時器可以是一次性的或者周期性的 。

File system
進程可以自由地打開或關(guān)閉文件 , 進程的task_struct結(jié)構(gòu)中包含一個指向每個打開文件描敘符的指針以及指向兩個VFS inode的指針 。每個VFS inode唯一地標記文件中的一個目錄或者文件 , 同時還對底層文件系統(tǒng)提供統(tǒng)一的接口 。Linux對文件系統(tǒng)的支持將在filesystem一章中詳細描敘 。這兩個指針 , 一個指向進程的根目錄 , 另一個指向其當前或者pwd目錄 。pwd從Unix命令pwd中派生出來 ,  用來顯示當前工作目錄 。這兩個VFS inode包含一個count域 , 當多個進程引用它們時 , 它的值將增加 。這就是為什么你不能刪除進程當前目錄 , 或者其子目錄的原因 。

Virtual memory
多數(shù)進程都有一些虛擬內(nèi)存(核心線程和后臺進程沒有) , Linux核心必須跟蹤虛擬內(nèi)存與系統(tǒng)物理內(nèi)存的映射關(guān)系 。

Processor Specific Context
進程可以認為是系統(tǒng)當前狀態(tài)的總和 。進程運行時 , 它將使用處理器的寄存器以及堆棧等等 。進程被掛起時 , 進程的上下文-所有的CPU相關(guān)的狀態(tài)必須保存在它的task_struct結(jié)構(gòu)中 。當調(diào)度器重新調(diào)度該進程時 , 所有上下文被重新設(shè)定 。

4.2Identifiers
和其他Unix一樣 , Linux使用用戶和組標志符來檢查對系統(tǒng)中文件和可執(zhí)行映象的訪問權(quán)限 。Linux系統(tǒng)中所有的文件都有所有者和允許的權(quán)限 , 這些權(quán)限描敘了系統(tǒng)使用者對文件或者目錄的使用權(quán) ?;镜臋?quán)限是讀、寫和可執(zhí)行 , 這些權(quán)限被分配給三類用戶:文件的所有者 , 屬于相同組的進程以及系統(tǒng)中所有進程 。每類用戶具有不同的權(quán)限 , 例如一個文件允許其擁有者讀寫 , 但是同組的只能讀而其他進程不允許訪問 。

Linux使用組將文件和目錄的訪問特權(quán)授予一組用戶 , 而不是單個用戶或者系統(tǒng)中所有進程 。如可以為某個軟件項目中的所有用戶創(chuàng)建一個組 , 并將其權(quán)限設(shè)置成只有他們才允許讀寫項目中的源代碼 。一個進程可以同時屬于多個組(最多為32個) , 這些組都被放在進程的task_struct中的group數(shù)組中 。只要某組進程可以存取某個文件 , 則由此組派生出的進程對這個文件有相應(yīng)的組訪問權(quán)限 。

推薦閱讀