引言
出于三個(gè)原因,近期有一段時(shí)間沒怎么寫文章了。一、前段時(shí)間公司人員變動(dòng)比較大,工作任務(wù)較為繁忙;二、家庭生活中有一些事需要處理;三、最近集中時(shí)間學(xué)習(xí)了一些與 iOS 開發(fā)并無直接關(guān)系的知識(shí),如:操作系統(tǒng)、數(shù)據(jù)庫(kù)系統(tǒng)、計(jì)算機(jī)組織和結(jié)構(gòu)、設(shè)計(jì)模式。上述四個(gè)方向的知識(shí)點(diǎn),一兩個(gè)月的時(shí)間也知識(shí)了解了一些簡(jiǎn)單的皮毛,沒有個(gè)一年半載的怕是只能了解各大概。上述四個(gè)方向的知識(shí)點(diǎn),設(shè)計(jì)模式算是整體過了一遍,操作系統(tǒng)的知識(shí)看了不少,其它兩面也就簡(jiǎn)單看了一丁點(diǎn)。計(jì)劃近期抽出一些時(shí)間,將之前看的操作系統(tǒng)相關(guān)知識(shí)整理一下,寫作一系列關(guān)于操作系統(tǒng)知識(shí)的文章。
本篇文章主要講述一些操作系統(tǒng)的基礎(chǔ)知識(shí)。
- 什么是操作系統(tǒng)
- 操作系統(tǒng)發(fā)展過程
- 操作系統(tǒng)類型
- 操作系統(tǒng)的操作和功能
- 操作系統(tǒng)結(jié)構(gòu)
- 虛擬機(jī)
一、什么是操作系統(tǒng)
1.1 操作系統(tǒng)不可或缺
操作系統(tǒng)的最底層是硬件,最上層是用戶。如果沒有操作系統(tǒng),程序?qū)o法運(yùn)行。操作系統(tǒng)作為計(jì)算機(jī)最底層的軟件,是應(yīng)用程序的基本支撐環(huán)境,不可或缺。

1.2 操作系統(tǒng)目標(biāo)
操作系統(tǒng)的核心目標(biāo)是運(yùn)行程序,其次是為了更高效實(shí)用計(jì)算機(jī),更方便用戶使用計(jì)算機(jī)。早期是為了高效,目前是為了方便用戶使用。
1.3 操作系統(tǒng)定義
目前很難明確定義操作系統(tǒng)。存在兩種觀點(diǎn):
- 1.當(dāng)你預(yù)定一個(gè)操作系統(tǒng)時(shí),零售商所給的所有東西就是操作系統(tǒng)。
- 2.內(nèi)核才是操作系統(tǒng)。內(nèi)核是一直運(yùn)行在計(jì)算機(jī)上的程序,內(nèi)核不運(yùn)行則計(jì)算機(jī)無法運(yùn)行。
觀點(diǎn) 1 最大化了操作系統(tǒng),如內(nèi)置在操作系統(tǒng)的軟件 IE 瀏覽器實(shí)際不應(yīng)該算是操作系統(tǒng)中的一部分;而觀點(diǎn) 2 則細(xì)化了操作系統(tǒng)定義,僅僅有內(nèi)核操作系統(tǒng)不足以運(yùn)行起來。
1.4 現(xiàn)代計(jì)算機(jī)系統(tǒng)
主要有三部分組成:一個(gè)或多個(gè)CPU(也稱核)和內(nèi)存、若干通過總線相連接的設(shè)備控制器和 I/O 設(shè)備、總線。
CPU從內(nèi)存中讀取指令和數(shù)據(jù),并執(zhí)行指令,也就是運(yùn)行程序;而各個(gè) I/O 設(shè)備則由各自的控制器控制。每個(gè)控制器相當(dāng)于小型化的處理器,只不過該處理器只能負(fù)責(zé)特定設(shè)備的運(yùn)行。所以CPU和設(shè)備控制器可并行運(yùn)行,并競(jìng)爭(zhēng)內(nèi)存。
接下來看看CPU通過設(shè)備控制器控制設(shè)備的過程。在此之前要知道每個(gè)設(shè)備控制器都有一個(gè)本地緩沖,CPU在內(nèi)存和緩沖之間傳輸數(shù)據(jù),I/O 控制器從設(shè)備到緩存之間傳輸數(shù)據(jù)(如圖一)。舉一個(gè)從磁盤讀取數(shù)據(jù)的例子,具體控制過程結(jié)合圖二。
- 1.CPU 通過總線發(fā)出 I/O 指令給磁盤控制器。
- 2.此時(shí)CPU可以去執(zhí)行其他進(jìn)程上的指令,而磁盤控制器在收到指令后從磁盤控制器中讀取數(shù)據(jù)。
- 3.磁盤將數(shù)據(jù)傳送到磁盤控制器的緩沖區(qū)中。
- 4.磁盤控制器通知 CPU 數(shù)據(jù)已經(jīng)讀取好了,觸發(fā)CPU中斷。
- 5.CPU 響應(yīng)中斷,并將控制器緩沖區(qū)中的數(shù)據(jù)讀入到內(nèi)存中。
上述過程中CPU和控制器是可以并行執(zhí)行的,磁盤控制器在讀入數(shù)據(jù)的同時(shí),CPU可以執(zhí)行其他指令。


