步步高筆試

步步高 


若有說明:int n=2,*p=&n,*q=p;則以下非法的賦值語句是:
A p=q; B *p=*q; C n=*q; D p=n;
答案:  D

在下列說法中,哪個是錯誤的( )
A若進程A和進程B在臨界段上互斥,那麼當進程A處於該臨界段時,它不能被進程B中斷
B虛擬存儲管理中採用對換(swapping)策略後,用戶進程可使用的存儲空間似乎增加了
C虛擬存儲管理中的抖動(thrashing)現象是指頁面置換(page replacement)時用於換頁的時間遠多於執行程序的時間
D進程可以由程序、數據和進程控制塊(PCB)描述

答案 AC 
選項A:
我們將對共享內存進行訪問的程序片段稱爲臨界區域(critical region)或臨界區,實現臨界區互斥的方案如Peterson解法:本質思想當一個進程想進入臨界區時,先檢查是否允許進入,若不允許,就原地等待直到允許爲止。
考慮一臺計算機有兩個優先級不同的進程,一個H的優先級較高,L較低,調度規則規定只要H處於就緒態就會運行,如果L處於臨界區時H變爲就緒態,比如剛剛結束了一個I/O操作,由於H就緒時L不會被調度,如果H採用了忙等待,由於L不被調度它將一直處於臨界區,而H將一直等待下去,這也就是優先級反轉的問題。
如果我們採用另一種策略,在一個進程不能進入臨界區的時候將其掛起而不是進行忙等待,直到另一個進程將其wakeup,那麼處於臨界區的就不會被中斷。
個人認爲選項A沒有介紹互斥的策略,所以是錯的。
選項C:
任意時刻,由於程序局部性,往往在一個小的活動頁面集合上工作,叫做工作集,如果工作集的大小超過了物理存儲器的大小,那麼程序將出現thrashing,頁面將不斷換進換出。
所以C的解釋是不準確的。

系統引導的過程一般包括如下幾步:a.MBR中的引導裝載程序啓動;b.用戶登錄;c.Linux內核運行;d.BIOS自檢。正確的順序是()。

A.d,b,c,a
B.d,a,c,b
C.b,d,c,a
D.a,d,c,b
答案 B

#pragma pack(2)
typedef union {long i; short k[5]; char c;} DATE;
struct data { short cat; DATE cow; double dog;} too;

DATE max;
則語句 printf("%d",sizeof(struct date)+sizeof(max));的執行結果是:
答:DATE 是一個 union, 變量公用空間. 裏面最大的變量類型是 int[5], 佔用 20 個字節. 所以它的大小是 20。
data 是一個 struct, 每個變量分開佔用空間. 依次爲 int4 + DATE20 + double8 = 32.所以結果是 20 + 32 = 52.

對於一個頭指針爲head的帶頭結點的單鏈表,判定該表爲空表的條件是()
head==NULL
head->next==NULL
head->next==head
head!=NULL

答案 B

即使是空鏈表也會有頭結點,頭結點是不保存有效參數的,只是爲了便於搜索到相應的鏈表,
head->next保存的是首節點(第一個有效節點)的,所以head->next==NULL的話,說明此鏈表沒有首節點,即此鏈表只有一個頭結點,是空鏈表。


在提供虛擬存儲的系統中,用戶的邏輯地址空間主要受()的限制
A.內存 B.外存 C.虛存 D.地址空間 
答案:D

Linux內核空間地址空間佔用範圍(RM-32位爲例)()
 Linux的虛擬地址空間範圍爲0~4G,Linux內核將這4G字節的空間分爲兩部分,
 將最高的1G字節(從虛擬地址0xC0000000到0xFFFFFFFF)供內核使用,稱爲“內核空間”。
 而將較低的3G字節(從虛擬地址0x00000000到0xBFFFFFFF)供各個進程使用,稱爲“用戶空間。


linux  內核鎖

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章