<kbd id="afajh"><form id="afajh"></form></kbd>
<strong id="afajh"><dl id="afajh"></dl></strong>
    <del id="afajh"><form id="afajh"></form></del>
        1. <th id="afajh"><progress id="afajh"></progress></th>
          <b id="afajh"><abbr id="afajh"></abbr></b>
          <th id="afajh"><progress id="afajh"></progress></th>

          操作系統(tǒng)篇-操作系統(tǒng)概述

          共 4626字,需瀏覽 10分鐘

           ·

          2022-02-26 03:36

          操作系統(tǒng)概述


          什么是操作系統(tǒng)

          不知道你有沒有產(chǎn)生過(guò)這些疑問(wèn):

          • 桌面上的圖標(biāo)到底是啥?憑啥我在鼠標(biāo)上一雙擊,就會(huì)出來(lái)一個(gè)美麗的畫面?這都是從哪里跑出來(lái)的?

          • 憑什么我在鍵盤上噼里啪啦地敲,某個(gè)位置就會(huì)顯示我想要的那些字符?

          • 電腦怎么知道我鼠標(biāo)點(diǎn)擊的是這個(gè)地方,又是怎么知道我要輸入的是這個(gè)地方?

          • 我在鍵盤上點(diǎn)“a”,是誰(shuí)在顯示器上畫出“a”這個(gè)圖像呢?

          • 為什么我一回車,這些字符就發(fā)到遙遠(yuǎn)的另外一臺(tái)機(jī)器上去了?


          現(xiàn)代計(jì)算機(jī)系統(tǒng)由一個(gè)或多個(gè)處理器、主存、打印機(jī)、鍵盤、鼠標(biāo)、顯示器、網(wǎng)絡(luò)接口以及各種輸入/輸出設(shè)備構(gòu)成。

          然而,程序員不會(huì)直接和這些硬件打交道,而且每位程序員不可能會(huì)掌握所有計(jì)算機(jī)系統(tǒng)的細(xì)節(jié),這樣我們就不用再編寫代碼了,所以在硬件的基礎(chǔ)之上,計(jì)算機(jī)安裝了一層軟件,這層軟件能夠通過(guò)響應(yīng)用戶輸入的指令達(dá)到控制硬件的效果,從而滿足用戶需求,這種軟件稱之為 操作系統(tǒng),它的任務(wù)就是為用戶程序提供一個(gè)更好、更簡(jiǎn)單、更清晰的計(jì)算機(jī)模型。

          我們一般常見的操作系統(tǒng)主要有 Windows、Linux、FreeBSD 或 OS X ,這種帶有圖形界面的操作系統(tǒng)被稱為 圖形用戶界面(Graphical User Interface, GUI),而基于文本、命令行的通常稱為 Shell

          這是一個(gè)操作系統(tǒng)的簡(jiǎn)化圖,最下面的是硬件,硬件包括芯片、電路板、磁盤、鍵盤、顯示器等我們上面提到的設(shè)備,在硬件之上是軟件。大部分計(jì)算機(jī)有兩種運(yùn)行模式:內(nèi)核態(tài)用戶態(tài),軟件中最基礎(chǔ)的部分是操作系統(tǒng),它運(yùn)行在 內(nèi)核態(tài) 中,內(nèi)核態(tài)也稱為 管態(tài)核心態(tài),它們都是操作系統(tǒng)的運(yùn)行狀態(tài),只不過(guò)是不同的叫法而已。操作系統(tǒng)具有硬件的訪問(wèn)權(quán),可以執(zhí)行機(jī)器能夠運(yùn)行的任何指令。軟件的其余部分運(yùn)行在 用戶態(tài) 下。







          操作系統(tǒng)結(jié)構(gòu)

          Linux 內(nèi)核 vs Windows 內(nèi)核

          Windows 和 Linux 可以說(shuō)是我們比較常見的兩款操作系統(tǒng)的。

          Windows 基本占領(lǐng)了電腦時(shí)代的市場(chǎng),商業(yè)上取得了很大成功,但是它并不開源,所以要想接觸源碼得加入 Windows 的開發(fā)團(tuán)隊(duì)中。


          對(duì)于服務(wù)器使用的操作系統(tǒng)基本上都是 Linux,而且內(nèi)核源碼也是開源的,任何人都可以下載,并增加自己的改動(dòng)或功能,Linux 最大的魅力在于,全世界有非常多的技術(shù)大佬為它貢獻(xiàn)代碼。

          這兩個(gè)操作系統(tǒng)各有千秋,不分伯仲。


          操作系統(tǒng)核心的東西就是內(nèi)核,這次我們就來(lái)看看,Linux 內(nèi)核和 Windows 內(nèi)核有什么區(qū)別?


          內(nèi)核

          什么是內(nèi)核呢?


          計(jì)算機(jī)是由各種外部硬件設(shè)備組成的,比如內(nèi)存、cpu、硬盤等,如果每個(gè)應(yīng)用都要和這些硬件設(shè)備對(duì)接通信協(xié)議,那這樣太累了。


          所以,這個(gè)中間人就由內(nèi)核來(lái)負(fù)責(zé),讓內(nèi)核作為應(yīng)用連接硬件設(shè)備的橋梁,應(yīng)用程序只需關(guān)心與內(nèi)核交互,不用關(guān)心硬件的細(xì)節(jié)。


          內(nèi)核有哪些能力呢?

          現(xiàn)代操作系統(tǒng),內(nèi)核一般會(huì)提供 4 個(gè)基本能力:

          • 管理進(jìn)程、線程,決定哪個(gè)進(jìn)程、線程使用 CPU,也就是進(jìn)程調(diào)度的能力;

          • 管理內(nèi)存,決定內(nèi)存的分配和回收,也就是內(nèi)存管理的能力;

          • 管理硬件設(shè)備,為進(jìn)程與硬件設(shè)備之間提供通信能力,也就是硬件通信能力;

          • 提供系統(tǒng)調(diào)用,如果應(yīng)用程序要運(yùn)行更高權(quán)限運(yùn)行的服務(wù),那么就需要有系統(tǒng)調(diào)用,它是用戶程序與操作系統(tǒng)之間的接口。

          內(nèi)核是怎么工作的?


          內(nèi)核具有很高的權(quán)限,可以控制 cpu、內(nèi)存、硬盤等硬件,而應(yīng)用程序具有的權(quán)限很小,因此大多數(shù)操作系統(tǒng),把內(nèi)存分成了兩個(gè)區(qū)域:

          • 內(nèi)核空間,這個(gè)內(nèi)存空間只有內(nèi)核程序可以訪問(wèn);

          • 用戶空間,這個(gè)內(nèi)存空間專門給應(yīng)用程序使用;

          用戶空間的代碼只能訪問(wèn)一個(gè)局部的內(nèi)存空間,而內(nèi)核空間的代碼可以訪問(wèn)所有內(nèi)存空間。

          因此,當(dāng)程序使用用戶空間時(shí),我們常說(shuō)該程序在用戶態(tài)執(zhí)行,而當(dāng)程序使內(nèi)核空間時(shí),程序則在內(nèi)核態(tài)執(zhí)行。


          應(yīng)用程序如果需要進(jìn)入內(nèi)核空間,就需要通過(guò)「系統(tǒng)調(diào)用」,下面來(lái)看看系統(tǒng)調(diào)用的過(guò)程:

          內(nèi)核程序執(zhí)行在內(nèi)核態(tài),用戶程序執(zhí)行在用戶態(tài)。當(dāng)應(yīng)用程序使用系統(tǒng)調(diào)用時(shí),會(huì)產(chǎn)生一個(gè)中斷。發(fā)生中斷后, CPU 會(huì)中斷當(dāng)前在執(zhí)行的用戶程序,轉(zhuǎn)而跳轉(zhuǎn)到中斷處理程序,也就是開始執(zhí)行內(nèi)核程序。內(nèi)核處理完后,主動(dòng)觸發(fā)中斷,把 CPU 執(zhí)行權(quán)限交回給用戶程序,回到用戶態(tài)繼續(xù)工作。


          Linux 內(nèi)核由如下幾部分組成:內(nèi)存管理、進(jìn)程管理、設(shè)備驅(qū)動(dòng)程序、文件系統(tǒng)和網(wǎng)絡(luò)管理等。如圖:



          當(dāng)今 Windows 7、Windows 10 使?的內(nèi)核叫 Windows NT,NT 全稱叫 New Technology。

          下圖是 Windows NT 的結(jié)構(gòu)圖?:

          計(jì)算機(jī)啟動(dòng)過(guò)程

          當(dāng)你輕輕按下計(jì)算機(jī)的啟動(dòng)按鈕時(shí),你的主板就加上電了。


          主板一般為矩形電路板,上面安裝了組成計(jì)算機(jī)的主要電路系統(tǒng),一般有 BIOS 芯片、I/O 控制芯片、鍵盤和面板控制開關(guān)接口、指示燈插接件、擴(kuò)充插槽、主板及插卡的直流電源供電接插件等元件。


          在主板上,有一個(gè)東西叫ROM(Read Only Memory,只讀存儲(chǔ)器)。這和咱們平常說(shuō)的內(nèi)存RAM(Random Access Memory,隨機(jī)存取存儲(chǔ)器)不同。


          咱們平時(shí)買的內(nèi)存條是可讀可寫的,這樣才能保存計(jì)算結(jié)果。而 ROM 是只讀的,上面早就固化了一些初始化的程序,也就是BIOS(Basic Input and Output System,基本輸入輸出系統(tǒng))。


          如果你自己安裝過(guò)操作系統(tǒng),剛啟動(dòng)的時(shí)候,按某個(gè)組合鍵,顯示器會(huì)彈出一個(gè)藍(lán)色的界面。能夠調(diào)整啟動(dòng)順序的系統(tǒng),就是我說(shuō)的 BIOS,然后我們就可以先執(zhí)行它。


          然后操作系統(tǒng)會(huì)詢問(wèn) BIOS 獲取配置信息。對(duì)于每個(gè)設(shè)備來(lái)說(shuō),會(huì)檢查是否有設(shè)備驅(qū)動(dòng)程序。如果沒有,則會(huì)向用戶詢問(wèn)是否需要插入 CD-ROM 驅(qū)動(dòng)(由設(shè)備制造商提供)或者從 Internet 上下載。一旦有了設(shè)備驅(qū)動(dòng)程序,操作系統(tǒng)會(huì)把它們加載到內(nèi)核中,然后初始化表,創(chuàng)建所需的后臺(tái)進(jìn)程,并啟動(dòng)登錄程序或GUI。


          系統(tǒng)調(diào)用

          你會(huì)發(fā)現(xiàn),一個(gè)項(xiàng)目要想順暢進(jìn)行,需要用到公司的各種資源,比如說(shuō)蓋個(gè)公章、開個(gè)證明、申請(qǐng)個(gè)會(huì)議室、打印個(gè)材料等等。這里有個(gè)兩難的權(quán)衡,一方面,資源畢竟是有限的,甚至是涉及機(jī)密的,不能由項(xiàng)目組濫取濫用;另一方面,就是效率,咱是一個(gè)私營(yíng)企業(yè),保證項(xiàng)目申請(qǐng)資源的時(shí)候只跑一次,這樣才能比較高效。


          為了平衡這一點(diǎn),一方面涉及核心權(quán)限的資源,還是應(yīng)該被公司嚴(yán)格把控,審批了才能用;另外一方面,為了提高效率,最好有個(gè)統(tǒng)一的辦事大廳,明文列出提供哪些服務(wù),誰(shuí)需要可以來(lái)申請(qǐng),然后就會(huì)有回應(yīng)。


          在操作系統(tǒng)中,也有同樣的問(wèn)題,例如多個(gè)進(jìn)程都要往打印機(jī)上打印文件,如果隨便亂打印進(jìn)程,就會(huì)出現(xiàn)同樣一張紙,第一行是 A 進(jìn)程輸出的文字,第二行是 B 進(jìn)程輸出的文字,全亂套了。所以,打印機(jī)的直接操作是放在操作系統(tǒng)內(nèi)核里面的,進(jìn)程不能隨便操作。但是操作系統(tǒng)也提供一個(gè)辦事大廳,也就是系統(tǒng)調(diào)用(System Call)。


          系統(tǒng)調(diào)用也能列出來(lái)提供哪些接口可以調(diào)用,進(jìn)程有需要的時(shí)候就可以去調(diào)用。這其中,立項(xiàng)是辦事大廳提供的關(guān)鍵服務(wù)之一。同樣,任何一個(gè)程序要想運(yùn)行起來(lái),就需要調(diào)用系統(tǒng)調(diào)用,創(chuàng)建進(jìn)程。


          如果一個(gè)進(jìn)程在用戶態(tài)下運(yùn)行用戶程序,例如從文件中讀取數(shù)據(jù)。那么如果想要把控制權(quán)交給操作系統(tǒng)控制,那么必須執(zhí)行一個(gè)異常指令或者系統(tǒng)調(diào)用指令。操作系統(tǒng)緊接著需要參數(shù)檢查找出所需要的調(diào)用進(jìn)程。


          然后執(zhí)行系統(tǒng)調(diào)用,把控制權(quán)移交給系統(tǒng)調(diào)用下面的指令。大致來(lái)說(shuō),系統(tǒng)調(diào)用就像是執(zhí)行了一個(gè)特殊的過(guò)程調(diào)用,但是只有系統(tǒng)調(diào)用能夠進(jìn)入內(nèi)核態(tài)而過(guò)程調(diào)用則不能進(jìn)入內(nèi)核態(tài)


          UNIX 系統(tǒng)調(diào)用

          為了能夠了解具體的調(diào)用過(guò)程,下面我們以 read 方法為例來(lái)看一下調(diào)用過(guò)程。

          下面,我們會(huì)列出一些常用的 POSIX 系統(tǒng)調(diào)用,POSIX 系統(tǒng)調(diào)用大概有 100 多個(gè),它們之中最重要的一些調(diào)用見下表


          進(jìn)程管理

          調(diào)用說(shuō)明
          pid = fork()創(chuàng)建與父進(jìn)程相同的子進(jìn)程
          pid = waitpid(pid, &statloc,options)等待一個(gè)子進(jìn)程終止
          s = execve(name,argv,environp)替換一個(gè)進(jìn)程的核心映像
          exit(status)終止進(jìn)程執(zhí)行并返回狀態(tài)


          文件管理

          調(diào)用說(shuō)明
          fd = open(file, how,...)打開一個(gè)文件使用讀、寫
          s = close(fd)關(guān)閉一個(gè)打開的文件
          n = read(fd,buffer,nbytes)把數(shù)據(jù)從一個(gè)文件讀到緩沖區(qū)中
          n = write(fd,buffer,nbytes)把數(shù)據(jù)從緩沖區(qū)寫到一個(gè)文件中
          position = iseek(fd,offset,whence)移動(dòng)文件指針
          s = stat(name,&buf)取得文件狀態(tài)信息


          目錄和文件系統(tǒng)管理

          調(diào)用說(shuō)明
          s = mkdir(nname,mode)創(chuàng)建一個(gè)新目錄
          s = rmdir(name)刪去一個(gè)空目錄
          s = link(name1,name2)創(chuàng)建一個(gè)新目錄項(xiàng) name2,并指向 name1
          s = unlink(name)刪去一個(gè)目錄項(xiàng)
          s = mount(special,name,flag)安裝一個(gè)文件系統(tǒng)
          s = umount(special)卸載一個(gè)文件系統(tǒng)


          其他

          調(diào)用說(shuō)明
          s = chdir(dirname)改變工作目錄
          s = chmod(name,mode)修改一個(gè)文件的保護(hù)位
          s = kill(pid, signal)發(fā)送信號(hào)給進(jìn)程
          seconds = time(&seconds)獲取從 1970 年1月1日至今的時(shí)間


          上面的系統(tǒng)調(diào)用參數(shù)中有一些公共部分,例如 pid 系統(tǒng)進(jìn)程 id,fd 是文件描述符,n 是字節(jié)數(shù),position 是在文件中的偏移量、seconds 是流逝時(shí)間。


          Windows系統(tǒng)調(diào)用

          UNIX 程序由執(zhí)行某些操作或執(zhí)行其他操作的代碼組成,進(jìn)行系統(tǒng)調(diào)用以執(zhí)行某些服務(wù)。Windows 系統(tǒng)則不同,Windows 應(yīng)用程序通常是由事件驅(qū)動(dòng)的。主程序會(huì)等待一些事件發(fā)生,然后調(diào)用程序去處理。最簡(jiǎn)單的事件處理是鍵盤敲擊和鼠標(biāo)滑過(guò),或者是鼠標(biāo)點(diǎn)擊,或者是插入 USB 驅(qū)動(dòng),然后操作系統(tǒng)調(diào)用處理器去處理事件,更新屏幕和更新程序內(nèi)部狀態(tài)。這是與 UNIX 不同的設(shè)計(jì)風(fēng)格。


          當(dāng)然,Windows 也有系統(tǒng)調(diào)用。在 UNIX 中,系統(tǒng)調(diào)用(比如 read)和系統(tǒng)調(diào)用所使用的調(diào)用庫(kù)(例如 read)幾乎是一對(duì)一的關(guān)系。而在 Windows 中,情況則大不相同。首先,函數(shù)庫(kù)的調(diào)用和實(shí)際的系統(tǒng)調(diào)用幾乎是不對(duì)應(yīng)的。微軟定義了一系列過(guò)程,稱為 Win32應(yīng)用編程接口(Application Programming Interface),程序員通過(guò)這套標(biāo)準(zhǔn)的接口來(lái)實(shí)現(xiàn)系統(tǒng)調(diào)用。這個(gè)接口支持從 Windows 95 版本以來(lái)所有的 Windows 版本。


          Win32 API 有大量的調(diào)用,用來(lái)管理視窗、幾何圖形、文本、字體、滾動(dòng)條、對(duì)話框、菜單以及 GUI 的其他功能。為了使圖形子系統(tǒng)在內(nèi)核態(tài)下運(yùn)行,需要系統(tǒng)調(diào)用,否則就只有函數(shù)庫(kù)調(diào)用。


          我們把關(guān)注點(diǎn)放在和 Win32 系統(tǒng)調(diào)用中來(lái),我們可以簡(jiǎn)單看一下 Win32 API 中的系統(tǒng)調(diào)用和 UNIX 中有什么不同(并不是所有的系統(tǒng)調(diào)用)



          瀏覽 104
          點(diǎn)贊
          評(píng)論
          收藏
          分享

          手機(jī)掃一掃分享

          分享
          舉報(bào)
          評(píng)論
          圖片
          表情
          推薦
          點(diǎn)贊
          評(píng)論
          收藏
          分享

          手機(jī)掃一掃分享

          分享
          舉報(bào)
          <kbd id="afajh"><form id="afajh"></form></kbd>
          <strong id="afajh"><dl id="afajh"></dl></strong>
            <del id="afajh"><form id="afajh"></form></del>
                1. <th id="afajh"><progress id="afajh"></progress></th>
                  <b id="afajh"><abbr id="afajh"></abbr></b>
                  <th id="afajh"><progress id="afajh"></progress></th>
                  超碰e| 猫先生大连劲爆身材语文 | 中文字幕亚洲天堂 | 少妇夜夜爽 | 天天肏天天射 |