一区二区三区三上|欧美在线视频五区|国产午夜无码在线观看视频|亚洲国产裸体网站|无码成年人影视|亚洲AV亚洲AV|成人开心激情五月|欧美性爱内射视频|超碰人人干人人上|一区二区无码三区亚洲人区久久精品

0
  • 聊天消息
  • 系統(tǒng)消息
  • 評(píng)論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫(xiě)文章/發(fā)帖/加入社區(qū)
會(huì)員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識(shí)你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

從進(jìn)程和線程的角度歸結(jié)操作系統(tǒng)設(shè)計(jì)

Linux愛(ài)好者 ? 來(lái)源:博客園 ? 作者:飛天小牛肉 ? 2021-03-11 16:28 ? 次閱讀
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

1. 進(jìn)程與線程的簡(jiǎn)單解釋

進(jìn)程(Process)和線程(Thread)是操作系統(tǒng)的基本概念,但是它們比較抽象,不容易掌握。以下這個(gè)解釋出自阮一峰老師的博客,雖然「不是非常嚴(yán)謹(jǐn),但是足夠形象」,看完之后能對(duì)進(jìn)程和線程有個(gè)非常直觀的印象,這樣也方便理解后文。

① 計(jì)算機(jī)的核心是 CPU,它承擔(dān)了所有的計(jì)算任務(wù)。它就像一座工廠,時(shí)刻在運(yùn)行。

②「假定工廠的電力有限,一次只能供給一個(gè)車(chē)間使用」。也就是說(shuō),一個(gè)車(chē)間開(kāi)工的時(shí)候,其他車(chē)間都必須停工。背后的含義就是,單個(gè) CPU 一次只能運(yùn)行一個(gè)任務(wù)。

③ 進(jìn)程就好比工廠的車(chē)間,它代表 CPU 所能處理的單個(gè)任務(wù)。任一時(shí)刻,CPU 總是運(yùn)行一個(gè)進(jìn)程,其他進(jìn)程處于非運(yùn)行狀態(tài)。

④ 一個(gè)車(chē)間里,可以有很多工人。他們協(xié)同完成一個(gè)任務(wù)。

⑤ 線程就好比車(chē)間里的工人。一個(gè)進(jìn)程可以包括多個(gè)線程。

⑥ 車(chē)間的空間是工人們共享的,比如許多房間是每個(gè)工人都可以進(jìn)出的。這象征一個(gè)進(jìn)程的內(nèi)存空間是共享的,每個(gè)線程都可以使用這些共享內(nèi)存。

⑦ 可是,每間房間的大小不同,有些房間最多只能容納一個(gè)人,比如廁所。里面有人的時(shí)候,其他人就不能進(jìn)去了。這代表一個(gè)線程使用某些共享內(nèi)存時(shí),其他線程必須等它結(jié)束,才能使用這一塊內(nèi)存。

⑧ 一個(gè)防止他人進(jìn)入的簡(jiǎn)單方法,就是門(mén)口加一把鎖。先到的人鎖上門(mén),后到的人看到上鎖,就在門(mén)口排隊(duì),等鎖打開(kāi)再進(jìn)去。這就叫"互斥鎖"(Mutual exclusion,縮寫(xiě) Mutex),防止多個(gè)線程同時(shí)讀寫(xiě)某一塊內(nèi)存區(qū)域。

⑨ 還有些房間,可以同時(shí)容納 n 個(gè)人,比如廚房。也就是說(shuō),如果人數(shù)大于 n,多出來(lái)的人只能在外面等著。這好比某些內(nèi)存區(qū)域,只能供給固定數(shù)目的線程使用。

⑩ 這時(shí)的解決方法,就是在門(mén)口掛 n 把鑰匙。進(jìn)去的人就取一把鑰匙,出來(lái)時(shí)再把鑰匙掛回原處。后到的人發(fā)現(xiàn)鑰匙架空了,就知道必須在門(mén)口排隊(duì)等著了。這種做法叫做 "信號(hào)量"(Semaphore),用來(lái)保證多個(gè)線程不會(huì)互相沖突。

不難看出,互斥鎖 Mutex 是信號(hào)量 semaphore 的一種特殊情況(n = 1時(shí))。也就是說(shuō),完全可以用后者替代前者。但是,因?yàn)?Mutex 較為簡(jiǎn)單,且效率高,所以在必須保證資源獨(dú)占的情況下,還是采用這種設(shè)計(jì)。

2. 進(jìn)程基礎(chǔ)掃盲

① 什么是進(jìn)程

結(jié)合上文的簡(jiǎn)單解釋?zhuān)旅娼o出進(jìn)程的科學(xué)定義:「進(jìn)程是程序在某個(gè)數(shù)據(jù)集合上的一次運(yùn)行活動(dòng),也是操作系統(tǒng)進(jìn)行資源分配和保護(hù)的基本單位」。

通俗來(lái)說(shuō),「進(jìn)程就是程序的一次執(zhí)行過(guò)程」,程序是靜態(tài)的,它作為系統(tǒng)中的一種資源是永遠(yuǎn)存在的。而進(jìn)程是動(dòng)態(tài)的,它是動(dòng)態(tài)的產(chǎn)生,變化和消亡的,擁有其自己的生命周期。

舉個(gè)例子:同時(shí)掛三個(gè) QQ 號(hào),它們就對(duì)應(yīng)三個(gè) QQ 進(jìn)程,退出一個(gè)就會(huì)殺死一個(gè)對(duì)應(yīng)的進(jìn)程。但是,就算你把這三個(gè) QQ 全都退出了,QQ 這個(gè)程序死亡了嗎?顯然沒(méi)有。

進(jìn)程不僅包含正在運(yùn)行的程序?qū)嶓w,并且包括這個(gè)運(yùn)行的程序中占據(jù)的所有系統(tǒng)資源,比如說(shuō) CPU、內(nèi)存、網(wǎng)絡(luò)資源等。很多小伙伴在回答進(jìn)程的概念的時(shí)候,往往只會(huì)說(shuō)它是一個(gè)運(yùn)行的實(shí)體,而會(huì)忽略掉進(jìn)程所占據(jù)的資源。比如說(shuō),同樣一個(gè)程序,同一時(shí)刻被兩次運(yùn)行了,那么他們就是兩個(gè)獨(dú)立的進(jìn)程。

② 進(jìn)程的組成

進(jìn)程主要由三個(gè)部分組成:

1)「進(jìn)程控制塊 PCB」。包含如下幾個(gè)部分:

進(jìn)程描述信息

進(jìn)程控制和管理信息

資源分配清單

CPU 相關(guān)信息

2)「數(shù)據(jù)段」。即進(jìn)程運(yùn)行過(guò)程中各種數(shù)據(jù)(比如程序中定義的變量)

3)「程序段」。就是程序的代碼(指令序列)

舉個(gè)例子:同時(shí)掛三個(gè) QQ 號(hào),會(huì)對(duì)應(yīng)三個(gè) QQ 進(jìn)程,它們的 PCB、數(shù)據(jù)段各不相同,但程序段的內(nèi)容都是相同的 (都是運(yùn)行著相同的 QQ 程序)

PCB 是提供給操作系統(tǒng)用的,而程序段、數(shù)據(jù)段是給進(jìn)程自己用的。

進(jìn)程控制塊 PCB

每個(gè)進(jìn)程有且僅有一個(gè)進(jìn)程控制塊(Process Control Block,PCB),或稱進(jìn)程描述符,它是「進(jìn)程存在的唯一標(biāo)識(shí)」,是「操作系統(tǒng)用來(lái)記錄和刻畫(huà)進(jìn)程狀態(tài)及環(huán)境信息的數(shù)據(jù)結(jié)構(gòu)」,也是操作系統(tǒng)掌握進(jìn)程的唯一資料結(jié)構(gòu)和管理進(jìn)程的主要依據(jù)。所以說(shuō) PCB 是提供給操作系統(tǒng)使用的。

通俗的解釋?zhuān)翰僮飨到y(tǒng)需要對(duì)各個(gè)進(jìn)程進(jìn)行管理,但凡管理時(shí)所需要的信息,都會(huì)被放在 PCB 中,「PCB 是進(jìn)程存在的唯一標(biāo)志」。創(chuàng)建進(jìn)程和撤銷(xiāo)進(jìn)程等都是指對(duì) PCB 的操作,當(dāng)進(jìn)程被創(chuàng)建時(shí),操作系統(tǒng)為其創(chuàng)建 PCB,當(dāng)進(jìn)程結(jié)束時(shí),會(huì)回收其 PCB。

一般來(lái)說(shuō),PCB 會(huì)包含如下四類(lèi)信息:

1)「進(jìn)程描述信息」:用來(lái)讓操作系統(tǒng)區(qū)分各個(gè)進(jìn)程

當(dāng)進(jìn)程被創(chuàng)建時(shí),操作系統(tǒng)會(huì)為該進(jìn)程分配一個(gè)唯一的、不重復(fù)的 “身份證號(hào)”—「PID」(ProcessID,進(jìn)程 ID)

另外,進(jìn)程描述信息還包含進(jìn)程所屬的用戶 ID(「UID」)

2)「進(jìn)程控制和管理信息」:記錄進(jìn)程的運(yùn)行情況。比如 CPU 的使用時(shí)間、磁盤(pán)使用情況、網(wǎng)絡(luò)流量使用情況等。

3)「資源分配清單」:記錄給進(jìn)程分配了哪些資源。比如分配了多少內(nèi)存、正在使用哪些 I/O 設(shè)備、正在使用哪些文件等。

4)「CPU 相關(guān)信息」:進(jìn)程在讓出 CPU 時(shí),必須保存該進(jìn)程在 CPU 中的各種信息,比如各種寄存器的值。用于實(shí)現(xiàn)進(jìn)程切換,確保這個(gè)進(jìn)程再次運(yùn)行的時(shí)候恢復(fù) CPU 現(xiàn)場(chǎng),從斷點(diǎn)處繼續(xù)執(zhí)行。這就是所謂的「保存現(xiàn)場(chǎng)信息」。

③ 進(jìn)程的狀態(tài)

