操做系統
- 可將操做系統視爲應用程序和硬件之間插入的一層軟件,全部應用程序對硬件的操做嘗試都必須通過操做系統。
- 操做系統功能:
1. 防止硬件被失控的應用程序濫用linux
2. 嚮應用程序提供簡單一致的機制,以控制複雜且大不相同的低級硬件設備多線程
- 操做系統經過三個抽象概念(進程、虛擬內存、文件)來實現上述兩個功能
3. 進程是對處理器、內存、I/O設備的抽象表示併發
4. 虛擬內存是對內存、磁盤類I/O設備的抽象表示函數
5. 文件是對I/O設備的抽象表示性能
進程
- 進程是操做系統對正在運行程序的抽象,爲程序提供一個假象,使程序看上去好像是獨佔的使用內存、處理器和I/O設備,即該程序的數據和代碼好像是內存中惟一的對象。
- 在一個系統中能夠同時運行多個進程,但每一個進程都好像在獨佔的使用硬件。這是經過併發運行實現的,併發運行是指一個程序的指令和另外一個程序的指令交錯進行,從而實現不一樣進程的切換。
- 在現代系統中,一個進程實際由多個稱爲線程的執行單元組成,每一個線程都運行在進程中,並共享相同的代碼和全局數據。多線程運行,大大提升了程序運行的效率。
虛擬內存
- 虛擬內存是對進程的抽象,爲進程提供一個假象,使進程好像在獨佔的使用內存。所以,每一個進程看到的內存都是同樣的,稱爲虛擬地址空間。下圖爲linux的虛擬地址空間。
- 圖中地址從下往上增大,下面咱們從最低地址開始,逐步介紹每一個地址
1. 代碼和數據區。直接按照可執行目標文件內容初始化,內存程序代碼和數據。spa
2. 堆(運行時堆)。與數據代碼區大小固定不一樣,當調用malloc和free的c標準庫函數時,堆能夠在運行時動態的擴展和收縮。操作系統
3. 共享庫。存放C標準庫、數學庫等共享庫代碼和數據的區域。線程
4. 棧(用戶棧)。與堆相同,在運行期間也能夠動態擴展和收縮。編譯器用他來實現函數調用,調用函數時棧增加,返回函數時棧收縮。對象
5. 內核虛擬內存。內核是操做系統代碼常駐主存的部分,就儲存在這裏。程序沒法讀取本區域的數據,也沒法調用本區域函數。相反,程序讀取數據、調用函數的操做必須經過調用內核來執行。blog
文件
- 文件是對I/O設備的抽象化,把I/O設備都當作字節序列。這樣,輸入輸出就都是經過調用函數來讀取文件實現的
amdahl定律
- 改善過程的通常性原則:對系統某個部分加速時,對該系統總體性能的影響取決於該部分的重要性和加速程度;要想顯著加速某個系統,必須提高該系統運行時間佔比大的部分的速度
- 新的執行時間: