兩章雖然篇幅不小,不過都是以介紹爲主,這部分不是我讀這本書的重點,看得比較粗略,筆記內容也很少,乾脆合二爲一。node
正如章節名,這章主要是關於多處理機、多計算機、虛擬化、分佈式系統。因爲非單機的多處理器系統和網絡通訊關係密切,還講了一些計算機網絡的內容。編程
雖然非阻塞send()能夠當即返回,而不是像阻塞版本那樣可能會致使CPU空轉,可是它有一個嚴重缺點:send所使用的緩衝區,直到發送工做完成後才能修改。若是系統不知道何時發送完成,那麼這個緩衝區就不能肯定它從新變爲可用的時機。數組
這個原理能夠相似地適用於其餘的一些非阻塞版本系統調用(不過recieve的狀況簡單些)。非阻塞系統調用並不是完美,這是我從前的誤區。安全
固然,操做系統設計時能夠迴避這個問題,原書提到了三種:複製到內核由內核發送、發送後通知進程、緩衝區作只讀標記並在寫時複製。三者也有各自的缺陷,簡單能夠對應的歸納爲:複製到內核開銷、處理同步帶來的編程困難、緩衝區管理複雜,具體的解釋能夠參考P557。網絡
譯:app
假設不能在多處理器同步問題中使用TSL指令(Test and Set Lock),而是提供了一個能夠交換寄存器和存儲器中一個字的SWP指令,能夠用來處理多處理器同步問題嗎?less
Answer:分佈式
It is just as good as TSL . It is used by preloading a 1 into the register to be used. Then that register and the memory word are atomically swapped. After the instruction, the memory word is locked (i.e., has a value of 1). Its previous value is now contained in the register. If it was previously locked, the ide
word has not been changed and the caller must loop. If it was previously unlocked, it is now locked.oop
分析:
須要使用寄存器的某一個處理器將本身的一個寄存器預裝載一個1,而後使用SWP交換存儲器和寄存器中的內容,這個存儲器字就至關於被鎖上了,原先的值被送入了寄存器。若是以前已鎖,那麼就忙等;反之則此時上鎖。
不過有個問題:若是這個存儲器字初始值就是1,怎麼辦?按個人理解,這個存儲器字是用來專門提供SWP模擬TSL功能的,「鎖」的範圍不限於這個單一的字。
譯:
將圖8-24中的H進程從節點2移至節點3,此時外部信息流量是多少?
分析:
這裏的「移動」實際上是指下面的狀況,將節點二、3之間的分界線變爲紅線:
須要注意的是,節點1和節點3有直接相連的部分。在這個圖的基礎上進行分析,不可貴出答案是27。
譯:
爲何以太網傳輸電纜有距離限制?
Answer:
Ethernet nodes must be able to detect collisions between packets, so the propagation delay between the two most widely separated nodes must be less
than the duration of the shortest packet to be sent. Otherwise the sender may fully transmit a packet and not detect a collision even though the packet suffers a collision close to the other end of the cable.
分析:
以太網須要衝突檢測,於是兩個最近節點的距離形成的最小包的傳輸延時必須小於包的生存時間。不然,即便兩個臨近節點也沒法發現同一根電纜上衝突的存在。
在個人印象中,最大長度的緣由是信號在電纜上傳輸的衰減,與這個答案不是很相符,二者看上去都是有道理的。
1.習題18,第二問要求計算上額外的兩次複製所佔用的時間,而這個時間的計算方法並無在題目中給出,疑似遺漏。答案中這兩次複製總時間是660ns。
原書爲了說明隱寫術的頁面http://www.cs.vu.nl/~art/已經404了,習題16中的網頁http://www.cs.vu.nl/ast我一樣打不開。
譯:
說出C編譯器中一種經過改進能夠大量減小安全漏洞的特徵,爲何不這樣實現編譯器呢?
Answer:
The compiler could insert code on all array references to do bounds checking.This feature would prevent buffer overflow attacks. It is not done because it would slow down all programs significantly. In addition, in C it is not illegal to declare an array of size 1 as a procedure parameter and then reference element 20, but clearly the actual array whose address has been passed had better have at least 20 elements.
答案:
能夠改進編譯器使其對全部數組引用作邊界檢查,這樣緩衝區溢出攻擊將被消除。不這樣作的緣由是這將明顯拖慢全部程序。而且,在C中生命一個大小爲1的數組並引用它的20號元素是合法的,雖然這麼作(引用第20個元素)最好仍是用一個至少有20個元素的數組。
譯:
刪除文件時,文件塊被放回空閒塊列表,但並無被清除。你認爲讓操做系統在釋放以前先清除每一個文件塊是好方法嗎?從安全性和性能分別考慮,並解釋效果。
Answer:
From a security point of view, it would be ideal. Used blocks sometimes are exposed, leaking valuable information. From a performance point of view,zeroing blocks wastes CPU time, thus degrading performance.
分析:
不清除有可能泄露重要信息,可是性能比較好;反之則下降了性能。注意答案中,結合上下文來理解,"ideal"應爲"unideal"。
1.P353圖9-17,F1對於用戶B應標爲"R"而非"A";
2.P357圖9-11,爲了與上下文一致,「可信計算基準」應爲「可信計算基」;
3.P382「內存駐留病毒」第一段第三行,「中斷變量」應爲「中斷向量」。