盡管每一個(gè)進(jìn)程都是獨(dú)立的實(shí)體,有其自己的 PCB 和內(nèi)部狀態(tài),但是進(jìn)程之間經(jīng)常需要相互作用。一個(gè)進(jìn)程的輸出結(jié)果可能是另一個(gè)進(jìn)程的輸入。假設(shè)進(jìn)程 A 的輸入依賴進(jìn)程 B 的輸出,那么在進(jìn)程 B 的輸出結(jié)果沒(méi)有出來(lái)之前,進(jìn)程 A 就無(wú)法執(zhí)行,它就會(huì)被阻塞。這就是進(jìn)程的阻塞態(tài)。

經(jīng)典的進(jìn)程三態(tài)模型如下:

「運(yùn)行態(tài)」(running):進(jìn)程占有 CPU 正在運(yùn)行。

「就緒態(tài)」(ready):進(jìn)程具備運(yùn)行條件,等待系統(tǒng)分配 CPU 以便運(yùn)行。

「阻塞態(tài)」/ 等待態(tài)(wait):進(jìn)程不具備運(yùn)行條件,正在等待某個(gè)事件的完成。

05d25c42-7e2d-11eb-8b86-12bb97331649.png

上圖中的時(shí)間片用完,可以這樣理解:

進(jìn)程是并發(fā)執(zhí)行的嘛,宏觀上在一段時(shí)間內(nèi)能同時(shí)運(yùn)行多個(gè)程序,但其實(shí)微觀上是交替發(fā)生的。也就是說(shuō) CPU 一般不會(huì)讓一個(gè)進(jìn)程一次性執(zhí)行完,為了保證所有進(jìn)程可以得到公平調(diào)度,CPU 時(shí)間被劃分為一段段的時(shí)間片,這些時(shí)間片再被輪流分配給各個(gè)進(jìn)程。某個(gè)進(jìn)程的時(shí)間片用完后這個(gè)進(jìn)程就會(huì)進(jìn)入就緒態(tài),而其他被分配到時(shí)間片的進(jìn)程就會(huì)進(jìn)入運(yùn)行態(tài)。這個(gè)處于就緒態(tài)的進(jìn)程就需要等待進(jìn)程調(diào)度程序的下一次調(diào)度,為其分配 CPU 時(shí)間片后才能再次恢復(fù)運(yùn)行。

需要注意的是:「阻塞態(tài)是由于缺少需要的資源從而由運(yùn)行態(tài)轉(zhuǎn)換而來(lái),但是該資源不包括 CPU 時(shí)間片,缺少 CPU 時(shí)間片會(huì)從運(yùn)行態(tài)轉(zhuǎn)換為就緒態(tài)」。

很多系統(tǒng)中都增加了新建態(tài)(new)和終止態(tài)(exit),形成「五態(tài)模型」:

「新建態(tài)」(new):進(jìn)程正在被創(chuàng)建時(shí)的狀態(tài)

「終止態(tài)」(exit):進(jìn)程正在從系統(tǒng)中消失時(shí)的狀態(tài)

0603f158-7e2d-11eb-8b86-12bb97331649.png

從上圖可以發(fā)現(xiàn),「只有就緒態(tài)和運(yùn)行態(tài)可以相互轉(zhuǎn)換,其它的都是單向轉(zhuǎn)換」。

這些不同狀態(tài)的進(jìn)程操作系統(tǒng)是如何進(jìn)行管理的呢?上文說(shuō)過(guò),PCB 是提供給操作系統(tǒng)使用的,是操作系統(tǒng)管理進(jìn)程的主要依據(jù)。沒(méi)錯(cuò),操作就是通過(guò) PCB 來(lái)管理這些擁有不同狀態(tài)的進(jìn)程的。

進(jìn)程的 PCB 會(huì)通過(guò)某種方式組織起來(lái),一般來(lái)說(shuō),操作系統(tǒng)會(huì)把處于同一狀態(tài)的所有進(jìn)程的 PCB 鏈接在一起,這種數(shù)據(jù)結(jié)構(gòu)就稱為「進(jìn)程隊(duì)列」(Process Queue)。

④ 進(jìn)程控制

所謂進(jìn)程控制就是對(duì)系統(tǒng)中的所有進(jìn)程實(shí)施有效的管理,「實(shí)現(xiàn)進(jìn)程狀態(tài)轉(zhuǎn)換」功能。包括創(chuàng)建進(jìn)程、阻塞進(jìn)程、喚醒進(jìn)程、終止進(jìn)程等,這些功能均由「原語(yǔ)」來(lái)實(shí)現(xiàn),操作系統(tǒng)通過(guò)原語(yǔ)來(lái)完成進(jìn)程原理,包括進(jìn)程的同步和互斥、進(jìn)程的通信和管理。

「什么是原語(yǔ)」?原語(yǔ)是一種特殊的程序,它的執(zhí)行具有「原子性」。也就是說(shuō),這段程序的運(yùn)行必須一氣呵成,不可中斷。原語(yǔ)是操作系統(tǒng)內(nèi)核里的一段程序:

063dccfc-7e2d-11eb-8b86-12bb97331649.png

