Linux 中的新程序狀態

2021-04-21 08:13:00 字數 861 閱讀 2037

linux® kernel 2.6.25 引入了一種新的程序狀態,名為task_killable,用於將程序置為睡眠狀態,它可以替代有效但可能無法終止的task_uninterruptible程序狀態,以及易於喚醒但更加安全的task_interruptible程序狀態。2002 年,openafs 檔案系統驅動程式在阻塞所有訊號之後等待事件中斷時遇到了問題,而task_killable就是因此而被推出的。這種新的睡眠狀態允許task_uninterruptible響應致命訊號。在本文中,作者將介紹這方面的內容,並結合 2.6.26 和早期版本 2.6.18 中的示例來討論 linux 核心發生的相關變化以及這些變化帶來的新 api。
類似於檔案,程序是任何 unix® 作業系統的基本元素。程序是執行可執行檔案的指令的動態實體。除了執行其指令之外,程序有時還會管理 開啟檔案、處理器上下文、位址空間以及與程式相關的資料等。linux 核心將關於程序的完整資訊儲存在程序描述符 中,它的結構被定義為struct task_struct。您可以在 linux 核心原始檔 include/linux/sched.h 中看到struct task_struct的各個字段。

關於程序狀態

在程序的生命週期內,可能會經歷一系列互斥的狀態。核心將程序的狀態資訊儲存在struct task_struct的 state 欄位中。圖 1 展示了程序狀態之間的轉換。

圖 1. 程序狀態轉換

我們先來了解一下各種程序狀態:

本文**ibm developerworks中國

linux啟動新程序

說到程序,首先要明確的乙個概念就是什麼是程序,程序是 a program in execution 乙個程序由如下元素組成 程式的上下文 context 它是程式當前執行的狀態 程式的當前執行目錄 程式訪問的檔案和目錄 程式的信任狀態或者說訪問許可權,比如它的檔案模式和所有權 記憶體和其他分配給程序...

Linux建立新程序

在linux系統中,建立新程序涉及到兩個系統呼叫api 分別是fork 和exec 首先,在當前程序中,呼叫fork 複製出自身的乙個拷貝,此時主要涉及到核心中與程序上下文相關的資料複製操作,而使用者 和資料則採用寫時複製技術共享同乙份資源。當乙個程序複製後,原程序稱為父程序,新程序則稱為子程序.然...

linux建立新程序的過程

linux系統中建立新程序使用fork 系統呼叫。所有程序都是通過複製程序0而得到的。都是程序0的子程序。linux建立新程序的過程 1.系統首先在任務陣列中找出乙個還沒有被任何程序使用的空項。如果陣列已滿,沒有空項,則fork系統呼叫出錯返回。系統將會為新建程序在記憶體區中分配一頁記憶體來存放其任...