CSAPP第8&9章家庭作業(部分)

在這裏插入圖片描述

畫出進程圖:
原則如下:
(1) 遇到fork函數就分支,每個水平的箭頭對應於從 左到右執行指令的進程,而每個垂直的箭頭對應於 fork 函數的執行
(2) 分支的時候專注於父進程執行完,再處理另一個分支
(3) 父進程中, fork 返回子進程的 PID、在子進程中, fork 返回 0
(4) 在新的進程中可以認爲執行的是上一個fork以下的部分。

在這裏插入圖片描述
對於執行過程,由於程序不會按照特定的順序回收子進程,子進程回收的順序是這臺特定的計算機的屬性。所以這個輸出結果不是確定的,但是對於這道題,exit函數調用的輸出一定是屬於當前的進程的。所以(1,2),(0,2)一定是連在一起。可能的結果是
ACE:<1,1,2,0,0,2>,<1,0,2,1,2,0>,<1,0,0,2,1,2>
對於B和D,都沒有滿足(1,2)(0,2)連在一起的原則。

在這裏插入圖片描述
在這裏插入圖片描述
參考CSAPP的P506,可以看到這樣的一段話:
在這裏插入圖片描述
5個信號連續發送,上下文沒來得及切換,這 5 個信號就同時發送了。只有 2 個信號被接收。在第一個信號發給父進程之後,父進程進入 handler,並且阻塞了SIGUSR2,第二個信號依然可以發送,成爲待處理信號;接下來的 3 個信號便會被簡單丟棄。
因此想要解決這個因爲“連續發送,”而導致的問題可以使用wait函數等待進程終止回收之後,再發送第二個信號。

在這裏插入圖片描述
在這裏插入圖片描述
在這裏插入圖片描述
在這裏插入圖片描述
分析,首先要確定VA,PA的大小:
(1)VA共有14位,首先觀察9.6.4節示例的存儲系統模型可知,VPO爲VA的後6位,所以每個頁面有2^6=64字節
VA的高8位作爲VPN,其中TLB表格中有4個組,所以TLBI是2位,剩下的高6位爲TLBT標誌位
(2)PA共有12位,其中低6位爲PPO,由於cacha有F組,所以CI有4位,4塊,所以CO有2位,剩下的高6位爲PPN,是cache的標誌位CT。
A:將虛擬地址化爲二進制:
在這裏插入圖片描述
VPN 爲高 8 位,VPN=0x9,TLBT=0x2,TLBI=0x1,VPO=0x3C
(1)查找 TLB:根據 TLBI=0x1 去尋找第 0x1 組,其中標記爲 0x2 的條目有效位爲 0,所以不命中:在這裏插入圖片描述
(2)查找 cache,由於不命中,所以去 cache 中尋找。首先去 PTE 頁表中查找 VPN=9 位置的數據,其有效 位爲 1,說明不缺頁,得到 PPN=0x17,
在這裏插入圖片描述
在這裏插入圖片描述
C.拼接 PPN+PPO 得到如下物理地址 PPA:
在這裏插入圖片描述
字節偏移 CO=0x00,緩存索引 CI=1111=0xF,緩存標記就是 CT=PPN=0x17,查找緩存發現有效位爲 0,不命 中,返回爲——
在這裏插入圖片描述
根據以上分析可以得到如下物理地址引用:
在這裏插入圖片描述

在這裏插入圖片描述
在這裏插入圖片描述
A. 將VA=0x03a9轉化爲2進制:
在這裏插入圖片描述
B. 其中VPN爲高8位置,VPN=0x0E,TLBT爲高6位,TLBT=0x03,TLBI=0x2
在這裏插入圖片描述
(1) 查找TLB條目,可以看到第2組的03標記處有效位爲0,所以不命中
(2) 繼續查找頁表條目,可以看到VPN=0E處有效位爲1,得到PPN=0x11,所以不發生缺頁
在這裏插入圖片描述
根據以上分析可以得到如下表格:
在這裏插入圖片描述
C.將PPN和PPO拼接,得到PA:
在這裏插入圖片描述
1 0 0 0 0 1 1 0 1 0 0 1
D.其中CT=PPN=0x11,CI=1010=0xA,CO=01=0x1,去cache中第0A組找到偏移量爲1的塊,由於標記位位0x2D,所以不命中。根據以上分析得到右下角的表格:
在這裏插入圖片描述

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