計算機考研408題集


計算機考研408題集

1 計算機網絡

通信基礎

  • (2020)QPI總線是一種點對點全工同步串行總線,總線上的設備可同時接收和發送信息,每個方向可同時傳輸20位信息(16位數據位+4位校驗位),每個QPI數據包有80位信息,分2個時鍾周期傳送,每個時鍾周期傳送2次。因此QPI總線的帶寬位:每秒傳送次數 \(\times\) 2B \(\times\) 2 。若QPI時鍾頻率為 2.4GHz,則總線帶寬是多少?

    解:直接使用提供的公式,有總線帶寬為 2.4G \(\times\) 2 \(\times\) 2B \(\times\) 2 = 19.2GB/s 。
    分析:這里直接提供了公式,降低了難度。有幾點注意:
    帶寬與全雙工、半雙工、單工沒有關系。帶寬表示從一個點到另一個點所能通過的最高數據率。
    全工、半雙工、單工與吞吐量有關系。
    直接計算:時鍾為 2.4Ghz,每個時鍾周期傳送2次,每次傳送40位,對應4B數據位,故帶寬為 2.4G \(\times\) 2 \(\times\) 4B = 19.2GB/s 。
    帶寬一般為有效帶寬,也即是扣除輔助信息之后的有效數據帶寬,其描述了信道傳送數據的最高速度。速率是發送有效數據的實際速度。
    擴展:奈奎斯特定理:理想低通信道下的極限數據傳輸速率=\(2Wlog_2V\) ,其中 \(W\) 為理想低通信道的帶寬,例如二進制3位表示一個碼元,則為 \(2W\times 3=6W\)
    香農定理:信道的極限數據傳輸率=\(Wlog_2(1+S/N)\) ,信噪比=\(10log_{10}(S/N)\)

  • (2020)假設主機甲采用停止-等待協議向主機乙發送數據幀,數據幀長與確認幀長均為1000B,數據傳輸速率為10kbps,單向傳播時延是200ms,則甲的最大信道利用率為?

    分析:參見計算機網絡的性能指標。
    畫出傳輸圖,可以得到發送一個幀需要 \(1000\times 8/10\text{k}=0.8\text{s}\) ,傳輸需要 \(0.2\text{s}\) 。收確認幀的過程完全一樣,因此有效發送數據耗時 \(0.8\text{s}\),但信道占用時間為 \(2\text{s}\) ,故信道利用率為 \(40\%\)

協議、接口、服務

  • (2020)下圖描述的協議要素是
    圖(發送方發送,接收方接收並回應,發送方接收回應並回應)
    a 語法 b 語義 c 時序

    分析:協議由語法、語義、同步三部分組成。語法規定了傳輸數據的格式;語義規定了所要完成的功能,即需要發出何種控制信息、完成何種動作及作出何種應答;同步規定了執行各種操作的條件、時序關系等,即事件實現順序的詳細說明。

虛電路

  • (2020)下列關於虛電路網絡的敘述中,錯誤的是
    1. 可以確保數據分組傳輸順序
    2. 需要為每條虛電路預分配帶寬
    3. 建立虛電路時需要進行路由選擇
    4. 依據虛電路號進行數據分組轉發

    分析:回顧,因特網的核心部分交換方式有三種,電路交換,報文交換,分組交換。在分組交換的基礎上,網絡層可以實現為面向連接的虛電路方式和無連接的數據報方式。虛電路方式有建立連接的過程,建立連接后取得一個虛電路號,虛電路號關聯了一條虛擬通路。由於路徑是確定的,因此分組的順序也是確定的;每個結點都需要維護一個虛電路表,以判斷對分組的轉發路徑,因此需要進行路由選擇;虛電路與數據報服務的區別包括,虛電路建立連接后,所有的分組通過分組攜帶的電路號進行轉發,數據報服務的每個分組則需要完整的目的地址。由於虛電路仍然是基於交換的,因此不需要預分配帶寬。
    注意:數據報服務和虛電路都是分組交換的方式,其網絡層次歸於網絡層。

CSMA/CD 協議

  • (2019)假設一個采用 CSMA/CD 協議的 100Mbps 局域網,最小幀長是 128B ,則在一個沖突域內兩個站點之間的單向傳播時延最多是?

    分析:爭用期=最小幀的發送時間,即 \(2\tau=128\text{B}/100\text{Mbps}=1.28\times 8\times 10^{-6}\text{s}\) ,也即有 \(\tau=1.28\times 4\mu\text{s}=5.12\mu\text{s}\)

IEEE 802.11 無線網絡

  • (2020)某IEEE 802.11 無線局域網中,主機H和AP之間發送或接收CSMA/CA幀的過程如下圖所示,在H或AP發送幀前等待的幀間間隔時間(IFS)中,最長的是?

    IFS1
    RTS(H->AP)
    IFS2
    CTS(AP->H)
    IFS3
    DATA(H->AP)
    IFS4
    ACK(AP->H)
    

    分析:RTS:請求發送,CTS:允許發送,兩者屬於802.11中對於信道預約的協議。CSMA/CA稱為載波監聽多點接入/碰撞避免,相比CSMA/CD,更強調降低碰撞發生的概率。802.11 協議中,即使發生了碰撞,也要把整個幀發送完畢,因此一旦發生碰撞,這個幀對應的信道資源會被浪費。協議還使用了停止等待協議,每一幀都要進行確認。802.11 規定,所有的站在完成發送之后,必須要等待一段很短的時間才能發送下一幀,這段時間稱為幀間間隔IFS。幀間間隔取決於要發送的幀的類型。其中最長的幀間間隔為DIFS,其次為PIFS,最短為SIFS。在使用預約機制時,RTS前使用DIFS,之后使用SIFS,直到結束后經歷一個DIFS進入爭用期。

  • (2018,35)IEEE 802.11 無線局域網的 MAC 協議 CSMA/CA 進行信道預約的方法是?
    a 發送確認幀
    b 采用二進制指數退避
    c 使用多個 MAC 地址
    d 交換 RTS 與 CTS 幀

    分析:答案為 d 。確認幀屬於確認的機制,用於可靠傳輸。二進制指數退避屬於介質訪問控制協議的一種沖突處理方法,對於 CSMA/CD 協議,當發生碰撞時,從二進制的離散整數集合(如 0,1,3,7,...,最大值與重試次數有關)取一個數乘以爭用期(端到端延時)作為等待時間。 MAC 地址是數據鏈路層中用於標記地址的字段。

網際層 IP

  • (2019)若將 101.200.16.0/20 划分為 5 個子網,則可能的最小子網的可分配 IP 地址數是?

    分析:考察 CIDR (無分類域間路由選擇)地址划分。共 12 個主機位,划分 5 個子網需要消耗 4 個位,因此最小的子網的主機位為 12-4=8 ,即 IP 地址數為 \(2^8-2=128-2=254\)
    注意:對於 CIDR ,路由選擇按最長前綴匹配,因此 5 個子網中第一個子網掩碼為 12 個主機位全 0。第5 個子網為 12 個主機位前 4 個為 1 。

    0000 0000 0000 (第一個子網的主機地址對應的子網掩碼)
    1000 0000 0000
    1100 0000 0000
    1110 0000 0000
    1111 0000 0000
    
  • (2018,38)某路由表中有轉發接口相同的 4 條路由表項,其目的網絡地址分別為 35.230.32.0/21 ,35.230.40.0/21 ,35.230.48.0/21 和 35.230.56.0/21 ,將該 4 條路由聚合后的目的網絡地址為?

    分析:求出所有網絡地址的重合部分:
    32/21=0010 0000 & 1111 1000 = 0010 0000
    40/21=0010 1000 & 1111 1000 = 0010 1000
    48/21=0011 0000 & 1111 1000 = 0011 0000
    56/21=0011 1000 & 1111 1000 = 0011 1000
    故取最大公共部分為 0010 0000 & 1110 0000 ,即 35.230.32.0/19

TCP的擁塞控制

  • (2020)若主機甲和主機乙建立一條TCP連接,最大段長(MSS)為1KB,往返時間(RTT)為2ms,則在不出現擁塞的前提下,擁塞窗口從 8KB 增長到 32KB 所需要的最長時間是
    1. 4ms
    2. 8ms
    3. 24ms
    4. 48ms

    分析:這里要注意是最長時間,因此按照線性增大規律進行,總共需要 24RTT=48ms 。
    回顧:發送方維護擁塞窗口,接口方則通知接收窗口。發送窗口取擁塞窗口和接收窗口的最小值。擁塞窗口反映了擁塞程度,接收窗口反映了接收方的接收能力。窗口的單位為報文段長度(MSS),同時也是TCP傳送數據的單位。滿開始算法:初始擁塞窗口為1,每收到一個確認(即每經過一個RTT),則擁塞窗口翻倍。擁塞避免算法:當擁塞窗口達到門限時,則每次+1。當碰到一次擁堵,則門限取為當前擁塞窗口的一半,同時擁塞窗口重新設置為1。快重傳:對應冗余ACK技術,當收到失序報文段時,發送冗余ACK(重復請求要接收的報文段),當接收方連續收到3個冗余ACK時,則直接重傳。快恢復:對應快重傳,將擁塞窗口和門限同時設置為當前擁塞窗口的一半,然后執行擁塞避免算法。

TCP的序號

  • (2020)若主機甲與主機乙建立TCP連接時,發送的SYN段中的序號是1000,斷開連接時,甲發送給乙的FIN段中的序號是5001,則在無任何重傳的情況下,甲向乙已經發送的應用層數據的字節數為?

    分析:注意理解發送方和確認方的序號的意義。
    IP數據報:版本,首部長度(4B),總長度(1B),標識(計數),標志(是否還有分片,允許分片),片偏移(8B),首部校驗和,生存時間(TTL,減至0則丟棄。TTL為1則不被轉發),協議(如TCP、UDP),源地址,目的地址。
    TCP報文段:IP首部,源端口,目的端口,序號,確認號,數據偏移(首部大小),緊急位,確認位,推送位,復位位,同步位,終止位,窗口,校驗和,緊急指針,選項(長度可變)。
    序號:指本報文段發送的數據的第一個字節的序號。
    確認號:至期望收到的下一個報文段的第一個字節的序號(暗示確認號以前的字節已收到)。
    連接:
    SYN,seq=x(A->B)
    ACK,SYN,seq=y,ack=x+1(B->A)
    ACK,seq=x+1,ack=y+1(A->B)
    data trans
    斷開:
    FIN,seq=u(A->B)
    ACK,seq=v,ack=u+1(B->A)
    data trans
    FIN,seq=w,ack=u+1(B->A)
    ACK,seq=u+1,ack=w+1(A->B)
    回到題目,連接過程有 SYN 報文段消耗一個序號,斷開過程有 FIN 消耗一個序號,之間總共有 5001-1000+1=1002 個序號,因此字節數為 1000。
    注意:連接過程的ACK報文不消耗序號。也即ACK序號為 x+1 ,則下次發送數據的序號還是 x+1 。或者同時攜帶數據的話,就直接是 x+1 。

  • (2019)若主機甲主動發起一個與主機乙的 TCP 連接,甲、乙選擇的初始序號分別為 2018 和 2046 ,則第三次握手 TCP 段的確認序號是?

    分析:注意第三次握手的確認是對第二次握手的確認。因此為 2047 。

應用層,DNS,FTP,SMTP,HTTP

  • (2020)假設網絡中的本地域名服務器只提供遞歸查詢服務,其他域名服務器均只提供迭代查詢服務;局域網內主機訪問Internet上各服務器的往返時間RTT均為10ms,忽略其它各種時延。主機點擊超鏈接 http://www.abc.com/index.html 請求頁面 index.html ,從點擊鏈接到收到頁面,所需最短時間與最長時間分別是?

    分析:這種題目不要考慮本地緩存(因為本地緩存是有生存期的)。因此最短時間是直接請求本地DNS服務器並獲得目的地址,此時總共需要20ms,最長時間是遞歸查詢,本地,根域名,.com,.abc.com 共三級,即總共為 30ms(分級dns) + 10ms(本地dns) + 10ms(請求頁面)=50ms 。
    擴展:www萬維網,<協議>://<主機地址>:<端口>/<路徑>。主機地址可以是域名,如果是域名,則需要進行dns解析。對 www.abc.com ,共三級域名,dns解析過程為:
    1 以域名請求本地域名服務器
    2 本地域名服務器收到請求后,進行迭代查詢,先請求根域名服務器(如a.rootservers.net),根域名服務器返回頂級域名服務器dns.com的地址
    3 本地域名服務器向頂級域名服務器dns.com查詢,頂級域名服務器返回權限域名服務器dns.abc.com的地址
    4 本地服務器向dns.abc.com查詢,dns.abc.com返回www.abc.com的地址。
    5 本地服務器返回域名www.abc.com的地址
    注意:高級別dns服務器只是返回要查詢的域名所在的下一級服務器地址,直到域名在域名服務器所在層次。
    根服務器(*)-->頂級服務器(*.com)-->權限服務器(*.abc.com)-->...

  • (2018,33)下列 TCP/IP 應用層協議中,可以使用傳輸層無連接服務的是?
    a FTP
    b DNS
    c SMTP
    d HTTP

    分析:選 b 。對於 TCP/IP 協議簇,應用層的 DNS 和 DHCP 都是用 UDP 協議。

  • (2018,40)無需轉換即可由 SMTP 協議直接傳輸的內容是?
    a JPEG 圖像
    b MPEG 視頻
    c EXE 文件
    d ASCII 文本

    分析:SMTP 用於郵件代理向發件人郵件服務器、發件人郵件服務器向收件人郵件服務器傳送郵件,SMTP 僅支持傳送可打印字符(7 位),要傳送其他類型的數據時,需要進行轉換,並標記傳送的數據類型(MIME)。

NAT

  • 某校園網有兩個局域網,通過路由器R1,R2和R3互聯后接入Internet,S1和S2為以太網交換機。局域網采用靜態IP配置,路由器部分接口以及各主機的IP地址如下圖所示。
    R2: 192.168.1.1,203.10.2.2(R1)
    Web服務器:192.168.1.2(R2)
    H1:192.168.1.3(R2)

    R1:203.10.2.1(R2),203.10.2.5(R3)

    R3:203.10.2.6(R1),192.168.1.1
    H2:192.168.1.2(R3)
    H3:192.168.1.3(R3)
    假設NAT轉換表結構為:外網(IP,端口),內網(IP,端口)。
    請回答以下問題:
    (1)為使H2和H3能訪問Web服務器(使用默認端口號),需要進行什么配置?
    (2)(改動)H2訪問Web服務器時,向Web服務器發送IP數據包P,分析P在轉發過程中的源IP和目的IP地址變化。

    分析:
    (1)加一個NAT項,即外網(203.10.2.6,80)內網(192.168.1.2,80)
    (2)只有在轉發路徑中,只有NAT路由器可能修改源IP地址和目的IP地址。初始包,為源(192.168.1.2),目的(203.10.2.2);經過R3轉發后,修改源地址,為源(203.10.2.6)目的(203.10.2.2);經過R2轉發后,修改目的地址,為源(203.10.2.6)目的(192.168.1.2)。
    注意:NAT只修改一個地址,要么是源地址,要么是目標地址,這是因為包在經過NAT時,要么進入內部網絡,要么離開內部網絡,進入內部網絡則包不知道內部網絡的結構,需要修改目標地址,離開內部網絡,則外部網絡不知道內部網絡的結構,需要修改源地址。NAT只記錄內部網絡和外部網絡的映射,因此包進入內部網絡時,源地址是外部地址,且源地址不在內部網絡中,因此不能修改,目標地址在內部網絡,因此可以建立內外映射,需要修改。總結:NAT修改屬於內部網絡的地址。

2 計算機組成原理

馮諾依曼結構計算機

  • (2018,12)馮·諾伊曼結構計算機中數據采用二進制編碼表示,其主要原因是:
    a. 二進制數的運算規則簡單
    b. 制造兩個穩態的物理器件較容易
    c. 便於用邏輯門電路實現算術運算

    分析:b,c 是正確的,疑問在 a 上。注意計算機的二進制表示實際上是一個工程問題,因為從數學上而言數的不同表示都是等價的。二進制的運算規則簡單,是指其相比其它進制而言,在工程上實現起來簡單(加法、減法可以統一,相比不需要額外的處理)。這三項實際上是一個標准答案。

總線

  • (2018,21)下列選項中,可以提高同步總線數據傳輸速率的是
    a. 增加總線寬度
    b. 提高總線工作頻率
    c. 支持突發傳輸
    d. 采用地址/數據線復用

    分析:選 abc 。注意題目隱藏的前提是在其它條件不變的情況下。總線的傳輸速率直接與總線寬度和總線頻率有關。突發傳輸相當於減少了控制信息(參考文計算機詞匯),從而也能提高數據傳輸速率。地址和數據線復用是從成本的角度說的,在總線寬度不變時,不改變數據傳輸速率(反而還額外增加了地址數據)。

存儲器

  • (2019)假定一台計算機采用3通道存儲器總線,配套的內存條型號為 DDR3-1333 ,即內存條所插的存儲器總線工作頻率為 1333Mhz,總線寬度為 64 位,則存儲器總線的總帶寬大約是?

    分析:\(3\times 1333\text{M} \times 64\text{bit}=32\text{GB/s}\)
    擴展:考察總線帶寬,參考總線帶寬的定義即可(計算機-詞匯)。需要注意的是,DRAM可能存在地址線寬度減半的情況(一個地址分兩次傳送)。

  • (2018,17)假定 DRAM 芯片中存儲陣列的行數為 r 、列數為 c ,對於一個 \(2\text{K}\times 1\) 位的 DRAM 芯片,為保證其地址引腳數最少,並盡量減少刷新開銷,則 r、c 的取指分別是?

    分析:應為 32、64 。
    注意審題,對象為一個存儲芯片\(2\text{K}=2^{11}=2^5\times 2^6=32 \times 64\) 。注意地址線和數據線的寬度共同決定芯片的容量(也即一個地址對應一個數據線寬度的數據)。對 DRAM 而言,地址信號分行、列兩次傳送,即地址線復用(注:現在的動態 RAM 一般為單管動態 RAM)。因此地址線的數目取決於行或列中的較大值,因此行或列的數目應該盡可能接近。
    在教材中,指明 DRAM 的刷新是一行行刷新的[1],因此應使行適當少。所以行為 32 ,列為 64。

  • (2014)某容量為 256MB 得存儲器由若干 4M$\times$8 位的 DRAM 芯片構成,該 DRAM 芯片的地址引腳和數據引腳總數是?

    分析:為 19 。
    CPU 與主存的連接線包括地址線、數據線和控制線。地址線確定了尋址空間,數據線確定了地址對應的數據寬度,控制線傳輸讀寫信號。DRAM 芯片陣列將多個 DRAM 芯片組成陣列,是一種擴展內存容量(字擴展)、內存位寬度(位擴展)的方法,其中地址信號被用來作為片選依據。片選線、地址線共同確定一個數據線寬度的數據,並且地址線采用行列復用方式。注意區分地址總線和地址線引腳,地址總線是 CPU 和存儲器連接的方式,寬度為一個存儲字長,地址線引腳為每個存儲芯片的地址線,每個存儲芯片同時還接受片選信號和讀寫信號的控制,位擴展的方法就是使存儲芯片的地址寬度和地址總線的地址寬度一致的方法(比如每個存儲芯片每個地址只有一位)。
    數據線寬度為 8 位,即數據線引腳為 8 根。共 \(256/4=64=2^{6}\) 片,總共的地址數為 \(256\text{M}=2^8\times 2^{20}=2^{28}\) ,即地址引腳索引范圍為 \(2^{22}\) ,即地址線引腳為 22/2=11 根。故總共為 11+8=19 根。

  • (2010)假定用若干 2K$\times\(4 位的芯片組成一個 8K\)\times$8 位的存儲器,則地址 0B1FH 所在芯片的最小地址是?

    分析:為 0800H
    注意十六進制和二進制的轉換,10H=0001 0000 B\(=2^4\)
    注意,給定的地址對應的單元為 8 位。兩個 4 位芯片通過位擴展的方式並為 8 位,對應 2K 的地址范圍,即 \(2K=2^{11}=\)800H ,4K=1000H ,6K=1800H ,8K=2000H ,因此最小地址為 0800H

  • (2011)某計算機存儲器按字節編址,主存地址空間大小為 64MB ,現用 4M$\times$8 位的 RAM 芯片組成 32MB 的主存儲器,則存儲器地址寄存器 MAR 的位數至少是?

    分析:考察 MAR 的地址含義。對計算機而言,主存的大小是可變的,而 MAR 被設計到 CPU 中,因此 MAR 的寬度應與內存地址空間相對應。尋址 64MB 需要 26 位。

  • (2015)某計算機使用四體交叉編址存儲器,假定在存儲器上出現的主存地址(十進制)序列為 8005,8006,8007,8008,8001,8002,8003,8004,8000,則可能發生訪存沖突的地址對是?

    1. 8004,8008
    2. 8002,8007
    3. 8001,8008
    4. 8000,8004

    分析:四體交叉編址屬於多模塊存儲器,分為低位交叉編址和高位交叉編址。高位交叉編址中連續地址在相同的模塊中,因此不能提高訪存速度。低位交叉編址中連續的地址在不同的模塊中,因此可以通過流水線方式依次啟動不同的模塊,加速訪存速度。當總模塊數的對應的傳送周期之和不小於每個模塊的存取周期,則能實現連續流水線。將地址模 4 得 1,2,3,0,1,2,3,0,0 ,因此沖突。這里沖突是流水線的概念。影響流水線性能的因素包括數據沖突(數據冒險)、控制沖突(控制冒險),前者為數據依賴,后者為地址依賴。沖突的含義是按照正常流水線可能引起錯誤的情況。這里連續訪問兩次相同的模塊,時間間隔過短(短於存取間隔),引起風險。

  • (2017)某計算機主存按字節編址,由 4 個 64M$\times$8 位的 DRAM 芯片采用交叉編址方式構成,並與寬度為 32 位的存儲器總線相連,主存每次最多讀寫 32 位數據。若 double 型變量 x 的主存地址為 804 001AH ,則讀取 x 需要的存儲周期是?

    分析:使用低位交叉編址來加速。每次 32 位,因此即為 4 體低位交叉編址。對流水線而言,最開始一個字節需要一個周期,后續每個字節需要 1/4 個周期,即總的周期為 1+7/4 ,即需要 3 個存取周期。

