前言
求于至簡,歸于永恒
當你在電腦上玩游戲、與朋友聊天或撰寫一個程式并加載運行的時候,你有沒有一種像在觀看魔術的感覺?撰寫好的程式能夠編譯運行,計算出結果,并顯示或列印出來,你有沒有覺得它很神秘?
如果想揭開這層神秘的面紗,你就得學習作業系統,
因為作業系統是掌控計算機運行的系統,在學習它的程序中,讀者能夠了解程式在計算機上運行的全景,或者說我們所認為的全景,之所以這么說,是因為精確了解程式在計算機上運行的全景是極其困難的(有人認為這根本就是不可能的),當然,這里的程式指的是有一定規模的程式,而不是那種只有幾行代碼的小程式(tivial program),從某種程度上說,沒有人敢肯定自已清楚計算機在任意時刻所處的狀態,例如,在多流水線計算機上,如果發生中斷或例外,我們根本就得不到一個精準的狀態,唯一能做的就是推倒重來,
作業系統的奧秘
對于許多大學計算機及相關專業的同學來說,作業系統就像天上的星星,隱藏著一個固執的謎,永遠學不清楚,不過,作業系統真的學不清楚嗎?
不是的,學不清楚是因為沒有看到其背后的奧秘,這個奧秘不是所有的人都知道的,即使是研究作業系統的人也不一定意識到它,更別提計算機初學者了,
那么這個奧秘是什么呢?
天上的星星數不清是因為我們試圖做的事情是數星星,如果我們換個角度,不去數星星,而是尋找星星的設計師,讓他告訴我們星星的數量,不就清楚了嗎?
這也正是學習作業系統的奧秘,要理解作業系統,就要找到作業系統的設計師,讓他們告訴我們作業系統蘊含的所有秘密,當然,這里的尋找設計師并不是真的找來他們,因為找到所有的設計師是不可能的,這里的設計師指的是一種抽象,一種所有設計師所共有的人生哲學,因為設計師在設計作業系統時會不自覺地將自己的思維或人生追求構造在作業系統里,從而賦予作業系統以心智,而作業系統也就在這種心智的指揮下運行著,
下面我們就來看看作業系統吧
第一份作業系統筆記
目錄




筆記涉及到的知識點極多,若一一展現給大家比較困難.......Σ( ° △ °|||)︴,為了不影響大家的閱讀體驗,以下只截取筆記部分內容,文末有完整版筆記獲取方式,有需要的朋友可自取

第一章認識作業系統

計算機硬體簡介
作業系統與運行作業系統的內核硬體關系密切,作業系統擴展了計算機指令集并管理計算機的資源,因此,作業系統因此必須足夠了解硬體的運行,這里我們先簡要介紹一下現代計算機中的計算機硬體,

總線
上面的結構(簡單個人計算機的組件圖)在小型計算機已經使用了多年,并用在早期的IBMPC中,然而,隨著處理器核記憶體變得越來越快,單個總線處理所有請求的能力也達到了,上線,其中也包括IBMPC總線,必須放棄使用這種模式,其結果導致了其他總線的出現,它們處理I/O設備以及CPU到存盤器的速度都更快,這種演變的結果導致了下面這種結構的出現,

檔案
幾乎所有作業系統都支持的另一個關鍵概念就是檔案系統,如前所述,作業系統的一項主要功能是屏蔽磁盤和其他l/O設備的細節特性,給程式員提供一個良好、 清晰地獨立于設備的抽象檔案模型,創建檔案、洗掉檔案、讀檔案和寫檔案都需要系統呼叫,在檔案可以讀取之前,必須先在磁盤上定位和打開檔案,在檔案讀過之后應該關閉該檔案,有關的系統呼叫則用于完成這類操作,
為了提供保存檔案的地方,大多數個人計算機作業系統都有目錄(directory)的概念, 從而可以把檔案分組,比如,學生可以給每個課程都創建一個目 錄,用于保存該學科的資源,另一個目錄可以存放電子郵件,再有一個目錄可以存放萬維網主頁,這就需要系統呼叫創建和洗掉目錄、將已有檔案放入目錄中,從目錄中洗掉檔案等,目錄項可以是檔案或者目錄,目錄和目錄之間也可以嵌套,這樣就產生了檔案系統

系統呼叫