思考一下:為什么進(jìn)程控制(進(jìn)程狀態(tài)轉(zhuǎn)換)的過(guò)程要一氣呵成,不可中斷?

答:如果進(jìn)程狀態(tài)轉(zhuǎn)換的過(guò)程不能一氣呵成,就有可能導(dǎo)致操作系統(tǒng)中的某些關(guān)鍵數(shù)據(jù)結(jié)構(gòu)信息不統(tǒng)一,這會(huì)影響操作系統(tǒng)進(jìn)行別的管理工作。

進(jìn)程的創(chuàng)建

操作系統(tǒng)初始啟動(dòng)時(shí)會(huì)創(chuàng)建承擔(dān)系統(tǒng)資源分配和控制管理的一些系統(tǒng)進(jìn)程,同時(shí)還會(huì)創(chuàng)建一個(gè)所有用戶進(jìn)程的祖先,其他用戶進(jìn)程是在應(yīng)用程序運(yùn)行時(shí)創(chuàng)建的。

操作系統(tǒng)允許一個(gè)進(jìn)程創(chuàng)建另一個(gè)進(jìn)程,而且允許子進(jìn)程繼承父進(jìn)程所擁有的資源,當(dāng)子進(jìn)程被終止時(shí),其在父進(jìn)程處繼承的資源應(yīng)當(dāng)還給父進(jìn)程。同時(shí),終止父進(jìn)程時(shí)同時(shí)也會(huì)終止其所有的子進(jìn)程。

創(chuàng)建進(jìn)程的過(guò)程,也就是「創(chuàng)建原語(yǔ)」包含的內(nèi)容如下:

在進(jìn)程列表中增加一項(xiàng),從 PCB 池中申請(qǐng)一個(gè)空閑的 PCB(PCB 是有限的,若申請(qǐng)失敗則創(chuàng)建失敗),為新進(jìn)程分配一個(gè)唯一的進(jìn)程標(biāo)識(shí)符;

為新進(jìn)程分配地址空間,由進(jìn)程管理程序確定加載至進(jìn)程地址空間中的程序;

為新進(jìn)程分配各種資源;

初始化 PCB,如進(jìn)程標(biāo)識(shí)符、CPU 初始狀態(tài)等;

把新進(jìn)程的狀態(tài)設(shè)置為就緒態(tài),并將其移入就緒隊(duì)列,等待被調(diào)度運(yùn)行。

「什么事件會(huì)觸發(fā)進(jìn)程的創(chuàng)建呢」?有如下四種情況:

用戶登錄:分時(shí)系統(tǒng)中,用戶登錄成功,系統(tǒng)會(huì)為其建立一個(gè)新的進(jìn)程

作業(yè)調(diào)度:多道批處理系統(tǒng)中,有新的作業(yè)放入內(nèi)存中,會(huì)為其建立一個(gè)新的進(jìn)程

提供服務(wù):用戶向操作系統(tǒng)提出某些請(qǐng)求時(shí),會(huì)新建一個(gè)進(jìn)程處理該請(qǐng)求

應(yīng)用請(qǐng)求:由用戶進(jìn)程主動(dòng)請(qǐng)求創(chuàng)建一個(gè)子進(jìn)程

進(jìn)程的終止

進(jìn)程的終止也稱為撤銷(xiāo),進(jìn)程完成特定工作或出現(xiàn)嚴(yán)重錯(cuò)誤后必須被終止。引起進(jìn)程終止的事件有三種:

正常結(jié)束:進(jìn)程自己請(qǐng)求終止(exit 系統(tǒng)調(diào)用)

異常結(jié)束:比如整數(shù)除 0,非法使用特權(quán)指令,然后被操作系統(tǒng)強(qiáng)行終止

外界干預(yù):Ctrl + Alt + delete 打開(kāi)進(jìn)程管理器,用戶手動(dòng)殺死進(jìn)程

終止(撤銷(xiāo))進(jìn)程的過(guò)程,也就是「撤銷(xiāo)原語(yǔ)」包含的內(nèi)容如下:

從 PCB 集合中找到終止進(jìn)程的 PCB;

若進(jìn)程處于運(yùn)行態(tài),則立即剝奪其 CPU,終止該進(jìn)程的執(zhí)行,然后將 CPU 資源分配給其他進(jìn)程;

如果其還有子進(jìn)程,則應(yīng)將其所有子進(jìn)程終止;

將該進(jìn)程所擁有的全部資源都?xì)w還給父進(jìn)程或操作系統(tǒng);

回收 PCB 并將其歸還至 PCB 池。

進(jìn)程的阻塞和喚醒

進(jìn)程阻塞是指進(jìn)程讓出 CPU 資源轉(zhuǎn)而等待一個(gè)事件,如等待資源、等待 I/O 操作完成等。進(jìn)程通常使用阻塞原語(yǔ)來(lái)阻塞自己,所以阻塞是進(jìn)程的自主行為,是一個(gè)同步事件。當(dāng)?shù)却录瓿蓵r(shí)會(huì)產(chǎn)生一個(gè)中斷,激活操作系統(tǒng),在系統(tǒng)的控制下將被阻塞的進(jìn)程喚醒,也就是喚醒原語(yǔ)。

