unix
日曆時間
-- 自1970 年1 月1 日00:00:00 以來的國際標準時間(utc).
程序時間【cpu 時間】
時鐘時間-- 程序執行時間的總量。
使用者cpu 時間-- 執行使用者指令時間量。
系統cpu 時間-- 執行核心所經歷時間。
命令--time
第三章至第七章:
原子操作--
任何乙個要求多於1 個函式呼叫的操作都不能成為原子操作,因
為在兩個函式呼叫之間,核心有可能會臨時掛起該程序.
術語—— 不帶快取指的是每個r e a d 和w r i t e 都呼叫核心中的乙個系統呼叫。這些不帶快取的i / o 函式不是ansi c 的組成部分,但是是p o s i x . 1 和x p g 3 的組成部分。
unix shell
對應三個檔案描述符 :標準輸入,輸出,出錯;
對乙個程序會預定義這三個程序 :標準輸入,輸出,出錯。
檔案i/o 相關函式
: open, create, close, lseek, read, write 等等, 有
核心返回給程序乙個檔案描述符,然後對其進行i/o 操
作; 而標準i/o 庫 返回的則是流,所有的操作也是針對
流進行的。
read
函式-- 網路上的緩衝機制可能會造成返回值小於所要求讀的位元組數;
選擇所讀取buffersize 的大小為8192 的時候,系統時間是最小
的,以後再增加這個大小對系統時間無影響。
標準i/o 提供三種型別的快取 :全快取,行快取,不帶快取。
術語重新整理(flush )說明標準i / o 快取的寫操作 。值得引起注意的是在uxix 環境中,重新整理有兩種意思。在標準i / o 庫方面,重新整理意味著將快取中的內容寫到磁碟上(該快取可以只是區域性填寫的), 在終端驅動程式方面(例如在第11 章中所述的tcflush 函式),重新整理表示丟棄已存在快取中的資料。
典型的儲存器布局:
段] ;# 正文段到底是指什麼?
程序控制:
程序識別符號 包括程序id, 父程序id, 實際使用者id, 有效使用者id, 實際組
id, 有效組id.
程序id
程序id 為0 是排程程序( 交換程序)-- 是核心的一部分,屬於系統進
程; 程序id 為1 是init 程序,由核心呼叫。/etc/init 或/sbin/init. 屬於使用者程序,要以超級使用者特權執行。程序id 為1 是頁精靈程序,此程序負責支援虛存系統的請頁操作,與交換程序一樣也屬於核心程序。
fork
函式:pid_t fork(void);
呼叫一次返回兩次,子程序返回的是0 , 而父程序返回值則是新子程序的程序id. 這樣父程序就擁有了子程序的id, 而子程序可以通過getppid 函式來獲取。這位父,子程序相互通訊建立了條件。
fork, exec 常使用copy-on-write 技術。[fork-exec 稱為spawn]
10.6 節討論如何使用訊號來使父,子程序同步。
fork 兩次避免殭屍程序:
父程序結束後,其子程序怎麼辦?
父程序結束後,核心會檢查所有活動的程序,以判斷他是否是正在終
止程序的子程序,如果是子程序的父程序會轉為init 程序也稱為
init 領養的程序。
子程序結束後,父程序在做相應檢查時如何得到子程序的終止狀態?
核心為每個終止程序的子程序儲存一定量的資訊,所以當終止程序的
父程序呼叫wait 或waitpid 時,可以得到資訊。
僵死程序概念:
乙個已經終止但是其父程序未對其進行善後處理( 如沒有釋放資源)
的程序。
init
程序領養的程序終止會成為殭屍程序嘛?
不會,因為init 設計成當子程序終止,init 就會呼叫wait 函式取
得其終止狀態,這樣就可以防止在系統中有很多殭屍程序。
wait
和waitpid 函式
當乙個程序終止時,核心就會向其父程序傳送sigchld 訊號。因為子
程序終止是個非同步事件,系統對於該訊號預設採用忽略方式,否則自
己可以定義乙個訊號處理函式。
區別:1: 子程序終止前,wait 使其呼叫者阻塞,而waitpid 有乙個選
擇項,可使呼叫者不阻塞。
2:waitpid 並不等待第乙個終止的子程序,它有若干個選擇項,
可以控制它所等待的程序。
waitpid
的pid 引數解釋與其值有關:
pid == -1 等待任一子程序。於是在這一功能方面waitpid 與wait
等效。pid > 0 等待其程序i d 與p i d 相等的子程序。
pid == 0 等待其組i d 等於呼叫程序的組i d 的任一子程序。
pid < -1 等待其組i d 等於p i d 的絕對值的任一子程序。
waitpid
函式提供了wait 函式沒有提供的三個功能:
(1) waitpid 等待乙個特定的程序( 而w a i t 則返回任一終止子進
程的狀態) 。在討論p o p e n 函式時會再說明這一功能。
(2) waitpid 提供了乙個w a i t 的非阻塞版本。有時希望取得乙個
子程序的狀態,但不想阻塞。
(3) waitpid 支援作業控制(以w u n t r a c e d 選擇項)。
競態條件概念:
當多個程序都企圖對共享資料進行某種處理,而最後的結果又取決於
程序執行的順序時,則我們認為這發生了競態條件
unix環境高階程式設計
檔案描述符file descriptor通常是乙個小的非負整數,核心用以標識乙個特定程序正在訪問的檔案。當核心開啟乙個現有檔案或建立乙個新檔案時,它都返回乙個檔案描述符。在讀寫檔案時,可以私用這個檔案描述符。按管理,每當執行乙個新程式時,所有的shell都為其開啟了3個標準檔案描述符 標準輸入,標準...
UNIX環境高階程式設計
本書是被譽為unix程式設計 聖經 的advanced programming in the unix environment一書的更新版。在本書第1版出版後的十幾年中,unix行業已經有了巨大的變化,特別是影響unix程式設計介面的有關標準變化很大。本書在保持了前一版風格的基礎上,根據最新的標準對...
Unix 環境高階程式設計
本書描述了unix系統的程式設計介面 系統呼叫介面和標準c庫提供的很多函式。與大多數作業系統一樣,unix為程式設計師執行提供了大量的服務 開啟檔案,讀檔案,啟動乙個新程式,分配儲存區以及獲得當前時間等。這些服務被稱為系統呼叫介面 system call inte ce 另外,標準c庫提供了大量廣泛...