下面全部單選,請選出最正確的答案
( )1.關於多重處理器的快取,下列何者正確?
(1) 可能會有cache coherence problem的問題,多半會選擇用"廣播"的方式,處理快取的不一致性
(2) 對於一般資料而言,可以減少latency
(3) 如果其中有一個處理壞掉了,對於共享資料而言,會增加memory bandwith
(4) 對於共享資料而言,其減少了interconnection bandwidth
(5) 其他四個敘述全部錯誤
( )2.關於multiple-issue processor下列敘述者正確?
(1) 動態式的超純量機雖無推測機制,但在大部分的嵌入式系統之中多有斬獲
(2) VLIW的危障偵測主要是硬體
(3) 程式碼序列平性化其中的一個優點就是可以讓功能單元保持滿載
(4) 推測機制並不具備錯誤時的回復能力
(5) register renaming可以是靜態的由硬體來完成,或是動態的由編譯器完成
( )3.下面有一段程式碼
#define EFLAGS_AC_BIT 0x00040000
#define CR0_CACHE_DISABLE 0x60000000
unsigned int memtest(unsigned int start, unsigned int end)
{
char flg486 = 0;
unsigned int eflg, cr0, i;
eflg = io_load_eflags();
eflg |= EFLAGS_AC_BIT;
io_store_eflags(eflg);
eflg = io_load_eflags();
if ((eflg & EFLAGS_AC_BIT) != 0) {
flg486 = 1;
}
eflg &= ~EFLAGS_AC_BIT;
io_store_eflags(eflg);
if (flg486 != 0) {
cr0 = load_cr0();
cr0 |= CR0_CACHE_DISABLE; ............(甲)
store_cr0(cr0);
}
i = memtest_sub(start, end);
if (flg486 != 0) {
cr0 = load_cr0();
cr0 &= ~CR0_CACHE_DISABLE; ............(乙)
store_cr0(cr0);
}
return i;
}
關於上述的程式碼,下列何者正確?
(1) 程式碼中的(甲)(乙)若寫上註解就是//允許快取運作
(2) intel的386其cache memory大小為8~16KB
(3) 這隻程式的目的在於檢查CPU的是不是在486以上
(4) cache memory在進行RAM的檢查時仍正常地運行當中
(5) 如果是386,即使設定AC=0,AC的值仍然會自動回到1
( )4.下面實現申請鎖操作arch_spin_lock
static inline void arch_spin_lock(arch_spinlock_t *lock)
{
arch_spinlock_t old_lock;
lock->tickets.next++;....................................................(甲)
old_lock.slock = lock->slock;........................................(乙)
while (old_lock.tickets.next != old_lock.tickets.owner){...(丙)
wfe(); .......................................................................(丁)
old_lock.tickets.owner = lock->tickets.owner;...............(戊)
}
}
根據上面的程式碼,下列敘述何者正確?
(1) (丁)代表的是Walk-forward efficiency,及意味著若目前還未輪到自己,則下一步選擇休眠
(2) 在鎖操作之中,休眠的作法是唯一的選擇
(3) 釋放鎖的操作就是使用sev()即可
(4) (戊)的動作就是前台已經為上一個顧客辦理完成業務,剩下排隊的顧客都要抬頭看一下顯示屏是不是輪到自己了
(5) (甲)(乙)先後兩個動作就是顧客從取號機器得到排隊號後,取號機器更新下個顧客將要拿到的排隊號
( )5.關於fixmap address,下列何者正確
(1) 在kernel啟動初期,我們藉著使用ioremap接口創建虛擬地址和物理地址的映射
(2) fixmap區域是地址空間範圍從FIXADDR_START到FIXADDR_TOP結束, FIXADDR_SIZE是temporary fixed addresses區域的大小
(3) kernel正常運作時,運作temporary fixed addresses的資料必須是特權指令的
(4) FIX_FDT是給dtb創建映射的區域。例如需要得到FDT的虛擬地址,即可以利用__virt_to_fix(x)得到虛擬地址,也就是運作(FIXADDR_TOP - ((x) << PAGE_SHIFT))
(5) Device Tree Blob中包含bootloader傳遞過來的內存信息,而我們得到的是Device Tree Blob的物理地址
( )6.關於實體記憶體的管理,Linux將實體記憶體標示成四個不同的區域
1.ZONE_DMA
2.ZONE_DMA32
3.ZONE_NORMAL
4.ZONE_HIGHMEM
有關這四個標示,下列何者正確?
(1) 某些裝置實體記憶體其開頭只能有4GB,而這些系統開頭的8GB實體記憶體組成ZONE_DMA32
(2) Linux將實體記憶體分割成四個不同的儲存區
(3) 在32位元Intel架構中,核心映對到位置空間的前16MB即為ZONE_HIGHMEM
(4) 在32位元Intel架構中,核心映對到位置空間的前896MB即為ZONE_HIGHMEM
(5) 在Intel x86-32架構之中,特定ISA(工業標準架構)裝置使用的DMA只能存取低於16MB的實體記憶體
( )7.關於Buddy System,請從下列敘述中選出正確答案?
(1) Buddy System相鄰兩塊未使用的空間一定可以coalescing成一塊更大的
(2) coalescing是Buddy System的優點之一
(3) 如果有13KB的需求,則配置單位的約60%被浪費掉
(4) Buddy System其中一個缺點就是外部碎裂問題
(5) 如果有13KB的需求,至少選擇32KB
( )8.下面是一個關於作業系統"透明圖層"的程式碼
struct SHEET {
unsigned char *buf;
int bxsize, bysize, vx0, vy0, col_inv, height, flags;
};
下面是一個管理多重圖層資訊的結構
#define MAX_SHEETS 256
struct SHTCTL {
unsigned char *vram;
int xsize, ysize, top;
struct SHEET *sheets[MAX_SHEETS];
struct SHEET sheets0[MAX_SHEETS];
};
請示著選出正確答案?
(1) 所有的sheet0所占空間是8KB
(2) 最大能夠管理的圖層數是255張
(3) xsize和ysize是每一個圖層在畫面上的位置座標
(4) sheet0[255]所占空間是8KB
(5) 所謂"col_inv"是column和invisible的縮寫
( )9.字元組(Character Class)是正規表示法最基本的結構之一,下列關於字元組的敘述何者正確?
(1) 在ASCII之中,字元"0"碼值為46,而字元"a"碼值為97
(2) 若要統一表示數字字元,小寫字母,大寫字母,則可以用[0-z]表示
(3) [0123456789]等同於[0246897531123]也等同於[9-0]
(4) 若要統一表示數字字元,小寫字母,大寫字母,則可以用[0-Z]表示
(5) 若有一程式碼 charStr=="0" || charStr=="1" ||...|| charStr=="9" 在java中可以用下面程式碼判斷數字字元 Regix.IsMatch(charStr, "[0-9]");
( )10.關於在Linux作業系統上的Message Queue,下列敘述何者正確?
(1) 在程式中可以透過semget(),msgget()或shmget()分別取得共用記憶體,訊息,信號的IPC代號,之後可以透過這個代號來是使用IPC資源
(2) Linux中所有的IPC相關函式,不管直接還是間接,都是透過ipc()這個command完成的,而非是系統呼叫
(3) 當struct msg_msg大小大於一個分頁時,超過的部分將會使用另一個結構msg_msgseg來儲存
(4) socket是屬於IPC(Inter Process Communication)的範圍
(5) 由於一個行程可能會要求多個相同的IPC資源,所以每個IPC資源都有一個identifier
參考答案
1.(4) 2.(3) 3.(3) 4.(4) 5.(5) 6.(5) 7.(2) 8.(1) 9.(2) 10.(3)