1. 程式人生 > >《Linux核心完全註釋》筆記(1)

《Linux核心完全註釋》筆記(1)

開始看《Linux核心完全註釋》,不侷限於此書,期望將以前不懂或不甚明白的地方弄通。不考慮時間,只培養自己的興趣。能力有限,盡力而為

核心版本:0.11(很老麼?呵呵,書上有為什麼用它的理由)

Linux 作業系統是UNIX 作業系統的一個克隆版本,作者Linus Toravlds(膜拜!),開發出FREAX(Linus最初這麼叫Linux)時是赫爾辛基大學計算機科學系的二年級學生(我都22了,唉~)。當時GNU 計劃 的作業系統HURD 一直在開發之中,而且看來不能在幾年內完成。在通讀了MINIX 作業系統後,Linus全力開發FREAX。到了1991 年的10 月5 日,Linus 在comp.os.minix 新聞組上釋出訊息,正式向外宣佈Linux 核心系統的誕生。

第一章讀完,感覺作者純屬在激發讀者的鬥志。所以只要你有足夠的鬥志:)看看我上面的簡介就行了。

下面我們進入第二章。

 P15(這代表15頁,貌似地球人都知道吧,汗,羅嗦了):

一個完整可用的作業系統主要由4 部分組成:硬體、作業系統核心、作業系統服務和使用者應用程式。Linux 0.11 核心,採用的單核心模式。在單核心模式的系統中,作業系統所提供服務的流程為:應用主程式使用指定的引數值執行系統呼叫指令(int x80),使CPU 從使用者態(User Mode)切換到核心態(Kernel Model),然後作業系統根據具體的引數值呼叫特定的系統呼叫服務程式,而這些服務程式則根據需要再底層的一些支援函式以完成特定的功能。在完成了應用程式所要求的服務後,作業系統又從核心態切換回使用者態,返回到應用程式中繼續執行後面的指令。

到這裡就牽扯到一個使用者態和核心態的問題。解釋如下:

使用者態和核心態

386及以上的CPU實現了4個特權級模式(WINDOWS只用到了其中兩個),其中特權級0(Ring0)是留給作業系統程式碼,裝置驅動程式程式碼使用的,它們工作於系統核心態;而特權極3(Ring3)則給普通的使用者程式使用,它們工作在使用者態。運行於處理器核心態的程式碼不受任何的限制,可以自由地訪問任何有效地址,進行直接埠訪問。而運行於使用者態的程式碼則要受到處理器的諸多檢查,它們只能訪問對映其地址空間的頁表項中規定的在使用者態下可訪問頁面的虛擬地址,且只能對任務狀態段(TSS)中I/O許可點陣圖(I/O Permission Bitmap)中規定的可訪問埠進行直接訪問(此時處理器狀態和控制標誌暫存器EFLAGS中的IOPL通常為0,指明當前可以進行直接I/O的最低特權級別是Ring0)。以上的討論只限於保護模式作業系統,象DOS這種真實模式作業系統則沒有這些概念,其中的所有程式碼都可被看作執行在核心態。既然執行在核心態有如此之多的優勢,那麼病毒當然沒有理由不想得到Ring0。處理器模式從Ring3向Ring0的切換髮生在控制權轉移時,有以下兩種情況:訪問呼叫門的長轉移指令CALL,訪問中斷門或陷阱門的INT指令。具體的轉移細節由於涉及複雜的保護檢查和堆疊切換,不再贅述,請參閱相關資料。現代的作業系統通常使用中斷門來提供系統服務,通過執行一條陷入指令來完成模式切換,在INTEL X86上這條指令是INT,如在WIN9X下是INT30(保護模式回撥),在LINUX下是INT80,在WINNT/2000下是INT2E。使用者模式的服務程式(如系統DLL)通過執行一個INTXX來請求系統服務,然後處理器模式將切換到核心態,工作於核心態的相應的系統程式碼將服務於此次請求並將結果傳給使用者程式。

^_^上面的一大堆東西就牽扯出很多奇怪的名詞,不管它,以後再一一解釋,你只要大概明白前面三句就行了。

go on.

p16

Linux 核心主要由5 個模組構成,它們分別是:程序排程模組、記憶體管理模組、檔案系統模組、進
程間通訊模組和網路介面模組。

 p18

