內核空間、進程和線程等概念

用戶空間與內核空間

如今操做系統都是採用虛擬存儲器,那麼對32位操做系統而言,它的尋址空間(虛擬存儲空間)爲4G(2的32次方)。操做系統的核心是內核,獨立於普通的應用程序,能夠訪問受保護的內存空間,也有訪問底層硬件設備的全部權限。爲了保證用戶進程不能直接操做內核(kernel),保證內核的安全,操做系統將虛擬空間劃分爲兩部分,一部分爲內核空間,一部分爲用戶空間。針對linux操做系統而言,將最高的1G字節(從虛擬地址0xC0000000到0xFFFFFFFF),供內核使用,稱爲內核空間,而將較低的3G字節(從虛擬地址0x00000000到0xBFFFFFFF),供各個進程使用,稱爲用戶空間。html

進程切換

爲了控制進程的執行,內核必須有能力掛起正在CPU上運行的進程,並恢復之前掛起的某個進程的執行。這種行爲被稱爲進程切換。所以能夠說,任何進程都是在操做系統內核的支持下運行的,是與內核緊密相關的。
從一個進程的運行轉到另外一個進程上運行,這個過程當中通過下面這些變化:
    保存處理機上下文,包括程序計數器和其餘寄存器。
    更新PCB信息。
    把進程的PCB移入相應的隊列,如就緒、在某事件阻塞等隊列。 選擇另外一個進程執行,並更新其PCB。
    更新內存管理的數據結構。
    恢復處理機上下文。python

進程的阻塞

正在執行的進程,因爲期待的某些事件未發生,如請求系統資源失敗、等待某種操做的完成、新數據還沒有到達或無新工做作等,則由系統自動執行阻塞原語(Block),使本身由運行狀態變爲阻塞狀態。可見,進程的阻塞是進程自身的一種主動行爲,也所以只有處於運行態的進程(得到CPU),纔可能將其轉爲阻塞狀態。當進程進入阻塞狀態,是不佔用CPU資源的。linux

文件描述符

文件描述符(File descriptor)是計算機科學中的一個術語,是一個用於表述指向文件的引用的抽象化概念。
文件描述符在形式上是一個非負整數。實際上,它是一個索引值,指向內核爲每個進程所維護的該進程打開文件的記錄表。當程序打開一個現有文件或者建立一個新文件時,內核向進程返回一個文件描述符。在程序設計中,一些涉及底層的程序編寫每每會圍繞着文件描述符展開。可是文件描述符這一律念每每只適用於UNIX、Linux這樣的操做系統。小程序

緩存IO

緩存IO又被稱做標準IO,大多數文件系統的默認IO操做都是緩存IO。在Linux的緩存IO機制中,操做系統會將IO的數據緩存在文件系統的頁緩存( page cache )中,也就是說,數據會先被拷貝到操做系統內核的緩衝區中,而後纔會從操做系統內核的緩衝區拷貝到應用程序的地址空間。
緩存IO的缺點:
數據在傳輸過程當中須要在應用程序地址空間和內核進行屢次數據拷貝操做,這些數據拷貝操做所帶來的CPU以及內存開銷是很是大的。微信小程序

進程和線程

對於操做系統來講,一個任務就是一個進程(Process),好比打開一個瀏覽器就是啓動一個瀏覽器進程,打開一個記事本就啓動了一個記事本進程,打開兩個記事本就啓動了兩個記事本進程,打開一個Word就啓動了一個Word進程
有些進程還不止同時幹一件事,好比Word,它能夠同時進行打字、拼寫檢查、打印等事情。在一個進程內部,要同時幹多件事,就須要同時運行多個「子任務」,咱們把進程內的這些「子任務」稱爲線程(Thread)。
因此應用程序能夠有一個或多個進程,一個進程能夠有一個或多個線程,其中一個是主線程(線程是進程中的實體,一個線程必須有一個父進程)瀏覽器

多進程

Unix/Linux多進程
Unix/Linux操做系統提供了一個fork()系統調用,它很是特殊。普通的函數調用,調用一次,返回一次,可是fork()調用一次,返回兩次,由於操做系統自動把當前進程(稱爲父進程)複製了一份(稱爲子進程),而後,分別在父進程和子進程內返回。
子進程永遠返回0,而父進程返回子進程的ID。這樣作的理由是,一個父進程能夠fork出不少子進程,因此,父進程要記下每一個子進程的ID,而子進程只須要調用getppid()就能夠拿到父進程的ID。緩存

Windows多進程
Windows沒有fork調用,能夠用其餘方式調用,如python中的multiprocessing模塊提供了一個Process安全

線程,進程,CPU,內存,硬盤的關係

CPU就是控制發佈指令和運算處理數據
硬盤存儲數據,主要保存數據。經常使用的IO操做指的就是操做硬盤
內存臨時存儲數據,主要是鏈接硬盤和CPU,是執行者,根據指令工做
線程是進程的一部分
CPU調度的是線程
系統爲進程分配資源(內存),不對線程分配資源微信

查看更多:
開發一個微信小程序實例教程
HTTP協議整理
PHP安全之Web攻擊
秒殺系統設計優化
MySQL優化
Linux下常見的IO模型
數據結構

相關文章
相關標籤/搜索