求真百科歡迎當事人提供第一手真實資料,洗刷冤屈,終結網路霸凌。

十字轉門檢視原始碼討論檢視歷史

事實揭露 揭密真相
前往: 導覽搜尋
十字轉門

十字轉門,又叫turnstile。Turnstile是一種數據抽象,用來封裝休眠隊列和與互斥鎖和讀/寫鎖相關的優先級繼承信息。Turnstiles在Solaris7大幅改變,但基本前提仍然是相同的。首先,我們要看着2.5.1/2.6機制,然後看看在Solaris7發生什麼改變。

簡介

tstile_mod的結構是這樣展開的。它保持turnstiles的鏈接,以及實施所需的各個領域,如pool,活躍的數字行在tsm_chunk陣列的活躍入turnstiles,鏈接到pool中的turnstiles,一個數組的指針到pool中的turnstiles塊(tsm_chunk[] -這些都是活躍的pool中的turnstiles)。turnstiles本身維護名單上的其他pool中的turnstiles,前向鏈路的結構與優先級繼承信息(pirec),數組有兩個休眠隊列,讀/寫鎖,讀操作和寫操作都保存在單獨的休眠隊列,而只有其中之一是用於互斥鎖。正如上個月我們所看到的,休眠隊列點上的隊列(sq_first)內核線程。其他環節結合在一起,包括內核線程鏈接turnstiles(KTHREAD阻塞時,對一個同步對象設置),如果一個點從KTHREAD結構pirec的內核線程的優先級改變,由於優先級反轉。由於繼承是接收者(高優先級),benef領域pirec點回的內核線程更好的優先級。

評價

在這兩種情況下,我們現在有一個同步對象(可適應互斥)的turnstile,並且我們能通過關聯turnstile繼續改變線程狀態以休眠和設置休眠序列。內核的t_block()函數就是以這個目的被調用的,同時CL_SLEEP宏也為此調用。從之前的列中應該記住,調度特定類的函數是通過宏調用的,這些宏用於實現正確的基於調度內核線程類的功能。在TS和IA類線程情況下,ts_sleep()函數被調用,並且線程的優先級設置為SYS優先級。這是一個優先級的提升——當他被喚醒是,他會得到優先於TS和IA而運行的優先級——同時線程的狀態被設置為TS_SLEEP。內核線程的t_wchan域(等待渠道)設置為同步對象操作向量的地址——一個有可適應互斥對象特定功能的數組。回想從上個月一個到相似函數設定的連接為休眠序列完成了。在這種turnstile的情況下,不同的同步對象的turnstile被用以定義一個操作的向量,這向量是一種簡單的包含對象種類,擁有者的地址,和未休眠的優先級修改獨特對象函數的數據結構。一個同步對象的操作結構為了所有同步對象而被聲明,這存在於Solaris內核中。 [1]

參考文獻