第二天 作業系統結構
作業系統的服務有三類:使用者function、檔案系統及系統本身資源分享。
對使用者來說,服務有使用者介面(CLI命令型態、GUI圖形化、Batch批次)、程式執行和I/O系統的行程。對檔案系統而言,有檔案的新增、刪除、查詢、目錄、通訊跟錯誤的偵測。而系統本身的服務包含,資源的分配(主要有CPU cycles、主記憶體、檔案儲存跟I/O裝置)、紀錄系統被使用多少以及保護系統安全。
此圖可以顯示作業系統的服務
上圖中的system call,是使用者或程式透過使用者介面的運用跟作業系統溝通。跟作業系統本身的服務要溝通時那些API就是系統呼叫。下面的圖可以解釋API、system call跟作業系統的關係
系統呼叫時,參數的傳遞是非常重要的。有三種較為常見的傳遞方法,1.簡單的就直接傳到寄存器內,2.在Linux較常用的是把參數存在address of block內在傳進去,3.用push或stack的方式,這樣參數的傳遞可以比較多。
而系統的呼叫有哪些呢?其實系統呼叫可以做的事有非常多,像是process control、file management、device management、information maintenance、communication跟protection。
那system call跟system program有什麼區別呢?簡單來說,system call是programmer寫程式來跟系統溝通,而system program就是讓使用者運用來跟系統溝通,使用者不需用寫程式。
作業系統的架構從舊到新可分為,simple structure(MS-DOS) -> more complex(UNIX) -> layered(an abstraction) -> microkernel(Mach)
作業系統架構歷史中microkernel是非常重要的,讓kernel的部分縮小,讓多數的部分移到user的地方。所有的作業系統因為太複雜,轉變成一個個的模組,當有需要用到時再load下來執行,這樣方便管理且有共同介面可以溝通。現在多數的作業系統都是混合型的,把不同的模組組合在一起。
作業系統的除錯非常重要,因為作業系統是非常大的,所以會需要log files來記錄。如果發生錯誤時,會產生core dump把現在的狀態記錄下來。在除錯中,也會運用trace listing,把發生事件的過程記錄下來。
作業系統並不是專為一個系統,因為每個硬體並不一樣,所以會用SYSGEN告訴我們configuration是適合用哪種再把kernel載下來。講到SYSGEN就會連帶提到system boot,system boot就是開機時,會從一個固定的地方(例如:硬碟)把kernel load 下來。
以上的圖片源自課程operating-system structures ppt