版權聲明:本文參考了《Unix環境進階程式設計》、《Linux man pages》。 未經作者允許,嚴禁用于商業出版,否則追究法律責任。網絡轉載請注明出處,這是對原創者的起碼的尊重!!!
1 引言
2 Unix體系結構
作業系統就是一種控制計算機硬體資源,提供程式運作環境的軟體。
系統調用:核心的接口。
Unix的體系結構由内到外為:核心、系統調用、shell和函數庫、使用者程式。
3 登入
登入時,作業系統依據使用者名檢視密碼檔案/etc/password。
密碼檔案由登入項組成。每個登入項由7個以冒号分隔的字段組成。格式如:
使用者名:加密密碼:數值使用者ID:數值組ID:注釋:起始目錄:shell程式
。
shell程式是指令行解釋器,讀取使用者輸入,執行指令。其輸入可以是鍵盤輸入或者shell腳本。 一般位于/bin/*sh。Linux 常用的是bourne-again shell。
使用者登入後系統依據登入項中的最後一字段來啟用哪種shell程式。
4 檔案和目錄
檔案系統:Unix采用目錄和檔案的層次結構。起點為根目錄。名字為“/”。
目錄:目錄是包含目錄項的檔案。每個目錄項包含檔案名和檔案屬性。每個目錄中都自動建立兩個檔案“.”和“..”,分别指向目前目錄和其父目錄。
檔案:資料的集合,包含檔案名和資料。檔案名不能包含字元/和字元NUL。
路徑名:由/分隔或開頭的多個檔案名組成的序列。以根目錄開始的稱為絕對路徑,否則,稱為相對路徑。
工作目錄:目前正在使用的目錄稱為(目前)工作目錄,相對路徑由目前工作目錄開始解釋。
起始目錄:登入時的目前目錄。由密碼檔案的登入項中設定。
5 輸入和輸出
檔案描述符:
。程序啟動時,shell自動為其打開标準輸入(STDIN_FILENO)、标準輸出(STDOUT_FILENO)和标準出錯(STDERR_FILENO)3個檔案描述符。
不帶緩沖的IO:使用檔案描述符進行IO操作。
标準IO:标準IO為不帶緩沖的IO函數提供了帶緩沖的接口。
6 程式與程序
程式:在外存中的可執行檔案。核心使用exec函數将程式載入記憶體并執行。
程序:程式執行的實體,是配置設定資源的基本機關。程序ID:系統用于唯一辨別程序的非負整數。
程序控制:fork、exec族、popen、system、exit、wait和waitpid。
線程:線程是輕量級程序,同一程序内的線程共享位址空間、檔案描述符等資源。但具有獨立的函數棧。線程ID:用于程序内唯一辨別某線程的非負整數。
7 出錯處理
頭檔案
#include<string.h>
char* strerror(int errnum)
strerror函數傳回errnum錯誤對應的出錯消息。
#include<stdio.h>
void perror(const char *msg)
perror函數輸出msg所指的字元串,然後輸出冒号、空格、errno對應的出錯消息和換行符。
8 使用者辨別
使用者ID:OS用于唯一辨別使用者的非負整數,存放在密碼檔案登入項。使用者不能更改自己使用者ID。UID=0的使用者為超級使用者,登入名為root。
組ID:OS用于唯一辨別使用者組的非負整數。友善組内成員資源共享。組檔案/etc/group将組名映射為組ID。
附屬組ID:一個使用者可以屬于多個組。其它組的組ID的集合叫做附屬組ID。
9 信号
信号:用于通知程序發生了某種狀況。
程序收到信号後的反應:忽略、預設處理、自定義處理。
終端産生信号的辦法:CTRL+C發出中斷信号,CTRL+\發出退出信号并産生core檔案。
10 時間值
Unix使用月曆時間和程序時間。
月曆時間:自1970年1月1日0時0分0秒以來經過的秒數累計值。用系統基本資料類型time_t存放。
程序時間:以CPU的時鐘滴答計算。用系統基本資料類型clock_t存放。
Unix為一個程序維護三個時間:時鐘時間、使用者CPU時間、系統CPU時間。
同時有三個計時器:真實計時器(記錄時鐘時間)、虛拟計時器(記錄使用者CPU時間)、實用計時器(記錄使用者CPU時間+系統CPU時間)。
11 系統調用與庫函數
系統調用是核心的入口。和庫函數有本質差別。但使用者并不關心。
差別:
(1)本質不同。
(2)職責不同。
(3)使用者可以調用庫函數和系統調用,很多庫函數則會調用系統調用。
(4)系統調用功能單一,庫函數功能複雜。
版權聲明:本文參考了《Unix環境進階程式設計》、《Linux man pages》。 未經作者允許,嚴禁用于商業出版,否則追究法律責任。網絡轉載請注明出處,這是對原創者的起碼的尊重!!!