电竞比分网-中国电竞赛事及体育赛事平台

分享

Berkley CS162 操作系統(tǒng)第一課文字版-課程介紹

 菌心說 2022-05-20 發(fā)布于北京

熟肉視頻地址:

CS162操作系統(tǒng)課程第一課-課程介紹(上)CS162操作系統(tǒng)課程第一課-課程介紹(下)

第一節(jié)課主要是關(guān)于課程介紹以及操作系統(tǒng)是什么、為什么這么重要的簡介?,F(xiàn)代最偉大的發(fā)明之一是互聯(lián)網(wǎng),它把全世界不同規(guī)模的設(shè)備都通過統(tǒng)一的網(wǎng)絡(luò)連接在了一起:

文章圖片1

互聯(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è)備的多樣性:

文章圖片2

我們再來看看貝爾定律,他表示一個人擁有的設(shè)備的數(shù)量:

文章圖片3

最初,數(shù)百萬人使用一臺計算機(jī),然后隨著發(fā)展,現(xiàn)在你們每個人可能都有數(shù)百個設(shè)備在為你們工作,比如現(xiàn)代汽車有數(shù)百個處理器,你們都有手機(jī),筆記本電腦等等。每個人的電腦數(shù)量隨著電腦的大小變小而增加,這很有趣。

如何讓這么多系統(tǒng)正常運(yùn)作并且連接在一起,我們就要考慮這個耗時尺度的問題:

文章圖片4

這個圖也是大家經(jīng)常能看到的,大小越小的存儲離 CPU 越近訪問速度越快,大小越大離 CPU 越遠(yuǎn)訪問速度越慢。不管怎樣,操作系統(tǒng)必須在這些不同的耗時尺度正常運(yùn)作,讓系統(tǒng)正常運(yùn)行。

文章圖片5

操作系統(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)鍵組成:

  • 進(jìn)程
  • 線程,并發(fā),調(diào)度,協(xié)調(diào)
  • 地址空間
  • 保護(hù),隔離,共享,安全
  • 通信,協(xié)議
  • 持久化存儲,事務(wù),一致性,彈性
  • 設(shè)備接口
文章圖片6

在你想訪問一個網(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)的各個部分有足夠的了解,能夠幫助你對這些問題有更好的理解。

文章圖片7

那什么是操作系統(tǒng)呢?這方面其實沒有統(tǒng)一的概念,但是我們可以從操作系統(tǒng)做的事情來理解什么是操作系統(tǒng)。操作系統(tǒng)負(fù)責(zé):

  • 內(nèi)存管理
  • IO管理
  • CPU 調(diào)度
  • 通信
  • 多任務(wù)處理或多處理器編程
    操作系統(tǒng)和什么有關(guān)呢?文件系統(tǒng)?多媒體系統(tǒng)?用戶界面?還有瀏覽器?
文章圖片8

對于操作系統(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)是什么。

文章圖片9

其實操作系統(tǒng)可以理解為是一個典型的軟件層,它提供應(yīng)用程序?qū)τ布Y源的訪問,這是對復(fù)雜硬件設(shè)備的方便抽象以及對共享資源的受保護(hù)訪問通信,以及提供安全性保護(hù)認(rèn)證。

文章圖片10

操作系統(tǒng),什么是'操作'呢?在早期,當(dāng)你打電話時,他們實際上必須把你插到正確的連接上,讓電線連接起來;然后是早期的計算機(jī),需要計算機(jī)操作員,他們基本上是長時間坐在這些大機(jī)器前的人,確保它運(yùn)行正常,然后就會操作系統(tǒng)了。這個“操作”系統(tǒng)就是要保證磁盤運(yùn)行正確,網(wǎng)絡(luò)運(yùn)行正常,或者顯卡等等都運(yùn)行正常。

文章圖片11

那是什么構(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)編程。

文章圖片12

對于硬件/軟件接口:你有一個處理器,在處理器里有寄存器,這些寄存器指向內(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)容。

文章圖片13

操作系統(tǒng)充當(dāng)?shù)牡谝粋€角色,就是魔術(shù)師這樣一個角色。它會提供簡單明了的物理資源抽象,它會以一種方式讓你至少暫時認(rèn)為你擁有無限的內(nèi)存,你有一臺完全專用于你的機(jī)器或一個處理器,它有更高級的對象,如文件、用戶和消息。這樣會讓你寫代碼更容易寫,例如如果沒有文件這個對象,那么你操作的就是磁盤上的一堆塊,而文件是磁盤上一堆單獨(dú)的塊的抽象,它們以某種方式與 inodes(索引節(jié)點(diǎn))放在一起,形成一個文件。

