1. 進(jìn)程與線程的簡單解釋
進(jìn)程(Process)和線程(Thread)是操作系統(tǒng)的基本概念,但是它們比較抽象,不容易掌握。以下這個解釋出自阮一峰老師的博客,雖然「不是非常嚴(yán)謹(jǐn),但是足夠形象」,看完之后能對進(jìn)程和線程有個非常直觀的印象,這樣也方便理解后文。
① 計算機的核心是 CPU,它承擔(dān)了所有的計算任務(wù)。它就像一座工廠,時刻在運行。
②「假定工廠的電力有限,一次只能供給一個車間使用」。也就是說,一個車間開工的時候,其他車間都必須停工。背后的含義就是,單個 CPU 一次只能運行一個任務(wù)。
③ 進(jìn)程就好比工廠的車間,它代表 CPU 所能處理的單個任務(wù)。任一時刻,CPU 總是運行一個進(jìn)程,其他進(jìn)程處于非運行狀態(tài)。
④ 一個車間里,可以有很多工人。他們協(xié)同完成一個任務(wù)。
⑤ 線程就好比車間里的工人。一個進(jìn)程可以包括多個線程。
⑥ 車間的空間是工人們共享的,比如許多房間是每個工人都可以進(jìn)出的。這象征一個進(jìn)程的內(nèi)存空間是共享的,每個線程都可以使用這些共享內(nèi)存。
⑦ 可是,每間房間的大小不同,有些房間最多只能容納一個人,比如廁所。里面有人的時候,其他人就不能進(jìn)去了。這代表一個線程使用某些共享內(nèi)存時,其他線程必須等它結(jié)束,才能使用這一塊內(nèi)存。
⑧ 一個防止他人進(jìn)入的簡單方法,就是門口加一把鎖。先到的人鎖上門,后到的人看到上鎖,就在門口排隊,等鎖打開再進(jìn)去。這就叫"互斥鎖"(Mutual exclusion,縮寫 Mutex),防止多個線程同時讀寫某一塊內(nèi)存區(qū)域。
⑨ 還有些房間,可以同時容納 n 個人,比如廚房。也就是說,如果人數(shù)大于 n,多出來的人只能在外面等著。這好比某些內(nèi)存區(qū)域,只能供給固定數(shù)目的線程使用。
⑩ 這時的解決方法,就是在門口掛 n 把鑰匙。進(jìn)去的人就取一把鑰匙,出來時再把鑰匙掛回原處。后到的人發(fā)現(xiàn)鑰匙架空了,就知道必須在門口排隊等著了。這種做法叫做 "信號量"(Semaphore),用來保證多個線程不會互相沖突。
不難看出,互斥鎖 Mutex 是信號量 semaphore 的一種特殊情況(n = 1時)。也就是說,完全可以用后者替代前者。但是,因為 Mutex 較為簡單,且效率高,所以在必須保證資源獨占的情況下,還是采用這種設(shè)計。
2. 進(jìn)程基礎(chǔ)掃盲
① 什么是進(jìn)程
結(jié)合上文的簡單解釋,下面給出進(jìn)程的科學(xué)定義:「進(jìn)程是程序在某個數(shù)據(jù)集合上的一次運行活動,也是操作系統(tǒng)進(jìn)行資源分配和保護(hù)的基本單位」。
通俗來說,「進(jìn)程就是程序的一次執(zhí)行過程」,程序是靜態(tài)的,它作為系統(tǒng)中的一種資源是永遠(yuǎn)存在的。而進(jìn)程是動態(tài)的,它是動態(tài)的產(chǎn)生,變化和消亡的,擁有其自己的生命周期。
舉個例子:同時掛三個 QQ 號,它們就對應(yīng)三個 QQ 進(jìn)程,退出一個就會殺死一個對應(yīng)的進(jìn)程。但是,就算你把這三個 QQ 全都退出了,QQ 這個程序死亡了嗎?顯然沒有。
進(jìn)程不僅包含正在運行的程序?qū)嶓w,并且包括這個運行的程序中占據(jù)的所有系統(tǒng)資源,比如說 CPU、內(nèi)存、網(wǎng)絡(luò)資源等。很多小伙伴在回答進(jìn)程的概念的時候,往往只會說它是一個運行的實體,而會忽略掉進(jìn)程所占據(jù)的資源。比如說,同樣一個程序,同一時刻被兩次運行了,那么他們就是兩個獨立的進(jìn)程。
② 進(jìn)程的組成
進(jìn)程主要由三個部分組成:
1)「進(jìn)程控制塊 PCB」。包含如下幾個部分:
進(jìn)程描述信息
進(jìn)程控制和管理信息
資源分配清單
CPU 相關(guān)信息
2)「數(shù)據(jù)段」。即進(jìn)程運行過程中各種數(shù)據(jù)(比如程序中定義的變量)
3)「程序段」。就是程序的代碼(指令序列)
舉個例子:同時掛三個 QQ 號,會對應(yīng)三個 QQ 進(jìn)程,它們的 PCB、數(shù)據(jù)段各不相同,但程序段的內(nèi)容都是相同的 (都是運行著相同的 QQ 程序)
PCB 是提供給操作系統(tǒng)用的,而程序段、數(shù)據(jù)段是給進(jìn)程自己用的。
進(jìn)程控制塊 PCB
每個進(jìn)程有且僅有一個進(jìn)程控制塊(Process Control Block,PCB),或稱進(jìn)程描述符,它是「進(jìn)程存在的唯一標(biāo)識」,是「操作系統(tǒng)用來記錄和刻畫進(jìn)程狀態(tài)及環(huán)境信息的數(shù)據(jù)結(jié)構(gòu)」,也是操作系統(tǒng)掌握進(jìn)程的唯一資料結(jié)構(gòu)和管理進(jìn)程的主要依據(jù)。所以說 PCB 是提供給操作系統(tǒng)使用的。
通俗的解釋:操作系統(tǒng)需要對各個進(jìn)程進(jìn)行管理,但凡管理時所需要的信息,都會被放在 PCB 中,「PCB 是進(jìn)程存在的唯一標(biāo)志」。創(chuàng)建進(jìn)程和撤銷進(jìn)程等都是指對 PCB 的操作,當(dāng)進(jìn)程被創(chuàng)建時,操作系統(tǒng)為其創(chuàng)建 PCB,當(dāng)進(jìn)程結(jié)束時,會回收其 PCB。
一般來說,PCB 會包含如下四類信息:
1)「進(jìn)程描述信息」:用來讓操作系統(tǒng)區(qū)分各個進(jìn)程
當(dāng)進(jìn)程被創(chuàng)建時,操作系統(tǒng)會為該進(jìn)程分配一個唯一的、不重復(fù)的 “身份證號”—「PID」(ProcessID,進(jìn)程 ID)
另外,進(jìn)程描述信息還包含進(jìn)程所屬的用戶 ID(「UID」)
2)「進(jìn)程控制和管理信息」:記錄進(jìn)程的運行情況。比如 CPU 的使用時間、磁盤使用情況、網(wǎng)絡(luò)流量使用情況等。
3)「資源分配清單」:記錄給進(jìn)程分配了哪些資源。比如分配了多少內(nèi)存、正在使用哪些 I/O 設(shè)備、正在使用哪些文件等。
4)「CPU 相關(guān)信息」:進(jìn)程在讓出 CPU 時,必須保存該進(jìn)程在 CPU 中的各種信息,比如各種寄存器的值。用于實現(xiàn)進(jìn)程切換,確保這個進(jìn)程再次運行的時候恢復(fù) CPU 現(xiàn)場,從斷點處繼續(xù)執(zhí)行。這就是所謂的「保存現(xiàn)場信息」。
③ 進(jìn)程的狀態(tài)
盡管每一個進(jìn)程都是獨立的實體,有其自己的 PCB 和內(nèi)部狀態(tài),但是進(jìn)程之間經(jīng)常需要相互作用。一個進(jìn)程的輸出結(jié)果可能是另一個進(jìn)程的輸入。假設(shè)進(jìn)程 A 的輸入依賴進(jìn)程 B 的輸出,那么在進(jìn)程 B 的輸出結(jié)果沒有出來之前,進(jìn)程 A 就無法執(zhí)行,它就會被阻塞。這就是進(jìn)程的阻塞態(tài)。
經(jīng)典的進(jìn)程三態(tài)模型如下:
「運行態(tài)」(running):進(jìn)程占有 CPU 正在運行。
「就緒態(tài)」(ready):進(jìn)程具備運行條件,等待系統(tǒng)分配 CPU 以便運行。
「阻塞態(tài)」/ 等待態(tài)(wait):進(jìn)程不具備運行條件,正在等待某個事件的完成。
上圖中的時間片用完,可以這樣理解:
進(jìn)程是并發(fā)執(zhí)行的嘛,宏觀上在一段時間內(nèi)能同時運行多個程序,但其實微觀上是交替發(fā)生的。也就是說 CPU 一般不會讓一個進(jìn)程一次性執(zhí)行完,為了保證所有進(jìn)程可以得到公平調(diào)度,CPU 時間被劃分為一段段的時間片,這些時間片再被輪流分配給各個進(jìn)程。某個進(jìn)程的時間片用完后這個進(jìn)程就會進(jìn)入就緒態(tài),而其他被分配到時間片的進(jìn)程就會進(jìn)入運行態(tài)。這個處于就緒態(tài)的進(jìn)程就需要等待進(jìn)程調(diào)度程序的下一次調(diào)度,為其分配 CPU 時間片后才能再次恢復(fù)運行。
需要注意的是:「阻塞態(tài)是由于缺少需要的資源從而由運行態(tài)轉(zhuǎn)換而來,但是該資源不包括 CPU 時間片,缺少 CPU 時間片會從運行態(tài)轉(zhuǎn)換為就緒態(tài)」。
很多系統(tǒng)中都增加了新建態(tài)(new)和終止態(tài)(exit),形成「五態(tài)模型」:
「新建態(tài)」(new):進(jìn)程正在被創(chuàng)建時的狀態(tài)
「終止態(tài)」(exit):進(jìn)程正在從系統(tǒng)中消失時的狀態(tài)
從上圖可以發(fā)現(xiàn),「只有就緒態(tài)和運行態(tài)可以相互轉(zhuǎn)換,其它的都是單向轉(zhuǎn)換」。
這些不同狀態(tài)的進(jìn)程操作系統(tǒng)是如何進(jìn)行管理的呢?上文說過,PCB 是提供給操作系統(tǒng)使用的,是操作系統(tǒng)管理進(jìn)程的主要依據(jù)。沒錯,操作就是通過 PCB 來管理這些擁有不同狀態(tài)的進(jìn)程的。
進(jìn)程的 PCB 會通過某種方式組織起來,一般來說,操作系統(tǒng)會把處于同一狀態(tài)的所有進(jìn)程的 PCB 鏈接在一起,這種數(shù)據(jù)結(jié)構(gòu)就稱為「進(jìn)程隊列」(Process Queue)。
④ 進(jìn)程控制
所謂進(jìn)程控制就是對系統(tǒng)中的所有進(jìn)程實施有效的管理,「實現(xiàn)進(jìn)程狀態(tài)轉(zhuǎn)換」功能。包括創(chuàng)建進(jìn)程、阻塞進(jìn)程、喚醒進(jìn)程、終止進(jìn)程等,這些功能均由「原語」來實現(xiàn),操作系統(tǒng)通過原語來完成進(jìn)程原理,包括進(jìn)程的同步和互斥、進(jìn)程的通信和管理。
「什么是原語」?原語是一種特殊的程序,它的執(zhí)行具有「原子性」。也就是說,這段程序的運行必須一氣呵成,不可中斷。原語是操作系統(tǒng)內(nèi)核里的一段程序:
思考一下:為什么進(jìn)程控制(進(jìn)程狀態(tài)轉(zhuǎn)換)的過程要一氣呵成,不可中斷?
答:如果進(jìn)程狀態(tài)轉(zhuǎn)換的過程不能一氣呵成,就有可能導(dǎo)致操作系統(tǒng)中的某些關(guān)鍵數(shù)據(jù)結(jié)構(gòu)信息不統(tǒng)一,這會影響操作系統(tǒng)進(jìn)行別的管理工作。
進(jìn)程的創(chuàng)建
操作系統(tǒng)初始啟動時會創(chuàng)建承擔(dān)系統(tǒng)資源分配和控制管理的一些系統(tǒng)進(jìn)程,同時還會創(chuàng)建一個所有用戶進(jìn)程的祖先,其他用戶進(jìn)程是在應(yīng)用程序運行時創(chuàng)建的。
操作系統(tǒng)允許一個進(jìn)程創(chuàng)建另一個進(jìn)程,而且允許子進(jìn)程繼承父進(jìn)程所擁有的資源,當(dāng)子進(jìn)程被終止時,其在父進(jìn)程處繼承的資源應(yīng)當(dāng)還給父進(jìn)程。同時,終止父進(jìn)程時同時也會終止其所有的子進(jìn)程。
創(chuàng)建進(jìn)程的過程,也就是「創(chuàng)建原語」包含的內(nèi)容如下:
在進(jìn)程列表中增加一項,從 PCB 池中申請一個空閑的 PCB(PCB 是有限的,若申請失敗則創(chuàng)建失敗),為新進(jìn)程分配一個唯一的進(jìn)程標(biāo)識符;
為新進(jìn)程分配地址空間,由進(jìn)程管理程序確定加載至進(jìn)程地址空間中的程序;
為新進(jìn)程分配各種資源;
初始化 PCB,如進(jìn)程標(biāo)識符、CPU 初始狀態(tài)等;
把新進(jìn)程的狀態(tài)設(shè)置為就緒態(tài),并將其移入就緒隊列,等待被調(diào)度運行。
「什么事件會觸發(fā)進(jìn)程的創(chuàng)建呢」?有如下四種情況:
用戶登錄:分時系統(tǒng)中,用戶登錄成功,系統(tǒng)會為其建立一個新的進(jìn)程
作業(yè)調(diào)度:多道批處理系統(tǒng)中,有新的作業(yè)放入內(nèi)存中,會為其建立一個新的進(jìn)程
提供服務(wù):用戶向操作系統(tǒng)提出某些請求時,會新建一個進(jìn)程處理該請求
應(yīng)用請求:由用戶進(jìn)程主動請求創(chuàng)建一個子進(jìn)程
進(jìn)程的終止
進(jìn)程的終止也稱為撤銷,進(jìn)程完成特定工作或出現(xiàn)嚴(yán)重錯誤后必須被終止。引起進(jìn)程終止的事件有三種:
正常結(jié)束:進(jìn)程自己請求終止(exit 系統(tǒng)調(diào)用)
異常結(jié)束:比如整數(shù)除 0,非法使用特權(quán)指令,然后被操作系統(tǒng)強行終止
外界干預(yù):Ctrl + Alt + delete 打開進(jìn)程管理器,用戶手動殺死進(jìn)程
終止(撤銷)進(jìn)程的過程,也就是「撤銷原語」包含的內(nèi)容如下:
從 PCB 集合中找到終止進(jìn)程的 PCB;
若進(jì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)而等待一個事件,如等待資源、等待 I/O 操作完成等。進(jìn)程通常使用阻塞原語來阻塞自己,所以阻塞是進(jìn)程的自主行為,是一個同步事件。當(dāng)?shù)却录瓿蓵r會產(chǎn)生一個中斷,激活操作系統(tǒng),在系統(tǒng)的控制下將被阻塞的進(jìn)程喚醒,也就是喚醒原語。
進(jìn)程的阻塞和喚醒顯然是由進(jìn)程切換來完成的。
進(jìn)程的阻塞步驟,也就是「阻塞原語」的內(nèi)容為:
找到將要被阻塞的進(jìn)程對應(yīng)的 PCB;
保護(hù)進(jìn)程運行現(xiàn)場,將 PCB 狀態(tài)信息設(shè)置為阻塞態(tài),暫時停止進(jìn)程運行;
將該 PCB 插入相應(yīng)事件的阻塞隊列(等待隊列)。
進(jìn)程的喚醒步驟,也就是「喚醒原語」的內(nèi)容為:
在該事件的阻塞隊列中找到相應(yīng)進(jìn)程的 PCB;
將該 PCB 從阻塞隊列中移出,并將進(jìn)程的狀態(tài)設(shè)置為就緒態(tài);
把該 PCB 插入到就緒隊列中,等待被調(diào)度程序調(diào)度。
阻塞原語和喚醒原語的作用正好相反,「阻塞原語使得進(jìn)程從運行態(tài)轉(zhuǎn)為阻塞態(tài),而喚醒原語使得進(jìn)程從阻塞態(tài)轉(zhuǎn)為就緒態(tài)」。如果某個進(jìn)程使用阻塞原語來阻塞自己,那么他就必須使用喚醒原語來喚醒自己,因何事阻塞,就由何事喚醒,否則被阻塞的進(jìn)程將永遠(yuǎn)處于阻塞態(tài)。因此,「阻塞原語和喚醒原語是成對出現(xiàn)的」。
⑤ 進(jìn)程上下文切換
所謂進(jìn)程的上下文切換,就是說各個進(jìn)程之間是共享 CPU 資源的,不可能一個進(jìn)程永遠(yuǎn)占用著 CPU 資源,不同的時候進(jìn)程之間需要切換,使得不同的進(jìn)程被分配 CPU 資源,這個過程就是進(jìn)程的上下文切換,「一個進(jìn)程切換到另一個進(jìn)程運行」。
因為進(jìn)程是由內(nèi)核進(jìn)行管理和調(diào)度的,所以「進(jìn)程的上下文切換一定發(fā)生在內(nèi)核態(tài)」。
進(jìn)程上下文的切換也是一個原語操作,稱為「切換原語」,其內(nèi)容如下:
首先,將進(jìn)程 A 的運行環(huán)境信息存入 PCB,這個運行環(huán)境信息就是進(jìn)程的上下文(Context)
然后,將 PCB 移入相應(yīng)的進(jìn)程隊列;
選擇另一個進(jìn)程 B 進(jìn)行執(zhí)行,并更新其 PCB 中的狀態(tài)為運行態(tài)
當(dāng)進(jìn)程 A 被恢復(fù)運行的時候,根據(jù)它的 PCB 恢復(fù)進(jìn)程 A 所需的運行環(huán)境
引起進(jìn)程上下文切換的事件,也就是某個占用 CPU 資源運行的當(dāng)前進(jìn)程被趕出 CPU 的原因有如下:
當(dāng)前進(jìn)程的時間片到
有更高優(yōu)先級的進(jìn)程到達(dá)
當(dāng)前進(jìn)程主動阻塞
當(dāng)前進(jìn)程終止
3. 線程基礎(chǔ)掃盲
① 什么是線程
結(jié)合文章開頭的簡單解釋,「一個進(jìn)程中可以有多個線程,它們共享這個進(jìn)程的資源。」
舉個例子,QQ 和 Chrome 瀏覽器是兩個進(jìn)程,Chrome 進(jìn)程里面有很多線程,例如 HTTP 請求線程、事件響應(yīng)線程、渲染線程等等,線程的并發(fā)執(zhí)行使得在瀏覽器中點擊一個新鏈接從而發(fā)起 HTTP 請求時,瀏覽器還可以響應(yīng)用戶的其它事件。
② 為什么要引入線程
早期的操作系統(tǒng)都是以進(jìn)程作為獨立運行的基本單位的,直到后期計算機科學(xué)家們又提出了更小的能獨立運行的基本單位,也就是線程。這就好比物理學(xué)家研究物質(zhì)組成一樣:先發(fā)現(xiàn)了分子,然后繼續(xù)細(xì)分發(fā)現(xiàn)原子,再后來是原子核和電子、夸克等等。
那么,為什么要引入線程呢?我們只需要記住這句話:「線程又稱為迷你進(jìn)程,但是它比進(jìn)程更容易創(chuàng)建,也更容易撤銷」。
從上文我們知道,進(jìn)程是擁有資源的基本單位,而且還能夠進(jìn)行獨立調(diào)度,這就猶如一個隨時背著糧草的士兵,這必然會造成士兵的執(zhí)行命令(戰(zhàn)斗)的速度。所以,一個簡單想法就是:分配兩個士兵執(zhí)行同一個命令:一個負(fù)責(zé)攜帶所需糧草隨時供給,另一個士兵負(fù)責(zé)執(zhí)行命令(戰(zhàn)斗)。這就是線程的思想,「輕裝上陣的士兵就是線程」。
用嚴(yán)謹(jǐn)?shù)恼Z言描述來說就是:由于創(chuàng)建或撤銷進(jìn)程時,系統(tǒng)都要為之分配或回收資源,如內(nèi)存空間、I/O 設(shè)備等,需要較大的時空開銷,限制了并發(fā)程度的進(jìn)一步提高。為減少進(jìn)程切換的開銷,「把進(jìn)程作為資源分配單位和調(diào)度單位這兩個屬性分開處理」,即進(jìn)程還是作為資源分配的基本單位,但是不作為調(diào)度的基本單位(很少調(diào)度或切換),把調(diào)度執(zhí)行與切換的責(zé)任交給線程,即「線程成為獨立調(diào)度的基本單位」,它比進(jìn)程更容易(更快)創(chuàng)建,也更容易撤銷。
記住這句話!引入線程前,進(jìn)程是資源分配和獨立調(diào)度的基本單位。引入線程后,「進(jìn)程是資源分配的基本單位,線程是獨立調(diào)度的基本單位」。
③ 線程優(yōu)缺點
線程的特征和進(jìn)程差不多,進(jìn)程有的他基本都有,比如:
線程具有就緒、阻塞、運行三種基本狀態(tài),同樣具有狀態(tài)之間的轉(zhuǎn)換關(guān)系;
線程間可以并發(fā)執(zhí)行
在多 CPU 環(huán)境下,各個線程也可以分派到不同的 CPU 上并行執(zhí)行
線程的優(yōu)點:
一個進(jìn)程中可以同時存在多個線程,這些線程共享該進(jìn)程的資源。進(jìn)程間的通信必須請求操作系統(tǒng)服務(wù)(因為 CPU 要切換到內(nèi)核態(tài)),開銷很大。而同進(jìn)程下的線程間通信,無需操作系統(tǒng)干預(yù),開銷更小。
不過,需要注意的是:從屬于不同進(jìn)程的線程間通信,也必須請求操作系統(tǒng)服務(wù)。
線程間的并發(fā)比進(jìn)程的開銷更小,系統(tǒng)并發(fā)性提升。
同樣,需要注意的是:從屬于不同進(jìn)程的線程間切換,它是會導(dǎo)致進(jìn)程切換的,所以開銷也大。
線程的缺點:
當(dāng)進(jìn)程中的一個線程奔潰時,會導(dǎo)致其所屬進(jìn)程的所有線程奔潰。
舉個例子,對于游戲的用戶設(shè)計,就不應(yīng)該使用多線程的方式,否則一個用戶掛了,會影響其他同個進(jìn)程的線程。
4. 總結(jié)
操作系統(tǒng)的設(shè)計,從進(jìn)程和線程的角度來說,可以歸結(jié)為三點:
以多進(jìn)程形式,允許多個任務(wù)同時運行;
以多線程形式,允許單個任務(wù)分成不同的部分運行;
提供協(xié)調(diào)機制,一方面防止進(jìn)程之間和線程之間產(chǎn)生沖突,另一方面允許進(jìn)程之間和線程之間共享資源。
原文標(biāo)題:五分鐘掃盲:進(jìn)程與線程基礎(chǔ)必知
文章出處:【微信公眾號:Linux愛好者】歡迎添加關(guān)注!文章轉(zhuǎn)載請注明出處。
責(zé)任編輯:haq
-
pcb
+關(guān)注
關(guān)注
4355文章
23436瀏覽量
407118 -
計算機
+關(guān)注
關(guān)注
19文章
7636瀏覽量
90264 -
操作系統(tǒng)
+關(guān)注
關(guān)注
37文章
7103瀏覽量
125034
原文標(biāo)題:?五分鐘掃盲:進(jìn)程與線程基礎(chǔ)必知
文章出處:【微信號:LinuxHub,微信公眾號:Linux愛好者】歡迎添加關(guān)注!文章轉(zhuǎn)載請注明出處。
發(fā)布評論請先 登錄
鴻道Intewell操作系統(tǒng):人形機器人底層操作系統(tǒng)
理想汽車智駕操作系統(tǒng)解讀

進(jìn)程、線程、協(xié)程傻傻分不清?一文帶你徹底扒光它們的\"底褲\"!
【「鴻蒙操作系統(tǒng)設(shè)計原理與架構(gòu)」閱讀體驗】- 第5章閱讀有感
國產(chǎn)銀河麒麟操作系統(tǒng)V10和星光麒麟V1.0操作系統(tǒng)如何選擇?

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

如何在windows上emulate不同操作系統(tǒng)
一文搞懂Linux進(jìn)程的睡眠和喚醒
Python中多線程和多進(jìn)程的區(qū)別

linux操作系統(tǒng)安裝步驟 linux操作系統(tǒng)的特點及組成
工控機支持什么操作系統(tǒng)
簡單認(rèn)識RTOS實時操作系統(tǒng)
深入探討Linux的進(jìn)程調(diào)度器

Windows操作系統(tǒng)是什么?它有哪些特點?
嵌入式實時操作系統(tǒng):Intewell操作系統(tǒng)與VxWorks操作系統(tǒng)有啥區(qū)別

評論