在PC/AT 系列相容機中,使用了兩片8259A晶片,共可管理15 級中斷向量.

這裡有講到8259A,網上講解摘抄如下:

 

8259A中斷控制器

 

8259A是一箇中斷控制器。在一個8259A晶片有如下幾個內部暫存器:

Interrupt Mask Register (IMR)

Interrupt Request Register (IRR)

In Sevice Register (ISR)

IMR
被用作過濾被遮蔽的中斷;IRR被用作暫時放置未被進一步處理的Interrupt;當一個Interrupt正在被CPU處理時,此中斷被放置在ISR中。除了這幾個暫存器之外,8259A還有一個單元叫做Priority Resolver,當多箇中斷同時發生時,Priority Resolver根據它們的優先順序,將高優先順序者優先傳遞給CPU當一箇中斷請求從IR0IR7中的某根線到達IMR時,IMR首先判斷此IR是否被遮蔽,如果被遮蔽,則此中斷請求被丟棄;否則,則將其放入IRR中。在此中斷請求不能進行下一步處理之前,它一直被放在IRR中。一旦發現處理中斷的時機已到,Priority Resolver將從所有被放置於IRR中的中斷中挑選出一個優先順序最高的中斷,將其傳遞給CPU去處理。IR號越低的中斷優先級別越高,比如IR0的優先級別是最高的。

8259A
通過傳送一個INTR(Interrupt Request)訊號給CPU,通知CPU有一箇中斷到達。CPU收到這個訊號後,會暫停執行下一條指令,然後傳送一個INTA(Interrupt Acknowledge)訊號給8259A8259A收到這個訊號之後,馬上將ISR中對應此中斷請求的Bit設定,同時IRR中相應的bit會被reset。比如,如果當前的中斷請求是IR3的話,那麼ISR中的bit-3就會被設定,IRRIR3對應的bit就會被reset。這表示此中斷請求正在被CPU處理,而不是正在等待CPU處理。隨後,CPU會再次傳送一個INTA訊號給8259A,要求它告訴CPU此中斷請求的中斷向量是什麼,這是一個從0255的一個數。8259A根據被設定的起始向量號(起始向量號通過中斷控制字ICW2被初始化)加上中斷請求號計算出中斷向量號,並將其放置在Data Bus上。比如被初始化的起始向量號為8,當前的中斷請求為IR3,則計算出的中斷向量為8+3=11

CPU
Data Bus上得到這個中斷向量之後,就去IDT中找到相應的中斷服務程式ISR,並呼叫它。如果8259AEnd of Interrupt (EOI)通知被設定位人工模式,那麼當ISR處理完該處理的事情之後,應該傳送一個EOI8259A

8259A
得到EOI通知之後,ISR暫存器中對應於此中斷請求的Bit會被Reset如果8259AEnd of Interrupt (EOI)通知被設定位自動模式,那麼在第2INTA訊號收到後,8259A ISR暫存器中對應於此中斷請求的Bit就會被Reset在此期間,如果又有新的中斷請求到達,並被放置於IRR中,如果這些新的中斷請求中有比在ISR寄存中放置的所有中斷優先級別還高的話,那麼這些高優先級別的中斷請求將會被馬上按照上述過程進行處理;否則,這些中斷將會被放在IRR中,直到ISR中高優先級別的中斷被處理結束,也就是說知道ISR暫存器中高優先級別的bitReset為止.

p18 PC/AT

 

IBM PC/AT

IBM PC AT是世界著名計算機公司美國國際商用機器公司(IBM)1984年釋出的個人電腦產品,正式名稱是IBM 5170 PC ATAT是英文先進技術”(Advanced Technology)的縮寫,這是由於它引入了標準的16ISA匯流排以及採用了當時最新的英特爾80286處理器。PC/ATIBM公司自PC機發布後的第二代升級產品(也有人認為在此之前釋出的PC/XT是第二代產品)。儘管早期的產品存在著磁碟儲存部件相關的瑕疵,它最終還是迅速流行於商用及普通使用者市場,成為了PC工業最持久的事實標準。至今,由於軟體相容性的原因,最新的PC系統都還支援PC/AT機的匯流排結構。

p19

在Linux 0.11 核心中,PC 機的可程式設計定時晶片Intel 8253 被設定成每隔10 毫秒就發出一個時鐘中斷(IRQ0)訊號。這個時間節拍就是系統執行的脈搏,我們稱之為1 個系統滴答。

p20

Linux 0.11 核心系統最多可有64 個程序同時存在。除了第一個程序是“手工”建立以外,其餘的都是程序使用系統呼叫fork 建立的新程序。。程序由可執行的指令程式碼、資料和堆疊區組成。程序中的程式碼和資料部分分別對應一個執行檔案中的程式碼段、資料段。每個程序只能執行自己的程式碼和訪問自己的資料及堆疊區。程序之間相互之間的通訊需要通過系統呼叫來進行。核心通過排程程式分時排程各個程序執行。Linux核心堆疊和使用者堆疊是分開的。使用者堆疊用於程序在使用者態下臨時儲存呼叫函式的引數、區域性變數等資料。核心堆疊則含有核心程式執行函式呼叫時的資訊。

白天努力工作,晚上努力看書!明天go on!

相關推薦

linux 核心完全註釋筆記 1章--2.4章 2006.04.06

       第一章 linux的誕生   1990年 芬蘭 赫爾辛基大學計算機系  20歲的 Linus Benedict Torvalds 通過學習 《MINIX 系統》的原始碼 後決定開發的  linux 系統 包括學習了 M.J.Bach 的《UNIX作業系統設計》

JavaScript核心技術學習筆記1——DOM基礎

無法 strong 元素節點 tor cli val 獲取元素 是什麽 標準 DOM基礎 一、DOM是什麽   Document object Model,文檔對象模型,是由W3C定義的一個標準。簡單來說,DOM裏面有很多方法,我們通過它提供的方法來操作一個頁面中的某個元素

linux 監控效能學習筆記1

 top命令中的 load average後面的三個數字分別表示距離現在一分鐘,五分鐘,十五分鐘的負載情況。   在單核系統中100%利用負載標識為1.00,雙核系統標識2.00 四核系統標識為4.00 因此,有一個 14 load average值和 24個 核心的負載

Linux核心設計與實現1--核心開發的特點

1. 核心程式設計時既不能訪問C庫也不能訪問標準的C標頭檔案        其中的原因有很多種。其一,C標準庫的很多函式實現都是基於核心實現的,這核心編譯的時候都還沒有核心,所以就不存在這些函式,這個就是先有雞還是先有蛋這個悖論。其二,其主主要的的

Linux系統程式設計學習筆記1-檔案的I/O操作

概述 在Linux系統下,通常以一個非負整數來代指一個開啟的檔案,這些檔案可以包括終端,socket,裝置,普通檔案等等。規定的三個標準的檔案描述符為0,1,2下面分別介紹(在互動式shell中,這些檔案描述符通常指向shell執行所在的終端): 檔案描述

Docker基礎: Linux核心名稱空間之1 mnt namespace

作為開源Container技術代表的Docker,它跟Linux核心的Namespace和Cgroup兩大特性密不可分。物有本末,事有終始。知所先後,則近道矣。理解Linux的這兩大特性將有助於我們更深入的理解Docker。在前面的文章中,我們曾經體驗過如

Linux核心0.11完全註釋修正版 --讀書筆記1

RTFSC 閱讀0.11核心版本的原因: 適合作業系統初學者的入門學習起點 閱讀早期核心的好處: 簡化的核心程式碼,避免現有核心的複雜性,能夠透徹的說明問題 -- Leland

Linux核心完全註釋筆記1

開始看《Linux核心完全註釋》,不侷限於此書,期望將以前不懂或不甚明白的地方弄通。不考慮時間,只培養自己的興趣。能力有限,盡力而為 核心版本:0.11(很老麼?呵呵,書上有為什麼用它的理由) Linux 作業系統是UNIX 作業系統的一個克隆版本,作者Lin

Linux核心完全註釋Linux核心體系結構

Linux核心完全註釋之Linux核心體系結構(續) 2.6 Linux 核心對記憶體的使用方法 2.8 Linux 核心原始碼的目錄結構 2.9 核心系統與使用者程式的關係 2.10 linux/Makefile 檔案 小結

Linux核心完全註釋0.11版DAY2

fs目錄是檔案系統實現程式的目錄,包含17個C語言程式。這些程式可分為四個部分:高速緩衝區管理、底層檔案操作、檔案資料訪問和檔案高層函式。核心檔案buffer.c是高速緩衝區程式,因為檔案系統資料訪問都需要首先讀取到高速緩衝區。                       

linux學習筆記1

1 linux之父是linus Torvalds(李納斯 托沃滋),1991年他在赫爾辛基大學讀書時自己手動寫了一個電腦操作系統,取名linux,並且公布了源代碼。 C語言之父是Dennis M Ritchie(丹尼斯 裏奇)。 JAVA之父是詹姆斯高斯林,出生在加拿大,他編寫了多處理器版本的unix操

Linux第三周學習筆記1

命令 hiho 並且 ron 增加 如果 mkdir strong lin Linux第三周學習筆記(1)2.20 特殊權限stick_bit特殊權限stick_bit:意為防刪除位。文件是否可以被某一個用戶刪除,主要取決於該文件所在目錄是否對該用戶具有寫的權限。如果沒有寫

linux高性能編程學習筆記1

linuxTCP/TP協議族:分層、多協議的通信體系,四層協議系統,自底向上:數據鏈路層、網絡層、傳輸層、應用層數據鏈路層:實現網卡接口的網絡驅動程序,以處理數據在物理媒介上得到傳輸數據鏈路層兩個常用的協議:ARP協議(地址解析協議)、RARP協議(逆地址解析協議)網絡層:實現數據包的選路和轉發網絡層最核心的

linux 隨堂筆記1

ack boot 說明 date CP col tree 普通 鏈接 1.# 管理員賬號 $ 普通用戶 切換管理員賬戶:su (需要輸入root用戶的密碼) 退出管理員賬戶:exit 2.按[向上箭頭]和[向下箭頭]可以滾動以前使用的命令 鍵入文件名、命令或者路徑名的一部分

Linux學習筆記1linux的開關機及重啟

baidu 方式 圖形界面 class bsp har boot init5 ida linux的啟動流程 一、啟動 (1)電源 開關   (2)選擇啟動方式:FLOPPY/BIOS/CDROM(軟盤/bios啟動/光盤) 基於MBR引導方式 【1】MBR:最多只能劃分4

Kafka學習筆記1----Kafka的簡介和Linux下單機安裝

1. Kafka簡介   Kafka is a distributed,partitioned,replicated commit logservice。它提供了類似於JMS的特性,但是在設計實現上完全不同,此外它並不是JMS規範的實現。kafka對訊息儲存時根據Topic進行歸類,傳送訊息者成為Produ

Java核心技術 卷I 基礎知識 學習筆記1

參考  Java核心技術 卷I 基礎知識 Java: 簡單性、面向物件、分散式、健壯性、安全性、體系結構中立、可移植性、解釋型、高效能、多執行緒、動態性。 分散式 Java有一個豐富的例程庫,用於處理像HTTP和FTP之類的TCP/IP協議。Java

Linux核心完全註釋 閱讀筆記:3.3、C語言程式

By: Ailson Jack Date: 2018.09.14 本小節給出核心中經常用到的一些gcc擴充語句的說明。 1、C程式編譯和連結          使用gcc編譯器編譯C語言程式時,通常會經過4個處理階段,即預處理階段、編譯階段、彙編階段和連結階段

Linux核心完全註釋 閱讀筆記:3.4、C與彙編程式的相互呼叫

1、C函式呼叫機制          函式呼叫操作包括從一塊程式碼到另一塊程式碼之間的雙向資料傳遞和執行控制轉移。資料傳遞通過函式引數和返回值來進行。另外,我們還需要在進入函式時為函式的區域性變數分配儲存空間,並且在退出函式時收回這部分空間。Intel 80x86 CP

linux學習筆記1linux基礎知識

1.linux是什麼? Linux這個詞本身只表示Linux核心,但實際上人們已經習慣了用Linux來形容整個基於Linux核心,並且使用GNU 工程各種工具和資料庫的作業系統。 2. 什麼是shell 保護系統核心並對外提供操作介面的軟體 在linux中預設的