--- title: OS-Info tags: OS --- OS-Info === ## 作業系統是什麼 * 作業系統(Operating System,OS)扮演使用者対電腦硬体間的中介程式 ### 目的 * 讓電腦系統能方便使用 #### 使用者面:運行使用者程式且讓使用者更容易解決問題 * 硬體抽象化:如滑鼠、觸控板等,經過OS抽象化後,提供使用者統一的概念:滑鼠指標 * OS將磁碟,劃分成檔案,再將檔案歸類為檔案夾 * 將「可程式化」(programmable)變得更容易,CPU執行不同程式碼就會有不同功能。OS將程式碼抽象為執行檔,執行不同的執行檔就可「程式化」該電腦的功能 #### 系統面: 有效率的方式使用電腦硬体(分配資源、控制程式) * 足夠記憶體的情況下可以同時載入多個執行檔並執行,並可使用硬碟堆放暫時用不到的記憶體,以空出記憶體給真正需要的應用程式 * 透過排程演算法(scheduler),讓I/O與CPU維持在高使用率 --- ## 電腦系統的結構 ![](https://i.imgur.com/cvpkoes.png) * 硬体(Hardware): 提供基本的運算資源 * 作業系統(OS): 控制和協調応用程式和使用者対於硬体的使用 * 応用程式(Application): 定義系統資源用來被解決使用者運算問題的方法 * 使用者(Users) --- ## 觀點 ### 使用者的觀點 * 希望方便且容易使用 * 不関心資源的使用 * 但共用的電腦必讓所有使用者都满意 ### 系統觀點 #### 資源分配者 * 管理所有的資源 * 決定資源相互矛盾要求時有效率和公平使用 #### 控制程式 * 控制程式運行且避免錯誤和電腦的不正確使用 --- ## 定義作業系統 * 沒有普遍接受的定義 * 作業系統存在的是因爲提供一個合理的方式來解決:一套有用的運算系統 * 電腦系統的目的:運行使用者的程式+解決使用者的問題變的簡單 * 逹成目的:把電腦硬体組合起來,因純硬体(bare hardware)不易單独使用,因此應用程式才發展出來 * 作業系統 = 控制和分配資源的功能所共同集合而成的軟体 * 作業系統是一個在電腦內部隨時都在運行的程式,一般稱「核心(Kernel)」 * 伴隨核心,有二種不同型態的程式: * 系統程式(System Program):和作業系統有関,但不是核心必要部分 * 應用程式 :和作業系統不相関 --- ## 電腦系統組織 ![](https://i.imgur.com/nGSq8iv.png) * 近代的一般用途電腦系統包含一個或多個CPU和一些裝置控制器,它們經由提供存取共用記憶体的公用匯流排連結在一起 * 每個裝置控制器負責一個特殊形式的裝置(ex:HDD,Display) * 可同時運行互相兢爭記憶体週期 --- ### 電腦啟動 * 啟始程式/靴帶式程式(Bootstrap program): 負責把OS核心載入記憶體,並且執行核心程式 * 通常儲存在ROM或EPROM中,統稱為韌體(firmware) * 一旦開始運行,可開始提供服務給系統和使用者 * 但有些服務在核心外提供: * 由啟動時戴入記憶体的系統程式 * 核心運行時會一直運行的系統守護程式(System Process/System Daemon) --- ### 中斷 #### 一般功能 * 通常中斷會經由中斷向量轉移控制到中斷服務常式,中斷向量包含所有服務常式的地址 * 中斷架構必須儲存被中斷指令的地址 * 陷阱(trap)或例外(exception)是一個因為錯誤或使用者要求而產生的軟體中斷 * 作業系統是中斷驅動(硬体&軟体) #### 中斷處理 * 作業系統藉由儲存暫存器和程式計數器來保存CPU的狀態 * 中斷的型態 * 輪詢(Polling) ==> 最無效率 * 向量式中斷系統 * 每一種型態的中斷都有相對應的程式碼決定應該採取什麼動作 #### 中斷時間線 ![](https://i.imgur.com/zpDQZiH.png) --- ## I/O 結構 * OS在每個裝置控制器上有裝置驅動程式(Device Driver) * 使OS能明瞭裝置控制器且把此裝置呈現一個統一的介面到OS的其它部分 * 裝置控制器負責一些特殊裝置型態的緩衝儲存區和一組特殊用途暫存器 * 且在它所控制的週邊裝置和它的緩衝儲存區之間移動資料 ### 動作 * I/O開始之後, 只有在I/O完成之後,控制權才交回給使用者程式 * Wait 指令閒置CPU直到下一次中斷 * Wait 迴圈 (競爭記憶體存取) * 每一次至多只有一個I/O要求,沒有同時的I/O處理 * 開始之後,控制權交還給使用者程式,不必等待I/O完成 * 系統呼叫: 對 OS 要求以允許使用者等待I/O完成 * 裝置狀態表格 (Device-status table)包含每一個I/O裝置的進入點,指出裝置的型態、地址、和狀態 * 索引到I/O裝置表格以決定裝置狀態,並修改包含中斷的表格進入點 --- ### DMA(Direct Memory Access,直接記憶體存取)結構 ![](https://i.imgur.com/d0lre8s.png) * 使用在可以接近記憶體速度傳輸資料的高速I/O裝置 * 裝置控制器從緩衝儲存體直接傳輸大量的資料到主記憶體,沒有CPU的介入 * 每一個區塊只產生一次中斷,而非每一位元組產生一次中斷 --- ## 儲存體結構 * 儲存體系統以架構的方式組織 * 速度 * 價格 * 可揮發性 ![](https://i.imgur.com/lupnTM9.png) * 每一個裝置控制器的裝置驅動程式管理I/O * 提供控制器和核心間提供一致性的介面 ### 主記憶體/輔助記憶体 #### 主記憶體 * 可以直接存取的唯一大型儲存媒體 * 隨機存取 * 通常是可揮發 #### 輔助記憶体 * 主記憶體的延伸,可以提供大量的非揮發性儲存容量 ### 儲存體類型 * 磁碟: 覆蓋磁性記錄材料的硬性金屬或玻璃盤 * 磁碟表面被邏輯分成,磁軌再被分成磁區(sectors) * 磁碟控制器決定裝置和電腦間的邏輯互動 * 固態硬碟: 比磁碟快、非揮發性 * 各種不同的技術 * 快取: 拷貝資訊到更快儲存體系統;主記憶體可以視為輔助記憶體的快取 * 快取的容量小於被快取的儲存體 * 快取先檢查以決定資訊是否存在 * Y: 直接從快取(速度快)使用資訊 * N: 資料拷貝到快取,並在快取中使用 --- ## 電腦系統架構 ![](https://i.imgur.com/Vpxi3d8.png) --- ### 單一處理器系統 * 大部分系統使用一個單一用途處理器(PDAs到大型主機) * 大部分系統也有特殊用途的處理器,可能以特殊裝置處理器型式參予(ex:HDD,GPU) * 特殊裝置處理器是低階元件組成的硬体(独立自主的作業) --- ### 多個處理器系統(Multiprocessor system) ![](https://i.imgur.com/1YydeyV.png) * 也被稱為平行系統(Parallel system) * 通常擁有二個或多個處理器,彼此緊密的溝通且共用電腦匯流排,時脈,記憶体,週邊裝置 * 优點: * 增加產量 * 經濟度量 * 增加可信度(適度降級或容錯) * 適度降級(graceful degradation): 持續提供服務的能力和尚存硬体的程度成正比 * 容錯(fault toleant): 允許容𢖫任一元件失誤而持續運行 #### 型態 * 非對稱多元處理(AMP,Asymmetric Multiprocessing) * 每個處理器都指定一個特殊的任務 * 每個(或某群) Processor 各自負責不同的工作(功能),其中有一個Processor負責控制、協調及分配Process到其它的Processors去運作,這個負責指揮的Processor稱作Master。 * Asymmetric類似Master/Slave,除了MasterProcessor外,其餘的Processors稱為Slave Processor。 * 對稱多元處理(SMP,Symmetric Multiprocessing) * 每個Processor都有相同的工作(功能),當某一個Processor壞了,該Processor上未完成的工作可以轉移到其它的Processor繼續執行。 * 好處: 系統不會整個Crash #### 設計方式 ##### 記憶体存取方式 ![](https://i.imgur.com/caYBGl0.png) * 統一記憶體存取模型(UMA,Uniform Memory Access): 所有的物理記憶體被均勻共享,即處理器存取它們的時間是一樣的 * 非統一記憶體存取架構(NUMA,Non-uniform memory access): 被共享的記憶體物理上是分散式的,所有這些記憶體的集合就是全域位址空間,所以處理器存取這些記憶體的時間是不一樣的,顯然存取本地記憶體的速度要比存取全域共享記憶體或遠端存取外地記憶體要快些 ##### 多晶片和多核心 * 多核心(Multicore): 在單一晶片上包含許多運算核心(Core) * 每個核心都有自己的暫存器和獨立/共用區域快取記憶体 * 對於OS是多個獨立的CPU * 可比多個單核心的晶片更有效率(在晶片內的通信會比晶片間的通信快) * 一個多核心的晶片會比多個單核心晶片使用到更少的電力 ##### 刀鋒伺服器(blade servers) * 刀鋒伺服器有一個完整的機座,以統一集中的方式,提供電源、風扇散熱、網路通訊等功能。 * 而基座上可插置多張單板電腦,因狀似刀片(Blade),因此稱之為刀鋒伺服器,而基座則稱之為刀鋒基座 * 密集的單板電腦組裝特性,導致它對於電源的供應與散熱的需求比一般的伺服器來得高。 * 在一個散熱不佳的機房中,刀鋒伺服器比一般的伺服器更容易導致過熱當機 --- ### 叢集式系統(Clustered System) * 和多處理器系統一樣,但多個系統一起工作 ![](https://i.imgur.com/dTSxRtM.png) * 通常經由儲存區域網路(storage-area network,SAN)共用儲存體 * 有些有分散式上鎖管理員(distributed lock manager,DLM)以確保不會發生操作上的衝突(ex:資料庫的存取權限) * 提供高取得率(high-availability)的服務,某些系統失效後依然可以繼續提供服務 * 架構 * 對稱(symmetric)叢集: 有多台主機正在執行應用程式,並且互相監督 * 非對稱(asymmetric)叢集: 一台機器處於熱待機狀態 * 熱待機狀態時只監督工作且在工作伺服器掛了時直接接手工作 * 有些叢集是為了提供高性能運算(high-performance computing,HPC),因此可在叢集內的電腦同時運行一個應用程式 * 應用程式必須以並行(parallelization)的方式撰寫 * 分割程式成單獨的部分,並行在叢集內個別電腦運行 * 一旦叢集式系統每個運算點解決它的問題部分,所有節點的結果就組成最後解答 --- ## 作業系統結構 ### 多元程式規劃(Multiprogramming) * 目的: 讓CPU始終有工作(程式碼和資料)運行且增加CPU使用率   * 只要始終有工作需要運行,CPU則永遠不會閒置 ![](https://i.imgur.com/NT0eiF3.png) * 工作池(Job Pool)是存放在輔助記憶體內並等待配置(Allocate)主記憶體的所有工作的集合。 * 若有很多個工作存在輔助記憶體內,準備被放入主記憶體內,但因主記憶體的空間不夠,O.S.必須從中選擇一些來放入主記憶體,這種選擇工作由「長程排班程式」來做。 * 當主記憶體內有多個工作時,就需要有好的「記憶體的管理」,以提高電腦系統的效能 * 雖然能夠提昇資源使用率,但無法允許使用者與系統互動 * 過程: 1. 完成一項I/O工作,OS會移転到另一項工作且持續運行 2. 如果要進行等待,則CPU會移転到其它工作運行 3. 當工作結束等待後,CPU直接重新接手持續運行 ### 分時系統(Time-Sharing System) * 分時系統是多個使用者共同使用一部電腦系統 * 是多工(multitasking)的邏輯上延伸, * CPU頻繁地轉換工作,所以使用者可以在任務執行時,和任務作互動,產生交談式的運算 ![](https://i.imgur.com/RsNHoZG.png) * 例如編輯文件或整理檔案,那麼可以將CPU時間分割成許多小段,稱為時間配額(time slice),輪流分配給各個使用者的工作 * 時間配額一到,無論目前的工作完成與否,OS都必須將CPU 的使用權交給下一個工作 * 而之前尚未完成的工作在等CPU輪完一輪後又會回到其手上,並從中斷的地方繼續執行 * 交談式的工作往往需要做許多小步驟,而下一步驟的結果是不可預期的 * 使用者交付該命令之後,等待結果出現(此段時間稱為反應時間(Response Time),例如使用者輸入一個網站名稱後,到螢幕將此網頁顯示出來的時間稱為反應時間) #### 行程 * 一個程式被戴入記憶体中且運行時通常叫做一個行程(process) * 如果有一些行程無法放入記憶體時,置換(swapping)搬移它們進入記憶體執行或搬出記憶體 ![](https://i.imgur.com/VaR7KXJ.png) * 虛擬記憶體(Virtual memory)允許執行得行程不必全部放在記憶體中 #### 排程 * 工作排程(Job Scheduling): 如果有幾個工作同時準備戴入到記憶体中且記憶体空間不足,則OS必從中選擇  * CPU排程(CPU Scheduling): 如果有幾個工作同時準備好執行時,OS通常必從中擇一運行 --- ## 作業系統的操作 ### 程式的錯誤 * 無窮迴圈: 使許多行程無法正確運行 * 行程間彼此修改或是試圖修改作業系統 ### 雙模式(Dual-mode) * CPU在不同模式下,對記憶體、部分暫存器(例如:控制記憶體行為),有不一樣的存取限制 * CPU具有二種以上的權限: * 使用者模式(user mode): CPU所提供的執行模式之一,只能存取有限的硬體資源 * ex: 普通運算所需的暫存器,部分記憶體內容 * 核心模式(kernel mode): 由硬體(CPU)所提供的執行模式,於kernel mode可以對硬體做任何的變更 * ex: 控制暫存器(control registers),所有記憶體 * 由硬體提供模式位元(Mode bit): 提供區分系統何時在執行使用者程式碼或核心程式碼的能力 * 有些指令指定為特權指令(Privilege instructions),只能在核心模式下執行 * 系統呼叫改變模式為核心,從呼叫返回時重置為使用者模式 * CPU將連續的記憶體分成一個個的管理單位,這個管理單位可以是固定大小,如:4k page。或者是不定大小的segment * 每個管理單位都附加了一些屬性,其中一個重要的屬性指出這個page屬於kernel space或者user space * Kernel space:只有在CPU執行於kernel mode時存取 * User space:只有在CPU執行於user mode或kernel mode時都能存取 ![](https://i.imgur.com/wYXg1ye.png) --- ## source * http://ms2.ctjh.ntpc.edu.tw/~luti/98-1week06.htm * https://archive.eetindia.co.in/www.eettaiwan.com/ART_8800468608_628626_TA_c61e2b68.HTM * https://hackmd.io/@lkmem/SkWYoA-TU * https://www.kinghood.com.tw/solution_4.php * http://epaper.gotop.com.tw/pdf/AEB002300.pdf * http://enews.open2u.com.tw/~noupd/book_up/1746/8718.htm