進(jìn)程的阻塞和喚醒顯然是由進(jìn)程切換來(lái)完成的。

進(jìn)程的阻塞步驟,也就是「阻塞原語(yǔ)」的內(nèi)容為:

找到將要被阻塞的進(jìn)程對(duì)應(yīng)的 PCB;

保護(hù)進(jìn)程運(yùn)行現(xiàn)場(chǎng),將 PCB 狀態(tài)信息設(shè)置為阻塞態(tài),暫時(shí)停止進(jìn)程運(yùn)行;

將該 PCB 插入相應(yīng)事件的阻塞隊(duì)列(等待隊(duì)列)。

進(jìn)程的喚醒步驟,也就是「喚醒原語(yǔ)」的內(nèi)容為:

在該事件的阻塞隊(duì)列中找到相應(yīng)進(jìn)程的 PCB;

將該 PCB 從阻塞隊(duì)列中移出,并將進(jìn)程的狀態(tài)設(shè)置為就緒態(tài);

把該 PCB 插入到就緒隊(duì)列中,等待被調(diào)度程序調(diào)度。

阻塞原語(yǔ)和喚醒原語(yǔ)的作用正好相反,「阻塞原語(yǔ)使得進(jìn)程從運(yùn)行態(tài)轉(zhuǎn)為阻塞態(tài),而喚醒原語(yǔ)使得進(jìn)程從阻塞態(tài)轉(zhuǎn)為就緒態(tài)」。如果某個(gè)進(jìn)程使用阻塞原語(yǔ)來(lái)阻塞自己,那么他就必須使用喚醒原語(yǔ)來(lái)喚醒自己,因何事阻塞,就由何事喚醒,否則被阻塞的進(jìn)程將永遠(yuǎn)處于阻塞態(tài)。因此,「阻塞原語(yǔ)和喚醒原語(yǔ)是成對(duì)出現(xiàn)的」。

⑤ 進(jìn)程上下文切換

所謂進(jìn)程的上下文切換,就是說(shuō)各個(gè)進(jìn)程之間是共享 CPU 資源的,不可能一個(gè)進(jìn)程永遠(yuǎn)占用著 CPU 資源,不同的時(shí)候進(jìn)程之間需要切換,使得不同的進(jìn)程被分配 CPU 資源,這個(gè)過(guò)程就是進(jìn)程的上下文切換,「一個(gè)進(jìn)程切換到另一個(gè)進(jìn)程運(yùn)行」。

因?yàn)檫M(jìn)程是由內(nèi)核進(jìn)行管理和調(diào)度的,所以「進(jìn)程的上下文切換一定發(fā)生在內(nèi)核態(tài)」。

進(jìn)程上下文的切換也是一個(gè)原語(yǔ)操作,稱為「切換原語(yǔ)」,其內(nèi)容如下:

首先,將進(jìn)程 A 的運(yùn)行環(huán)境信息存入 PCB,這個(gè)運(yùn)行環(huán)境信息就是進(jìn)程的上下文(Context)

然后,將 PCB 移入相應(yīng)的進(jìn)程隊(duì)列;

選擇另一個(gè)進(jìn)程 B 進(jìn)行執(zhí)行,并更新其 PCB 中的狀態(tài)為運(yùn)行態(tài)

當(dāng)進(jìn)程 A 被恢復(fù)運(yùn)行的時(shí)候,根據(jù)它的 PCB 恢復(fù)進(jìn)程 A 所需的運(yùn)行環(huán)境

引起進(jìn)程上下文切換的事件,也就是某個(gè)占用 CPU 資源運(yùn)行的當(dāng)前進(jìn)程被趕出 CPU 的原因有如下:

當(dāng)前進(jìn)程的時(shí)間片到

有更高優(yōu)先級(jí)的進(jìn)程到達(dá)

當(dāng)前進(jìn)程主動(dòng)阻塞

當(dāng)前進(jìn)程終止

3. 線程基礎(chǔ)掃盲

① 什么是線程

結(jié)合文章開(kāi)頭的簡(jiǎn)單解釋?zhuān)敢粋€(gè)進(jìn)程中可以有多個(gè)線程,它們共享這個(gè)進(jìn)程的資源?!?/p>

舉個(gè)例子,QQ 和 Chrome 瀏覽器是兩個(gè)進(jìn)程,Chrome 進(jìn)程里面有很多線程,例如 HTTP 請(qǐng)求線程、事件響應(yīng)線程、渲染線程等等,線程的并發(fā)執(zhí)行使得在瀏覽器中點(diǎn)擊一個(gè)新鏈接從而發(fā)起 HTTP 請(qǐng)求時(shí),瀏覽器還可以響應(yīng)用戶的其它事件。

② 為什么要引入線程

早期的操作系統(tǒng)都是以進(jìn)程作為獨(dú)立運(yùn)行的基本單位的,直到后期計(jì)算機(jī)科學(xué)家們又提出了更小的能獨(dú)立運(yùn)行的基本單位,也就是線程。這就好比物理學(xué)家研究物質(zhì)組成一樣:先發(fā)現(xiàn)了分子,然后繼續(xù)細(xì)分發(fā)現(xiàn)原子,再后來(lái)是原子核和電子、夸克等等。

