2014年3月23日 星期日

恐龍版OS裏的哲學家問題的思考

在做controller時,常需要去思考一個問題,那就是權杖是由誰主導?一個好的controller就是把權杖的問題處理好,讓各個部份都能各司其職,也不會相突衝。這樣子說明,或許有許多人不明瞭,以下我舉一個例子。

PCIE的規格裏,有一個skip order set的機制,是被用來做在傳輸中補償機制。但是傳送skip order是由誰做,卻沒有明確的說明,但是這部份的描述是放在LTSSM章節。而PCIE大致上是被分為Tx, Rx, LTSSM三大部份。既然被寫在LTSSM章節,那應該由LTSSM做即可;但是LTSSM並沒有負責全部的流程機制,有部份是由Tx負責。一旦權杖沒有做好,就會造成溝通問題。

PCIEcontroller要操控性好、流暢,Tx, RX以及LTSSM都是重要的部份。Skip order set則應該算是其中會影響的重要螺絲。從LTSSMFSM來看,當進入L0時,權杖(Token)就已經不在LTSSM那一層,而是到TxDLP或是TLP。如果把skip order set只做在LTSSM那一層,而當Tx進入L0時,Tx已經拿到權杖,而當skip order set倒數時間到,需要發送skip封包時,因為Tx沒有做skip order set的機制,所以要把權杖還給LTSSMLTSSM需要把權杖搶走,送完Skip order set後再歸還權杖。此時Tx所需要做的事就是保證在未來的傳送skip order set的時間內,都不會有TLP或是DLP要傳送,靜待LTSSM 完成工作。這是我常看到的hand shake;但是常因hand shake時間溝通不清楚,進而影響了skip order set的傳送。

PCIE的規格書裏,說明進入L0後,就是屬於Tx的負責範圍,那為什麼還要要求 LTSSM做事?很多人都以為這只是hand shake機制沒有做好,做好後就不會發生問題。在我看來,這樣子的做法只是治標,不是治本。當你以後要增加新功能時,會不會受到影響?你還能確定你的hand shake還可以運作嗎?其實整個核心問題就是「權杖」,恐龍版的OS明確的說出,權杖拿到手,就要做事,不做事就會dead lock。為什麼Tx你已經拿到權杖,還要把skip order set的工作往外推出,叫LTSSM做?這和恐龍的觀念不符合。

換個角度想,拿到權杖的人負責做事,而且要把所有的事都做完。移出權杖的人,則是已經把該做的事情做完了,沒有任何責任。用這樣子的想法去架構你的control flow,簡單而且不太會出錯。尤其是用在數位和類比之間的溝通,其實還滿好用的。

之後,我也常常用這個方法去思考控制轉移的問題,簡化了不少複雜控制。再一次驗證了,經典真是不愧為經典。

註解:1. 恐龍版的書名應該是Operating System Concepts
      2. 作者: Abraham SilberschatzPeter B. GalvinGreg Gagne

沒有留言:

張貼留言