作業系統結構
下面我們會探討作業系統的幾種結構,主要包括單體結構、分層系統、微內核、客戶-服務端系統、虛擬機和外核等,下面以此來探討一下
單體系統

分層系統

微內核

客戶-服務器模式


第二章行程和執行緒

目錄
檔案系統通常提供目錄(directories) 或者檔案夾(folders)用于記錄檔案的位置, 在很多系統中目錄本身也是檔案,下面我們會討論關于檔案,他們的組織形式、屬性和可以對檔案進行的操作,
一級目錄系統


行程模型
在行程模型中,所有計算機上運行的軟體,通常也包括作業系統,被組織為若干順序行程(sequentialprocesses),簡稱為行程(process) , 一個行程就是一個正在執行的程式的實體,行程也包括程式計數器、暫存器和變數的當前值,從概念上來說,每個行程都有各自的虛擬CPU,但是實際情況是CPU會在各個行程之間進行來回切換,

行程的實作
作業系統為了執行行程間的切換,會維護著一張表格,這張表就是行程表(process table) ,每個行程占用一個行程表項,該表項包含了行程狀態的重要資訊,包括程式計數器、堆疊指標、記憶體分配狀況、所打開檔案的狀態、賬號和調度資訊,以及其他在行程由運行態轉換到就緒態或阻塞態時所必須保存的資訊,從而保證該行程隨后能再次啟動,就像從未被中斷過一樣,
下面展示了一個典型系統中的關鍵欄位

執行緒實作
主要有三種實作方式
- 在用戶空間中實作執行緒
- 在內核空間中實作執行緒
- 在用戶和內核空間中混合實作執行緒,

屏障

第三章記憶體

主存(RAM)是一件非常重要的資源,必須要認真對待記憶體,雖然目前大多數記憶體的增長速度要比IBM7094要快的多,但是,程式大小的增長要比記憶體的增長還快很多,不管存盤器有多大, 程式大小的增長速度比記憶體容量的增長速度要快的多,下面我們就來探討一下操作 系統是如何創建記憶體并管理他們的,
一種存盤器抽象:地址空間


空閑記憶體管理


虛擬記憶體


第四章檔案系統

檔案系統的實作
在對檔案有了基本認識之后,現在是時候把目光轉移到檔案系統的實作上了,之前用戶關心的一直都是檔案是怎樣命名的、可以進行哪些操作、目錄樹是什么,如何找到正確的檔案路徑等問題,而設計人員關心的是檔案和目錄是怎樣存盤的、磁盤空間是如何管理的、如何使檔案系統得以流暢運行的問題,下面我們就來一起討論一下這些問題,
檔案的實作

使用記憶體表進行鏈表分配
由于連續分配和鏈表分配都有其不可忽視的缺點,所以提出了使用記憶體中的表來解決分配問題,取出每個磁盤塊的指標字,把它們放在記憶體的一個表中,就可以解決上述鏈表的兩個不足之處,下面是一個例子

目錄的實作
檔案只有打開后才能夠被讀取,在檔案打開后,作業系統會使用用戶提供的路徑名來定位磁盤中的目錄,目錄項提供了查找檔案磁盤塊所需要的資訊,根據系統的不同,提供的資訊也不同,可能提供的資訊是整個檔案的磁盤地址,或者是第一個塊的數量 (兩個鏈表方案)或inode的數量,不過不管用那種情況,目錄系統的主要功能就是將檔案的ASCII碼的名稱映射到定位資料所需的資訊上

檔案系統的管理和優化
能夠使檔案系統作業是一回事,能夠使檔案系統高效、穩定的作業是另一回事,下面我們就來探討一下檔案系統的管理和優化,
磁盤空間管理

檔案系統性能

第五章I/O

我們之前的文章提到了作業系統的三個抽象,它們分別是行程、地址空間和檔案,除此之外,作業系統還要控制所有的/0設備,作業系統必須向設備發送命令,捕捉中斷 并處理錯誤,它還應該在設備和作業系統的其余部分之間提供一個簡單易用的介面,作業系統如何管理I/O是我們接下來的重點,
I/O設備

I/O軟體目標

使用程式控制I/O

磁盤
為了組織和檢索資料,會將磁盤組織成特定的結構,這些特定的結構就是磁道、扇區和柱面

磁盤格式化
磁盤由一堆鋁的、合金或玻璃的盤片組成,磁盤剛被創建出來后,沒有任何資訊,磁盤在使用前必須經過低級格式化(low-levvel format) ,下面是一個扇區的格式

第六章死鎖

計算機系統中有很多獨占性的資源,在同一時刻只能每個資源只能由一個行程使用,我們之前經常提到過列印機,這就是一個獨占性的資源,同一時刻能有兩個列印機同時輸出結果,否則會引起檔案系統的癱瘓,所以,作業系統具有授權一個行程單獨訪問資源的能力,
兩個行程獨占性的訪問某個資源,從而等待另外-一個資源的執行結果,會導致兩個行程都被阻塞,并且兩個行程都不會釋放各自的資源,這種情況就是死鎖(deadlock) ,
死鎖可以發生在任何層面,在不同的機器之間可能會發生死鎖,在資料庫系統中也會導致死鎖,比如行程A對記錄R1加鎖,行程B對記錄R2加鎖,然后行程A和B都試圖把物件的記錄加鎖,這種情況下就會產生死鎖,
下面我們就來討論一下什么是死鎖、死鎖的條件是什么、死鎖如何預防、活鎖是什么等,
首先你需要先了解一個概念,那就是資源是什么
資源

死鎖



鴕鳥演算法

死鎖避免

破壞死鎖

通信死鎖

大廠常見面試題
解釋一下什么 是作業系統?

作業系統結構

什么是執行緒,執行緒和行程的區別

行程間的通信方式

行程間狀態模型

調度演算法都有哪些

第二份作業系統筆記
為清楚地闡述作業系統的哲學原理,也為了使內容顯得緊湊,邏輯上一氣呵成,本書只選擇了作業系統的核心內容進行分析,放棄了對作業系統核心以外內容,如安全、多媒體系統、虛擬機技術、光碟技術等的論述,本書集中精力對作業系統發展的歷史背景、行程與執行緒、記憶體管理、檔案系統、輸入與輸出、多核環境下的行程調度和作業系統設計進行了哲學原理層面上的分析與論述,而將安全、多媒體、虛擬機等技術留給別的專業書籍進行論述,對內容的這種安排有如下好處:
- 可使本書重點突出、邏輯清晰、內容連貫,便于學生順利掌握作業系統的核心與關鍵,
- 作業系統的核心內容經過長久的研究與實踐,已經變得較為穩定并且形成了眾所公認的標準,講解起來沒有歧義,
- 作業系統的非核心部分由于研究的時間短,工業界參與的程度較低,并無公認的標準,論述起來要么不全面,要么顯得凌亂,使剛剛接觸作業系統的讀者感到迷惑,
- 只要掌握了核心內容的原理,讀者便能通過自學掌握作業系統核心以外的知識,
本書分為8篇,分別是基礎原理篇、行程原理篇、執行緒原理篇、記憶體原理篇、檔案原理篇、I/O原理篇、多核原理篇和作業系統設計篇

基礎原理篇
- 第1章作業系統導論
- 第2章作業系統歷史
- 第3章作業系統基本概念
大偽似真,大道無形
對于任何一門課來說,首要探討的問題就是這門課的主題到底是什么,對于剛接觸作業系統的入門者來說,自然想到的問題當然也會是作業系統到底是什么東西,回答這個問題是本篇的職責,此外,作業系統作為計算機的核心控制系統,它在計算機運行程序中扮演什么角色?它的來歷是什么?它有一些什么基本概念?我們應該如何看待作業系統?它是如何參與到程式的執行程序中的?這些也是學習作業系統需要回答的基本問題,
程式是如何運行的

計算機硬體基本知識

作業系統結構

行程原理篇
- 第4章行程
- 第5章行程調度
- 第6章行程通信
恍兮惚兮,其中有像;惚兮恍兮,其中有物
有了基礎原理篇的鋪墊,我們就可以進入作業系統核心功能部件了,
顧名思義,計算機是用來進行計算的,或者說計算機的基本功能是計算功能,而進行計算的關鍵部件是計算機的芯片,即CPU,CPU能夠按照一-定的順序進行正確計算是在-個指揮者的控制之下完成的,這個指揮者就是作業系統,作業系統對CPU進行管理的重要手段就是行程模型,或者說行程是作業系統這個魔術師施法的道具,
行程電報:信號

行程擁抱:共享記憶體

執行緒原理篇
- 第7章執行緒
- 第8章執行緒同步
- 第9章死鎖應對之哲學原理
- 第10章鎖的實作
善閉者無關楗不可啟,善結者無繩約不可解
行程雖然讓并發從理想變為現實,但其自身卻是串行:行程只有一一個執行序列,只有一個執行序列的行程模型并不能從根本上滿足人類的所有并發的奢望,并發其實并非人類的唯一訴求,甚至也不一定是最重要的訴求,有了并發,我們希望的是并發能夠幫助我們實作在非并發時難以實作或實作成本高昂的功能:并發的個體通過合作來完成復雜的任務,
行程的分身術一執行緒

以測驗與設定指令來實作鎖

記憶體原理篇
本篇包括第11~ 14章的內容,第11章講述記憶體管理的環境、虛擬記憶體、作業系統在記憶體中的位置、程式在記憶體里的位置(固定加載地址、固定磁區、可變磁區)、基本記憶體管理機制(地址翻譯、基址極限、交換)、閑置空間管理等內容,第12章講解的內容包括基址極限的問題、分頁管理、頁表、頁面翻譯程序、分頁管理系統的優缺點、多級頁表、地址翻譯速度、鎖住頁面、記憶體抖動和頁面尺寸設計,第13章對頁面更換演算法的來龍去脈、欲達到的目的、各種具體的頁面更換演算法進行細致講解,第14章的內容包括頁式管理系統的局限、分段管理系統、分段的優缺點、段號與尋址位數,并對否定之否定在記憶體管理模式發展程序中的作用進行討論,
- 第11章基本記憶體管理
- 第12章頁式記憶體管理
- 第13章頁面更換演算法
- 第14章段式記憶體管理
頁面更換的目標

分段管理系統

檔案原理篇
- 第15章磁盤操作
- 第16章檔案系統
- 第17章檔案系統實作
- 第18章檔案系統性能
大成若缺,其用不敝:大盈若沖,其用不窮
在第四篇中介紹過,計算機運行時所需要的資料和代碼從主存盤器或者記憶體而來,如果計算機不在運行狀態時,這些資料和代碼保持在何處呢?我們當然可以試一下記憶體, 但問題是記憶體不是持久性的存盤介質,它是行程運行程序中臨時分配的存盤空間,一且行程結束運行,其所占記憶體空間就會被釋放,存放在里面的資料和代碼也將消失,而且,記憶體需要電能支持才能保持資料(指一.般的記憶體),-旦斷電, 所有資料都將丟失,因此,資料和代碼要想長久保持,就需要一個更為持久的地方來存放,這個持久地方就是磁盤,而對磁盤進行管理就是作業系統的另一一個重要使命,如果管理得當,磁盤、記憶體和CPU將協作完成計算機的使命,
磁盤的結構

檔案系統的布局

能力表

檔案系統持久性

I/O原理篇
- 第19章輸入輸出
善者,不善人之師:不善者,善人之資

設備控制器

物理I/O模式

多核原理篇
- 第20章多核結構與記憶體
- 第21章多核環境下的行程同步與調度
美言不信,信言不美

多核基本概念

旋鎖

作業系統設計篇
- 第22章作業系統設計之哲學原理
多聞數窮,不若守中

作業系統設計的追求

作業系統設計的第9條哲學原理:簡單為美一求于至簡, 歸于永恒

由于筆記涉及到的知識點與內容極多,就不一一展示給大家了,這份【作業系統筆記】【作業系統之哲學原理第2版】分別為306頁與427頁,若需要完整版筆記的朋友,可以點贊此文關注小編,【見下圖步驟】獲取!!

總結
由此可見,設計一個完美的作業系統是多么困難,甚至是無法達到的,這就意味著我們在作業系統上的探索是永無止境的,雖然不時會有達到完美的感覺,但仔細思量卻發現不過是自我幻覺而已,就像真理一樣,似乎能感覺到,但似乎又沒有把握,而本書所要達到的目標就是為讀者探索作業系統提供些許指導,一個指引讀者探索方向的路標,
還記得本書前言里面的那首小詩嗎?它的結尾是這樣的:
不要失望,
失望會使我們衰老
趁我們還年輕,
抬起頭來,讓我們數星星:
也許,我們能數得清;
也許,我們能看到真相;
也許,我們能找到希望....
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/213107.html
標籤:java
上一篇:HCIE北京考場體驗報告
下一篇:網路編程匯總