文章圖片14


這是一臺普通的物理機(jī),它有內(nèi)存,有I/O,可能還有存儲和網(wǎng)絡(luò)。在它上面我們會放一個操作系統(tǒng),我們現(xiàn)在正在學(xué)習(xí)這個。操作系統(tǒng)將處理器資源抽象成一個非常簡潔的東西,即
線程(Thread);我們將會有地址空間(Address Space),我們將會學(xué)習(xí)的不是在 DRAM 中分散在各處的一堆內(nèi)存字節(jié),而是一個干凈的地址空間抽象,這將使我們能夠把內(nèi)存當(dāng)作完全屬于我們的,即使有多個程序在運(yùn)行。我們將會有文件(File),而不是一堆單獨(dú)的磁盤上的塊。我們將會有套接字(Socket),而不是直接操作網(wǎng)卡。在這些線程,地址空間,文件和套接字之上,將會有進(jìn)程(Process)抽象,這個進(jìn)程抽象將給我們一個由操作系統(tǒng)提供的受限權(quán)限的執(zhí)行環(huán)境,在里面跑我們編譯好的程序。為了給你一個干凈的環(huán)境來進(jìn)行編程使用這些抽象資源,會有系統(tǒng)庫(System Libraries)

為什么抽象這些中間層是必要的:如果你試圖去掉所有中間層直接操作底層(有時在非常特殊的環(huán)境中會這樣做),你會發(fā)現(xiàn)特別麻煩,因為不同的底層硬件接口是不一樣。這些抽象雖然對于性能有一點(diǎn)點(diǎn)損耗,但是帶來的是統(tǒng)一接口統(tǒng)一代碼的便利性。

文章圖片15


系統(tǒng)庫被鏈接到你的程序中,然后由編譯器運(yùn)行,然后被轉(zhuǎn)換成在程序中運(yùn)行的機(jī)器碼,然后在進(jìn)程環(huán)境中執(zhí)行它們。

文章圖片16


在進(jìn)程中有什么:

  • 一個進(jìn)程有一個地址空間,也就是一塊受保護(hù)的內(nèi)存
  • 它有一個或多個線程,訪問上面那些地址空間
  • 其他的系統(tǒng)狀態(tài)(system state):包括打開的文件和套接字等等
文章圖片17

這里有一個例子,是 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ù)。

文章圖片18

這是操作系統(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)境。

文章圖片19

操作系統(tǒng)的另一個角色即裁判,管理進(jìn)程之間的資源的隔離以及共享。

我們接下來看一個簡單的例子,假設(shè)這個例子中只有一個處理器

文章圖片20


假設(shè)我們有編譯好的程序 1 (棕色)和程序 2(綠色),我們只有一個處理器(Processor,一個核心 core,我們目前認(rèn)為一個處理器只有一個核心,在后續(xù)的課程中可能會有多核的情況,這里先不考慮),那么操作系統(tǒng)怎么讓這兩個程序看起來同時在運(yùn)行呢?首先每個程序都有自己的進(jìn)程,每個進(jìn)程都有自己的全局唯一
進(jìn)程描述符(Process Identifier)。在內(nèi)存中,進(jìn)程 1 有自己的內(nèi)存空間(棕色),進(jìn)程 2 也有自己的內(nèi)存空間(綠色),同時,內(nèi)存中還有灰色的代表操作系統(tǒng)使用的一些內(nèi)存空間。然后,處理器里面做的就是不斷地進(jìn)程切換,先從一個開始,例如進(jìn)程 1,這時候處理器執(zhí)行的就是程序 1 的代碼,處理器中的寄存區(qū)保存的是程序 1 需要的內(nèi)容,訪問的就是進(jìn)程 1 的內(nèi)存空間。

然后,時鐘周期到了,需要切換:

文章圖片21


這時候,處理器將進(jìn)程 1 的寄存器內(nèi)容保存起來(這個涉及到線程控制塊,后面的課程會說),加載進(jìn)程 2 執(zhí)行需要的內(nèi)容到寄存器開始執(zhí)行,然后訪問的是進(jìn)程 2 的內(nèi)存空間。

