當前位置:菜譜大全網 - 菜譜 - 計算機系統進程和線程(process and thread)

計算機系統進程和線程(process and thread)

這裏提到,「在操作系統中執行的程序,都以進程的方式運行在更低的權限中」。事實上, 操作系統是以進程為單位去分配空間和執行的 。但是,進程和程序有什麽不同呢?我們說

程序是壹組指令的集合,它靜態存儲於諸如磁盤之類的存儲器裏;

當壹個程序被操作系統執行時,它就會被載入內存空間,並在邏輯上產生壹個獨立的實例,這就是進程。

這就好像是說,程序是壹道菜譜,其中的指令,就是指揮妳開火加鹽的步驟;進程則是烹飪的過程,操作系統按照指令壹絲不茍地烹飪,得到的結果就是我們的菜肴。

隨著 CPU 頻率增長逐漸停滯,CPU 開始向多核的方向發展。為了讓多個 CPU 核心同時為我們工作,並行地執行任務,就需要涉及線程的概念。線程的英文是 Thread,有時也稱為輕量級進程 (Lightweight Process),它是操作系統進行任務調度的最小單元。線程存活於進程之中;同壹個進程中的線程,***享壹個虛擬內存空間,以及其中的資源;線程之間各自持有自己的線程 ID、當前指令的指針(PC)、寄存器集合以及棧。

通常來說,使用多線程(壹個core假裝自己是多個core)會帶來壹下壹些優勢:

將等待 I/O 操作的時間,調度到其他線程執行,提高 CPU 利用率;

將計算密集型的操作留給工作線程,預留線程保持與用戶的交互;

在多 CPU/多核計算機下,有效吃幹計算能力;

相比多進程的程序,更有效地進行數據***享(在同壹個進程空間)。

關於操作系統和操作系統內核這兩個概念,很多人嘗試去區分與解釋,但是發現很難得解釋的完全(包括我自己,這裏只是把我自己的理解整理出來,有什麽不對的地方,希望大家批評指正,***同進步)。

查看了壹些網上和CS系列書籍中的關於操作系統內核的概念解釋,總結之後,我的理解是:

(1)操作系統包括操作系統內核(這是必然的),也就是說內核程序是操作系統所包含的壹組計算機程序中的壹個子集,所以內核程序也是壹組計算機程序,而這些內核程序是操作系統中最常使用基本模塊,直接與硬件打交道,主要由用於管理存儲器、文件、外設和系統資源的那些部分組成。

(2)內核程序壹直占據內存中的壹段內存,這樣處理器可以隨時調用這些內核程序;

(3)而操作系統除了內核程序外,還有包括其他壹些基本組件,如文本編輯器、編譯器、用來與用戶進行交互的程序等

對於第(2)點,可以引入《深入理解計算機系統》這本書中關於“虛擬存儲器”(P12)解釋的壹幅圖來說明,如下:

上圖中,關於進程的虛擬地址空間的說明中,最上面的子區域“內核虛擬存儲器”就是用來存儲內核程序和數據的,這個地址空間是壹個固定的結構,所以對於每壹個應用程序(進程)來說,都具有同樣結構的虛擬地址空間,這就可以保證每個進程都能調用操作系統內核程序來完成自己的功能。

下面再用壹幅圖說明操作系統內核是操作系統的壹組子程

上圖中,操作系統的內核包圍硬件,同時,其外層是系統調用接口,這就是操作系統中除內核以外的其他組件。

下面整理兩個網友關於操作系統與操作系統內核的解釋,個人覺得解釋的還是比較好的:

(1)內核,是操作系統的基礎模塊,用於管理系統資源。例如提供對軟件層面的抽象(例如對進程、文件系統、同步、內存、網絡協議等對象的操作和權限控制),和對硬件訪問的抽象(例如磁盤,顯示,網絡接口卡(NIC));操作系統,在內核的基礎上有延伸,包括了提供基礎服務的系統組件。

(2)內核,就是計算機學科意義上的操作系統,直接與硬件交互,提供CPU時間片管理、中斷、內存管理、IO管理等等;壹般意義上的操作系統包含的東西要更多壹些,至少要有用戶交互的基本程序,比如壹個命令行界面和基本的指令(文件遍歷、進程管理等等),或者圖形界面的桌面和文件瀏覽器。

Standard C library handling of write(). The library provides a portion of the system-call interface for many versions of Unix and Linux.