地址翻譯

  • (2020)假定主存地址為32位,按字節編址,指令Cache和數據Cache與主存之間均采用8路組相聯映射方式,直寫(Write Through)寫策略和LRU替換算法,主存塊大小為64B,數據區容量各為32KB。開始時Cache為空。請回答以下問題。
    (1)Cache每一行中標記(tag)、LRU位各占幾位?是否有修改位?
    (2)有如下C語言片段:

    for (k=0;k<1024;k++>)
    s[k]=2*s[k];
    

    若數組s與變量k均為int型,int型數據占4B,變量k分配在寄存器中,數組s在主存中的起始地址位0080 00C0H,則該段程序段執行過程中,訪問數組s的數據Cache缺失次數為多少?
    (3)若CPU最開始的訪問操作是讀取主存單元0001 0003H中的指令,簡要說明從Cache中訪問該指令的過程,包括Cache缺失處理過程。

    分析:
    (1)塊大小為 64B,則塊內地址有 6 位。
    8路組相聯映射,即每組8個項。Cache共可存儲 \(32\text{KB}/64\text{B}=2^5\cdot 2^{10}/2^6=2^9\) 個塊。即共有 \(2^9/8=2^6\) 個組,即組地址有 6 位。
    即標記位有 32-6-6=20 位。LRU 用來標記組內全相聯映射的優先級,因為一共有8個,因此LRU需要3位。
    修改位用來標記塊換出時是否需要寫回,由於采用直寫法(修改后立即寫回),因此不需要修改位。
    (2)塊內地址為6位,因此起始位置對應為整數塊。每一塊有64B,對應一次換入cache,因此每16個數,缺失一次,故總的缺失次數為1024/16=64次。
    (3)計算可得00010003H的塊內地址為3H,組地址為0H,因此處理過程為:從內存中取出內容;同時將內存對應的塊裝入Cache中的0H組內某一行,將高20位記入tag位,並修改相應的LRU位,設置有效位。
    擴展:對於讀操作,若不命中,則從內存中取內容,同時更新Cache。對於寫操作,則有寫回和不寫回兩種方法。

  • (2020)某32位系統采用基於二級頁表的請求分頁存儲管理方式,按字節編址,頁目錄項和頁表項長度均為4字節,虛擬地址結構為 頁目錄號(10位)+頁號(10位)+頁內偏移量(12位)。某C程序中數組a[1024][1024]的起始虛擬地址為1080 0000H,數組元素占4字節,該程序運行時,其進程的頁目錄起始物理地址為0020 1000H,請回答下列問題。
    (1)數組元素a[1][2]的虛擬地址是什么?對應的頁目錄號和頁號分別是什么?對應的頁目錄項的物理地址是什么?若該目錄項中存放的頁框號為00301H,則a[1][2]所在頁對應的頁表項的物理地址是什么?
    (2)數組a在虛擬地址空間中所占區域是否必須連續?在物理地址空間中所占區域是否必須連續?
    (3)已知數組a按行優先方式存放,若對數組a進行按行遍歷和按列遍歷,則哪一種遍歷方式的局部性更好?

    分析:
    (1)虛擬地址是 \(1080 0000\text{H} + (1024+2)\times 4=1080 0000\text{H}+2^{12}+2^{3}=10800000\text{H}+1000\text{H}+8\text{H}=10801008\text{H}\) 。轉換為二進制為 \(0001\space 0000\space 1000 \space 0000 \space 0001 \space 0000 \space 0000 \space 1000\) 。故頁目錄號為 \(042\text{H}\) ,頁號為 \(001\text{H}\) 。頁目錄項的物理地址為 \(0020 1000\text{H}+(042\text{H})\times 4=00201108\text{H}\) 。頁框號表示一級頁表所在地址,即為 \(00301000\text{H}\) ,考慮頁號為 \(001\text{H}\) ,每個頁表項4B,故對應的頁表項的物理地址為 \(00301000H+4=00301004\text{H}\)
    (2)一頁大小為 \(2^{12}\text{B}\) ,數組a的大小為 \(2^{20}\times 4\text{B}\) ,故數組a必然存放與多個頁,因此虛擬地址必須聯系,物理地址不需要連續。
    (3)按行遍歷時,相當於虛擬地址連續遍歷,因此元素處於同一頁面的可能性很大,因此局部性更好。
    :對於二級頁表,要注意區分名字。如果記頁目錄表為二級頁表,頁號表為一級頁表,則有頁目錄項是二級頁表的表項,頁表項是一級頁表的表項。如果不區分清楚,就沒法正確理解問的問題了。

數的表示

  • (2020)有實現 \(x\times y\) 的兩個C語言函數如下:

    unsigned umul(unsigned x, unsigned y) {return x*y;}
    int imul(int x, int y) {return x*y;}
    

    假定某計算機M中的ALU只能進行加減運算和邏輯運算。請回答下列問題。
    (1)若M的指令系統沒有乘法指令,但有加法、減法和位移等指令,則在M上也能實現上述兩個函數中的乘法運算,為什么?
    (2)若M的指令系統中有乘法指令,則基於ALU、位移器、寄存器以及相應的控制邏輯實現乘法指令時,控制邏輯的作用是什么?
    (3)針對以下三中情況:a)沒有乘法指令;b)有使用ALU和位移器實現的乘法指令;c)有使用陣列乘法器實現的乘法指令,函數umul()在哪種情況下執行時間最長?哪種情況下執行的時間最短?說明理由。
    (4)略。

    擴展:在計算機中,乘法運算可以由累加和左移(對原碼小數是右移)操作實現。
    原碼一位乘法:符號位分開運算,取絕對值參加乘法運算。每次運算一位,並加到部分積,然后左移一位。最后賦符號位,符號位通過異或運算得到(符號相同,結果為0,符號不同,結果為1)。
    補碼的乘法運算方法類似。
    如果有乘法指令,則需要ALU執行該指令時控制移位、部分積加法以及循環次數。
    如果沒有乘法指令,則編譯時乘法指令可以被編譯為一個乘法子函數,執行一個循環移位相加的過程。顯然沒有乘法指令意味着一次乘法對應多條指令的執行,速度最慢,有乘法指令但通過ALU和位移器執行乘法指令時需要較多的執行時間,相比陣列乘法器專用硬件執行速度更慢。

  • (2018,14)IEEE 754 單精度浮點格式表示的數中,最小的規格化正數是?
    a \(1.0\times 2^{-126}\)
    b \(1.0\times 2^{-127}\)
    c \(1.0\times 2^{-128}\)
    d \(1.0\times 2^{-149}\)

    分析:注意浮點數的 IEEE 754 標准中,浮點數由數符、階碼、尾數組成。32bit浮點數即為 1+8+23 的形式。階碼用移碼表示指數,尾數用小數形式表示小數,且隱含一個默認的 1。階碼的全 0 和 全 1 表示無窮小(合法)和溢出(不合法),且階碼的移碼表示全零對應十進制的 -127 ,全 1 對應十進制的 128,因此最小正數為 a 。相應的,最大的正數為 \((2-2^{-23})\times2^{127}\)

  • (2017) 已知 \(f(n)=\displaystyle\sum_{i=0}^{n}2^i=2^{n+1}-1=\overbrace{11...1}^{\text{n+1位}}B\) ,計算 \(f(n)\) 的C語言函數如下:

    int f1(unsigned n) {
      int sum = 1, power = 1;
      for (unsigned i = 0; i <= n-1; i++) {
        power *= 2;
        sum += power;
      }
      return sum;
    }
    

    (1)當 n=0 時,f1 會出現死循環,為什么?若將 f1 中的變量 i 和 n 都定義為 int 型,f1 是否還會出現死循環?為什么?

    分析:
    其實考察了C語言中立即數的變量類型,也即變量運算時類型的轉換。有以下結論:
    兩個變量運算,總是轉換為同一類型后進行運算。轉換按照適度精確的原則進行(可以參考不同類型數據轉換規則)。
    第一問。當 n=0 時,n-1 表示最大的無符號整型數,因此無符號型數 i <= n-1 永遠成立。當定義為 int 型時,n-1 = -1,當 i >= 0時,循環結束,即不會出現死循環。

機器字長

  • (2020)下列給出的部件中,其位數(寬度)一定與機器字長相同的是:
    1. ALU
    2. 指令寄存器
    3. 通用寄存器
    4. 浮點寄存器

    解:機器字長是指計算機進行一次整數運算所能處理的二進制數據的位數,因此所有與整數運算相關的通路的寬度都和機器字長相同。也即 ALU 和通用寄存器一定與機器字長相同。

指令尋址

  • (2019)某計算機采用大端方式,按字節編址。某指令中操作數的機器數為 1234FF00H ,該操作數采用基址尋址方式,形式地址(用補碼表示)為 FF12H ,基址寄存器的內容為 F0000000H ,則該操作數的 LSB (最低有效字節)所在的地址是?
    a F000FF12H
    b F000FF15H
    c EFFFFF12H
    d EFFFFF15H

    分析:考察補碼運算,尋址,大、小端。
    FF12=1111 1111 0001 0010-->-0000 0000 1110 1101+1=-0000 0000 1110 1110=-00EE
    -00EE+F000 0000=EFFF FF12
    大端方式,低地址存高位,也即所求地址為EFFF FF12+3=EFFF FF15
    擴展大端,即存儲順序和閱讀順序一致(網絡字節序),如10(int)為 000A ,小端,即和大端相反的存儲順序,如10(int)為 A000 ,寫法中,從左到右為地址增加的方向,也即地址為左側第一個字節的地址。
    擴展2:尋址方式,參見計算機組成原理-指令尋址示例。

指令執行及指令流水線

  • (2020)下列給出的處理器類型中,理想情況下,CPI為1的是哪些?

    1. 單周期CPU
    2. 多周期CPU
    3. 基本流水線CPU
    4. 超標量流水線CPU

    解:CPI指每指令需要的始終周期。單周期CPU每個指令固定周期為1,多周期CPU每個指令需要的時鍾周期可以不相等,流水線CPU指指令之間通過一定手段並行執行,基本流水線是指在一個時鍾周期內只執行一個指令一個子過程,超標量流水線可以在一個時鍾周期內執行多個同一子過程。超標量流水線技術(多指令並發),超流水線技術(一個時鍾周期一個功能部件使用多次),超長指令字(將多條並行指令合並為超長指令)。
    擴展單周期CPU因為所有指令都在一個時鍾周期內執行,因此時鍾周期取決於最長的指令周期。因而效率很低。多周期CPU是指將一個指令分為多個時鍾周期去執行,則時鍾周期不再限制於耗時最長的指令(而限制於分解后的最長操作步驟),這樣就縮短了那些耗時很短的指令的執行時間。
    擴展2:時鍾周期,機器周期,指令周期。指令周期:如取指、間指、執行、中斷合稱一個指令周期;機器周期:以一個訪存過程為參考,如取指;時鍾周期:CPU操作的最基本單位,一個機器周期可能由數個時鍾周期組成。

  • (2019)某指令功能為 \(R[r2]\leftarrow R[r1]+M[R[r0]]\) ,其兩個源操作數分別采用寄存器、寄存器間接尋址方式。對於下列給定部件,該指令在取數及執行過程中需要用到的是
    a 通用寄存器組
    b 算術邏輯單元
    c 存儲器
    d 指令譯碼器

    分析,取數涉及間接尋址,因此需要使用通用寄存器和存儲器,執行加法,需要使用算術邏輯單元。指令譯碼器在取指階段使用(取指到IR之后,然后將其中操作碼傳送到指令譯碼器中)。
    擴展:指令周期的四個機器周期。
    取指周期:根據PC取地址至IR,然后PC+1,也即PC->MAR->MM,CU->CBUS->MM,MM->DBUS->MDR->IR,CU->PC+1。
    間址周期:取IR地址碼對應數據,即Ad(IR)->MAR,CU->CBUS->MM,MM->DBUS->MDR。
    執行周期:根據IR指令的操作碼和操作數執行操作。
    中斷周期:保存斷點(PC),執行中斷服務程序(有中斷的情況下),即CU->SP-1,SP->MAR->MM,CU->MM(write),PC->MDR->DBUS->MM,CU->PC(載入中斷服務程序地址)。
    擴展2:CU(控制器):硬布線控制器和微程序控制器。以硬布線控制器為例,輸入信號有IR(經過譯碼器),時鍾(經過節拍發生器),執行反饋(標志),總線信號(中斷、DMA等)。

  • (2018,20)若某計算機最復雜指令的執行需要完成 5 個子功能,分別由功能部件 A~E 實現,各功能部件所需時間分別為 80ps,50ps,50ps,70ps,50ps ,采用流水線方式執行指令,流水段寄存器延遲為 20ps ,則 CPU 時鍾周期至少為?
    a 60ps
    b 70ps
    c 80ps
    d 100ps

    分析:簡單流水線一個時鍾周期內完成一個子功能,因此時鍾周期按最長的時間設計。流水線寄存器是用於多級流水線之間傳遞數據的,因此也需要計算在內。