如果進(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)停止。

文章圖片22

其實,操作系統(tǒng)這里提供了一個保護(hù)邊界,雖然這些進(jìn)程都在同一個硬件上運(yùn)行,但是操作系統(tǒng)可以防止進(jìn)程訪問不該訪問的地方,保護(hù)進(jìn)程不受其他進(jìn)程的影響。

文章圖片23


最后,操作系統(tǒng)也作為
粘合劑提供一些必不可少的服務(wù),也就是程序會用到的公共服務(wù)(common service),例如文件系統(tǒng)服務(wù),可視化界面服務(wù),網(wǎng)絡(luò)服務(wù)等等。這些公共服務(wù)通常是與緊密鏈接的,你在寫程序的時候使用這些庫來使用這些服務(wù)

這樣,我們第一節(jié)課的內(nèi)容基本就講完了,你也對操作系統(tǒng)有了一個基本的理解與概念,最后我們提一下是什么讓操作系統(tǒng)令人興奮和具有挑戰(zhàn)性。

文章圖片24

這就是操作系統(tǒng)令人興奮的地方,世界是一個巨大的分布式系統(tǒng),如圖所示,所有的設(shè)備從一端橫跨全球的大規(guī)模集群,到小型微機(jī)系統(tǒng)設(shè)備和物聯(lián)網(wǎng)設(shè)備以及介于兩者之間的所有設(shè)備。這就是為什么我認(rèn)為操作系統(tǒng)是如此令人興奮,因為只有正常的操作系統(tǒng)才能讓一切正常工作。

文章圖片25


你們肯定知道
摩爾定律(這也是伯克利大學(xué)的教授提出的),即每 1.5 年左右晶體管數(shù)量會翻倍。

文章圖片26


但是在 21 世紀(jì)初,這個速度還是減緩了,因為人們發(fā)現(xiàn)
把這些晶體管越來越多地放到芯片上,在電容和功率方面遇到了問題。在過去,你可以等上幾年就能得到相當(dāng)于你現(xiàn)在使用的機(jī)器兩倍的性能,在21世紀(jì)的某個時候,這種趨勢突然停止了。這怎么辦呢?突然間人們不得不制造多核處理器,并設(shè)計大量并行計算

文章圖片27

功率密度,電容,很多東西都是導(dǎo)致人們突然制造多核的原因,而不是以讓速度更快為目的的,但是速度確實提高了.但是,摩爾定律要結(jié)束了,雖然不是正式的結(jié)束,但是已經(jīng)無法維持原來的增長了。但這并不意味著人們不再把許多設(shè)備擠在一起,用網(wǎng)絡(luò)連接它們,這只是意味著網(wǎng)絡(luò)變得更加重要,而網(wǎng)絡(luò)正常工作的基石就是我們要學(xué)習(xí)的操作系統(tǒng)

另一件事是存儲容量不斷增長:

文章圖片28

所以我們有更多的設(shè)備更多的存儲空間,更多的設(shè)備更多的存儲空間更多的人意味著對操作系統(tǒng)的需求更大,這就是為什么我們要學(xué)習(xí)操作系統(tǒng)的另一個原因。

文章圖片29


但是,學(xué)習(xí)操作系統(tǒng)的是一件很有挑戰(zhàn)的事情,挑戰(zhàn)主要來自于復(fù)雜度。應(yīng)用程序由許多軟件模塊組成,運(yùn)行在許多不同硬件平臺上的許多設(shè)備上,可能還會受到惡意攻擊導(dǎo)致失敗,
通過在所有可能的環(huán)境和組件組合下測試來完善軟件是不可行的,我們必須學(xué)習(xí)如何以基本可行的方式來構(gòu)建這些復(fù)雜的系統(tǒng)。

    本站是提供個人知識管理的網(wǎng)絡(luò)存儲空間,所有內(nèi)容均由用戶發(fā)布,不代表本站觀點(diǎn)。請注意甄別內(nèi)容中的聯(lián)系方式、誘導(dǎo)購買等信息,謹(jǐn)防詐騙。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請點(diǎn)擊一鍵舉報。
    轉(zhuǎn)藏 分享 獻(xiàn)花(0

    0條評論

    發(fā)表

    請遵守用戶 評論公約

    類似文章 更多