(萊昂氏unix原始碼分析導讀-33) swap函式
By cszhao1980
是瞭解swap函式的時候了,它有四個引數:
(1)blkno:磁碟塊號;
(2)coreaddr:實體記憶體block號;
(3)count:讀寫位元組數;
(4)rdflg:讀寫標誌。
swap函式盡力使用device independent的方法來實現功能:
(1)它通過swapdev在塊裝置表中查表來操控swap裝置;
(2)啟動裝置時,通過塊裝置表bdevsw的d_sratesy成員變數來操縱。
而這兩項都是可配置的,也就是說,即使更換了swap裝置,swap函式也無需修
改,實現了低層具體實現和高層模型間的隔離。
swap函式最需要注意的一點是其對各種競爭情況的處理,其核心是對swbuf的使用。
swbuf是操控外設的唯一介面,任何程序的操縱行為都會設定這同一個結構,由此
產生的sleep也都使用&swbuf.b_flags作為睡眠id。萊昂一反其惜墨如金的寫作風格,
以專門的一個小節對此進行了詳細的說明,我在這裡不再贅述。
還有一點需要注意的是,儘管RK磁碟的中斷處理函式支援非同步方式,但swap似乎
只支援同步的讀寫。
相關推薦
(萊昂氏unix原始碼分析導讀-33) swap函式
By cszhao1980 是瞭解swap函式的時候了,它有四個引數: (1)blkno:磁碟塊號; (2)coreaddr:實體記憶體block號; (3)count:讀寫位元組數; (4)rdflg:讀
(萊昂氏unix原始碼分析導讀-35)快取管理(上)
by cszhao1980 系統定義了NBUF個快取區域,每個514個位元組: 4720: char buffers
(萊昂氏unix原始碼分析導讀-20)中斷、陷入的入口和出口
陷入處理程式的入口都為“trap”(這裡是指一個彙編程式,而非PDP11指令); 中斷則不同。他們有不同的入口,如: 525 .=60^. 當前地址設定為60 octal 526 klin; br4
(萊昂氏unix原始碼分析導讀-39)inode“資源”的獲取和釋放
by cszhao1980 iget()函式用於獲取inode資源,它有2個引數,裝置號和inode id。前面說過,通過這兩個引數 會唯一確定一個inode。簡單的說,該函式的作
(萊昂氏unix原始碼分析導讀-36) 快取管理(下)
by cszhao1980 理解了上述內容,下面的這些程式就不難理解了。 首先是函式brelse(buf bp),該函式將傳入的快取歸還到AV佇列中,函式採用尾插法, 即快取會插到AV佇列的隊尾——
(萊昂氏unix原始碼分析導讀-11)系統初啟(4)
本章討論程序複製,繼續Main函式。 1625 */ 1626 1627 if(newproc()) { …… 現在看newproc的程式碼。 1826 newproc() 1827 { ......
(萊昂氏unix原始碼分析導讀-15) 系統初啟(8)
程序user態下的分段 User態中將程序空間分為text、data、stack segment三部分。 estabur(nt, nd, ns,sep)根據各個segment的大小,為各段分配page,引數如下: (1) nt—— text segment的長度(blo
(萊昂氏unix原始碼分析導讀-47) exec
by cszhao1980 現在,我們已經儲備了足夠的知識,該吹響向EXEC sys call衝鋒的號角了。 exec是系統中最重要也是最複雜的系統呼叫之一,它的作用是執
(萊昂氏unix原始碼分析導讀-18) 再談中斷與陷入
從產生原因看,中斷和陷入也有巨大的差別。 硬體中斷由外部事件造成,屬於非同步事件,往往與當前程序毫無關係; 陷入則不同,它常常都是同步的(如除0錯),並與當前程序上下文相關。 除此之外,陷入還用來實現系統呼叫——核心為user程序提供了大量的服務,這些服務就是通過系統
(萊昂氏unix原始碼分析導讀-21)時鐘中斷處理
時鐘中斷是系統中最重要的中斷,每個時鐘滴答都會產生時鐘中斷,它的中斷向量為(0100)或(0103)。 0533: . = 100^. 0534: kwlp; br6 0535: kwlp; br6 0569: .globl _clock 05
【 專欄 】- 萊昂氏unix原始碼分析導讀
萊昂氏unix原始碼分析導讀 即使到今天,《萊昂氏unix原始碼分析》仍是最好的核心原始碼分析書籍之一,它以短短9000多行程式碼實現了一個複雜的作業系統,其程式碼質量之高令人歎為觀止。希望本專欄能為讀者的讀碼過程提供一點幫助。
(萊昂氏unix原始碼分析導讀-44) 檔案系統資源
by cszhao1980 一個裝置被mount進系統後,就被稱為一個檔案系統。它有兩類資源: (1) 磁碟inode資源; (2) 普通盤塊資
(萊昂氏unix原始碼分析導讀-43) 檔案系統的mount
By cszhao1980 當一個裝置被mount進系統,就會在“mount表”中佔據一個表項,mount表的定義如下: 0272: struct mount 0273: { 0274: int m_dev
(萊昂氏unix原始碼分析導讀-19)再談程序swtch
我們已經涉及到了部分程序切換的概念,在本章中,我們會從更一般的意義上考察程序切換的行為。 首先,程序切換(也稱作context switch)一定是在核心中完成的。 比如,以下為發生程序切換的最常見的情況: (1) active程序因等待某資源阻塞,自動讓出cpu;
(萊昂氏unix原始碼分析導讀-46)許可權、管道
by cszhao1980 1. 檔案與許可權控制 程序u結構中,身份相關的資訊有: 0420: char u_uid; /* effective user id */ 0421: char u_gid; /* effective group id */ 0
(萊昂氏unix原始碼分析導讀-27) Swap in/out (上)
By cszhao1980 Swap in/out指的是程序在實體記憶體(core空間)和磁碟交換檔案間的雙向移動過程,程序在active狀態時, 其segment
設計模式(十五)——命令模式(Spring框架的JdbcTemplate原始碼分析)
1 智慧生活專案需求 看一個具體的需求 1) 我們買了一套智慧家電,有照明燈、風扇、冰箱、洗衣機,我們只要在手機上安裝 app 就可以控制對這些家電工作。 2) 這些智慧家電來自不同的廠家,我們不想針對每一種家電都安裝一個 App,分別控
支援向量機演算法的實現和應用(Python3超詳細的原始碼實現+圖介紹)
支援向量機演算法的實現和應用,因為自己推到過SVM,建議自己推到一遍, 這裡不對SVM原理做詳細的說明。 原理公式推到推薦看:https://blog.csdn.net/jcjx0315/article/details/61929439 #!/usr/bin/env python # enc
android Okhttp3的簡單使用(親測可用,原始碼已貼出)
1.先在model中新增所需要的依賴,主要有: compile 'com.squareup.okhttp3:okhttp:3.9.0' compile 'com.jakewharton:butterknife:8.8.1' annotationProcessor 'com.
Libevent原始碼分析-----更多evbuffer操作函式
鎖操作: 在前一篇博文可以看到很多函式在操作前都需要對這個evbuffer進行加鎖。同event_base不同,如果evbuffer支援鎖的話,要顯式地呼叫函式evbuffer_enable_locking。 //buffer.c檔案 int//