電子產(chǎn)業(yè)一站式賦能平臺(tái)

PCB聯(lián)盟網(wǎng)

搜索
查看: 98|回復(fù): 0
收起左側(cè)

寫(xiě)給小白的操作系統(tǒng)入門(mén)科普

[復(fù)制鏈接]

502

主題

502

帖子

3383

積分

四級(jí)會(huì)員

Rank: 4

積分
3383
跳轉(zhuǎn)到指定樓層
樓主
發(fā)表于 2024-10-20 11:38:00 | 只看該作者 |只看大圖 回帖獎(jiǎng)勵(lì) |倒序?yàn)g覽 |閱讀模式
今天這篇文章,我們來(lái)聊聊操作系統(tǒng)(Operating System, OS)。

我們每天都在使用操作系統(tǒng)。Windows、Linux、安卓、iOS,都是非常經(jīng)典的操作系統(tǒng)。有了它們,我們才能夠更好地使用電腦、手機(jī)這樣的硬件終端設(shè)備。

那么,操作系統(tǒng)的本質(zhì)是什么?到底具有哪些功能和特性?我們常說(shuō)的進(jìn)程、線程、內(nèi)核、中斷、GUI、CLI……又是什么意思?

接下來(lái),我們一起尋找答案。


什么是操作系統(tǒng)
從本質(zhì)來(lái)看,操作系統(tǒng)其實(shí)就是一套軟件。它也是代碼寫(xiě)出來(lái)的,像我們現(xiàn)在普遍使用的Windows10,主要就是C/C++寫(xiě)的。
操作系統(tǒng)屬于軟件,但又是非常特別的軟件。
在整個(gè)計(jì)算機(jī)架構(gòu)中,它距離硬件最近,是最重要、最基礎(chǔ)的軟件。它負(fù)責(zé)控制和管理整個(gè)計(jì)算機(jī)系統(tǒng)的資源,并進(jìn)行合理組織、調(diào)度和分配。

計(jì)算機(jī)的層次架構(gòu)
對(duì)于用戶(user)和上層應(yīng)用軟件(application)來(lái)說(shuō),操作系統(tǒng)把很多底層的細(xì)節(jié)都封裝隱藏起來(lái)了,通過(guò)標(biāo)準(zhǔn)接口以供調(diào)用,大大簡(jiǎn)化了上層應(yīng)用軟件的開(kāi)發(fā)。
與此同時(shí),它又提供了很多輔助性的工具和功能,讓用戶可以更好地掌控計(jì)算機(jī)的運(yùn)行狀態(tài)。
換句話說(shuō),操作系統(tǒng)就是一個(gè)超級(jí)大管家。它什么都管,為用戶服務(wù),向用戶負(fù)責(zé)。
操作系統(tǒng)的核心功能
我們可以把操作系統(tǒng)的核心功能分為以下幾個(gè)方面:
首先,是進(jìn)程管理。
進(jìn)程(Process)和線程(Thread),是操作系統(tǒng)里非常重要的兩個(gè)概念。
進(jìn)程是資源分配的基本單位。進(jìn)程的創(chuàng)建、終止、調(diào)度、同步以及進(jìn)程間的通信,都是由操作系統(tǒng)負(fù)責(zé)的。應(yīng)用程序的運(yùn)行,包括操作系統(tǒng)本身核心功能的運(yùn)行,都是以進(jìn)程的形式存在。
每個(gè)進(jìn)程都包括程序的代碼、數(shù)據(jù)、狀態(tài),以及操作系統(tǒng)為該程序分配的資源(如內(nèi)存空間、文件句柄、網(wǎng)絡(luò)端口等)。操作系統(tǒng)通過(guò)進(jìn)程管理,來(lái)確保各個(gè)進(jìn)程能夠高效、安全地共享CPU時(shí)間。
我們使用“Ctrl+Alt+Del”快捷鍵調(diào)出Windows的任務(wù)管理器,就可以看到很多的進(jìn)程:

任務(wù)管理器
線程,則是操作系統(tǒng)進(jìn)行運(yùn)算調(diào)度的最小單位。
線程比進(jìn)程更低一級(jí),是進(jìn)程內(nèi)的一個(gè)可以獨(dú)立調(diào)度和指派的執(zhí)行單元。
一個(gè)進(jìn)程中可以有多個(gè)線程,共享相同的內(nèi)存空間和資源,可以更容易地進(jìn)行通信和數(shù)據(jù)共享。

