作業系統——基本概念
阿新 • • 發佈:2019-02-15
本文為自己學習《UNIX環境高階程式設計》而來的學習記錄;我的學習方法論是將此書作為工具書來使用,當實際工作中遇到相關的問題針對性地學習知識圓點。
unix基礎知識
基礎概念
從嚴格意義上說,可講作業系統定義為一種軟體,它控制計算機硬體資源,提供程式執行環境。
- 核心
- 作業系統即為核心(kernel),是執行環境的核心;
- 系統呼叫
- 核心的介面稱為系統呼叫(system call)
- 共用函式庫
- 共用函式庫建立在系統呼叫介面之上
- shell
- 一個特殊的程式,為執行其他應用程式提供了一個介面
- 應用程式
- (廣義)作業系統包括了核心和一些其他軟體這些軟體使得計算機能夠發揮作用
- (廣義)作業系統包括了核心和一些其他軟體這些軟體使得計算機能夠發揮作用
unix系統登陸(about shell)
當用戶登陸時,某些系統啟動一個視窗管理程式,但最終總會有一個shell程式執行在一個視窗中。
shell是一個命令列直譯器,它讀取使用者輸入,然後執行命令。shell使用者輸入通常來自與終端(互動式shell),有時來自於檔案(稱為shell指令碼)。
檔案和目錄
unix檔案系統:目錄和檔案的一種層次結構,所有東西的起點是稱為根(root)的目錄,使用字元”/”標示;
檔名:目錄中的各個名字稱為檔名,斜線和空格字元不能出現在檔名中;
路徑名:由斜線分割的一個或多個檔名組成的序列構成的路徑名,以斜線開頭的路徑名即為絕對路徑名,否則稱之為相對路徑名;
工作目錄
起始目錄:登陸時,工作目錄設定為起始目錄,該起始目錄從口令檔案中相應使用者的登陸項中取得。
輸入和輸出
檔案描述符
file descriptor通常是一個小的非負整數,核心以標識一個特定程序正在訪問的檔案。當核心開啟一個現有檔案或建立一個新檔案時,他都返回一個檔案描述符。標準輸入、標準輸出和標準錯誤
每當執行一個新程式時,shell都會為其開啟3個檔案描述符,即標準輸入、標準輸出和標準錯誤。重定向- 不帶緩衝的IO
函式open、read、write、lseek以及close提供了不帶緩衝的IO; - 標準IO
標準IO函式都為那些不帶緩衝的IO函式提供了 一個帶緩衝的介面。
程式和程序
程式,是一個儲存在磁碟上某個目錄中的可執行檔案。核心使用exec函式將程式讀入記憶體,並執行程式。
程序和程序ID,unix系統確保每個程序都有一個唯一的數字識別符號,稱為程序ID。
程序控制,主要用於程序控制的主要函式fork、exec、waitpid。
執行緒和執行緒ID,一個程序內的所有執行緒共享資料時需要採取同步措施以避免不一致性。與程序相同,執行緒也用ID標識,但是執行緒ID只在它所屬的程序內起作用。一個程序中的執行緒ID在另一個程序中沒有意義。
訊號
訊號用於通知程序發生了某種情況。程序處理訊號有三種方式:1、忽略訊號;2、按系統預設方式處理;3、提供一個函式,系統發生時呼叫該函式,這被稱為捕捉該訊號。通過提供自編的函式,我們就能知道什麼時候產生了訊號,並按期望的方式處理它。
終端鍵盤上有兩種產生訊號的方法,分別稱為中斷鍵和退出鍵,它們被用於中斷當前執行的程序。
另一種產生訊號的方法是(程序的所有者或是超級使用者)呼叫kill函式,在一個程序中呼叫此函式就可向另一個程序傳送一個訊號。
時間值
系統呼叫和庫函式
所有作業系統都提供多種服務的入口點,由此程式向核心請求服務。各位種版本的unix實現都提供良好定義、數量有限、直接進入核心的入口點,這些入口點被稱為系統呼叫。
使用者程序用標準C呼叫序列來呼叫這些函式,然後,函式又用系統要求的技術呼叫相應的核心服務。例如,函式可將一個或多個C引數送入通用暫存器,然後執行某個產生軟中斷進入核心的機器指令。
我的理解為,庫函式就是使用者將系統呼叫封裝後的產物;系統呼叫和庫函式的關係還體現在,庫函式在使用者層次管理程序,系統函式則是在核心中實現呼叫。
應用程式既可以呼叫系統呼叫又可以呼叫庫函式。很多庫函式則會呼叫系統呼叫。系統呼叫通常會提供一種最小介面。
本文小結
本文對unix系統的基礎知識做了簡單的概括,主要內容包括:核心、系統呼叫、shell、共用函式庫、應用程式等等。對這些概念的更深層次地理解需要時間和實際經歷來加深。