偷偷摘套内射激情视频,久久精品99国产国产精,中文字幕无线乱码人妻,中文在线中文a,性爽19p

操作系統(tǒng)中的進(jìn)程與線程

開發(fā) 開發(fā)工具
在傳統(tǒng)的操作系統(tǒng)中,進(jìn)程擁有獨(dú)立的內(nèi)存地址空間和一個用于控制的線程。但是,現(xiàn)在的情況更多的情況下要求在同一地址空間下?lián)碛卸鄠€線程并發(fā)執(zhí)行。因此線程被引入操作系統(tǒng)。

為什么需要線程?

如果非要說是為什么需要線程,還不如說為什么需要進(jìn)程中還有其它進(jìn)程。這些進(jìn)程中包含的其它迷你進(jìn)程就是線程。

線程之所以說是迷你進(jìn)程,是因?yàn)榫€程和進(jìn)程有很多相似之處,比如線程和進(jìn)程的狀態(tài)都有運(yùn)行,就緒,阻塞狀態(tài)。這幾種狀態(tài)理解起來非常簡單,當(dāng)進(jìn)程所需的資源沒有到位時會是阻塞狀態(tài),當(dāng)進(jìn)程所需的資源到位時但CPU沒有到位時是就緒狀態(tài),當(dāng)進(jìn)程既有所需的資源,又有CPU時,就為運(yùn)行狀態(tài)。

下面我們來看一個具體的例子:

就拿我寫博客的LiveWriter來說,LiveWriter需要監(jiān)聽我打字輸入的狀態(tài),還需要每隔5分鐘對草稿進(jìn)行自動保存。假設(shè)如果這個進(jìn)程只有一個線程的話,那么當(dāng)對草稿進(jìn)行保存時,因?yàn)榇藭r需要訪問硬盤,而訪問硬盤的時間線程是阻塞狀態(tài)的,這時我的任何輸入都會沒有響應(yīng),這種用戶體驗(yàn)是無法接受的,或許我們可以通過鍵盤或者鼠標(biāo)的輸入去中斷保存草稿的過程,但這種方案也并不討好。而使用多線程,每個線程僅僅需要處理自己那一部分應(yīng)該完成的任務(wù),而不用去關(guān)心和其它線程的沖突。因此簡化了編程模型。如圖1所示。

1

圖1.兩條線程滿足各自的功能

更具體的說,線程的好處如下:

1.在很多程序中,需要多個線程互相同步或互斥的并行完成工作,而將這些工作分解到不同的線程中去無疑簡化了編程模型。

2.因?yàn)榫€程相比進(jìn)程來說,更加的輕量,所以線程的創(chuàng)建和銷毀的代價變得更小。

3.線程提高了性能,雖然線程宏觀上是并行的,但微觀上卻是串行。從CPU角度線程并無法提升性能,但如果某些線程涉及到等待資源(比如IO,等待輸入)時,多線程允許進(jìn)程中的其它線程繼續(xù)執(zhí)行而不是整個進(jìn)程被阻塞,因此提高了CPU的利用率,從這個角度會提升性能。

4.在多CPU或多核的情況下,使用線程不僅僅在宏觀上并行,在微觀上也是并行的。

這里值得注意的是,上面的兩個線程如果改成兩個進(jìn)程,那么達(dá)不到所要的效果,因?yàn)檫M(jìn)程有自己獨(dú)立的內(nèi)存地址空間,而線程共享進(jìn)程的內(nèi)存地址空間。

經(jīng)典線程模型

另一個看進(jìn)程和線程的角度是進(jìn)程模型基于兩類不同的概念:資源的組織和執(zhí)行。在過去沒有線程的操作系統(tǒng)中,資源的組織和執(zhí)行都是由進(jìn)程完成的。但區(qū)分這兩者很多時候需要加以區(qū)分,這也是為什么需要引入線程。

進(jìn)程是用于組織資源的單位,進(jìn)程將相關(guān)的資源組織在一起,這些資源包括:內(nèi)存地址空間,程序,數(shù)據(jù)等,將這些以進(jìn)程的形式組織起來可以使得操作系統(tǒng)管理這些資源更為容易。

而線程,是每一個進(jìn)程中執(zhí)行的一個條線。線程雖然共享進(jìn)程中的大多數(shù)資源,但線程也需要自己的一些資源,比如:用于標(biāo)識下一條執(zhí)行指令的程序計(jì)數(shù)器,一些容納局部變量的寄存器,以及用于表示執(zhí)行的歷史的棧。

總而言之:進(jìn)程是組織資源的最小單位,而線程是安排CPU執(zhí)行的最小單位。

其實(shí)在一個進(jìn)程中多個線程并行和在操作系統(tǒng)中多個進(jìn)程并行非常類似,只是線程共享的是地址空間,而進(jìn)程共享的是物理內(nèi)存,打印機(jī),鍵盤等資源……

每一個進(jìn)程和線程所獨(dú)自占有的資源如表1所示。

進(jìn)程占有的資源 線程占有的資源
地址空間
全局變量
打開的文件
子進(jìn)程
信號量
賬戶信息

寄存器
狀態(tài)
程序計(jì)數(shù)器

表1.進(jìn)程和線程所獨(dú)占的資源

其中,線程可以共享進(jìn)程獨(dú)占的資源。

我們常用的術(shù)語“多線程”一般指的是在同一個進(jìn)程中多個線程的并發(fā)執(zhí)行。如圖2所示。

2

圖2.沒有多線程的系統(tǒng)一個進(jìn)程只能由一個線程

在多線程的進(jìn)程中,每個線程輪流使用CPU,因此實(shí)際上線程并不是并行的,但從宏觀上看,是并行的。

在多線程模型中,每一個進(jìn)程初始創(chuàng)建時只有一個線程。這個線程可以通過調(diào)用系統(tǒng)的庫函數(shù)去創(chuàng)建其它線程。線程創(chuàng)建的線程并必須要為其指定地址,因?yàn)樾碌木€程自動在創(chuàng)建它的地址空間內(nèi)工作。雖然一個線程可以創(chuàng)建另一個線程,但通常來講,線程之間是并列的,并不存在層級關(guān)系。

當(dāng)一個進(jìn)程完成其工作后,可以通過調(diào)用系統(tǒng)庫函數(shù)進(jìn)行銷毀。

操作系統(tǒng)實(shí)現(xiàn)線程的幾種模式

在操作系統(tǒng)中,線程可以實(shí)現(xiàn)在用戶模式下,也可以實(shí)現(xiàn)在內(nèi)核模式下,也可以兩者結(jié)合實(shí)現(xiàn)。

線程實(shí)現(xiàn)在用戶空間下

當(dāng)線程在用戶空間下實(shí)現(xiàn)時,操作系統(tǒng)對線程的存在一無所知,操作系統(tǒng)只能看到進(jìn)程,而不能看到線程。所有的線程都是在用戶空間實(shí)現(xiàn)。在操作系統(tǒng)看來,每一個進(jìn)程只有一個線程。過去的操作系統(tǒng)大部分是這種實(shí)現(xiàn)方式,這種方式的好處之一就是即使操作系統(tǒng)不支持線程,也可以通過庫函數(shù)來支持線程。

在這種模式下,每一個進(jìn)程中都維護(hù)著一個線程表來追蹤本進(jìn)程中的線程,這個表中包含表1中每個線程獨(dú)占的資源,比如棧,寄存器,狀態(tài)等,如圖3所示。

3

圖3.在用戶空間中實(shí)現(xiàn)線程

這種模式當(dāng)一個線程完成了其工作或等待需要被阻塞時,其調(diào)用系統(tǒng)過程阻塞自身,然后將CPU交由其它線程。

這種的模式的好處,首先,是在用戶空間下進(jìn)行進(jìn)程切換的速度要遠(yuǎn)快于在操作系統(tǒng)內(nèi)核中實(shí)現(xiàn)。其次,在用戶空間下實(shí)現(xiàn)線程使得程序員可以實(shí)現(xiàn)自己的線程調(diào)度算法。比如進(jìn)程可以實(shí)現(xiàn)垃圾回收器來回收線程。還有,當(dāng)線程數(shù)量過多時,由于在用戶空間維護(hù)線程表,不會占用大量的操作系統(tǒng)空間。

有好處就有壞處,這種模式最致命的缺點(diǎn)也是由于操作系統(tǒng)不知道線程的存在,因此當(dāng)一個進(jìn)程中的某一個線程進(jìn)行系統(tǒng)調(diào)用時,比如缺頁中斷而導(dǎo)致線程阻塞,此時操作系統(tǒng)會阻塞整個進(jìn)程,即使這個進(jìn)程中其它線程還在工作。還有一個問題是假如進(jìn)程中一個線程長時間不釋放CPU,因?yàn)橛脩艨臻g并沒有時鐘中斷機(jī)制,會導(dǎo)致此進(jìn)程中的其它線程得不到CPU而持續(xù)等待。

