linux內核完全剖析 學習筆記 打字太累 截圖

  • 1. linux0.11開機時間

QQ截圖20150514220020.png
#define MINUTE 60
#define HOUR (60*MINUTE)
#define DAY (24*HOUR)
#define YEAR (365*DAY)
 
/* interestingly, we assume leap-years */
static int month[12] = {
 0,
 DAY*(31),
 DAY*(31+29),
 DAY*(31+29+31),
 DAY*(31+29+31+30),
 DAY*(31+29+31+30+31),
 DAY*(31+29+31+30+31+30),
 DAY*(31+29+31+30+31+30+31),
 DAY*(31+29+31+30+31+30+31+31),
 DAY*(31+29+31+30+31+30+31+31+30),
 DAY*(31+29+31+30+31+30+31+31+30+31),
 DAY*(31+29+31+30+31+30+31+31+30+31+30)
};
 
QQ截圖20150514220020.png
 
  • 2.結構體賦值

QQ截圖20150516152150.png
  • 3. 關於do_signal *(&eip) = sa_handler

(1)
http://www.oldlinux.org/oldlinux/viewthread.php?tid=14839&extra=page%3D2
*(&eip) = sa_handler 與 eip = sa_handler 有什麼不一樣?
網上有說 是因爲 兩個的類型不一樣 一個long 一個 unsigned long ,感覺這不是原因。
應該是另一種說法 eip = sa_handler 這條語句可能導致 編譯器進行優化 而棧中的值沒有改變  , 應該是這樣。
(2)
QQ截圖20150516152150.png
 
  • 4.任務切換

ljmp tss段選擇符這樣的語句會造成任務切換,cpu自動保存當前任務tss內容,並恢復需要切換到的任務的tss內容,造成任務切換。任務1和任務2的描述內容與任務0類似。
 
QQ圖片20150714154151.png
QQ圖片20150714154257.png
 QQ圖片20150714154434.png
QQ圖片20150714154529.png
QQ截圖20150714154606.png
 
  • 5.寫時複製

爲了介於物理內存,在調用fork()生成新進程時,新進程與原進程會共享同一內存區。只有當其中一個進程進行寫操作,系統纔會爲其另外分配內存頁面。這就是寫時複製的概念。
 QQ截圖20150627203215.png
 
QQ截圖20150627203557.png
 
 QQ圖片20150713110612.png
 
  • 6.需求加載(load on demand)/需求分頁(demand-paging)

QQ截圖20150627203931.png
 
  • 7.指針的指針

QQ圖片20150625083845.png
 QQ截圖20150625083538.png
  • 8.   I/O端口和尋址

QQ圖片20150710183220.png
SPARC爲統一編址,ld,st指令訪問
 
  • 9.  接口訪問控制

QQ圖片20150710183558.png
 
  • 10.  C程序編譯和鏈接

QQ圖片20150710191900.png
 
  • 11. volatile

QQ圖片20150710193104.png
 
  • 12. 嵌入彙編

QQ圖片20150710193428.png

這裏不同處理器用到的寄存器名字應該不一樣吧。。。目前看到的資料都是對應x86的eax,ebx啥的。。。然而我要做的事sparc

 
  • 13.  圓括號中的組合語句

QQ圖片20150710193655.png
 
  • 14. 目標文件符號表和字符串部分

 
QQ圖片20150710202243.png
 
  • 15. 連接程序預定義變量

QQ圖片20150710203120.png
ARINC 653項目遇到過。。。自己有定義了個end變量,值總是不對。。。原來是鏈接程序預定義的
 
  • 16. 高尾端/低尾端

不過給我啓發的是,在裘宗燕翻譯的《程序設計實踐》裏,這對術語並沒有翻譯爲“大端”和小端,而是“高尾端”“低尾端”,這就好理解了:如果把一個數看成一個字符串,比如11223344看成"11223344",末尾是個'\0','11'到'44'個佔用一個存儲單元,那麼它的尾端(低字節)很顯然是44,前面的高還是低就表示尾端放在高地址還是低地址,它在內存中的放法非常直觀,如下圖:

X86小端,SPARC大端

 
  • 內存地址空間

QQ圖片20150711164000.png
QQ圖片20150711164224.png
 
  • 17. 分段機制

QQ圖片20150711095010.png
 
QQ圖片20150711095121.png
 
QQ圖片20150711094734.png
 
QQ圖片20150711095236.png
 
QQ圖片20150711095600.png
 
  • 18. 一致/非一致代碼段

一致代碼段:

    簡單理解,就是操作系統拿出來被共享的代碼段,可以被低特權級的用戶直接調用訪問的代碼.

    通常這些共享代碼,是"不訪問"受保護的資源和某些類型異常處理。比如一些數學計算函數庫,爲純粹的數學運算計算,被作爲一致代碼段.

一致代碼段的限制作用

    1.特權級高的程序不允許訪問特權級低的數據:核心態不允許調用用戶態的數據.

    2.特權級低的程序可以訪問到特權級高的數據.但是特權級不會改變:用戶態還是用戶態.

非一致代碼段:

    爲了避免低特權級的訪問而被操作系統保護起來的系統代碼.

非一致代碼段的限制作用

    1.只允許同級間訪問.

    2.絕對禁止不同級訪問:核心態不用用戶態.用戶態也不使用核心態.

通常低特權代碼必須通過"門"來實現對高特權代碼的訪問和調用.

不同級別代碼段之間轉移規則,是通過CPL/RPL/DPL來校驗.

 
  • 19. sleep_on等待隊列

QQ圖片20150713095424.jpg
 
QQ圖片20150713095854.png
 
  • 20.定時器鏈表

QQ圖片20150713101051.png
 
  • 21.信號

QQ圖片20150713103959.png
QQ圖片20150713104650.png
QQ圖片20150713104734.jpg
 
QQ圖片20150713104858.png
 
QQ圖片20150713105004.pngQQ圖片20150713105044.png
 
  • 22 . 塊設備

QQ圖片20150714111034.png
QQ圖片20150714103046.png
 
QQ圖片20150714103507.png
QQ圖片20150714103402.png
QQ圖片20150714103843.png
 QQ圖片20150714110341.png
QQ圖片20150714110716.png
 
  • 23. extern inline

QQ圖片20150714113317.png

-----------------------------------------------------------------------------------------------------2015-07-16---------------------------------------------------------------------------------------------------------------

24.硬盤讀寫

QQ截圖20150714163035.png
QQ截圖20150714163139.png
QQ截圖20150714163229.png

溫徹斯特硬盤

    1973年,IBM研製成功了一種新型的硬盤IBM3340。這種硬盤擁有幾個同軸的金屬盤片,盤片上塗着磁性材料。它們和可以移動的磁頭共同密封在一個盒子裏面,磁頭能從旋轉的盤片上讀出磁信號的變化--這就是我們今天使用的硬盤的祖先,IBM把它叫做溫徹斯特硬盤。
    個人電腦上的硬盤今年30歲了。當然,沒有一塊硬盤能如此長壽。早在1956年,國際商用機器公司(IBM)發明了世界上第一個磁盤存儲系統 IBM 305 RAMAC,這個只有5MB的存儲設備卻擁有50個24英寸的盤片。在那個時代,RAMAC是令人吃驚的計算機設備——就其笨拙程度而言,在今天毫無疑問也是令人吃驚的。
1973年,IBM研製成功了一種新型的硬盤IBM3340。這種硬盤擁有幾個同軸的金屬盤片,盤片上塗着磁性材料。它們和可以移動的磁頭共同密封在一個盒子裏面,磁頭能從旋轉的盤片上讀出磁信號的變化--這就是我們今天是用的硬盤的祖先——IBM把它叫做溫徹斯特(Winchester)硬盤,也稱溫盤。
    “溫徹斯特”這個名字還有個小小的來歷;IBM3340擁有兩個30MB的存儲單元,而當時一種很有名的“溫徹斯特來複槍”的口徑和裝藥也恰好包含了兩個數字“30”;於是這種硬盤的內部代號就被定爲“溫徹斯特”。eaf81a4c510fd9f9fc9e434a252dd42a2834a403.jpg
    溫徹斯特硬盤採用了一個了不起的技術:它的磁頭並不與盤片接觸;可以想象,如果要提高存取數據的速度,硬盤的盤片就應該越轉越快。但是如果磁頭與盤片接觸,那麼無論採用什麼材料都不可能勝任這種工作。技術人員想到讓磁頭在盤片上方“飛行”,與盤片保持一個非常近的距離。這個想法是可行的,因爲盤片高速旋轉會產生流動的風,只要磁頭的形狀合適,它就能像飛機一樣飛行。這樣,盤片就能旋轉的很快而不必擔心摩擦造成的災難。磁頭被固定在一個能沿盤片徑向運動的臂上。由於磁頭相對盤片高速運動,並且二者距離很近,哪怕是一丁點灰塵也會造成磁盤的損壞。所以,盤片、磁頭和驅動機構被密封在了一個盒子裏。
QQ截圖20150714165632.png
 

25. 字符設備 (內容挺多,大量截圖)

QQ截圖20150714180315.png
QQ截圖20150714180345.png

規範模式/非規範模式

QQ截圖20150714181440.pngQQ截圖20150714181555.png
 
QQ截圖20150714182012.png

控制檯驅動程序

QQ截圖20150714182051.png
 
QQ截圖20150714182209.png
 
QQ截圖20150714184342.png

UART

 
QQ截圖20150714194107.png
 
QQ截圖20150714194514.pngQQ截圖20150714194546.png
 

26.  MINIX文件系統 (內容好多,但是都有必要看一下。。。)

QQ截圖20150715102900.png
 
QQ截圖20150715103042.png
 
QQ截圖20150715103128.png
 
QQ截圖20150715103242.png
 
QQ截圖20150715103432.png
 
QQ截圖20150715103458.png
 
QQ截圖20150715103518.png
 
QQ截圖20150715103708.png
 
QQ截圖20150715104227.png
 
QQ截圖20150715104408.png
 
QQ截圖20150715104612.png
 
QQ截圖20150715104738.png
 
QQ截圖20150715104758.png
 
QQ截圖20150715105206.png
 
QQ截圖20150715105221.png
 
QQ截圖20150715105232.png
 

 高速緩衝區

QQ截圖20150715105459.png
 
QQ截圖20150715105658.png
 
QQ截圖20150715105922.png
 
QQ截圖20150715110005.png
 

buffer.c

QQ截圖20150716144506.pngQQ截圖20150716144746.pngQQ截圖20150716144905.pngQQ截圖20150716145144.pngQQ截圖20150716145223.pngQQ截圖20150716145349.pngQQ截圖20150716145623.pngQQ截圖20150716150305.pngQQ截圖20150716150819.pngQQ截圖20150716151541.png
QQ截圖20150716151639.pngQQ截圖20150716151648.pngQQ截圖20150716151739.pngQQ截圖20150716151804.pngQQ截圖20150716151838.png
 

 
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章