第一節(jié)課主要是關(guān)于課程介紹以及操作系統(tǒng)是什么、為什么這么重要的簡介?,F(xiàn)代最偉大的發(fā)明之一是互聯(lián)網(wǎng),它把全世界不同規(guī)模的設(shè)備都通過統(tǒng)一的網(wǎng)絡(luò)連接在了一起: ![]() 互聯(lián)網(wǎng)的發(fā)展很迅猛,像最初的ARPANET,不能處理超過256個設(shè)備,大概是在90年代初萬維網(wǎng)開始發(fā)展的時候,互聯(lián)網(wǎng)突然變成了很多人可以使用的東西,現(xiàn)在我們的互聯(lián)網(wǎng)上大概有 45 億臺設(shè)備,覆蓋了世界的 60% 的人口。另一件有趣的事情是在這張圖片中也有設(shè)備的多樣性: ![]() 我們再來看看貝爾定律,他表示一個人擁有的設(shè)備的數(shù)量: ![]() 最初,數(shù)百萬人使用一臺計算機(jī),然后隨著發(fā)展,現(xiàn)在你們每個人可能都有數(shù)百個設(shè)備在為你們工作,比如現(xiàn)代汽車有數(shù)百個處理器,你們都有手機(jī),筆記本電腦等等。每個人的電腦數(shù)量隨著電腦的大小變小而增加,這很有趣。 如何讓這么多系統(tǒng)正常運(yùn)作并且連接在一起,我們就要考慮這個耗時尺度的問題: ![]() 這個圖也是大家經(jīng)常能看到的,大小越小的存儲離 CPU 越近訪問速度越快,大小越大離 CPU 越遠(yuǎn)訪問速度越慢。不管怎樣,操作系統(tǒng)必須在這些不同的耗時尺度正常運(yùn)作,讓系統(tǒng)正常運(yùn)行。 ![]() 操作系統(tǒng)基本上是所有這些的核心,你在底層技術(shù)上不斷取得令人難以置信的進(jìn)步的同時,會造成每個設(shè)備都有一些不同的差異性,每一代技術(shù)的發(fā)展都會有所不同,但是不管硬件有多復(fù)雜,你都要為應(yīng)用程序提供一個一致的編程抽象;同時,需要管理不同應(yīng)用之間的資源共享,我們連接的設(shè)備越多,可以共享的資源就越多。另外,到這學(xué)期的最后三分之一的時候,我們將開始討論其中的一些非常有趣的點(diǎn)對點(diǎn)系統(tǒng),這樣我們可以擁有跨越許多設(shè)備的巨大存儲系統(tǒng)。 我們會學(xué)習(xí)操作系統(tǒng)的關(guān)鍵組成:
![]() 在你想訪問一個網(wǎng)頁的時候,背后發(fā)生了什么?首先,會發(fā)出一個 DNS 請求試圖找出這個網(wǎng)站的 IP 地址,這個請求會到網(wǎng)絡(luò)上的 DNS 服務(wù)器,他們會返回有用的信息,之后使用這些信息,將實際網(wǎng)頁請求發(fā)出;經(jīng)過網(wǎng)絡(luò)路由,之后它可能會被送到一個有負(fù)載均衡器的數(shù)據(jù)中心;然后將從幾個可能的設(shè)備中選擇一個可用的設(shè)備;然后,它可能會從頁面存儲中進(jìn)行搜索和檢索信息,把它拼成你可以用的頁面之后返回。一旦我們開始深入思考這個流程中的細(xì)節(jié),就會有很多有趣的問題,比如 DNS 服務(wù)器是如何保持一致的,為什么很難黑進(jìn)它們呢?事實上,在 2000 年中期,有人侵入了它們。還有就是你如何確保數(shù)據(jù)包有足夠的優(yōu)先權(quán)當(dāng)它們進(jìn)入一個操作系統(tǒng)時,確保你的特響應(yīng)查詢不會被延遲很長時間,這是一個調(diào)度相關(guān)的問題。希望在這堂課結(jié)束時,你將對操作系統(tǒng)的各個部分有足夠的了解,能夠幫助你對這些問題有更好的理解。 ![]() 那什么是操作系統(tǒng)呢?這方面其實沒有統(tǒng)一的概念,但是我們可以從操作系統(tǒng)做的事情來理解什么是操作系統(tǒng)。操作系統(tǒng)負(fù)責(zé):
![]() 對于操作系統(tǒng)的定義,我們很難給出,一個近似的定義是當(dāng)你訂購操作系統(tǒng)時供應(yīng)商提供的所有東西,但是不同的供應(yīng)商提供的東西差別很大,它可能是電腦上一直在運(yùn)行的一個程序即內(nèi)核(kernel),隨著學(xué)期的進(jìn)行,你們會學(xué)到很多關(guān)于內(nèi)核的知識。沒有人會否認(rèn)內(nèi)核是操作系統(tǒng)的核心,但是當(dāng)我們試圖深入研究什么是操作系統(tǒng)時,你們要記住,我們要講的是它的作用和重要的部分,但也許你永遠(yuǎn)不會完全知道到底操作系統(tǒng)是什么。 ![]() 其實操作系統(tǒng)可以理解為是一個典型的軟件層,它提供應(yīng)用程序?qū)τ布Y源的訪問,這是對復(fù)雜硬件設(shè)備的方便抽象以及對共享資源的受保護(hù)訪問與通信,以及提供安全性保護(hù)和認(rèn)證。 ![]() 操作系統(tǒng),什么是'操作'呢?在早期,當(dāng)你打電話時,他們實際上必須把你插到正確的連接上,讓電線連接起來;然后是早期的計算機(jī),需要計算機(jī)操作員,他們基本上是長時間坐在這些大機(jī)器前的人,確保它運(yùn)行正常,然后就會操作系統(tǒng)了。這個“操作”系統(tǒng)就是要保證磁盤運(yùn)行正確,網(wǎng)絡(luò)運(yùn)行正常,或者顯卡等等都運(yùn)行正常。 ![]() 那是什么構(gòu)成了一個'系統(tǒng)'呢?一個系統(tǒng)是由許多相互關(guān)聯(lián)的部分組成的,一般來說,他們協(xié)作實現(xiàn)的要比各部分本身的功能大得多,每個相互關(guān)聯(lián)的部分都可能與其他部分相互作用,當(dāng)然,復(fù)雜度也變成了至少是 n 的平方。我們必須想出 api 和其他聰明的技術(shù)來避免 n 平方的復(fù)雜度,因為事情已經(jīng)足夠復(fù)雜了。對于這些 api 的使用以及理解就是系統(tǒng)編程,系統(tǒng)編程是這門課很重要的一部分,在這門課上你會接觸很多的系統(tǒng)編程。 ![]() 對于硬件/軟件接口:你有一個處理器,在處理器里有寄存器,這些寄存器指向內(nèi)存的一部分,這樣程序就能運(yùn)行了;可能處理器里面還有緩存,但它并沒有很大,緩存的作用就是讓內(nèi)存和磁盤這些大容量但是訪問較慢的看上去可以像寄存器訪問一樣快,通過一定的緩存設(shè)計。在虛擬內(nèi)存的設(shè)計中,還有頁表和翻譯后備緩沖可以幫助我們。當(dāng)然還有各種存儲,例如內(nèi)存還有磁盤。還有有各種各樣的設(shè)備,比如網(wǎng)絡(luò)、顯示器和輸入等等。這些紛雜的硬件都有自己的復(fù)雜的硬件接口,但是操作系統(tǒng)將這些復(fù)雜的硬件接口統(tǒng)一抽象成軟件接口,供應(yīng)用程序使用。比如抽象出了處理器的計算元素,把一堆存儲設(shè)備,比如磁盤,u盤和云存儲,變成一個單一的抽象即文件系統(tǒng),這樣應(yīng)用就可以很容易地使用而不用關(guān)心其中的內(nèi)容(每一位數(shù)據(jù))實際存儲的位置。這些也是這門課的核心內(nèi)容。 ![]() 操作系統(tǒng)充當(dāng)?shù)牡谝粋€角色,就是魔術(shù)師這樣一個角色。它會提供簡單明了的物理資源抽象,它會以一種方式讓你至少暫時認(rèn)為你擁有無限的內(nèi)存,你有一臺完全專用于你的機(jī)器或一個處理器,它有更高級的對象,如文件、用戶和消息。這樣會讓你寫代碼更容易寫,例如如果沒有文件這個對象,那么你操作的就是磁盤上的一堆塊,而文件是磁盤上一堆單獨(dú)的塊的抽象,它們以某種方式與 inodes(索引節(jié)點(diǎn))放在一起,形成一個文件。 ![]()
為什么抽象這些中間層是必要的:如果你試圖去掉所有中間層直接操作底層(有時在非常特殊的環(huán)境中會這樣做),你會發(fā)現(xiàn)特別麻煩,因為不同的底層硬件接口是不一樣。這些抽象雖然對于性能有一點(diǎn)點(diǎn)損耗,但是帶來的是統(tǒng)一接口統(tǒng)一代碼的便利性。 ![]()
![]()
![]() 這里有一個例子,是 MAC 系統(tǒng)的例子,你可以查看進(jìn)程監(jiān)視器或任務(wù)管理器。類似于或者你在 Linux 機(jī)器上面執(zhí)行 ps -aux。你會發(fā)現(xiàn),在你的機(jī)器上,有很多很多的進(jìn)程在運(yùn)行。大多數(shù)都在 sleep,但他們會在某一時刻喚醒,執(zhí)行一些任務(wù)。 ![]() 這是操作系統(tǒng)對于多個進(jìn)程的管理,每個進(jìn)程都有自己的一組線程、地址空間、文件和套接字,它們可能會運(yùn)行一個帶有自己鏈接庫的程序,并且這些進(jìn)程實際上互相保護(hù)自己不受其他進(jìn)程影響的。操作系統(tǒng)將底層的硬件接口轉(zhuǎn)換成應(yīng)用程序接口,每個程序都有自己的進(jìn)程,進(jìn)程是一個受保護(hù)的運(yùn)行環(huán)境。 ![]() 操作系統(tǒng)的另一個角色即裁判,管理進(jìn)程之間的資源的隔離以及共享。 我們接下來看一個簡單的例子,假設(shè)這個例子中只有一個處理器: ![]()
然后,時鐘周期到了,需要切換: ![]()
如果進(jìn)程 2 嘗試訪問不是進(jìn)程 2 內(nèi)存空間的內(nèi)存,比如進(jìn)程 1 的內(nèi)存空間會發(fā)生什么呢?這時候就會發(fā)生 Segmentation Fault(core dumped)這個錯誤,然后進(jìn)程就會被操作系統(tǒng)停止。 ![]() 其實,操作系統(tǒng)這里提供了一個保護(hù)邊界,雖然這些進(jìn)程都在同一個硬件上運(yùn)行,但是操作系統(tǒng)可以防止進(jìn)程訪問不該訪問的地方,保護(hù)進(jìn)程不受其他進(jìn)程的影響。 ![]()
這樣,我們第一節(jié)課的內(nèi)容基本就講完了,你也對操作系統(tǒng)有了一個基本的理解與概念,最后我們提一下是什么讓操作系統(tǒng)令人興奮和具有挑戰(zhàn)性。 ![]() 這就是操作系統(tǒng)令人興奮的地方,世界是一個巨大的分布式系統(tǒng),如圖所示,所有的設(shè)備從一端橫跨全球的大規(guī)模集群,到小型微機(jī)系統(tǒng)設(shè)備和物聯(lián)網(wǎng)設(shè)備以及介于兩者之間的所有設(shè)備。這就是為什么我認(rèn)為操作系統(tǒng)是如此令人興奮,因為只有正常的操作系統(tǒng)才能讓一切正常工作。 ![]()
![]()
![]() 功率密度,電容,很多東西都是導(dǎo)致人們突然制造多核的原因,而不是以讓速度更快為目的的,但是速度確實提高了.但是,摩爾定律要結(jié)束了,雖然不是正式的結(jié)束,但是已經(jīng)無法維持原來的增長了。但這并不意味著人們不再把許多設(shè)備擠在一起,用網(wǎng)絡(luò)連接它們,這只是意味著網(wǎng)絡(luò)變得更加重要,而網(wǎng)絡(luò)正常工作的基石就是我們要學(xué)習(xí)的操作系統(tǒng) 另一件事是存儲容量不斷增長: ![]() 所以我們有更多的設(shè)備更多的存儲空間,更多的設(shè)備更多的存儲空間更多的人意味著對操作系統(tǒng)的需求更大,這就是為什么我們要學(xué)習(xí)操作系統(tǒng)的另一個原因。 ![]()
|
|
|