明天期末考試,就把往年試卷上的敘述題總結一下:
1. 如果一個設置用戶ID程序未執行任何改變進程的實際用戶ID和有效用戶ID的系統調用,那麼運行該程序的進程,它的實際用戶ID和有效用戶ID各是什麼?
答: 實際用戶ID在登錄時取自口令文件中的登錄項,如果沒有執行任何改變實際用戶ID和有效用戶ID的調用,那麼有效用戶ID也就是實際用戶ID。
2. 如果使用命令
man -SX kill
查閱系統調用kill的聯機文檔,則命令中“X”代表的實際值是什麼?
答:對應於Section的部分編號,一共有8個部分:
1 表示用戶命令和守護進程。
2 表示系統調用和內核服務。
3 表示子例程。
4 表示特殊文件、設備驅動程序和硬件。
5 表示配置文件。
6 表示遊戲。
7 表示雜項命令。
8 表示管理命令和守護進程
3. 在讀寫磁盤文件時,每次使用系統調用read和write是否都意味着讀寫磁盤驅動器? 爲什麼?
答:不是,因爲系統有緩衝,讀寫操作均與緩衝有關。
4. 在UNIX系統中,文件空洞是什麼意思?
答:文件空洞指當文件偏移量大於文件的長度時,對該文件的寫將加長文件,這樣便形成空洞。(P52)
5. 在什麼情形下,產生的信號是未決的(signal pending)?
答:在信號產生和遞送之間的時間間隔內,稱信號是未決的。如果在產生信號時,調用進程正阻塞該信號而不能遞送,則產生的信號便是未決的。(P250,259)
6. 早期的不可靠信號機制主要有哪些特點?
答:信號可能丟失,而且在執行臨界區代碼時,進程很難關閉所選擇的信號。(P243)
7. 如何打開文件時使用了O_APPEND標誌,那麼能否在該文件的任意位置上讀寫?
答:不能,使用O_APPEND標誌每次寫時,都追加到文件尾端(P48)。
8. 如果進程P創建進程Q,進程Q創建進程R,那麼當進程Q在進程P和進程R之前結束,那麼進程R的父進程是誰? 進程R是否可能變成殭屍進程?
答:進程R的父進程是init進程,不會變成殭屍進程。(P179)
9. 程序員能否根據進程的實際用戶ID來判斷它們是否有訪問文件的相應權限(請簡要說明理由)?
答:不能,判斷是否有訪問文件的相應權限是根據用戶的有效用戶ID及其附加組ID,而與實際用戶ID無關。(P75)
10. 爲什麼POSIX.1要求system函數阻塞SIGINT和SIGQUIT信號?
答:因爲由system執行的命令可能是交互式命令,以及因爲system的調用者在程序執行時放棄了控制,等待該執行程序的結束,所以system的調用者就不應接受這兩個終端產生的信號。
11. 設置-用戶-ID(suid)和保存的設置-用戶-ID(ssuid)是如何產生的?各自的意義是什麼?
答:suid是爲了讓執行程序的用戶擁有文件所有者的權限而產生的,而ssuid是爲了解決運行該程序的權限與擁有改程序用戶的權限之間的切換。suid是爲了讓運行程序用戶與程序文件所有者一樣的權限運行程序,ssuid是爲了在設置用戶ID之前,保存程序的有效用戶,以備將來把有效用戶ID恢復。