操做系統的目標:(要作什麼和應該作什麼)html
一、方便性:提供簡易的使用計算機的方式,方便用戶。linux
二、有效性:提升計算機系統的資源利用率,提升系統的吞吐量,加速程序的運行。算法
三、可擴充性:操做系統須要適應計算機硬件的發展和計算機應用的發展。(微內核結構)緩存
四、開放性:在不一樣硬件上提供一致的接口。安全
操做系統的基本特性:數據結構
一、併發性:操做系統引入進程的概念,並在此基礎上實現併發。併發
二、共享:即資源複用。資源複用是併發的要求,是併發實現的條件之一。異步
三、虛擬:把一個物理實體變成多個邏輯實體。(時分複用、空分複用)操作系統
四、異步:進程是以不可預知的速度向前推動的,但一個做業運行的結果不受影響。進程什麼時候得到處理機和以什麼樣的速度進行,並不能由進程自身控制。+線程
·
程序的執行邏輯:
DAG derected acyclic graph 前趨圖:有向無循環圖
具備前驅關係的節點必須順序執行,沒有前驅關係的節點能夠併發執行。
進程的引入:
併發執行時,程序具備間斷性、失去封閉性、不可再現性。因此引入進程,用於描述和控制程序。
進程實體的組成:程序段、數據段、進程控制塊(Process Control Block)
進程的定義:進程是進程實體的運行過程,是系統進行資源分配和調度的一個獨立單位。(後來引入線程做爲調度的基本單位)
進程的狀態:建立狀態、就緒狀態(分配到除CPU之外的資源)、運行狀態、阻塞狀態、終止狀態。
掛起原語:Suspend,激活原語:Active,阻塞原語:block,喚醒原語:wakeup。掛起不是阻塞!!
進程控制塊PCB的組成:進程標識符,處理機狀態(進程的切換和繼續執行),進程調度信息(狀態、優先級、調度信息,阻塞事件),進程控制信息(程序和數據地址,同步和通訊機制,資源清單)。
Linux進程組:http://www.cnblogs.com/forstudy/archive/2012/04/03/2427683.html
進程同步手段:
一、硬件同步:關中斷(不會引起調度,多處理器有問題),Test-and-Set指令,Swap指令
二、信號量機制Semphore:整形信號量(忙等),記錄型信號量(讓權等待),AND型信號量(解決死鎖),信號量集(PV操做的值是n)
三、管程:一個管程定義了一個數據結構和能爲併發進程所執行(在該數據結構上)的一組操做,這組操做可以同步進程和改變管程中的數據。
設置進程的目的在於實現系統的併發性,而管程的設置則是爲了解決共享資源的互斥使用的問題。管程支持條件變量,進入管程的進程能夠因條件不知足而掛起並釋放管程,該條件的知足會喚醒相關隊列中的進程。
進程間通訊方式:
一、共享存儲器系統:Shared-Memory System 顧名思義,只能用於單機多進程。
二、管道通訊系統:管道Pipe指用於鏈接一個讀進程和一個寫進程以實現他們之間通訊的一個共享文件,又名pipe文件。
三、消息傳遞系統:系統發送原語和共享中間實體(郵箱模式)
四、套接字:套接字最開始的出現是爲了解決端口和物理線路的多路複用問題。
五、遠程過程調用和遠程方法調用
線程的引入:
爲了減小程序在併發執行時候所付出的時空開銷,使OS具備更好的併發性。當線程切換時,只須要保存和設置少許寄存器內容。
進程的時空開銷體如今:建立進程、銷燬進程、進程切換。
SMP(Symmetrical Multi-Processing)對稱多處理器結構:
https://www.ibm.com/developerworks/cn/linux/l-linux-smp/
http://www.cnblogs.com/yubo/archive/2010/04/23/1718810.html
線程控制塊TCB的組成:
一、線程標識符
二、一組寄存器:包括程序計數器、狀態寄存器、通用寄存器
三、線程運行狀態
四、優先級、
五、線程專有存儲區:用於線程切換時候存放現場保存信息,和與該線程相關的統計信息。
六、信號屏蔽????
七、堆棧指針:保存局部變量和返回地址。(用戶堆棧指針和核心堆棧指針)
線程的實現方式:
一、內核支持線程KST(Kernel Supported Threads)
二、用戶級線程ULT(User Level Threads)
三、組合方式ULT/KST
線程的終止:完成了任務或者在運行時出現異常而被強行終止。線程終止後不當即釋放它所佔有的資源。被終止但還沒有釋放資源的線程扔能夠被須要他的線程調用,以使被終止線程從新恢復運行。??有什麼用???有什麼實際意義???
操做系統與處理機調度
單道批處理系統:Simple Batch Processing System
批處理指的是處理一批多個做業,而不管是否做業之間是否並行。單道批處理系統每次只能執處理一個做業,這批做業能一個接一個地連續處理。
多道批處理系統:Multiprogrammed Batch Processing System
多道批處理系統經過做業調度選擇若干個做業調入內存,使他們共享CPU和系統中的各類資源。
優缺點是:資源利用率高、系統存吞吐量大、平均週轉時間長(缺點)、無交互能力(缺點)
分時系統:Time Sharing System
分時系統是指,在一臺主機上鍊接了多個配有顯示器和鍵盤的中斷並由此組成的系統,該系統容許多個用戶同時經過本身的終端,以交互方式使用計算機,共享主機中的資源。
實時系統:Real TIme System
實時系統是指系統能及時響應外部事件的請求,在規定的時間內完成對該事件的處理,並控制全部的實時任務協調一致地運行。
微機操做系統的發展:
一、單用戶單任務操做系統:MS-DOS,PC/M
二、單用戶多任務操做系統:Windows
三、多用戶多任務操做系統:Solaris OS、Linux OS
處理機調度:
調度的實質是一種資源分配,處理機調度是對處理機資源進行分配。
處理機調度的層次:
一、高級調度High Level Scheduling:長程調度、做業調度。多道批處理系統用來進行做業調度。調度週期較長。
二、低級調度Low Level Scheduling:進程調度、短程調度。調度進程或內核級線程。多道批處理、實時、分時三類系統都有用到。調度頻率最高,調度算法不能太複雜。
三、中級調度Intermediate Scheduling:內存調度。目的是提升內存利用率和系統吞吐量。
操做系統的存儲管理
計算機採用多級緩存的存儲結構。由於速度快的存儲介質又貴又小。
硬件存儲層次:寄存器、高速緩存、內存、外存。
邏輯存儲層次:寄存器、高速緩存、主存、磁盤緩存、對換區、文件區。
可執行存儲器:
沒有找到準確的定義。可執行存儲器包括寄存器和主存儲器(主存)一個程序要想被操做系統所執行,必須先裝入可執行存儲器當中。主存和內存不是等價的,操做系統把內存分爲主存和磁盤緩存,磁盤緩存充當邏輯上的磁盤,用來緩和磁盤訪問速度慢的問題。這個概念對後面的理解很重要。
寄存器大小几k左右,250個32位寄存器大小約爲1k。(1000, != 1024)寄存器和cpu速度一致。
高速緩存幾十k到幾M。
磁盤緩存,內存存儲介質,邏輯磁盤。
程序的連接和裝入:
地址:數據地址和指令地址。
絕對地址:內存的物理地址。
一、絕對裝入方式(Absolute Loading Mode) 編譯或者彙編的時候把符號地址轉換爲絕對地址。
二、可重定位裝入方式(Relocation Loading Mode)在進程裝入的時候肯定絕對地址。轉換的過程叫重定位。
三、動態運行時的裝入方式(Dynamic Run-time Loading)
目的:容許程序運行時在內存中移動位置。
裝入內存後的全部地址仍然是邏輯地址。利用重定位寄存器在程序真正要執行的時候肯定絕對地址。
裝入模塊:一個可執行的程序(不完整的目標模塊須要進行連接)。
一、靜態連接(Static Linking)程序裝入前修改相對地址和調用符號。
二、裝入時動態連接(Load-time Dynamic Linking)目的:模塊共享,便於修改和更新。程序裝入的時候連接外部模塊。
三、運行時動態連接(Run-time Dynamic Linking)程序運行時把外部模塊調入內存並連接。
你有沒有想到一個問題:操做系統是怎麼裝入的?
若是操做系統須要支持靜態連接和絕對裝入方式之外的內存,那麼它須要提供一個複雜的存儲管理系統。
存儲系統須要管理進程的內存分配、爲了解決內存不足的問題和提升內存資源利用率須要提供對換功能,基於具體的實現又須要提供地址變換功能。
內存分配:
一、單一連續分配:早期單用戶、單任務操做系統。
二、固定分區分配:早期多道程序系統。
三、動態分區分配:有兩種實現,數據結構分別是空閒分區表、空閒分區鏈。
四、離散內存分配方式:分頁存儲管理方式、分段存儲管理方式、段頁試存儲管理方式。所謂離散是指一個進程所分配到的內存空間是不連續的。
連續內存分配算法的要點:一、找到一塊內存分配給進程。二、緊湊內存碎片(須要使用重定位寄存器進行動態重定位)。
分頁存儲管理:
內存頁:具備固定大小的一塊內存。
頁地址:舉例,一個32位地址,0-11位表示頁內地址,12-32位表示頁號,那麼每頁大小是2^12 = 4K ,地址空間最多容許的內存頁數量是2^20 = 1M。注意:物理地址2017使用頁地址表示,實際的數值依然是2017,不管頁大小是多少。頁地址從概念上區分了頁號和頁內地址,它使得:在頁式結構下,地址轉換隻須要轉換頁號,而不須要考慮頁內地址。
頁表(頁面映像表):用於用戶地址空間和內存地址空間的地址轉換。頁表記錄了用戶地址空間的頁號和內存地址空間的頁號之間的對應關係。一個進程可能使用多個頁,這些頁在內存中是離散的(物理地址),可是用戶空間的頁號是從0開始計數(邏輯地址)。頁表和進程是對應的,一個進程對應一個頁表。
頁表寄存器PTR(Page Table Register)存放頁表在內存的起始地址和頁表的長度。這個頁表是當前執行的進程的頁表。
使用基本的地址轉換功能來訪問內存的過程是:經過訪問內存中的頁表獲取頁號從而獲得物理地址,以後訪問物理地址對應的內存。這一過程使得訪問內存的時間開銷擴大一倍。解決方法是使用快表。快表是一個具備並行查尋能力的特殊高速緩衝寄存器。
使用快表時,訪問內存的有效時間是Effective Access Time:EAT = 2*t + x - t*a。t是訪問一次內存的時間,x是訪問一次快表的時間,a是快表命中率。
兩級頁表:對頁表進行分頁,形象的說法是把物理地址分爲3部分:(外層頁號、外層頁內地址、頁內地址)。其中外層頁號+外層頁內地址就是物理頁號。
多級頁表:通常多級頁表只作三層。例如64位操做系統會把直接尋址空間減小爲45位,這種作法減少了地址空間。
反置頁表:內容和頁表相反。邏輯頁表的相對地址是物理頁號,存儲內容是進程標識符和頁號。它須要每一個進程提供一個外部頁表進行輔助。外部頁表記錄了進程的未調入內存的頁。
分段存儲管理方式:段的長度是不固定的。
分頁分段的區別:
一、分頁是知足系統管理須要,分段是知足用戶須要。
二、頁的大小固定,段的大小由用戶程序肯定,大小不固定。
三、分頁的用戶地址空間是一維的,分段的用戶地址是二維的,用戶須要給出段名和段內地址。(分頁是系統行爲,用戶程序地址是單一線性的,用戶不須要關心分頁狀況)
分段系統適合信息共享。一個段是一個完整的信息,而分頁的時候多是多個頁。
可重入代碼(Reentrant Code)又稱爲「純代碼Pure Code」,是一種容許多個進程同時訪問的代碼。
段頁式存儲管理系統:先分段,段內分頁。
操做系統把磁盤空間分爲對換區和文件區。
對換:把內存中暫時不能運行的進程或者暫時不用的程序和數據換出到外存上。對換技術的引入緣由以前說過:解決內存不足的問題和提升內存利用率(其實這兩點算是一回事)。
文件區管理目標:提升文件存儲空間的利用率。
對換區的管理目標:提升進程換進換出的速度。
對換區是磁盤空間,可是屬於邏輯內存,它的管理和內存管理類似,參考上面。
文件的基本操做:建立文件、刪除文件、讀文件、寫文件、設置讀寫位置。
文件的打開和關閉:在內存中創建(刪除)和磁盤文件的聯繫。
POSIX( Protable Operating System IX)給予UNIX的可移植操做系統接口。
TODO:
文件系統、磁盤管理系統、操做系統接口、保護和安全。