那么,為什么要引入線程呢?我們只需要記住這句話:「線程又稱為迷你進(jìn)程,但是它比進(jìn)程更容易創(chuàng)建,也更容易撤銷(xiāo)」。

從上文我們知道,進(jìn)程是擁有資源的基本單位,而且還能夠進(jìn)行獨(dú)立調(diào)度,這就猶如一個(gè)隨時(shí)背著糧草的士兵,這必然會(huì)造成士兵的執(zhí)行命令(戰(zhàn)斗)的速度。所以,一個(gè)簡(jiǎn)單想法就是:分配兩個(gè)士兵執(zhí)行同一個(gè)命令:一個(gè)負(fù)責(zé)攜帶所需糧草隨時(shí)供給,另一個(gè)士兵負(fù)責(zé)執(zhí)行命令(戰(zhàn)斗)。這就是線程的思想,「輕裝上陣的士兵就是線程」。

用嚴(yán)謹(jǐn)?shù)恼Z(yǔ)言描述來(lái)說(shuō)就是:由于創(chuàng)建或撤銷(xiāo)進(jìn)程時(shí),系統(tǒng)都要為之分配或回收資源,如內(nèi)存空間、I/O 設(shè)備等,需要較大的時(shí)空開(kāi)銷(xiāo),限制了并發(fā)程度的進(jìn)一步提高。為減少進(jìn)程切換的開(kāi)銷(xiāo),「把進(jìn)程作為資源分配單位和調(diào)度單位這兩個(gè)屬性分開(kāi)處理」,即進(jìn)程還是作為資源分配的基本單位,但是不作為調(diào)度的基本單位(很少調(diào)度或切換),把調(diào)度執(zhí)行與切換的責(zé)任交給線程,即「線程成為獨(dú)立調(diào)度的基本單位」,它比進(jìn)程更容易(更快)創(chuàng)建,也更容易撤銷(xiāo)。

記住這句話!引入線程前,進(jìn)程是資源分配和獨(dú)立調(diào)度的基本單位。引入線程后,「進(jìn)程是資源分配的基本單位,線程是獨(dú)立調(diào)度的基本單位」。

③ 線程優(yōu)缺點(diǎn)

線程的特征和進(jìn)程差不多,進(jìn)程有的他基本都有,比如:

線程具有就緒、阻塞、運(yùn)行三種基本狀態(tài),同樣具有狀態(tài)之間的轉(zhuǎn)換關(guān)系;

線程間可以并發(fā)執(zhí)行

在多 CPU 環(huán)境下,各個(gè)線程也可以分派到不同的 CPU 上并行執(zhí)行

線程的優(yōu)點(diǎn):

一個(gè)進(jìn)程中可以同時(shí)存在多個(gè)線程,這些線程共享該進(jìn)程的資源。進(jìn)程間的通信必須請(qǐng)求操作系統(tǒng)服務(wù)(因?yàn)?CPU 要切換到內(nèi)核態(tài)),開(kāi)銷(xiāo)很大。而同進(jìn)程下的線程間通信,無(wú)需操作系統(tǒng)干預(yù),開(kāi)銷(xiāo)更小。

不過(guò),需要注意的是:從屬于不同進(jìn)程的線程間通信,也必須請(qǐng)求操作系統(tǒng)服務(wù)。

線程間的并發(fā)比進(jìn)程的開(kāi)銷(xiāo)更小,系統(tǒng)并發(fā)性提升。

同樣,需要注意的是:從屬于不同進(jìn)程的線程間切換,它是會(huì)導(dǎo)致進(jìn)程切換的,所以開(kāi)銷(xiāo)也大。

線程的缺點(diǎn):

當(dāng)進(jìn)程中的一個(gè)線程奔潰時(shí),會(huì)導(dǎo)致其所屬進(jìn)程的所有線程奔潰。

舉個(gè)例子,對(duì)于游戲的用戶設(shè)計(jì),就不應(yīng)該使用多線程的方式,否則一個(gè)用戶掛了,會(huì)影響其他同個(gè)進(jìn)程的線程。

4. 總結(jié)

操作系統(tǒng)的設(shè)計(jì),從進(jìn)程和線程的角度來(lái)說(shuō),可以歸結(jié)為三點(diǎn):

以多進(jìn)程形式,允許多個(gè)任務(wù)同時(shí)運(yùn)行;

以多線程形式,允許單個(gè)任務(wù)分成不同的部分運(yùn)行;

提供協(xié)調(diào)機(jī)制,一方面防止進(jìn)程之間和線程之間產(chǎn)生沖突,另一方面允許進(jìn)程之間和線程之間共享資源。

原文標(biāo)題:五分鐘掃盲:進(jìn)程與線程基礎(chǔ)必知

文章出處:【微信公眾號(hào):Linux愛(ài)好者】歡迎添加關(guān)注!文章轉(zhuǎn)載請(qǐng)注明出處。

責(zé)任編輯:haq

