Linux下多任務介紹
首先,先簡單的介紹一下什麼叫多任務系統?任務、進程、線程分別是什嗎? 它們之間的區別是什嗎?,從而可以宏觀的瞭解一下這三者,然後再針對每一個仔細的講解。
什麼叫 多任務系統?多任務系統指可以同一時間內運行多個應用程式,每個應用程式被稱作一個任務。
任務 定義:任務是一個邏輯概念,指由一個軟體完成的任務,或者是一系列共同達到某一目的的操作。
進程 定義:進程是指一個具有獨立功能的程式在某個資料集上的一次動態執行過程,它是系統進行資源分派和調度 的最小單元。
線程定義:線程是進程內獨立的一條運行路線,是處理器調度的最小單元,也可以成為輕 量級進程。
看了定義,有點暈,還是通俗的說一下它們的區別吧。①通常一個任務是一個程式的一次 執行,一個任務包含一個或多個完成獨立功能的子任務,這個獨立的子任務就是進程或線程。②一個進程可以 擁有多個線程,每個線程必須有一個父進程。
任務
任務是一個邏輯概念,指由一個軟體完成的 任務,或者是一系列共同達到某一目的的操作。通常一個任務是一個程式的一次執行,一個任務包含一個或多 個完成獨立功能的子任務,這個獨立的子任務就是進程或線程。例如,一個殺毒軟體的一次運行是一個任務, 目的是從各種病毒的侵害中保護電腦系統,這個任務包含多個獨立功能的子任務(進程或線程),包括即時監 控功能、定時查殺功能、防火牆功能及使用者互動功能等。任務、進程和線程之間的關係如圖1所示
進 程
進程的基本概念
進程是指一個具有獨立功能的程式在某個資料集上的一次動態執行過程,它 是系統進行資源分派和調度的基本單元。一次任務的運行可以並發啟用多個進程,這些進程相互合作來完成該 任務的一個最終目標。
進程具有並發性、動態性、互動性、獨立性和非同步性等主要特性。
進程 和程式是有本質區別的:程式是靜態一段代碼,是一些儲存在非易失性儲存空間的指令的有序集合,沒有任何 執行的概念;而進程是一個動態概念,它是程式執行的過程,包括動態建立、調度和消亡的整個過程,它是 程式執行和資源管理的最小單位。
Linux下的進程結構
進程不但包括程式的指令和資料,而且 包括程式計數器和處理器的所有寄存器及儲存臨時資料的進程堆棧,因此,正在執行的進程包括處理器當前的 一切活動。
因為linux是一個多任務多進程的作業系統,所以其他的進程必須等到系統將處理器使用權 分配給自己之後才能運行。當正在啟動並執行進程等待其他的系統資源時,linux核心將取得處理器的控制權,並 將處理器分配給其他正在等待的進程,他按照核心中的調度演算法決定將處理器分配給哪一個進程,也就是說, 核心不會讓處理器閑著。
核心將所有進程存放在雙向迴圈鏈表(進程鏈表)中,其中鏈表的頭是 init_task 描述符。鏈表的每一項都是類型為 task_struct,稱為進程描述符的結構,該結構包含了一個進程 相關的所有資訊,定義在<include/linux/sched.h>檔案中。task_struct核心結構比較大,它能完整的 描述一個進程,如進程的狀態、進程的基本資料、進程標識符、記憶體相關資訊、父進程相關資訊、與進程相關 的終端資訊、當前工作目錄、開啟的檔案資訊、所接收的訊號資訊等。