1.5 中斷
中斷是指當(dāng)出現(xiàn)需要時(shí),CPU暫時(shí)停止當(dāng)前進(jìn)程的執(zhí)行,轉(zhuǎn)而執(zhí)行處理新情況的中斷處理程序。當(dāng)執(zhí)行完該中斷處理程序后,則重新從剛才停下的位置繼續(xù)當(dāng)前進(jìn)程的執(zhí)行。
為了區(qū)分不同的中斷,每個(gè)設(shè)備有自己的中斷號(hào)。系統(tǒng)有 0--255 個(gè)中斷。系統(tǒng)中有一張中斷向量表,用于存放 256 個(gè)中斷的中斷服務(wù)程序入口地址。每個(gè)入口地址對(duì)應(yīng)一段代碼,即中斷服務(wù)程序。中斷需要 CPU 的支持,一般 CPU 至少有一個(gè)引腳用于接收中斷。
二、操作系統(tǒng)發(fā)展過程
2.1 人工操作
由用戶采用人工操作方式直接使用硬件系統(tǒng)。即由程序員將事先已穿孔(對(duì)應(yīng)程序和數(shù)據(jù))的紙帶裝入紙帶輸入機(jī),將程序和數(shù)據(jù)輸入到計(jì)算機(jī),再啟動(dòng)計(jì)算機(jī)。程序運(yùn)行完畢取走結(jié)果之后,下一個(gè)用戶才能使用。
2.2 簡(jiǎn)單批處理(單道程序設(shè)計(jì))
簡(jiǎn)單批處理系統(tǒng)的核心是一個(gè)常駐監(jiān)控程序,負(fù)責(zé)調(diào)度作業(yè)運(yùn)行,自動(dòng)從一個(gè)運(yùn)行完的作業(yè)切換到下一個(gè)作業(yè)。
2.3 多道程序設(shè)計(jì)
當(dāng)內(nèi)存中僅有一道程序時(shí),每當(dāng)程序在運(yùn)行中發(fā)出 I/O 請(qǐng)求后,CPU 將會(huì)空閑下來,等待 I/O 操作完成后 CPU 才能繼續(xù)運(yùn)行,由此可見 CPU 的利用率顯著降低。因此就出現(xiàn)了多道程序設(shè)計(jì)。在引入多道程序設(shè)計(jì)技術(shù)后,由于內(nèi)存中同時(shí)裝有若干道程序,可以交替運(yùn)行。這樣,當(dāng)正在運(yùn)行的程序因?yàn)?I/O 而暫停執(zhí)行,系統(tǒng)可調(diào)度另一道程序運(yùn)行,從而使CPU和I/O操作并行,是CPU處于忙碌狀態(tài),提高 CPU 利用率。
額外說明下,并行是指兩個(gè)或者多個(gè)作業(yè)在同一時(shí)刻運(yùn)行;并發(fā)是指兩個(gè)或多個(gè)作業(yè)在同一時(shí)間間隔內(nèi)依次運(yùn)行。隨著多核處理器的發(fā)展,實(shí)際中對(duì)并行和并發(fā)不做嚴(yán)格區(qū)分。
2.4 分時(shí)
早期系統(tǒng)作業(yè)屬于批處理作業(yè),無需人機(jī)交互。后來為了實(shí)現(xiàn)實(shí)時(shí)人機(jī)交互作業(yè)(交互作業(yè)要求響應(yīng)時(shí)間短),便出現(xiàn)了分時(shí)系統(tǒng)。在一段時(shí)間內(nèi),每個(gè)作業(yè)依次輪流運(yùn)行一個(gè)時(shí)間片。這樣可以使得每個(gè)作業(yè)都獲得較短的響應(yīng)時(shí)間,從而滿足交互作業(yè)的要求。遵循分時(shí)策略的操作系統(tǒng)就是分時(shí)系統(tǒng)。單位時(shí)間內(nèi),每個(gè)用戶獲得一個(gè)時(shí)間片并運(yùn)行,這樣每個(gè)用戶會(huì)感覺自己獨(dú)占一臺(tái)計(jì)算機(jī)。
三、操作系統(tǒng)類型
大型機(jī)系統(tǒng)
大型機(jī)系統(tǒng)具有強(qiáng)大的計(jì)算和 I/O 能力,如 IBM AIX、IBM z/OS、HP-Unix。
桌面系統(tǒng)
個(gè)人計(jì)算機(jī)。
手持系統(tǒng)
手持設(shè)備如手機(jī)、平板等。
嵌入式系統(tǒng)
完全嵌入受控器件內(nèi)部,為特定應(yīng)用而設(shè)計(jì)的專用計(jì)算機(jī)系統(tǒng)。隨著單片機(jī)的出現(xiàn)而出現(xiàn)。如智能手環(huán)。
分布式系統(tǒng)
即把同一個(gè)復(fù)雜計(jì)算分布到不到的設(shè)備上進(jìn)行,但目前真正意義上的分布式系統(tǒng)是不存在的。客戶機(jī)-服務(wù)器系統(tǒng)等只算是分布式系統(tǒng)中的部分實(shí)現(xiàn)。
多核/多處理器系統(tǒng)
多處理器系統(tǒng)中有包含多個(gè)緊密通信的處理器,一般這些處理器在同一個(gè)主板上。多個(gè)處理器共享計(jì)算機(jī)總線、時(shí)間、內(nèi)存和外設(shè)等。多處理器系統(tǒng)中,一個(gè)芯片有多個(gè)核,一個(gè)核即為一個(gè)處理器(如四核、八核等)。一般不對(duì)多處理器系統(tǒng)和多核處理器系統(tǒng)做區(qū)分。
多處理器系統(tǒng)分為兩類:
- 對(duì)稱處理(SMP):每個(gè)處理器運(yùn)行操作系統(tǒng)的相同副本,每個(gè)處理器都處于對(duì)等地位。 SMP架構(gòu)實(shí)際比較多。
- 非對(duì)稱處理(ASMP):各個(gè)處理器不對(duì)等。一般是一個(gè)主處理器和若干個(gè)從處理器,主處理器為從處理器安排任務(wù),從處理器可能是專門處理圖像的,專門處理網(wǎng)絡(luò)通信等。ASMP架構(gòu)相對(duì)較少,不適合PC,但是和手機(jī)等要求功耗的設(shè)備(如高通的驍龍820芯片手機(jī)CPU采用 ASMP 架構(gòu))。
集群系統(tǒng)
通過專用網(wǎng)絡(luò)連接一群計(jì)算機(jī),把這些計(jì)算機(jī)虛擬化為一臺(tái)具有超強(qiáng)計(jì)算能的計(jì)算機(jī)公用戶使用??梢钥醋鍪欠植际教幚硐到y(tǒng)和多處理器系統(tǒng)的折中形成。目前世界上的大多是超級(jí)計(jì)算機(jī)都數(shù)據(jù)集群系統(tǒng),如計(jì)算能力世界第一的神威太湖之光,由 40960 塊 4 核神威 26010 處理器組成。
四、操作和功能
4.1 操作系統(tǒng)操作
雙模式、I/O和內(nèi)存保護(hù)、定時(shí)器三者是確保操作系統(tǒng)能夠運(yùn)行的關(guān)鍵技術(shù)。
a、雙模式
為了保證操作系統(tǒng)不受其它故障程序的影響,進(jìn)而產(chǎn)生系統(tǒng)崩潰的可能。一種常用的辦法是引入雙重模式,即用戶模式和內(nèi)核模式。內(nèi)核模式只能運(yùn)行操作系統(tǒng)的程序。所有的用戶應(yīng)用程序只能在用戶模式下運(yùn)行。 雙模式需要CPU的支持,如果CPU有模式位,則可以在操作系統(tǒng)中實(shí)現(xiàn)雙模式,目前主流的CPU基本都有模式位。雙模式允許操作系統(tǒng)不受其它故障應(yīng)用程序的影響。特權(quán)指令是指可能引起崩潰的指令,該指令只能運(yùn)行在內(nèi)核模式中。 如果用戶程序需要使用特權(quán)指令,可以通過系統(tǒng)提供的API調(diào)用。
b、I/O保護(hù)和內(nèi)存保護(hù)
定義所有I/O指令為特權(quán)指令,用戶應(yīng)用程序無法直接訪問I/O指令,只能通過系統(tǒng)調(diào)用進(jìn)行I/O操作,從而避免非法I/O操作。
利用基址寄存器和限長(zhǎng)寄存器隔離不同程序的內(nèi)存地址。
c、定時(shí)器
如果用戶程序死循環(huán)或用戶程序不調(diào)用系統(tǒng)調(diào)用,此時(shí)操作系統(tǒng)將無法獲得CPU并對(duì)系統(tǒng)進(jìn)行管理。解決方法是引入定時(shí)器,在一段時(shí)間后發(fā)生中斷,將CPU控制權(quán)返回給操作系統(tǒng)。
4.2 操作系統(tǒng)功能
操作系統(tǒng)主要有四個(gè)核心功能:進(jìn)程管理、內(nèi)存管理、文件管理以及 I/O 設(shè)備管理。
五、操作系統(tǒng)結(jié)構(gòu)
5.1 簡(jiǎn)單結(jié)構(gòu)
早期操作系統(tǒng)規(guī)模小,簡(jiǎn)單且功能有限。所以早期的操作系統(tǒng)稱為簡(jiǎn)單結(jié)構(gòu)或無結(jié)構(gòu)。簡(jiǎn)單結(jié)構(gòu)導(dǎo)致系統(tǒng)內(nèi)部比較混亂、不易維護(hù)、不適合大規(guī)模系統(tǒng)開發(fā)。
5.2 層次結(jié)構(gòu)
層次結(jié)構(gòu)中,將操作系統(tǒng)劃分為若干層,在底層的基礎(chǔ)上構(gòu)建高層,每層只使用相鄰低層次的功能和服務(wù),不能夸層級(jí)使用更底層功能和服務(wù)。最底層為硬件,最高層為用戶層。層析結(jié)構(gòu)優(yōu)點(diǎn)是:簡(jiǎn)化了系統(tǒng)設(shè)計(jì)和實(shí)現(xiàn),便于調(diào)試和維護(hù)。缺點(diǎn)是:層的定義比較困難,其次是效率比較差,有的服務(wù)調(diào)用可能跨越多個(gè)層級(jí),增加系統(tǒng)開銷。iOS 系統(tǒng)就是典型的分層結(jié)構(gòu)。同普遍分層結(jié)構(gòu)不同的是iOS系統(tǒng)允許跨層級(jí)調(diào)用。