線程實(shí)現(xiàn)在操作系統(tǒng)內(nèi)核中

在這種模式下,操作系統(tǒng)知道線程的存在。此時線程表存在操作系統(tǒng)內(nèi)核中,如圖4所示。

4

圖4.線程在操作系統(tǒng)內(nèi)核中實(shí)現(xiàn)

在這種模式下,所有可能阻塞線程的調(diào)用都以系統(tǒng)調(diào)用(System Call)的方式實(shí)現(xiàn),相比在用戶空間下實(shí)現(xiàn)線程造成阻塞的運(yùn)行時調(diào)用(System runtime call)成本會高出很多。當(dāng)一個線程阻塞時,操作系統(tǒng)可以選擇將CPU交給同一進(jìn)程中的其它線程,或是其它進(jìn)程中的線程,而在用戶空間下實(shí)現(xiàn)線程時,調(diào)度只能在本進(jìn)程中執(zhí)行,直到操作系統(tǒng)剝奪了當(dāng)前進(jìn)程的CPU。

因?yàn)樵趦?nèi)核模式下實(shí)現(xiàn)進(jìn)程的成本更高,一個比較好的做法是另線程回收利用,當(dāng)一個線程需要被銷毀時,僅僅是修改標(biāo)記位,而不是直接銷毀其內(nèi)容,當(dāng)一個新的線程需要被創(chuàng)建時,也同樣修改被“銷毀”的線程其標(biāo)記位即可。

這種模式下同樣還是有一些弊端,比如接收系統(tǒng)信號的單位是進(jìn)程,而不是線程,那么由進(jìn)程中的哪一個線程接收系統(tǒng)信號呢?如果使用了表來記錄,那么多個線程注冊則通過哪一個線程處理系統(tǒng)信號?

混合模式

還有一種實(shí)現(xiàn)方式是將上面兩種模式進(jìn)行混合,用戶空間中進(jìn)程管理自己的線程,操作系統(tǒng)內(nèi)核中有一部分內(nèi)核級別的線程,如圖5所示。

5

圖5.混合模式

在這種模式下,操作系統(tǒng)只能看到內(nèi)核線程。用戶空間線程基于操作系統(tǒng)線程運(yùn)行。因此,程序員可以決定使用多少用戶空間線程以及操作系統(tǒng)線程,這無疑具有更大的靈活性。而用戶空間線程的調(diào)度和前面所說的在用戶空間下執(zhí)行實(shí)現(xiàn)線程是一樣的,同樣可以自定義實(shí)現(xiàn)。

原文鏈接:http://www.cnblogs.com/CareySon/archive/2012/05/04/ProcessAndThread.html

【編輯推薦】
責(zé)任編輯:彭凡 來源: 博客園
相關(guān)推薦

2010-04-22 13:56:21

Aix操作系統(tǒng)

2021-08-12 14:49:44

操作系統(tǒng)線程進(jìn)程

2019-06-26 09:10:07

操作系統(tǒng)調(diào)度算法

2010-04-14 13:59:45

Unix操作系統(tǒng)

2010-04-16 18:19:32

Unix操作系統(tǒng)

2023-03-13 14:08:00

系統(tǒng)抽象操作系統(tǒng)大型系統(tǒng)

2010-04-14 15:58:25

Unix操作系統(tǒng)

2010-04-09 17:25:13

Unix操作系統(tǒng)

2010-04-19 16:47:40

Unix操作系統(tǒng)

2010-04-19 09:08:20

Unix操作系統(tǒng)

2010-04-14 13:20:29

Unix操作系統(tǒng)

2010-04-30 17:27:59

Unix操作系統(tǒng)

2010-04-14 16:45:15

Unix操作系統(tǒng)

2025-09-05 03:11:00

2021-04-19 09:27:03

Java線程操作系統(tǒng)

2009-12-15 18:27:51

Linux操作系統(tǒng)

2025-04-03 01:45:00

2025-05-12 09:12:59

2010-04-14 14:52:14

Unix操作系統(tǒng)

2020-03-10 19:34:08

CPU虛擬化調(diào)度
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號