聲明:本文內(nèi)容及配圖由入駐作者撰寫(xiě)或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場(chǎng)。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問(wèn)題,請(qǐng)聯(lián)系本站處理。 舉報(bào)投訴
  • pcb
    pcb
    +關(guān)注

    關(guān)注

    4367

    文章

    23487

    瀏覽量

    409548
  • 計(jì)算機(jī)
    +關(guān)注

    關(guān)注

    19

    文章

    7661

    瀏覽量

    90754
  • 操作系統(tǒng)
    +關(guān)注

    關(guān)注

    37

    文章

    7144

    瀏覽量

    125570

原文標(biāo)題:?五分鐘掃盲:進(jìn)程與線程基礎(chǔ)必知

文章出處:【微信號(hào):LinuxHub,微信公眾號(hào):Linux愛(ài)好者】歡迎添加關(guān)注!文章轉(zhuǎn)載請(qǐng)注明出處。

收藏 人收藏
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

    評(píng)論

    相關(guān)推薦
    熱點(diǎn)推薦

    鴻道Intewell操作系統(tǒng):人形機(jī)器人底層操作系統(tǒng)

    操作系統(tǒng)的實(shí)時(shí)性賦能東土科技的鴻道(Intewell)工業(yè)操作系統(tǒng)作為國(guó)內(nèi)唯一通過(guò)汽車(chē)、工業(yè)控制、醫(yī)療、軌道交通四項(xiàng)功能安全認(rèn)證的系統(tǒng),為標(biāo)準(zhǔn)體系中的技術(shù)層架構(gòu)提供了底層支持。其微內(nèi)核虛擬化架構(gòu)可將人形機(jī)器人電子架構(gòu)成本降低50
    的頭像 發(fā)表于 05-16 14:44 ?230次閱讀

    理想汽車(chē)智駕操作系統(tǒng)解讀

    [首發(fā)于智駕最前沿微信公眾號(hào)]在智能網(wǎng)聯(lián)與生成式AI技術(shù)深度融合的浪潮下,汽車(chē)操作系統(tǒng)已經(jīng)最初的簡(jiǎn)單資源管理平臺(tái),演化為承載感知決策、執(zhí)行控制與安全防護(hù)的智能化中樞。理想汽車(chē)自主研發(fā)的星環(huán)OS
    的頭像 發(fā)表于 05-13 10:54 ?313次閱讀
    理想汽車(chē)智駕<b class='flag-5'>操作系統(tǒng)</b>解讀

    進(jìn)程線程、協(xié)程傻傻分不清?一文帶你徹底扒光它們的\"底褲\"!

    組合?。?終極靈魂拷問(wèn) 進(jìn)程線程哪個(gè)是爹?→ 進(jìn)程操作系統(tǒng)生的,線程進(jìn)程自己生的(親子鑒定
    發(fā)表于 03-26 09:27

    鴻道Intewell操作系統(tǒng)的Linux實(shí)時(shí)拓展方案

    鴻道Intewell操作系統(tǒng)是科東軟件自主研發(fā)的新型工業(yè)實(shí)時(shí)操作系統(tǒng),歷經(jīng)30多年研發(fā)積累,采用業(yè)界領(lǐng)先的微內(nèi)核架構(gòu),具備高實(shí)時(shí)、高安全及強(qiáng)擴(kuò)展的特性,是目前國(guó)內(nèi)唯一通過(guò)汽車(chē)、工業(yè)控制、醫(yī)療儀器、軌道交通四項(xiàng)功能安全認(rèn)證的操作系統(tǒng)
    的頭像 發(fā)表于 02-27 10:08 ?386次閱讀
    鴻道Intewell<b class='flag-5'>操作系統(tǒng)</b>的Linux實(shí)時(shí)拓展方案

    【「鴻蒙操作系統(tǒng)設(shè)計(jì)原理與架構(gòu)」閱讀體驗(yàn)】- 第5章閱讀有感

    下去。 操作系統(tǒng)適配層角度類(lèi)比 翻譯官團(tuán)隊(duì)(操作系統(tǒng)適配層):假設(shè)演員來(lái)自不同的國(guó)家,說(shuō)不同的語(yǔ)言,而設(shè)施供應(yīng)商也可能來(lái)自不同地區(qū),有不同的操作
    發(fā)表于 02-02 00:34

    國(guó)產(chǎn)銀河麒麟操作系統(tǒng)V10和星光麒麟V1.0操作系統(tǒng)如何選擇?

    國(guó)產(chǎn)銀河麒麟操作系統(tǒng)和星光麒麟操作系統(tǒng)都是由中國(guó)電子旗下科技企業(yè)麒麟軟件有限公司(簡(jiǎn)稱“麒麟軟件”)開(kāi)發(fā)的國(guó)產(chǎn)自主可控的操作系統(tǒng)。麒麟軟件介紹:麒麟軟件以安全可信操作系統(tǒng)技術(shù)為核心,面
    的頭像 發(fā)表于 01-24 09:14 ?2232次閱讀
    國(guó)產(chǎn)銀河麒麟<b class='flag-5'>操作系統(tǒng)</b>V10和星光麒麟V1.0<b class='flag-5'>操作系統(tǒng)</b>如何選擇?

    deepin操作系統(tǒng)介紹

    希望自己的能力和對(duì)桌面操作系統(tǒng)的理解,能給 Linux 的用戶與開(kāi)發(fā)者更多的選擇。我們也相信 deepin 能夠得到更多用戶的認(rèn)可與喜愛(ài),成為開(kāi)源世界的最佳選擇。? 一、 deepin 操作系統(tǒng) 先說(shuō) Linux
    的頭像 發(fā)表于 12-23 09:08 ?2334次閱讀
    deepin<b class='flag-5'>操作系統(tǒng)</b>介紹

    如何在windows上emulate不同操作系統(tǒng)

    一、虛擬化技術(shù)概述 虛擬化技術(shù)允許在單個(gè)物理機(jī)器上創(chuàng)建多個(gè)虛擬機(jī),每個(gè)虛擬機(jī)都可以運(yùn)行不同的操作系統(tǒng)。這使得我們可以在Windows系統(tǒng)上模擬其他操作系統(tǒng),而無(wú)需購(gòu)買(mǎi)額外的硬件。虛擬化技術(shù)的關(guān)鍵組件
    的頭像 發(fā)表于 12-05 15:50 ?852次閱讀

    一文搞懂Linux進(jìn)程的睡眠和喚醒

    一、常見(jiàn)的進(jìn)程狀態(tài)與理解 在操作系統(tǒng)內(nèi)部,有專(zhuān)門(mén)用來(lái)管理進(jìn)程的結(jié)構(gòu)體,叫做struct task_struct,也稱作進(jìn)程控制塊(PCB),主要包含描述
    發(fā)表于 11-04 15:15

    Python中多線程和多進(jìn)程的區(qū)別

    Python作為一種高級(jí)編程語(yǔ)言,提供了多種并發(fā)編程的方式,其中多線程與多進(jìn)程是最常見(jiàn)的兩種方式之一。在本文中,我們將探討Python中多線程與多進(jìn)程的概念、區(qū)別以及如何使用
    的頭像 發(fā)表于 10-23 11:48 ?1013次閱讀
    Python中多<b class='flag-5'>線程</b>和多<b class='flag-5'>進(jìn)程</b>的區(qū)別

    linux操作系統(tǒng)安裝步驟 linux操作系統(tǒng)的特點(diǎn)及組成

    Linux操作系統(tǒng)安裝步驟 Linux操作系統(tǒng)是一種開(kāi)源的操作系統(tǒng),它以其穩(wěn)定性、安全性和靈活性而聞名。以下是安裝Linux操作系統(tǒng)的一般步驟,以Ubuntu為例: 1. 準(zhǔn)備工作 在
    的頭像 發(fā)表于 10-21 11:24 ?1216次閱讀

    工控機(jī)支持什么操作系統(tǒng)

    工控機(jī),全稱工業(yè)控制計(jì)算機(jī)(Industrial Personal Computer, IPC),支持多種操作系統(tǒng)以滿足不同行業(yè)和應(yīng)用場(chǎng)景的需求。具體來(lái)說(shuō),工控機(jī)常見(jiàn)的操作系統(tǒng)包括:
    的頭像 發(fā)表于 09-11 09:24 ?1048次閱讀

    簡(jiǎn)單認(rèn)識(shí)RTOS實(shí)時(shí)操作系統(tǒng)

    RTOS(Real Time Operating System,實(shí)時(shí)操作系統(tǒng))是一種專(zhuān)門(mén)設(shè)計(jì)用于在嚴(yán)格時(shí)間限制內(nèi)處理任務(wù)的操作系統(tǒng)。它以其高實(shí)時(shí)性、多任務(wù)處理能力和資源管理能力在工業(yè)自動(dòng)化、醫(yī)療設(shè)備、航空航天、汽車(chē)電子等眾多領(lǐng)域得到廣泛應(yīng)用。以下是對(duì)RTOS實(shí)時(shí)
    的頭像 發(fā)表于 08-20 11:20 ?5232次閱讀

    深入探討Linux的進(jìn)程調(diào)度器

    Linux操作系統(tǒng)作為一個(gè)開(kāi)源且廣泛應(yīng)用的操作系統(tǒng),其內(nèi)核設(shè)計(jì)包含了許多核心功能,而進(jìn)程調(diào)度器(Scheduler)就是其中一個(gè)至關(guān)重要的模塊。進(jìn)程調(diào)度器負(fù)責(zé)決定在任何給定的時(shí)刻哪個(gè)
    的頭像 發(fā)表于 08-13 13:36 ?1282次閱讀
    深入探討Linux的<b class='flag-5'>進(jìn)程</b>調(diào)度器

    Windows操作系統(tǒng)是什么?它有哪些特點(diǎn)?

    Windows操作系統(tǒng)是由美國(guó)微軟公司(Microsoft Corporation)開(kāi)發(fā)和推出的一種計(jì)算機(jī)操作系統(tǒng)。自1985年Windows 1.0版本發(fā)布以來(lái),Windows系統(tǒng)經(jīng)歷了多次重大
    的頭像 發(fā)表于 08-07 16:30 ?6387次閱讀