下面全部單選,請選出最正確的答案
( )1.有關在Linux之中的Red-Black Tree,下列何者錯誤?
(1) 對於sparse array而言,Red-Black Tree是好的選擇
(2) 在Linux之中,deadline和CFQ I/O排程器用Red-Black Tree追蹤請求
(3) 若我們只需要安插與搜尋節點,Hash Table是好的選擇
(4) Red-Black Tree比AVL tree是好在最差情況下安插和搜尋上的時間表現,但是搜尋會差一些
(5) Red-Black Tree的樹根必為黑色
( )2.在Linux之中為你的紅黑樹寫一個搜尋動作是很直覺的:
從root開始,比較每一個值,然後依狀況從左分支或右分支往下走,範例:
struct mytype *my_search(struct rb_root *root, char *string)
{
struct rb_node *node = root->rb_node;
while (node) {
struct mytype *data = container_of(node, struct mytype, node);
int result;
result = strcmp(string, data->keystring);
if (result < 0)
node = node->rb_left;
else if (result > 0)
node = node->rb_right;
else
return data;
}
return NULL;
}
有關上述的程式碼,下列何者正確?
(1) 若 string= "Hello, my friend!"並且 data->keystring = "Hello, world!"則會想回傳data
(2) offsetof定義在 <linux/kernel.h> 中,用來計算某一個struct結構的成員相對於該結構起始位址的偏移量( offset )
(3) 紅黑樹因為與AVL樹一樣都是二元搜尋樹,故搜尋時間皆為O(log(n)),但紅黑樹的時間稍微優於AVL樹
(4) container_of定義在 <linux/kernel.h> 中,它需要引用offsetof巨集,它的作用是用來取得struct結構的起始點
(5)若 string= "Hello, world!"並且 data->keystring = "Hello, my friend!"則 node會想左搜尋
( )3.下面是一段2014年8月的新聞片段:
統神與蛇王的戰爭從16日爆發後,統神隨即到地檢署控告蛇王使用惡意攻擊手段,使得實況台無法順利開播,不料23日對方居然主動進入自己的實況台中,宣稱不只敢發言,也不怕被人錄音當作證據,還反問「如果檢察官抓不到人,你是不是又要嘴檢察官了。」
正當蛇王連番挑釁,雙方你來我往將近1小時後,統媽突然拿走麥克風說,「那個蛇王,我是統媽,我聽你這樣講,真的好恐怖,心裡很怕,很生氣」,她還說,「你這個工作(使用DDos)真的不正派,一輩子走法律邊緣,就算賺了這個錢,人生也沒意義啦!」
統媽緊接著柔聲勸導,「我們是寬厚之人,你去找警察,我覺得會很輕的啦!但你犯的是公訴罪,國家會去追究,但你聽阿姨講的啦!」沒想到一向講話態度囂張蛇王,不僅沒有反駁統媽的話,甚至在統神插話還說,「先讓你媽說完」,並表示長輩說話有她的道理,就算沒理也不會當面忤逆她。也因此有網友笑稱,蛇王看到長輩說話就縮進去了。
原文網址: 統神蛇王互鬥 統媽霸氣救援:你聽阿姨的話啦! | ETtoday生活 | ETtoday新聞雲 https://www.ettoday.net/news/20140826/393810.htm#ixzz5LNu4qx8W
就上面文章判斷,下面的選項哪個最符合蛇王的網路攻擊手段?
(1) 違反未授權資源的使用
(2) 違反未授權的資料讀取
(3) 違反未授權的資料破壞
(4) 違反防止合法使該系統
(5) 違反未授權的資料修正
( )4.下面有一段關於例外事件處理的java程式碼:
class A{
public void mA(){
B b= new B();
b.mB();
throw new Exception();............(甲)
}
}
class B{
public void mB(){
//方法內容;
}
}
class Execute{
public static void main(String[] args){
try{
A a= new A();
a.mA();
}
catch(Exception e){
System.out.println("Exeception");
}
}
}
有關這個程式碼,下列何者正確?
(1) 不管是exception還是error,都繼承自java.lang,與Throwable 類別無關
(2) (甲)產生Exception物件,故屬於RuntimeException
(3) java.lang.Error自身及其子類仍需要使用try-catch
(4) 這隻程式碼在編譯時發生失敗
(5) (甲)是因為其執行了非法特權指令
( )5.下面是MIPS和VMIPS針對DAXPY迴圈的程式碼,假設一個向量暫存器的元素數目或長度為64
(a)這是MIPS程式碼:
L.D F0,a
DADDIU R4,Rx,#512
Loop: L.D F2,0(Rx)
MUL.D F2,F2,F0
L.D F4,0(Ry)
ADD.D F4,F4,F2
S.D F4,9(Ry)
DADDIU Rx,Rx,#8
DADDIU Ry,Ry,#8
DSUBU R20,R4,Rx.......(甲)
BNEZ R20,Loop
(b)這是VMIPS程式碼:
L.D F0,a
LV V1,Rx
MULVS.D V2,V1,F0
LV V3,Ry
ADDVV.D V4,V2,V3......(乙)
SV V4,Ry
下列何者正確?
(1) VMIPS的程式管線暫停頻率相較於MIPS的程式高出64倍
(2) VMIPS的程式相較於MIPS的程式在執行階段少執行5道指令
(3) 不管是哪個程式,計算出來的結果都是單精度
(4) (甲)(乙)指令所做的工作相同,所計算出來的結果也相同
(5) 對於VMIPS中長向量而言,向量長度若為n並且有m個convey則其時間周期為mxn
( )6.假設每一個向量功能單元都是單一的,並且向量暫存器的元素長度為64,下面是DAXPY迴圈的VMIPS程式碼
LV V1,Rx
MULVS.D V2,V1,F0.....(甲)
LV V3,Ry
ADDVV.D V4,V2,V3
SV V4,Ry
有關這個程式碼,下列何者正確?
(1) 該程式序列大約花費192個時脈週期,此計算相較於實際狀況是低估
(2) 若忽略任何向量指令的發派虛耗,每一道浮點數運算(FLOP)的週期數是0.5
(3) 對於這個程式碼,我們可以分成兩個convey,一個是LV開頭,一個是SV開頭
(4) 向量指令集的優點在於讓硬體只使用單一的短指令傳送大量工作給自己
(5) 在(甲)中,F0的資料位置與V1相同
( )7.下面是關於I/O中斷的程式碼
(a)將按鍵的編碼接收下來
void inthandler21(int *esp)
{
unsigned char data;
io_out8(PIC0_OCW2, 0x61);................(甲)
data = io_in8(PORT_KEYDAT);
if (keybuf.len < 32) {
keybuf.data[keybuf.next_w] = data;...(乙)
keybuf.len++;
keybuf.next_w++;
if (keybuf.next_w == 32) {
keybuf.next_w = 0;
}
}
return;
}
(b)將按鍵的編碼讀出來
for (;;) {
io_cli();...............................................(丙)
if (keybuf.len == 0) {
io_stihlt();........................................(丁)
}
else {
i = keybuf.data[keybuf.next_r];
keybuf.len--;
keybuf.next_r++;
if (keybuf.next_r == 32) {
keybuf.next_r = 0;
}
io_sti();
sprintf(s, "%02X", i);
boxfill8(binfo->vram, binfo->scrnx, COL8_008484, 0, 16, 15, 31);
putfonts8_asc(binfo->vram, binfo->scrnx, 0, 16, COL8_FFFFFF, s);
}
}
下列何者正確?
(1) 在(乙)中,可將keybuf.next_w改寫成(keybuf.next_r+keybuf.len)%32
(2) 可將(丙)改成io_sti();io_hlt();而不會影響執行結果
(3) 作業系統的目的之一就是為使用者明顯標示特定硬體裝置的性質
(4) 在(甲)中,任何情況下0x61改成0x6f也可以執行
(5) 若執行(丁),則等同執行io_sti();io_hlt();
( )8.有關不可分割交易(Atomic Transactions),下列何者正確?
(1) 對於兩段式交付協定而言,其錯誤的處理分成"協調者發生錯誤"與"網路發生錯誤"
(2) 若協調者發送的對象發生錯誤,其紀錄表最後狀態是<ABORT,T>,則交易必須重作
(3) 就是因為協調者與各個站台有維護紀錄表,所以可以讓部分執行正確的程式存在
(4) 若協調者發生錯誤,則不管是所以站台的<READY,T>還未全送達,或是存在一個<ABORT,T>在某站台,都導致交易終止
(5) 對於兩段式交付協定而言,若所有站台都回應<READY,T>,則協調者回應<COMPLETE,T>,否則回應<ABORT,T>
( )9.UNIX是Linux作業系統的基礎架構,而UNIX作業系統中所使用的檔案系統也就是Linux作業系統中所支援的各種檔案系統的前身,有關UNIX檔案系統,下列何者正確?
(1) reference count主要是因應每個開啟檔案表可容納檔案數有限所做的管理
(2) Ext2中inode的"模式"有檔案,大小,時間戳記,目錄等類型
(3) UNIX檔案系統的磁碟區塊分配分成Superblock,inode列表與資料區塊
(4) 在inode之中間接區塊指向索引,而非直接指向資料
(5) 若檔案系統被卸載,則其對應的superblock會從硬碟之中卸載
( )10.關於Linux虛擬檔案系統,下列何者正確?
(1) devfs檔案系統有一個優點,就是一個設備檔可以映射多個設備,故對大型系統的延展性有幫助
(2) Device Tree應要描述系統中的所有硬件信息,例如那些可以動態探測到的設備USB device等等
(3) 在Linux中,Kobject相較於其他內嵌在一個大型的數據結構中,其幾乎是單獨存在管理設備
(4) devfs檔案系統有一個缺點,就是因為不能預先宣告所有可用的周邊設備並儲存在檔案系統之中,故對大型系統的延展性沒有幫助
(5) Linux藉著dev虛擬檔案目錄抽象設備,但不易得知它是什麼設備,具有有什麼特性,故需要硬體抽象層(HAL)來為應用軟體提供設備使用的目錄
參考答案
1.(1) 2.(4) 3.(4) 4.(4) 5.(5) 6.(1) 7.(1) 8.(4) 9.(4) 10.(5)