UNIX結構
說UNIX 先說UNIX是什麼,是個操作系統啊,操作系統是啥?是個大軟件,它控制計算機硬件資源,提供程序運行環境。一般叫它內核( kernel )。內核的接口就叫做系統調用,( system call )。公共函數庫在系統調用之上可以使用系統調用。shell是一種特殊的應用程序,爲運行其他程序提供了一個接口。
在廣義上操作系統包括了內核和一些其他軟件,這寫軟件使得計算機能發揮作用,並給予計算家一些獨特的特性。這些軟件包括 系統應用程序,應用軟件,shell,以及公用函數庫。
所以操作系統既是指內核,又是指用的那種操作系統。
文件和目錄
文件系統
UNIX文件系統是目錄和文件組成的一種層次結構。目錄的起點稱爲根(root),其名字是一個字符 / 。目錄( directoty )是一個包含許多目錄項的文件,每個目錄項都包含一個文件名和文件屬性的信息(文件類型-文件還是目錄? 文件大小 文件所有者 文件權限 修改時間)。
文件名
目錄中的各個名字稱爲文件名,不能出現在文件名的字符只有 / 和 NULL ,/ 用來分隔構成路徑名,NULL用來終止一個路徑名。儘量不要用亂七八糟的。創建新目錄的時候會創建兩個文件名 .( 當前目錄 ) 和 .. ( 父目錄 ),在根目錄中, . 和 .. 是一樣的。
路徑名
一個或多個以斜線的文件名序列 構成路徑名,以斜線開頭的路徑名稱爲絕對路徑名,否則爲相對路徑名。
可以通過 ls 察看 文件和文件名
工作目錄
每一個進程都有一個工作目錄,有時候稱其爲當前工作目錄。進程可以用 chdir 函數更改其工作目錄。
起始目錄
登陸時,工作目錄設置爲起始目錄
輸入和輸出
文件描述符
文件描述符通常是一個非負整數,內核用它標示一個一個正在訪問的文件。當內核創建或打開一個新文件時,返回一個文件描述符,都寫操作的時候要用它。
標準輸入,輸出,出錯
當運行一個新程序時,所有的shell爲其打開三個文件描述符:標準輸入,標準輸出,標準出錯。這三個描述符都鏈向終端,也可以重定義到某個文件。
不用緩衝的I / O
函數 open read write lseek close 提供了不用緩衝的I / O 。這寫函數都使用文件描述符。
標準 I / O
標準I / O函數提供了標準I / O ,
程序和進程
程序
程序是存放在磁盤上,是一個目錄上的可執行文件。使用 exec 由內核將程序讀入存儲器。
進程和進程ID
程序的執行實例被稱爲進程,UNIX系統確保每一個進程都有一個唯一的數字標識符,成爲進程ID ( process ID )。
進程控制
有三個主要函數 fork exec waitpid 。
線程和線程ID
通常情況下,一個進程只有一個控制線程( thread ),同一時刻只執行一組機器指令。如果不同部分各使用一個控制線程,就能更充分使用系統的並行性。
一個進程內所有線程都使用同樣的資源,與進程相同,線程也有ID,不過只在它所屬的進程內才能起作用。
出錯處理
主要是使用perror
void perror ( const char *msg );
用戶標識
登陸是用的用戶ID 是( user ID ),管理員在確定一個用戶登陸名時確定其ID。用戶有一個唯一的用戶ID,用戶ID爲0的用戶爲根( root ) 或 超級 ( superuser )。
口令文件登陸項也包括( group ID ),通常在 / etc / group
信號
信號是通知進程已發生某種情況的一種技術。進程遇到信號一般有三種選擇
1)忽略該信號
2)按系統默認方式處理
3)提供一個函數,信號發生後調用該函數。
時間值
UNIX有兩種不同的時間值
1)日曆時間 從 1970年1月1日 開始經歷的秒數。
2)進程時間也是CPU時間。
系統調用和庫函數
系統調用是直接調用內核,庫函數在其之上。