學習內核總是覺得很盲目,感覺無從下手,當入門一段時間后自己感覺仿佛什么都知道又什么都不知道。哎~~
下面提供一些內核邊緣性問題,而且使得你所了解的內核是一個系統的整體,如果能夠很順利的回答出來,證明你已經入門了。
1 在i386中應用程序運行在什么保護級別?
2 在i386體系結構中,每個程序可以使用的頁目錄中最多含有多少個目錄項?每個頁表
最多含有多少個頁表項?頁表項所指向的內存頁叫做什么?
3 如果init進程創建的一個子進程退出了,init進程為執行同樣的功能,可以按需要再創建一個新的子進程,但這要求在一個文件中事先定義才行,這個文件叫什么名字?在什么目錄下?
4 進程的主要特征是什么?
5 0號進程來自那里?在系統啟動正常運行后,0號進程在什么情況下才被調度執行?
6 什么是僵尸進程?內核怎樣處理僵尸進程?
7 請編寫一段C語言代碼,使之創建一個進程扇。如題14圖所示。
1 2 3 4
題7圖
8 你認為在用戶空間編寫的守護進程與內核態的守護進程有什么相同之處和不同之處?后臺進程都屬于守護進程嗎?
9 你認為操作系統執行并發進程的最關鍵需求是什么?
10 下面是用C語言實現的一個“忙等待”操作的代碼段:
int tas(int *lock)
{
int retval;
retval=*lock;
*lock=1;
return retval;
}
題7.4圖
如果將*lock的初值設置為1,那么下列語句的執行結果是什么?
while(tas(&lock))
下列代碼是按照TestAndSet來實現的信號量,試分析它是否會引起死鎖?
void down(semaphore_t *s){ void up(semaphore_t *s){
for(;;){ while(tas(&lock))
while(tas(&lock)) ;
; *(s)++;
if(*s>0){ lock = 0;
*(s)--; }
break;
}
lock = 0;
}
lock = 0;
}
題10圖
程序中的函數tas(&lock)就是第9題給出的tas(&lock)函數。
11 進程怎樣確定一個時間片時值的大???是越長越好呢?還是越短越好?
12 操作系統設置系統調用的目的是什么?如何實現在內核中添加新的系統調用?
13 什么是重定位?存儲器管理為什么需要重定位技術?
14 假定進程以讀方式打開一個文件后,再執行fork,父進程和子進程將都可以讀這個文件。這兩個進程的讀操作和寫操作各有何關系?
15為什么用戶在第一次訪問任何文件之前,都必須先調用open()系統調用來打開指定的文件,然后才能對該文件執行讀、寫以及修改操作,在對文件操作結束必須關閉文件。
16 將設備和普通文件統一命名的好處是什么?
17 如果在進程處理第一個收到的信號之前,又收到了若干個同樣信號將怎樣處理?對這種情況還會有其他更好的處理方法嗎?