還在編寫中.....
1、什麼是操作系統(Operation System)?
›操作系統首先是軟件程序
›計算機系統的核心和基石
›管理計算機硬件,為應用程序提供基礎
2、操作系統與應用程序的關系?
1›操作系統提供運行環境和必要的服務
2›應用程序在操作系統提供的環境中運行並使用操作系統提供的服務
*>單個程序通常不能最大化的發揮處理器,程序並發運行,多個程序分享處理器資源。
›並發帶來的問題:»執行不連續–應用程序本身不知道自己的執行流程什麼時候會被打斷!
»互斥–例子–臨界資源&臨界區–應用程序不知道其他應用程序是否正在訪問臨界資源
3、為什麼選擇Linux系統?
Linux是一個以開發者為中心的操作系統,Windows是以消費者為中心的操作系統。這是最根本的區別,也是Linux相對於Windows的優勢/劣勢所在。
Linux內核:»操作系統的核心部分,提供硬件抽象、文件系統控制、多任務支持等功能。
內核模塊:1»對Linux內核的擴展;2»可動態的加載/卸載;3»可單獨編譯,但是必須作為內核的一部分運行。
內核空間:»存放內核運行時的代碼和數據
–問題:內核模塊運行時的代碼和數據在哪裡?
›用戶空間:»存放應用程序運行時的代碼和數據
1»每個進程有自己獨立的用戶空間;
2»進程之間不能互相訪問對方的用戶空間;
3»進程不能直接訪問內核空間中的數據;
進程中為什麼需要線程?
1›共享地址空間 – 編程更簡單;
2›任務並行化 – 程序效率更;
內核線程與用戶進程/線程:›棧空間不同,
1»內核線程的棧只位於內核空間中
2»用戶進程/線程在用戶空間和內核空間中都有對應的棧
»POSIX條件變量、互斥鎖等屬於POSIX可選實現部分,因此在Linux中通過man命令無法查看這些功能的API說明。可以通過以下方式解決:
apt-get install manpages-posix-dev
POSIX定時器
–問題:進程如何與內核交換信息?–問題:進程間如何交換信息?
用戶態 VS 內核態
1›可訪問的空間不同
»用戶態->只能訪問用戶空間
»內核態->只能訪問內核空間
2›可執行的操作(指令)不同
»用戶態->不能進行硬件相關的指令
»內核態->可以執行所有指令
用戶態切換到內核態來使用內核提供的一些服務(內核函數)的3種方式:
1) 系統調用:這是用戶態進程主動要求切換到內核態的一種方式,用戶態進程通過系統調用申請使用操作系統提供的服務程序完成工作。而系統調用的機制其核心還是使用了操作系統為用戶特別開放的一個中斷來實現,例如Linux的int
80h中斷。
2) 異常:當CPU在執行運行在用戶態下的程序時,發生了某些事先不可知的異常,這時會觸發由當前運行進程切換到處理此異常的內核相關程序中,也就轉到了內核態,比如缺頁異常。
3) 外圍設備的中斷:當外圍設備完成用戶請求的操作後,會向CPU發出相應的中斷信號,這時CPU會暫停執行下一條即將要執行的指令轉而去執行與中斷信號對應的處理程序,如果先前執行的指令是用戶態下的程序,那麼這個轉換的過程自然也就發生了由用戶態到內核態的切換。比如硬盤讀寫操作完成,系統會切換到硬盤讀寫的中斷處理程序中執行後續操作等。
4、內核與用戶空間通訊: