作業系統第二十六章作業(1 4題)

2021-10-01 03:51:36 字數 2391 閱讀 6992

./x86.py -p loop.s -t 1 -i 100 -r dx

這指定了乙個單執行緒,每 100條指令產生乙個中斷,並且追蹤暫存器%dx。你能弄清楚 %dx在執行過程中的值嗎?你有答案之後,執行上面的**並使用-c 標誌來檢查你的答案。注意答案的左邊顯示了右側指令執行後暫存器的值(或記憶體的值)。先看一下loop.s的**:

.main

.top

sub $1,%dx

test $0,%dx

jgte .top

halt

這個**是將%dx的值減1,與0作比較,若大於等於零就重複以上操作,否則就跳出迴圈並結束。

dx初值為0,執行第一條指令後變為-1,執行第二條指令後不變,執行第三條指令後也不變,但是因為-1 < 0,所以不會跳轉到.top,而是繼續向下執行halt結束。

-c 標誌檢視答案:

結果正確。

2.現在執行相同的**,但使用這些標誌:

./x86.py -p loop.s -t 2 -i 100 -a dx=3,dx=3 -r dx

這指定了兩個執行緒,並將每個%dx 暫存器初始化為 3。%dx 會看到什麼值?使用-c 標誌執行以檢視答案。多個執行緒的存在是否會影響計算?這段**有競態條件嗎?

-c 標誌檢視答案:

結果正確。

3.現在執行以下命令:

./x86.py -p loop.s -t 2 -i 3 -r -a dx=3,dx=3 -r dx

這使得中斷間隔非常小且隨機。使用不同的種子(-s) 來檢視不同的交替。中斷頻率是否會改變這個程式的行為?有 -r 說明中斷頻率是隨機的,但是 -i 3則表示,最多3條指令就會發生執行緒切換。也就是說,同時使用 -i 3與 -r 引數,執行完1、2、3條指令後都可能發生執行緒切換。這個雖然沒有在readme檔案中說明,但是通過換用不同的-i引數觀察程式輸出結果,可以驗證以上說法。

換用不同的 -s 程式行為各不相同,說明中斷頻率的改變的確會影響這個程式的行為。

4.接下來我們將研究乙個不同的程式(looping-race-nolock.s)。該程式訪問位於記憶體位址 2000 的共享變數。簡單起見,我們稱這個變數為 x。使用單執行緒執行它,並確保你了解它的功能,如下所示:

./x86.py -p looping-race-nolock.s -t 1 -m 2000

在整個執行過程中,x(即記憶體位址為 2000)的值是多少?使用-c來檢查你的答案。先看一下looping-race-nolock.s的內容:

# assumes %bx has loop count in it

.main

.top

# critical section (臨界區)

mov 2000, %ax # get 'value' at address 2000

add $1, %ax # increment it

mov %ax, 2000 # store it back

# see if we're still looping

sub $1, %bx

test $0, %bx

jgt .top

halt

此程式是將位址2000內的值自加1後再存回位址2000處,之後將暫存器bx的值減1並和0作比較,如果大於0,就跳轉到.top(迴圈),否則執行halt執行緒結束執行。

-r標誌追蹤暫存器ax和bx,並使用 -c 標誌檢視答案:

演算法導論 第二十六章最大流

一,概念 1 流網路 簡單有向圖,且有兩個特別的頂點 源點s,匯點t 2 流的邊標識為f u,v c u,v 流量 容量 3 流的三個性質 1 容量限制 對於所有邊 流量 容量 2 反對稱性 f u,v f v,u 3 流守恆性 正向流與反響流之和為零 4 割 流網路g v,e 的割 s,t 將頂點...

《佛密諸事》第二十六章 靜與宇宙

一 靜的心理作用 大凡修煉的人都在 靜 字上下功夫,不難說 靜 在修煉中的重要性。靜,是人的思維間歇,人的意念達到零點。在零點上是乙個水準,是乙個關鍵性 重要性 特異性的水準。靜零點絕不是低層次,而是高層次,這個層次蘊藏著騰飛,向沸點邁進。人的思維總是不停頓的分移的至轉化,這樣形成理智思維和混淆思維...

WP8 1學習系列 第二十六章 控制項模板

在本文中 控制項的外觀。路線圖 本主題與其他主題有何關聯?請參閱 來更改這些特性。例如,假定你想要讓核取方塊的內容顯示在選擇框下方,並且你想要用x來表示使用者已選定核取方塊。你可以在checkbox的controltemplate中指定這些特性。xaml 在unchecked checked和ind...