1. 程式人生 > >(萊昂氏unix原始碼分析導讀-33) swap函式

(萊昂氏unix原始碼分析導讀-33) swap函式

                                 By cszhao1980

是瞭解swap函式的時候了,它有四個引數:

1blkno:磁碟塊號;

2coreaddr:實體記憶體block號;

3count:讀寫位元組數;

4rdflg:讀寫標誌。

swap函式盡力使用device independent的方法來實現功能:

1)它通過swapdev在塊裝置表中查表來操控swap裝置;

2)啟動裝置時,通過塊裝置表bdevswd_sratesy成員變數來操縱。

而這兩項都是可配置的,也就是說,即使更換了swap裝置,swap函式也無需修

改,實現了低層具體實現和高層模型間的隔離。

swap函式最需要注意的一點是其對各種競爭情況的處理,其核心是對swbuf的使用。
swbuf是操控外設的唯一介面,任何程序的操縱行為都會設定這同一個結構,由此

產生的sleep也都使用&swbuf.b_flags作為睡眠id。萊昂一反其惜墨如金的寫作風格,

以專門的一個小節對此進行了詳細的說明,我在這裡不再贅述。

還有一點需要注意的是,儘管RK磁碟的中斷處理函式支援非同步方式,但swap似乎

只支援同步的讀寫。