中斷

  • (2018,22)下列關於外部 I/O 中斷的敘述中,正確的是
    a 中斷控制器按所接收中斷請求的先后次序進行中斷優先級排隊
    b CPU 響應中斷時,通過執行中斷隱指令完成通用寄存器的保護
    c CPU 只有在處於中斷允許狀態時,才能響應外部設備的中斷請求
    d 有中斷請求時,CPU 立即暫停當前指令執行,轉去執行終端服務程序

    分析:注意,題中是外中斷,對立面是內中斷。對 a ,中斷控制器是根據中斷的優先級進行排隊的,如果優先級低,則在一個時鍾周期內中斷響應前,即使發生的早,也不會被優先響應。對 b ,注意通用寄存器不是在 CPU 中斷響應的硬件部分執行,而是由中斷服務程序(軟件)執行的,硬件部分執行對程序中斷位置的保護以及中斷服務程序尋址,稱為中斷隱指令,后者執行對通用寄存器和狀態寄存器的保護。對 c ,注意區別中斷允許觸發器和中斷屏蔽觸發器,中斷允許觸發器為禁止中斷時,則 CPU 不響應外部中斷。對 d ,CPU 只在特定時間能響應中斷,如指令周期的中斷周期,或者在執行中斷響應程序時(允許中斷嵌套)。

DMA

  • (2020)若設備采用周期挪用DMA方式進行輸入輸出,每次DMA傳送的數據塊大小為512字節,相應的I/O接口中有一個32位的數據緩沖寄存器。對於數據輸入過程,下列敘述中,錯誤的是

    1. 每准備好32位數據,DMA控制器發出一次總線請求
    2. 相對於CPU,DMA控制器的總線使用權優先級更高
    3. 在整個數據塊傳送過程中,CPU不可以訪問主存儲器
    4. 數據塊傳送結束時,會產生“DMA傳送結束”中斷請求

    分析:這里考察DMA幾種和CPU協調訪存的方法。共介紹了三種方法:停止CPU訪存;周期挪用;交替訪問。要注意三者的區別。在數據塊傳送過程中,對於周期挪用方式,僅僅是在需要傳送數據的時候需要訪問主存(此時CPU不能訪存),其它時刻都在等待設備准備數據,這樣就提高了訪存時間的利用率。
    擴展:
    停止CPU訪存:外設需要傳數據時,CPU放棄訪存。缺點在於外設准備數據的周期大於訪存周期,從而主存訪問時間沒有被充分利用。
    周期挪用(周期竊取):如果出現CPU和外設同時需要訪存,則CPU延緩存取周期給DMA。
    交替訪問:CPU工作較慢,而訪存周期較短,則一個CPU周期可以划分為兩段,分別用於CPU訪存和DMA訪存。
    注意DMA方式數據塊的含義:DMA數據塊表示在CPU准備環境后,DMA能連續工作傳輸的總數據量構成一個數據塊。在一個數據塊傳輸完成后,DMA通知CPU傳送完成。在一個數據塊內,DMA控制器能接管外設的輸入輸出,並直接與內存進行交換。

  • (2018,43)假定計算機的主頻為 500MHz ,CPI 為 4 。現有設備 A 和 B ,其數據傳輸速率分別為 2MB/s 和 40MB/s ,對應 I/O 接口中各有一個 32 位數據緩沖寄存器。請回答下列問題,要求給出計算過程。
    (1)若設備 A 采用定時查詢 I/O 方式,每次輸入/輸出都至少執行 10 條指令。設備 A 最多間隔多長時間查詢一次才能不丟失數據?CPU 用於設備 A 輸入/輸出的時間占 CPU 總時間的百分比是多少?
    (2)在中斷 I/O 方式下,若每次中斷響應和中斷處理的總時鍾周期數至少為 400 ,則該設備 B 能否采用中斷 I/O 方式?為什么?
    (3)若設備 B 采用 DMA 方式,每次 DMA 傳送的數據塊大小為 1000B ,CPU 用於 DMA 預處理和后處理的總時鍾周期數為 500,則 CPU 用於設備 B 輸入/輸出的時間占 CPU 總時間的百分比最大是多少?

    分析:注意題干中要寫計算過程的要求。事實上,所有的大題題目都應該大致寫明計算過程。
    第一問。不丟失數據即兩次查詢的間隔剛好填滿數據緩沖區,填滿緩沖區耗時為 \(t=\frac{32/8 \text{B}}{2 \text{MB}/\text{s}}=2\times2^{-20}\text{s}=2^{-19}\text{s}\) 。其中用於輸入輸出的時間為 \(10\times4/500\text{MHz}=0.08\times2^{-20}\text{s}=0.04\times2^{-19}\text{s}\) ,因此百分比為 \(0.04=4\%\)
    第二問。設備 B 間隔耗時為 \(t=2^{-19}/20=0.05\times2^{-19}\text{s}\) 。處理耗時為 \(400/500\text{M}=0.8\times 2^{-20}\text{s}=0.4\times2^{-19}\text{s}\) 。也即處理耗時大於最大間隔,故不能。
    第三問。當 DMA 連續工作時,占比最大。每一個數據塊准備時間為 \(\frac{1000\text{B}}{40\text{MB/s}}=25\times2^{-20}\text{s}\) ,對應的 CPU 處理時間為 \(500/500MHz=2^{-20}\text{s}\) ,也即處理占比為 \(\frac{1}{25+1}\approx4\%\)

3 計算機操作系統

操作系統基礎

  • (2018,23)下列關於多任務操作系統的敘述,正確的是
    a 具有並發和並行的特點
    b 需要實現對共享資源的保護
    c 需要運行在多 CPU 的硬件平台上

    分析:a,b 正確,c 錯誤。操作系統的基本特點有並發、共享、虛擬、異步。並發是在單處理機上實現並發執行,並行是在多處理機上實現並行執行。共享是指多個進程共享的使用某個資源。由於並發的支持,因此多任務操作系統不一定需要多 CPU 。

進程的狀態

  • (2019)下列選項中,可能將進程喚醒的是
    a I/O 結束
    b 某進程退出臨界區
    c 當前進程的時間片用完

    分析:注意進程喚醒的含義。
    擴展:進程共有新建、就緒、運行、阻塞、終止 5 種狀態。進程執行 I/O 請求則阻塞態,I/O 完成則喚醒進入就緒態。就緒態和運行態之間通過調度進行轉換。因此喚醒針對的一定是被阻塞的進程,喚醒的進程進入就緒態。沒有時間片的進程稱為就緒進程,就緒的進程通過進程調度進入運行態。

線程模型

  • (2019)下列關於線程的描述中,錯誤的是
    a 內核級線程的調度由操作系統完成
    b 操作系統為每個用戶級線程建立一個線程控制塊
    c 用戶級線程間的切換比內核級線程間的切換效率高
    d 用戶級線程可以在不支持內核級線程的操作系統上實現

    分析:線程有三種實現方式:內核支持線程,用戶級線程,組合方式。
    內核支持線程:多個線程能夠並行執行(多處理器);等等
    用戶級線程:線程切換不涉及內核;阻塞問題會阻塞整個進程(所有進程內的線程);等等。操作系統不能感知用戶級線程的存在。

進程同步

  • (2018,26)假設系統中有 4 個同類資源,進程 P1,P2 和 P3 需要的資源數分別為 4,3 和 1 ,P1,P2 和 P3 已申請到的資源數分別為 2,1 和 0 ,則執行安全性檢測算法的結果是(安全序列?安全狀態?)

    分析:答案為不存在安全序列,系統處於不安全狀態。注意已分配資源和剩余請求資源。P3 先獲取資源,此時 P2 和 P3 均不能繼續執行,因此不存在安全序列。

  • (2018,28)若 x 是管程內的條件變量,則當進程執行 x.wait() 時所做的工作是
    a 實現對變量 x 的互斥訪問
    b 喚醒一個在 x 上阻塞的進程
    c 根據 x 的值判斷該進程是否進入阻塞狀態
    d 阻塞該進程,並將之插入 x 的阻塞隊列中

    分析:答案為 b 。注意信號量和條件變量在語義上的區別。條件變量一旦執行等待,則必然等待。在應用時,先檢查資源可用情況,若不可用,則執行等待。而信號量是一個帶值的同步原語,執行等待操作時是否等待與信號量的值有關。從語義上而言,信號量表示某一類資源可用數量,而條件變量表示期待某一條件觸發。

主存管理

  • (2019)在下列動態分區分配算法中,最容易產生碎片的是
    a 首次適應算法
    b 最壞適應算法
    c 最佳適應算法
    d 循環首次適應算法

    分析:四種方式都是連續分配存儲方式。首次適應算法從最低地址開始找第一個適合的空間;最壞適應算法找最大的空間;最佳適應算法找最靠近目標大小的適合的空間;循環首次適應算法循環找第一個最適合的空間。最佳適應算法總是會留下最小的剩余空間,因此最容易產生碎片。

中斷和異常

  • (2020)下列事件中,屬於外部中斷事件的是
    1. 訪存時缺頁
    2. 定時器到時
    3. 網絡數據包到達

    分析:訪存缺頁產生缺頁異常,是虛擬存儲器的一種機制。缺頁中斷與普通中斷相比,其可以在指令執行期間產生並可能多次產生。缺頁異常顯然是由於指令執行過程產生的,因此屬於內部中斷。系統的定時器(硬件)和網絡卡都屬於外部設備,因此通過外部中斷進行通信。
    在操作系統中,從用戶態進入核心態的唯一途徑是通過中斷或異常。發生中斷或異常時,CPU進入核心態是通過硬件實現的。
    中斷是指外中斷,異常是指內中斷(不能僅僅通過名字來判斷)。外中斷和內中斷的主要區別是中斷信號的來源。
    中斷處理流程硬件部分:關中斷,保存斷點(PC),中斷服務程序尋址(to PC)。
    中斷處理流程軟件部分:保存現場和屏蔽字,(開中斷),執行中斷程序,(關中斷),恢復現場和屏蔽字,開中斷,中斷返回。

文件管理

  • (2020)若多個進程共享同一個文件F,則下列敘述中,正確的是

    1. 各進程只能用“讀”的方式打開文件F
    2. 在系統打開文件表中僅有一個表項包含F的屬性
    3. 各進程的用戶打開文件表中關於F的表項內容相同
    4. 進程關閉F時,系統刪除F在文件打開表中的表項

    分析:多個進程共享文件時,按照一定的讀寫原則就可以了(讀者-寫者問題),如寫寫、讀寫互斥,讀讀不互斥。打開一個文件,則將指定文件的屬性從外存復制到內存打開文件表的一個表目中。操作系統維護所有打開文件信息的表(打開文件表),同一個文件被多個進程打開只改變打開計數。打開文件的關聯信息:文件指針、打開計數、磁盤位置、訪問權限。文件指針和訪問權限對進程而言是唯一的。
    以linux為例,文件描述符指向內核中的文件表,文件表記錄了文件偏移量、文件狀態標志,文件表指向v節點,v節點記錄了文件信息,包括文件長度。多個進程打開同一個文件,則具有相同的v節點,每個打開描述符對應一個文件表項。不同的文件對應不同的v節點。此處文件表就相當於用戶打開文件表(仍在內核中),v節點就相當於系統打開文件表。
    擴展:

  • (2020)某文件系統的目錄項由文件名和索引結點號構成。若每個目錄項長度為64個字節,其中4字節存放索引結點號,60字節存放文件名。文件名由小寫英文字母構成,則該文件系統能創建的文件數量上限為?

    分析:目錄項,目錄項存放或者索引文件控制塊FCB,如存放文件名和相應的文件描述信息的索引節點編號。索引節點可以看作指針,因此4個字節最多可以標記 \(2^{32}\) 個文件描述信息結點。文件名對文件數量的限制可以通過目錄規避,因此最大的數量只受索引結點的限制。

文件系統

  • (2020)下列選項中,支持文件長度可變、隨機訪問的磁盤存儲空間分配方式是

    1. 索引分配
    2. 鏈接分配
    3. 連續分配
    4. 動態分區分配

    對外存的管理有兩個方面,一個是文件的分配方式,即對磁盤非空閑塊的管理;一個是文件存儲空間管理,即磁盤空閑塊的管理。
    文件分配方式:連續分配,即文件在磁盤上占連續的塊;鏈接分配,文件的每個塊都可以鏈接到下一個塊;索引分配:把所有的塊集中形成索引塊。FAT屬於鏈接分配,將文件塊的鏈接提取到文件分配表中(FAT),因此支持直接訪問。

  • (2019)下列選項中,可用於文件系統管理空閑磁盤塊的數據結構是
    a 位圖
    b 索引結點
    c 空閑磁盤塊鏈
    d 文件分配表(FAT)

    位圖、空閑磁盤塊鏈、FAT都可以用來管理空閑磁盤塊。索引結點方式只能用來管理文件存儲空間(因為索引的特點是查找快,而空閑空間是不需要查找的:找一個即可)。
    擴展:
    文件存儲空間組織方式:連續組織方式;鏈接組織方式;FAT;NTFS;索引組織方式;
    空閑存儲空間管理方式:空閑表法和空閑鏈表法;位示圖法;成組鏈接法;
    連續組織方式:文件在物理地址上連續,能通過起始地址和長度(起始盤塊和總盤塊)確定一個文件。
    鏈接組織方式:按塊鏈式分布在物理地址空間中。
    FAT 技術:和鏈接組織方式相似,文件目錄存儲起始塊號,起始塊號索引 FAT 表的表項。FAT 表存儲文件的所有塊的索引。一個磁盤只有一個 FAT 表。以 FAT16 為例,表項的寬度為 16bit,則最大表項個數為 \(2^{16}=65536\) 。即能索引 65536 個簇。由於 FAT 表表項和存儲空間內的簇一一對應,因此 FAT 表同時能索引文件空間和空閑空間。
    索引素質方式:分為單級索引和多級索引。目錄指向索引塊,索引塊指向所有數據塊。多級索引則索引位置仍為索引。
    空閑表法和空閑鏈表發:列出所有空閑區塊,通過表或鏈表形式。
    位示圖法:一位代表一個盤塊。
    成組鏈接法:結合了空閑表和空閑鏈表的優點,按組成鏈。既避免鏈過長,也避免表過大。

磁盤管理

  • (2018,30)系統總是訪問磁盤的某個磁道而不響應對其他磁道的訪問請求,這種現象稱為磁道黏着。下列磁臂調度算法中,不會導致磁臂黏着的是?
    a 先來先服務(FCFS)
    b 最短尋道時間優先(SSTF)
    c 掃描算法(SCAN)
    d 循環掃描算法(CSCAN)

    分析:答案為 a 。注意,對掃描算法和循環掃描算法,如果請求持續的出現在一側,則會導致另一側的請求長期不響應,盡管最終會響應。