核心系統(tǒng)層提供為上層結(jié)構(gòu)提供最基礎(chǔ)的服務(wù)如操作系統(tǒng)內(nèi)核服務(wù)、本地認(rèn)證、安全、加速等;核心服務(wù)層為程序提供基礎(chǔ)的系統(tǒng)服務(wù),如網(wǎng)絡(luò)訪問、瀏覽器引擎、定位、文件訪問、數(shù)據(jù)庫(kù)訪問等;媒體層主要提供圖像引擎、音頻視頻引擎框架;可觸摸層主要提供用戶交互先關(guān)的服務(wù)如界面控件、事件管理、通知中心、通知中心、地圖等。
5.3 微內(nèi)核結(jié)構(gòu)
隨著內(nèi)核越來越大,越難管理,便產(chǎn)生了微內(nèi)核,即核內(nèi)移除盡可能多功能到用戶空間。優(yōu)點(diǎn)是便于擴(kuò)充內(nèi)核,便于移植操作系統(tǒng)到新架構(gòu)系統(tǒng)上,更穩(wěn)定(更少的代碼運(yùn)行在和心態(tài));缺點(diǎn)是用戶空間和內(nèi)核空間通信的系統(tǒng)開銷增加,但是采用消息傳遞機(jī)制可以解決該問題。
5.4 模塊化結(jié)構(gòu)
目前大多數(shù)系統(tǒng)采用的都是模塊化結(jié)構(gòu)。使用面向?qū)ο蟮姆椒ǎ瑢⒚總€(gè)核心部分拆開,每個(gè)模塊在需要時(shí)被加載到內(nèi)核。如Solaris模塊:

5.5 混合結(jié)構(gòu)
除了上述四種結(jié)構(gòu)之外,也有很多系統(tǒng)采用多種混合結(jié)合。如Mac OS 系統(tǒng)。采用了 Mach 微內(nèi)核和層次化結(jié)構(gòu)。

六、虛擬機(jī)
虛擬機(jī)是一種通過軟件模擬實(shí)現(xiàn),具有完整硬件系統(tǒng)功能,并運(yùn)行在一個(gè)完全隔離環(huán)境中的完整計(jì)算機(jī)系統(tǒng)。虛擬機(jī)最大的優(yōu)點(diǎn)是物理計(jì)算機(jī)中的每個(gè)虛擬機(jī)同其他虛擬機(jī)隔離,相互之間不會(huì)干擾。虛擬機(jī)主要有三種實(shí)現(xiàn)途徑:高級(jí)語言虛擬機(jī)、工作站虛擬機(jī)、服務(wù)器虛擬機(jī)。
6.1 高級(jí)語言虛擬機(jī)
高級(jí)語言虛擬機(jī)運(yùn)行在操作系統(tǒng)之上,主要功能是提供代碼運(yùn)行的容器,模擬代碼執(zhí)行,使得代碼能夠跨平臺(tái)運(yùn)行。典型的代表是JVM(JAVA VM),它是JAVA語言的解釋器。只要根據(jù)JVM規(guī)格將解釋器一直到特定操作系統(tǒng)上,就能運(yùn)行經(jīng)過編譯的任何Java代碼,使得Java語言和平臺(tái)無關(guān)。但是要注意,針對(duì)不同的操作系統(tǒng)需要不同的JVM。如下圖,運(yùn)行在操作系統(tǒng)上的JVM,為上層JRE、JDK以及JAVA的各種繼承工具屏蔽掉操作系統(tǒng)的影響。

6.2 工作站虛擬機(jī)
工作站虛擬機(jī)也是運(yùn)行在操作系統(tǒng)之上,是操作系統(tǒng)中的操作系統(tǒng),也成 Guest OS。目的是多個(gè)操作系統(tǒng)可以同時(shí)在一個(gè)計(jì)算機(jī)上使用。宿主操作系統(tǒng)是指安裝在硬件上的操作系統(tǒng);客戶操作系統(tǒng)是指安裝在操作系統(tǒng)上的操作系統(tǒng)。工作站虛擬機(jī)作為一個(gè)軟件安裝在宿主操作系統(tǒng)中,在工作站虛擬機(jī)上可以安裝一個(gè)或多個(gè)客戶操作系統(tǒng),從而使得一個(gè)計(jì)算機(jī)上可以使用多個(gè)操作系統(tǒng)。如VMWare Station、Virtual Box、Virtual PC 和Parallels Desktop 等。
6.3 服務(wù)器虛擬機(jī)
服務(wù)器虛擬機(jī)和前兩者不同,它是直接安裝在硬件上。目的是把一個(gè)物理計(jì)算機(jī)虛擬化為多個(gè)虛擬機(jī),使得多用戶、多操作系統(tǒng)在一個(gè)物理計(jì)算機(jī)上并存。如將服務(wù)器物理資源抽象成邏輯資源,讓一臺(tái)服務(wù)器編程幾臺(tái)甚至上百臺(tái)相互隔離的服務(wù)器虛擬機(jī)。有兩種常用模式:一虛多和多虛一。一虛多是指將一臺(tái)服務(wù)器虛擬成多臺(tái)服務(wù)器虛擬機(jī)。多虛一是指將多個(gè)獨(dú)立的物理服務(wù)器虛擬為一個(gè)服務(wù)器虛擬機(jī)。