進(jìn)程與線程
例如你啟動(dòng)了一個(gè)瀏覽器程序,那么,操作系統(tǒng)就會(huì)開(kāi)啟一個(gè)相應(yīng)的進(jìn)程。這個(gè)進(jìn)程里面,又會(huì)有多個(gè)線程,如HTTP請(qǐng)求線程、事件響應(yīng)線程、渲染線程等。
如果你關(guān)閉這個(gè)瀏覽器程序,從任務(wù)管理器可以看到,這個(gè)進(jìn)程和對(duì)應(yīng)的線程都沒(méi)有了。當(dāng)然,你也可以在任務(wù)管理器里,直接右鍵關(guān)閉某個(gè)進(jìn)程,程序也就強(qiáng)制退出了。Linux里干掉一個(gè)進(jìn)程,用的命令就是“kill(殺掉)”。
線程是操作系統(tǒng)發(fā)展到后期才引入的。它進(jìn)一步提供了程序執(zhí)行的并發(fā)性,提高了系統(tǒng)的效率。
進(jìn)程和線程,都可以包括執(zhí)行態(tài)、就緒態(tài)、阻塞態(tài)等狀態(tài)。對(duì)進(jìn)程和線程進(jìn)行管理,本質(zhì)上是為了實(shí)現(xiàn)對(duì)CPU資源的分配調(diào)度。

進(jìn)程的狀態(tài)變化
需要注意的是,一個(gè)程序可以對(duì)應(yīng)一個(gè)或多個(gè)進(jìn)程。而一個(gè)進(jìn)程同樣可以對(duì)應(yīng)一個(gè)或多個(gè)程序(雖然比較罕見(jiàn))。
其次,是內(nèi)存管理。
以前我們多次提到過(guò)馮·諾依曼架構(gòu)。程序要從硬盤(pán)到內(nèi)存,才能夠被運(yùn)算器(CPU)處理。每個(gè)程序都有足夠的內(nèi)存空間,才能夠確保正常運(yùn)行。

馮·諾依曼架構(gòu)
運(yùn)行之后,內(nèi)存也需要被及時(shí)釋放,才能讓別的程序能夠繼續(xù)占用。
內(nèi)存的分配和回收,也是操作系統(tǒng)負(fù)責(zé)的。
除了內(nèi)存分配之外,操作系統(tǒng)還要負(fù)責(zé)進(jìn)行內(nèi)存保護(hù)(確保每道程序都只在自己的內(nèi)存區(qū)中運(yùn)行,進(jìn)程間不會(huì)互相干擾)、地址映射(將程序裝入內(nèi)存運(yùn)行時(shí),需要將邏輯地址轉(zhuǎn)化成內(nèi)存單元所限定的物理地址)、內(nèi)存擴(kuò)充(借助于虛擬存儲(chǔ)技術(shù),從邏輯上去擴(kuò)充內(nèi)存容量)等工作。
第三,是設(shè)備管理。
這是操作系統(tǒng)的重要任務(wù)之一。它管理和控制外部設(shè)備(如打印機(jī)、硬盤(pán)驅(qū)動(dòng)器、鍵盤(pán)、鼠標(biāo)等)的使用。

具體來(lái)說(shuō),它可以完成用戶進(jìn)程提出的I/O(輸入/輸出)請(qǐng)求,為用戶進(jìn)程分配其所需的I/O設(shè)備,提高CPU和I/O設(shè)備的利用率,提高I/O速度等。高效的I/O調(diào)度,可以避免I/O設(shè)備拖累系統(tǒng)的運(yùn)行。
第四,是文件系統(tǒng)管理
文件系統(tǒng)是操作系統(tǒng)用來(lái)組織、存儲(chǔ)和檢索數(shù)據(jù)的一套規(guī)則。
操作系統(tǒng)提供了一套機(jī)制來(lái)組織、存儲(chǔ)、檢索和保護(hù)文件,包括文件的創(chuàng)建、刪除、讀寫(xiě)操作以及目錄結(jié)構(gòu)的維護(hù)。我們也可以將其理解為操作系統(tǒng)對(duì)存儲(chǔ)設(shè)備和資源的管理和調(diào)用。
第五,安全和權(quán)限管理。
有了硬件和軟件資源,我們還要指定到底誰(shuí)能夠使用他們。
操作系統(tǒng)提供了完善的安全機(jī)制,確保用戶數(shù)據(jù)的安全性和完整性,包括用戶身份驗(yàn)證、訪問(wèn)控制和加密等。
最后一個(gè)核心功能,是交互界面
操作系統(tǒng)是用戶使用計(jì)算機(jī)的一個(gè)工具。我們想要讓計(jì)算機(jī)工作,就需要一個(gè)好的交互界面,以便下達(dá)命令、查詢結(jié)果和狀態(tài)。
操作系統(tǒng)提供圖形用戶界面(GUI,Graphical User Interface)或命令行界面(CLI,Command Line Interface),讓用戶能夠方便地與計(jì)算機(jī)交互。這是計(jì)算機(jī)在社會(huì)全面普及的一個(gè)前提條件。
很多人都用過(guò)“cmd”調(diào)出來(lái)的命令行界面,那種叫做聯(lián)機(jī)命令接口,也叫交互式命令接口。

以前,我們還學(xué)過(guò)寫(xiě)批處理文件(.bat文件),給出好幾個(gè)命令,讓計(jì)算機(jī)逐一執(zhí)行。這種叫做脫機(jī)命令接口。
值得一提的是,除了(聯(lián)機(jī)、脫機(jī))命令接口之外,操作系統(tǒng)還提供了程序接口。
程序接口由一組系統(tǒng)調(diào)用(system call)組成,允許應(yīng)用程序間接調(diào)用資源。

現(xiàn)在有很多應(yīng)用程序通過(guò)高級(jí)語(yǔ)言提供的庫(kù)函數(shù),間接地進(jìn)行系統(tǒng)調(diào)用。我們可以把這些庫(kù)函數(shù)視為對(duì)系統(tǒng)調(diào)用的進(jìn)一步封裝。

需要注意,凡是與共享資源有關(guān)的操作(如存儲(chǔ)分配、I/O操作、文件管理等),都必須通過(guò)系統(tǒng)調(diào)用的方式,向操作系統(tǒng)內(nèi)核提出服務(wù)請(qǐng)求,由操作系統(tǒng)內(nèi)核代為完成。這樣可以保證系統(tǒng)的穩(wěn)定性和安全性。
操作系統(tǒng)的主要特性
除了上面說(shuō)的六大功能之外,操作系統(tǒng)還有四個(gè)特性,分別是:并發(fā)、共享、異步和虛擬。
  • 并發(fā)(concurrency)
    并發(fā)是指兩個(gè)或多個(gè)事件在同一時(shí)間間隔內(nèi)發(fā)生。操作系統(tǒng)具有并發(fā)特性,是指其具有處理和調(diào)度多個(gè)程序同時(shí)執(zhí)行的能力。
    并發(fā)和并行(parallellism)是有區(qū)別的。并行是兩個(gè)或多個(gè)事件在同一時(shí)刻內(nèi)發(fā)生。舉例來(lái)說(shuō),一邊吃蘋(píng)果一邊看電視,是并行。在1分鐘之內(nèi),吃掉蘋(píng)果、香蕉和橘子,就是并發(fā)。

    很顯然,并發(fā)從宏觀上看是同時(shí)發(fā)生的,但從微觀上看是分時(shí)交替發(fā)生的(和通信里面的“時(shí)分復(fù)用”有點(diǎn)像)。并發(fā)考驗(yàn)的是資源調(diào)度的能力,而并行需要硬件的支持,例如采用多核處理器。
  • 共享(sharing)
    共享,是指系統(tǒng)中的資源可以被多個(gè)并發(fā)進(jìn)程共同使用。它分為兩種方式,互斥共享和同時(shí)共享。
    互斥共享,顧名思義,就是不能同時(shí)用。僅當(dāng)某一進(jìn)程訪問(wèn)完并釋放該資源后,才允許另一進(jìn)程對(duì)該資源進(jìn)行訪問(wèn)。這類(lèi)資源稱為臨界資源或獨(dú)占資源。計(jì)算機(jī)系統(tǒng)中的大多數(shù)物理設(shè)備,都屬于臨界資源。
    同時(shí)共享,就是能夠多個(gè)進(jìn)程同時(shí)用。最典型的設(shè)備,就是硬盤(pán)。
    大家應(yīng)該也能看出來(lái),共享的底層邏輯也和通信里的“復(fù)用”很像,要么是分時(shí)間進(jìn)行共享(時(shí)分復(fù)用),要么是分物理資源空間進(jìn)行共享(空分復(fù)用),主要看資源本身的屬性。
  • 異步(asynchronous)
    異步,是同步的反義詞。同步是大家保持節(jié)奏統(tǒng)一。而異步,是各走各的路。
    異步的前提是并發(fā)性,如果沒(méi)有并發(fā)性,所有任務(wù)只能one by one串行執(zhí)行,那么,整個(gè)系統(tǒng)的效率就會(huì)很低。
  • 虛擬(virtualization)
    最后是虛擬。這個(gè)我們?cè)谠朴?jì)算里經(jīng)常會(huì)提到。把一個(gè)物理實(shí)體,變成若干個(gè)邏輯實(shí)體,就是虛擬。
    虛擬的本質(zhì),還是資源的復(fù)用。只不過(guò)通過(guò)軟件來(lái)實(shí)現(xiàn)了,用戶感受到的,是多個(gè)邏輯實(shí)體。
    操作系統(tǒng)的組成架構(gòu)
    我們?cè)賮?lái)看看操作系統(tǒng)的組成架構(gòu)。
    操作系統(tǒng)的核心,就是大家經(jīng)常聽(tīng)說(shuō)的內(nèi)核(Kernel)。

    內(nèi)核直接與硬件進(jìn)行交互,并為其他系統(tǒng)軟件和應(yīng)用程序提供服務(wù)。前面提到的操作系統(tǒng)核心功能,除了交互界面之外,大部分都和內(nèi)核緊密相關(guān)。
    計(jì)算機(jī)里的CPU,工作狀態(tài)可以分為內(nèi)核態(tài)(也叫管態(tài))和用戶態(tài)(也叫目態(tài))。運(yùn)行內(nèi)核程序時(shí),是內(nèi)核態(tài)。運(yùn)行應(yīng)用程序時(shí),是用戶態(tài)。
    操作系統(tǒng)有“非特權(quán)指令”和“特權(quán)指令”兩種指令。
    應(yīng)用程序只能使用“非特權(quán)指令”,如:加法指令、減法指令等。操作系統(tǒng)內(nèi)核作為 “管理者”,有時(shí)會(huì)讓CPU執(zhí)行一些high level的“特權(quán)指令”,如:內(nèi)存清零指令。這些指令影響重大,只允許操作系統(tǒng)內(nèi)核來(lái)使用。
    操作系統(tǒng)處于內(nèi)核態(tài)時(shí),可以執(zhí)行特權(quán)指令。如果處于用戶態(tài),則只能執(zhí)行非特權(quán)指令。
    一般情況下,開(kāi)機(jī)后,用戶啟動(dòng)某個(gè)應(yīng)用程序,操作系統(tǒng)內(nèi)核程序會(huì)在合適的時(shí)候主動(dòng)讓出CPU,轉(zhuǎn)為用戶態(tài)。這時(shí),如果發(fā)生了中斷,操作系統(tǒng)內(nèi)核會(huì)強(qiáng)行奪回CPU控制權(quán),讓CPU從用戶態(tài)變成內(nèi)核態(tài)。
    這里剛好說(shuō)說(shuō)中斷(Interrupt)。
    處理器收到信號(hào),提示發(fā)生了某個(gè)事件,應(yīng)予以注意,這種情況就稱為中斷。
    中斷分為內(nèi)中斷和外中斷。
    內(nèi)中斷也叫異常,是指來(lái)自CPU內(nèi)部的事件,與當(dāng)前執(zhí)行的指令有關(guān)。如程序的非法操作碼、地址越界、運(yùn)算溢出等。異常不能被屏蔽,一旦出現(xiàn),就應(yīng)該立即處理。
    內(nèi)中斷的三種典型類(lèi)型包括:陷入(trap,由陷入指令引發(fā))、故障(fault,由錯(cuò)誤條件引發(fā),內(nèi)核程序可以修復(fù))、終止(abort,由致命錯(cuò)誤引發(fā),內(nèi)核程序無(wú)法修復(fù))。
    外中斷是狹義的中斷,信號(hào)來(lái)自CPU外部的事件,與當(dāng)前執(zhí)行的指令無(wú)關(guān)。很典型的是時(shí)鐘中斷以及I/O中斷,或人為干預(yù)。
    繼續(xù)說(shuō)內(nèi)核。
    內(nèi)核也分為多種類(lèi)型,例如大內(nèi)核、微內(nèi)核。
    所有的操作系統(tǒng)服務(wù)都在內(nèi)核空間運(yùn)行,就是大內(nèi)核,也叫宏內(nèi)核、單內(nèi)核。
    只有最基本的系統(tǒng)服務(wù)在內(nèi)核空間運(yùn)行,其它服務(wù)移出內(nèi)核,放在用戶空間運(yùn)行,是微內(nèi)核。

    相比大內(nèi)核,微內(nèi)核更靈活,架構(gòu)更清晰,代碼沒(méi)有那么龐大,維護(hù)起來(lái)也容易一些。
    操作系統(tǒng)負(fù)責(zé)交互界面的,叫做外殼(Shell)。前面介紹過(guò),包括命令解釋器和圖形用戶界面等。
    除了內(nèi)核和外殼以外,操作系統(tǒng)還包括許多其它工具和服務(wù),例如備份工具、恢復(fù)工具、防火墻、網(wǎng)絡(luò)服務(wù)等。
    下面這個(gè),是一個(gè)操作系統(tǒng)整體架構(gòu)的示意圖:

    這個(gè)是Linux系統(tǒng)的架構(gòu)示意圖,供參考:


    操作系統(tǒng)的常見(jiàn)分類(lèi)
    隨著技術(shù)的發(fā)展,現(xiàn)代操作系統(tǒng)已經(jīng)經(jīng)歷了數(shù)十年的演變。
    計(jì)算機(jī)硬件不斷升級(jí),用戶需求不斷增加,系統(tǒng)功能不斷迭代,最終導(dǎo)致整個(gè)操作系統(tǒng)的架構(gòu)變得越來(lái)越復(fù)雜,代碼體積也越來(lái)越龐大。
    以前的操作系統(tǒng)只有幾MB,一個(gè)軟盤(pán)就能裝得下。現(xiàn)在的操作系統(tǒng),動(dòng)輒幾個(gè)GB,甚至幾十GB,DVD光盤(pán)都裝不下。
    針對(duì)不同的設(shè)備終端類(lèi)型,以及不同的應(yīng)用場(chǎng)景,操作系統(tǒng)也出現(xiàn)了細(xì)化分的趨勢(shì),演變出很多類(lèi)別。
    通常來(lái)說(shuō),操作系統(tǒng)大致可以分為桌面操作系統(tǒng)、服務(wù)器操作系統(tǒng)、移動(dòng)終端操作系統(tǒng)、嵌入式操作系統(tǒng)、物聯(lián)網(wǎng)操作系統(tǒng)等類(lèi)別。
    如下表所示:

    關(guān)于這些操作系統(tǒng)的具體故事,大家可以參考小棗君之前的文章,今天就不再贅述了:
    操作系統(tǒng)的最強(qiáng)入門(mén)科普(Unix/Linux篇)
    操作系統(tǒng)的發(fā)展史(DOS/Windows篇)
    手機(jī)操作系統(tǒng)的沉浮往事(上)
    手機(jī)操作系統(tǒng)的沉浮往事(下)
    好啦,以上就是今天文章的全部?jī)?nèi)容。
    感謝大家的耐心觀看。如果大家覺(jué)得文章有用,歡迎多多轉(zhuǎn)發(fā)。謝謝!
  • 發(fā)表回復(fù)

    本版積分規(guī)則


    聯(lián)系客服 關(guān)注微信 下載APP 返回頂部 返回列表