死鎖

  • (2020)某系統中有A,B兩類資源各6個,t時刻資源分配即需求情況如下所示:
    進程 A已分配數量 B已分配數量 A需求總量 B需求總量
    P1 2 3 4 4
    P2 2 1 3 1
    P3 1 2 3 4
    t時刻安全性檢測的結果是,存在安全序列:?

    分析:通過剩余資源和剩余需求,可以得出安全序列:P2,P1,P3。這是死鎖避免的內容,相關請參考死鎖(文)。

4 數據結構

KMP算法

  • (2019)設主串 \(T="abaabaabcabaabc"\) ,模式串 \(S="abaabc"\) ,采用 KMP 算法進行模式匹配,到匹配成功時為止,再匹配過程中進行的單個字符間的比較次數是
    A:9
    B:10
    C:12
    D:15

    分析:雖然通過PM表來實現KMP算法和標准的KMP算法不一致,但是在比較次數上,是可以參考的。PM表的做法更容易理解一些。
    首先建立PM表,注意由於PM表右移得到next表,因此PM表的第一位和最后一位均不需要計算。

    i a b a a b c
    PM - 0 1 1 2 -
    comp - 1 2 2 1 -
    next -1 0 0 1 1 2

    也即構造 next 表需要6次比較。

    abaabaabcabaabc
    abaabc:(6)
       abaabc:(4)
    

    也即匹配過程需要 10 次比較。
    這題存在一個模糊的地方,就是沒有考慮構造next表的過程。
    后序這種題一律不考慮構造next表的流程。

樹的順序存儲

  • (2020)對於任意一棵高度為 5 且有 10 個節點的二叉樹,若采用順序存儲結構保存,每個節點占用一個存儲單元,則存放該二叉樹需要的存儲單元至少是?

    解:注意:任意一棵。高度為 5 的樹需要的存儲空間為 \(1+2+4+8+16=31\) ,即為 \(31\)

B 樹

  • (2018,8)高度為 5 的 3 階 B 樹含有的關鍵字個數至少是?

    分析:熟悉 B 樹的特征。對 3 階 B 樹,每個結點有 2 到 3 棵子樹,即 1 到 2 個元素。高度最高的 3 階 B 樹就是每個結點只有 1 個元素的情況,因此高度為 5 的總元素為 \(2^5-1=31\)
    擴展:對 4 階 B 樹,每個結點有 2 到 4 棵子樹,即 1 到 3 個元素;對 5 階 B 樹,每個結點有 3 到 5 棵子樹,即 2 到 4 個元素,高度最高的情況是每個結點 2 個元素。
    B 樹的插入方式為滿則向上彈出元素,刪除方式為向兄弟結點或者合並到兄弟結點。

矩陣的壓縮存儲

  • (2020)將一個 \(10\times10\) 對稱矩陣 \(M\) 的上三角部分的元素 \(m_{ij}(1\le j\le 10)\) 按列優先存入 C 語言的一維數組中,元素 \(m_{7,2}\)\(N\) 中的下標是?

    解:注意下標和序號的區別。\(1+2+...+6+2=23\) ,即下標為 \(22\)

平衡二叉樹

  • 數據結構 - 二叉平衡樹

散列表

  • (2019)現有長度為11且初始為空的散列表HT,散列函數是 \(H(key)=key\%7\) ,采用線性探查(線性探測再散列)法解決沖突。將關鍵字序列87,40,30,6,11,22,98,20依次插入HT后,HT查找失敗的平均查找長度為?

    分析:回顧,散列表處理沖突有兩種方式,第一種是開放定址法,第二種是拉鏈法。開放定址法的每一個地址對同義詞表項開放,也對非同義詞表項開放,因此需要探查(是否占用,是否相同)。拉鏈法允許在一個表項中存儲多個同一項,因此需要探查(是否相同)。開放定址法的探查方式又有線性探測、平方探測、再散列法等方法。

    p 0 1 2 3 4 5 6 7 8 9 10
    - 98 22 30 87 11 40 6 20 nil nil nil

    平均查找長度:注意查找長度指比較次數,如果直接就能找到,則查找長度為1。
    查找成功的平均查找長度:指用表中已有的元素去查找(每個元素1次),平均的查找長度。
    查找失敗的平均查找長度:指用表中沒有的元素去查找(每個散列位置1次),平均的查找長度。

    p 0 1 2 3 4 5 6 7 8 9 10
    - 98 22 30 87 11 40 6 20 nil nil nil
    suc 1 1 1 1 1 1 1 2
    fail 9 8 7 6 5 4 3

    因此成功平均查找長度=9/7
    失敗平均查找長度=6
    注意:查找的失敗條件:找到了空位,或者找遍了所有槽位,還是沒有找到,則失敗。
    特別注意:查找失敗針對的是所有散列位置,查找成功針對的是已有元素。兩者的對象不一致。

  • (2018,11)在將數據序列 (6,1,5,9,8,4,7) 建成大根堆時,正確的序列變換過程是?

    分析:畫圖之后,一定要注意避免直覺上的順序。
    大根堆建堆為對每一個非葉節點(逆序)進行維護,因此先對 5 進行維護,然后對 1 進行維護,最后對 6 進行維護(不是樹的圖形上的每一層從左到右的過程,雖然從原理上來看也是可以的)。從算法實現上來看,就是從索引大的值開始維護,一直進行到索引為 0 的根節點。同時注意維護過程是遞歸的過程,如果交換了元素,則對被修改的子節點同樣要執行維護。

排序

  • (2019)排序過程中,對尚未確定最終位置的所有元素進行一遍處理稱為一趟。下列序列中,不可能是快速排序第二趟結果的是
    A:5,2,16,12,28,60,32,72
    B:2,16,5,28,12,60,32,72
    C:2,12,16,5,28,32,72,60
    D:5,2,12,28,16,32,72,60

    分析:快速排序每一次排序確定一個元素的最終位置,並將剩余元素分為兩部分。
    A 第一趟選72,第二趟選28
    B 第一趟選72,第二趟選2
    C 第一趟選2,第二趟選32
    D 第一趟選12或32,則划分位兩部分。如選32,則右側有 72,60,是不符合第二趟排序結果的,選12也一樣。因此D不對。
    注意:這種題目要注意划分之后兩側都要考慮。

  • (2019)設外存上有120個初始歸並段,進行12路歸並時,為實現最佳歸並,需要補充的虛段個數是?

    關於最小帶權路徑,可以參考數據結構-排序-外部排序。此時直接應用結論,即補充虛段使得歸並樹的所有結點的度要么為0,要么為12,此時的樹的葉節點記為m個,總結點記為n個,每增加11個葉節點,增加12個總結點,初始只有1個葉節點和總結點,也即 \(\frac{n-1}{12}=\frac{m-1}{11}\) ,顯然和 120 最接近的 m 為 \(11\times 11+1=122\) ,也即需要補充2個虛段。

算法書寫題

  • 參考數據結構-算法題。

  1. 《計算機組成原理·第 2 版》,唐朔飛,第 4 章,動態 RAM 的刷新。 ↩︎


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM