自拍偷在线精品自拍偷,亚洲欧美中文日韩v在线观看不卡

Linux 概念架構(gòu)的理解

開發(fā) 架構(gòu)
Linux 內(nèi)核是整個(gè) Linux 系統(tǒng)中的一層。內(nèi)核從概念上由五個(gè)主要的子系統(tǒng)構(gòu)成:進(jìn)程調(diào)度器模塊、內(nèi)存管理模塊、虛擬文件系統(tǒng)、網(wǎng)絡(luò)接口模塊和進(jìn)程間通信模塊。這些模塊之間通過函數(shù)調(diào)用和共享數(shù)據(jù)結(jié)構(gòu)進(jìn)行數(shù)據(jù)交互。

摘要

Linux kernel 成功的兩個(gè)原因:

  1. 架構(gòu)設(shè)計(jì)支持大量的志愿開發(fā)者加入到開發(fā)過程中;

  2. 每個(gè)子系統(tǒng),尤其是那些需要改進(jìn)的,都支持很好的擴(kuò)展性。

正是這兩個(gè)原因使得 Linux kernel 可以不斷進(jìn)化。

[[158664]]

一、Linux內(nèi)核在整個(gè)計(jì)算機(jī)系統(tǒng)中的位置

Linux 概念架構(gòu)的理解


Fig 1 – 計(jì)算機(jī)系統(tǒng)分層結(jié)構(gòu)

分層結(jié)構(gòu)的原則:

the dependencies between subsystems are from the top down: layers pictured near the top depend on lower layers, but subsystems nearer the bottom do not depend on higher layers.

這種子系統(tǒng)之間的依賴性只能是從上到下,也就是圖中頂部的子系統(tǒng)依賴底部的子系統(tǒng),反之則不行。

二、內(nèi)核的作用

  1. 虛擬化(抽象),將計(jì)算機(jī)硬件抽象為一臺虛擬機(jī),供用戶進(jìn)程(process)使用;進(jìn)程運(yùn)行時(shí)完全不需要知道硬件是如何工作的,只要調(diào)用 Linux kernel 提供的虛擬接口(virtual interface)即可。

  2. 多任務(wù)處理,實(shí)際上是多個(gè)任務(wù)在并行使用計(jì)算機(jī)硬件資源,內(nèi)核的任務(wù)是仲裁對資源的使用,制造每個(gè)進(jìn)程都以為自己是獨(dú)占系統(tǒng)的錯(cuò)覺。

PS:進(jìn)程上下文切換就是要換掉程序狀態(tài)字、換掉頁表基地址寄存器的內(nèi)容、換掉 current 指向的 task_struct 實(shí)例、換掉 PC ——>也就換掉了進(jìn)程打開的文件(通過 task_struct 的 files 可以找到)、換掉了進(jìn)程內(nèi)存的執(zhí)行空間(通過 task_struct 的 mem 可以找到);

三、Linux內(nèi)核的整體架構(gòu)

Linux 概念架構(gòu)的理解


Linux內(nèi)核的整體架構(gòu)

中心系統(tǒng)是進(jìn)程調(diào)度器(Process Scheduler,SCHED):所有其余的子系統(tǒng)都依賴于進(jìn)程調(diào)度器,因?yàn)槠溆嘧酉到y(tǒng)都需要阻塞和恢復(fù)進(jìn)程。當(dāng)一個(gè)進(jìn)程需要等待一個(gè)硬件動作完成 時(shí),相應(yīng)子系統(tǒng)會阻塞這個(gè)進(jìn)程;當(dāng)這個(gè)硬件動作完成時(shí),子系統(tǒng)會將這個(gè)進(jìn)程恢復(fù):這個(gè)阻塞和恢復(fù)動作都要依賴于進(jìn)程調(diào)度器完成。

上圖中的每一個(gè)依賴箭頭都有原因:

  • 進(jìn)程調(diào)度器依賴內(nèi)存管理器(Memory manager):進(jìn)程恢復(fù)執(zhí)行時(shí),需要依靠內(nèi)存管理器分配供它運(yùn)行的內(nèi)存。

  • IPC 子系統(tǒng)依賴于內(nèi)存管理器:共享內(nèi)存機(jī)制是進(jìn)程間通信的一種方法,運(yùn)行兩個(gè)進(jìn)程利用同一塊共享的內(nèi)存空間進(jìn)行信息傳遞。

  • VFS 依賴于網(wǎng)絡(luò)接口(Network Interface):支持 NFS 網(wǎng)絡(luò)文件系統(tǒng);

  • VFS 依賴于內(nèi)存管理器:支持 ramdisk 設(shè)備

  • 內(nèi)存管理器依賴于 VFS,因?yàn)橐С纸粨Q(swapping),可以將暫時(shí)不運(yùn)行的進(jìn)程換出到磁盤上的交換分區(qū)(swap),進(jìn)入掛起狀態(tài)。

四、高度模塊化設(shè)計(jì)的系統(tǒng),利于分工合作。

  1. 只有極少數(shù)的程序員需要橫跨多個(gè)模塊開展工作,這種情況確實(shí)會發(fā)生,僅發(fā)生在當(dāng)前系統(tǒng)需要依賴另一個(gè)子系統(tǒng)時(shí);

  2. 硬件設(shè)備驅(qū)動(hardware device drivers)、文件系統(tǒng)模塊(logical filesystem modules)、網(wǎng)絡(luò)設(shè)備驅(qū)動(network device drivers)和網(wǎng)絡(luò)協(xié)議模塊(network protocol modules)這四個(gè)模塊的可擴(kuò)展性***。

五、系統(tǒng)中的數(shù)據(jù)結(jié)構(gòu)

  1. 任務(wù)列表(Task List)
    進(jìn)程調(diào)度器針對每個(gè)進(jìn)程維護(hù)一個(gè)數(shù)據(jù)結(jié)構(gòu) task_struct;所有的進(jìn)程用鏈表管理,形成 task list;進(jìn)程調(diào)度器還維護(hù)一個(gè) current 指針指向當(dāng)前正在占用 CPU 的進(jìn)程。

  2. 內(nèi)存映射(Memory Map)
    內(nèi)存管理器存儲每個(gè)進(jìn)程的虛擬地址到物理地址的映射;并且也提供了如何換出特定的頁,或者是如何進(jìn)行缺頁處理。這些信息存放在數(shù)據(jù)結(jié)構(gòu) mm_struct 中。每個(gè)進(jìn)程都有一個(gè) mm_struct 結(jié)構(gòu),在進(jìn)程的 task_struct 結(jié)構(gòu)中有一個(gè)指針 mm 指向次進(jìn)程的 mm_struct 結(jié)構(gòu)。
    在 mm_struct 中有一個(gè)指針 pgd,指向該進(jìn)程的頁目錄表(即存放頁目錄首地址)——>當(dāng)該進(jìn)程被調(diào)度時(shí),此指針被換成物理地址,寫入控制寄存器 CR3(x86體系結(jié)構(gòu)下的頁基址寄存器)

  3. I-nodes
    VFS 通過 inodes 節(jié)點(diǎn)表示磁盤上的文件鏡像,inodes 用于記錄文件的物理屬性。每個(gè)進(jìn)程都有一個(gè) files_struct 結(jié)構(gòu),用于表示該進(jìn)程打開的文件,在 task_struct 中有個(gè) files 指針。使用 inodes 節(jié)點(diǎn)可以實(shí)現(xiàn)文件共享。文件共享有兩種方式:(1)通過同一個(gè)系統(tǒng)打開文件 file 指向同一個(gè) inodes 節(jié)點(diǎn),這種情況發(fā)生于父子進(jìn)程間;(2)通過不同系統(tǒng)打開文件指向同一個(gè) inode 節(jié)點(diǎn),舉例有硬鏈接;或者是兩個(gè)不相關(guān)的指針打開同一個(gè)文件。

  4. 數(shù)據(jù)連接(Data Connection)
    內(nèi)核中所有的數(shù)據(jù)結(jié)構(gòu)的根都在進(jìn)程調(diào)度器維護(hù)的任務(wù)列表鏈表中。系統(tǒng)中每個(gè)進(jìn)程的的數(shù)據(jù)結(jié)構(gòu) task_struct 中有一個(gè)指針 mm 指向它的內(nèi)存映射信息;也有一個(gè)指針 files 指向它打開的文件(用戶打開文件表);還有一個(gè)指針指向該進(jìn)程打開的網(wǎng)絡(luò)套接字。

六、子系統(tǒng)架構(gòu)

1.進(jìn)程調(diào)度器(Process Scheduler)架構(gòu)

(1)目標(biāo)

進(jìn)程調(diào)度器是 Linux kernel 中最重要的子系統(tǒng)。系統(tǒng)通過它來控制對 CPU 的訪問——不僅僅是用戶進(jìn)程對 CPU 的訪問,也包括其余子系統(tǒng)對 CPU 的訪問。

(2)模塊

Linux 概念架構(gòu)的理解


進(jìn)程調(diào)度器

調(diào)度策略模塊(scheduling policy module):決定哪個(gè)進(jìn)程獲得對 CPU 的訪問權(quán);調(diào)度策略應(yīng)該讓所有進(jìn)程盡可能公平得共享 CPU。

  • 體系結(jié)構(gòu)相關(guān)模塊(architecture-specific module)設(shè)計(jì)一組統(tǒng)一的抽象接口來屏蔽特定體系接口芯片的硬件細(xì)節(jié)。這個(gè)模塊與 CPU 交互以阻塞和恢復(fù)進(jìn)程。這些操作包括獲取每個(gè)進(jìn)程需要保存的寄存器和狀態(tài)信息、執(zhí)行匯編代碼來完成阻塞或者恢復(fù)操作。

  • 體系結(jié)構(gòu)無關(guān)模塊(architecture-independent module)與調(diào)度策略模塊交互將決定下一個(gè)執(zhí)行的進(jìn)程,然后調(diào)用體系結(jié)構(gòu)相關(guān)的代碼去恢復(fù)那個(gè)進(jìn)程的執(zhí)行。不僅如此,這個(gè)模塊還會調(diào)用內(nèi)存管理器的 接口來確保被阻塞的進(jìn)程的內(nèi)存映射信息被正確得保存起來。

  • 系統(tǒng)調(diào)用接口模塊(system call interface)允許用戶進(jìn)程訪問 Linux Kernel 明確暴露給用戶進(jìn)程的資源。通過一組定義合適的基本上不變的接口(POSIX 標(biāo)準(zhǔn)),將用戶應(yīng)用程序和 Linux 內(nèi)核解耦,使得用戶進(jìn)程不會受到內(nèi)核變化的影響。

(3)數(shù)據(jù)表示

調(diào)度器維護(hù)一個(gè)數(shù)據(jù)結(jié)構(gòu)——task list,其中的元素時(shí)每個(gè)活動的進(jìn)程 task_struct 實(shí)例;這個(gè)數(shù)據(jù)結(jié)構(gòu)不僅僅包含用來阻塞和恢復(fù)進(jìn)程的信息,也包含額外的計(jì)數(shù)和狀態(tài)信息。這個(gè)數(shù)據(jù)結(jié)構(gòu)在整個(gè) kernel 層都可以公共訪問。

(4)依賴關(guān)系、數(shù)據(jù)流、控制流

正如前面提到過的,調(diào)度器需要調(diào)用內(nèi)存管理器提供的功能,去為需要恢復(fù)執(zhí)行的進(jìn)程選擇合適的物理地址,正因?yàn)槿绱?,所? 進(jìn)程調(diào)度器子系統(tǒng)依賴于內(nèi)存管理子系統(tǒng)。當(dāng)其他內(nèi)核子系統(tǒng)需要等待硬件請求完成時(shí),它們都依賴于進(jìn)程調(diào)度子系統(tǒng)進(jìn)行進(jìn)程的阻塞和恢復(fù)。這種依賴性通過函 數(shù)調(diào)用和訪問共享的 task list 數(shù)據(jù)結(jié)構(gòu)來體現(xiàn)。所有的內(nèi)核子系統(tǒng)都要讀或者寫代表當(dāng)前正在運(yùn)行進(jìn)程的數(shù)據(jù)結(jié)構(gòu),因此形成了貫穿整個(gè)系統(tǒng)的雙向數(shù)據(jù)流。

除了內(nèi)核層的數(shù)據(jù)流和控制流,OS 服務(wù)層還給用戶進(jìn)程提供注冊定時(shí)器的接口。這形成了由調(diào)度器對用戶進(jìn)程的控制流。通常喚醒睡眠進(jìn)程的用例不在正常的控制流范圍,因?yàn)橛脩暨M(jìn)程無法預(yù)知何時(shí) 被喚醒。***,調(diào)度器與 CPU 交互來阻塞和恢復(fù)進(jìn)程,這又形成它們之間的數(shù)據(jù)流和控制流——CPU 負(fù)責(zé)打斷當(dāng)前正在運(yùn)行的進(jìn)程,并允許內(nèi)核調(diào)度其他的進(jìn)程運(yùn)行。

2.內(nèi)存管理器(Memory Manager)架構(gòu)

(1)目標(biāo)

內(nèi)存管理模塊負(fù)責(zé)控制進(jìn)程如何訪問物理內(nèi)存資源。通過硬件內(nèi)存管理系統(tǒng)(MMU)管理進(jìn)程虛擬內(nèi)存和機(jī)器物理內(nèi)存之間的映射。每一個(gè)進(jìn)程都有自己獨(dú) 立的虛擬內(nèi)存空間,所以兩個(gè)進(jìn)程可能有相同的虛擬地址,但是它們實(shí)際上在不同的物理內(nèi)存區(qū)域運(yùn)行。MMU 提供內(nèi)存保護(hù),讓兩個(gè)進(jìn)程的物理內(nèi)存空間不互相干擾。內(nèi)存管理模塊還支持交換——將暫時(shí)不用的內(nèi)存頁換出到磁盤上的交換分區(qū),這種技術(shù)讓進(jìn)程的虛擬地址空 間大于物理內(nèi)存的大小。虛擬地址空間的大小由機(jī)器字長決定。

(2)模塊

Linux 概念架構(gòu)的理解


內(nèi)存管理子系統(tǒng)

  • 架構(gòu)相關(guān)模塊(architecture specific module)提供訪問物理內(nèi)存的虛擬接口;

  • 架構(gòu)無關(guān)模塊(architecture independent module)負(fù)責(zé)每個(gè)進(jìn)程的地址映射以及虛擬內(nèi)存交換。當(dāng)發(fā)生缺頁錯(cuò)誤時(shí),由該模塊負(fù)責(zé)決定哪個(gè)內(nèi)存頁應(yīng)該被換出內(nèi)存——因?yàn)檫@個(gè)內(nèi)存頁換出選擇算法幾 乎不需要改動,所以這里沒有建立一個(gè)獨(dú)立的策略模塊。

  • 系統(tǒng)調(diào)用接口(system call interface)為用戶進(jìn)程提供嚴(yán)格的訪問接口(malloc 和 free;mmap 和 ummap)。這個(gè)模塊允許用進(jìn)程分配和釋放內(nèi)存、執(zhí)行內(nèi)存映射文件操作。

(3)數(shù)據(jù)表示

內(nèi)存管理存放每個(gè)進(jìn)程的虛擬內(nèi)存到物理內(nèi)存的映射信息。這種映射信息存放在 mm_struct 結(jié)構(gòu)實(shí)例中,這個(gè)實(shí)例的指針又存放在每個(gè)進(jìn)程的 task_struct 中。除了存放映射信息,數(shù)據(jù)塊中還應(yīng)該存放關(guān)于內(nèi)存管理器如何獲取和存儲頁的信息。例如:可執(zhí)行代碼能夠?qū)⒖蓤?zhí)行鏡像作為備份存儲;但是動態(tài)申請的數(shù)據(jù)則 必須備份到系統(tǒng)頁中。(這個(gè)沒看懂,請高手解惑?)

***,內(nèi)存管理模塊還應(yīng)該存放訪問和技術(shù)信息,以保證系統(tǒng)的安全。

(4)依賴關(guān)系、數(shù)據(jù)流和控制流

內(nèi)存管理器控制物理內(nèi)存,當(dāng)頁面失?。╬age fault)發(fā)生時(shí),接受硬件的通知(缺頁中斷)—— 這意味著在內(nèi)存管理模塊和內(nèi)存管理硬件之間存在雙向的數(shù)據(jù)流和控制流。內(nèi)存管理也依賴文件系統(tǒng)來支持交換和內(nèi)存映射 I/O——這種需求意味著內(nèi)存管理器需要調(diào)用對文件系統(tǒng)提供的函數(shù)接口(procedure calls),往磁盤中存放內(nèi)存頁和從磁盤中取內(nèi)存頁。因?yàn)槲募到y(tǒng)請求非常慢,所以在等待內(nèi)存頁被換入之前,內(nèi)存管理器要讓進(jìn)程需要進(jìn)入休眠——這種需 求讓內(nèi)存管理器調(diào)用進(jìn)程調(diào)度器的接口。由于每個(gè)進(jìn)程的內(nèi)存映射存放在進(jìn)程調(diào)度器的數(shù)據(jù)結(jié)構(gòu)中,所以在內(nèi)存管理器和進(jìn)程調(diào)度器之間也有雙向的數(shù)據(jù)流和控制 流。用戶進(jìn)程可以建立新的進(jìn)程地址空間,并且能夠感知缺頁錯(cuò)誤——這里需要來自內(nèi)存管理器的控制流。一般來說沒有用戶進(jìn)程到內(nèi)存管理器的數(shù)據(jù)流,但是用戶 進(jìn)程卻可以通過 select 系統(tǒng)調(diào)用,從內(nèi)存管理器獲取一些信息。

3.虛擬文件系統(tǒng)(Virtual File System)架構(gòu)

(1)目標(biāo)

虛擬文件系統(tǒng)為存儲在硬件設(shè)備上數(shù)據(jù)提供統(tǒng)一的訪問接口??梢约嫒莶煌奈募到y(tǒng)(ext2,ext4,ntf等等)。計(jì)算機(jī)中幾乎所有的硬件設(shè)備 都被表示為一個(gè)通用的設(shè)備驅(qū)動接口。邏輯文件系統(tǒng)促進(jìn)與其他操作系統(tǒng)標(biāo)準(zhǔn)的兼容性,并且允許開發(fā)者以不同的策略實(shí)現(xiàn)文件系統(tǒng)。虛擬文件系統(tǒng)更進(jìn)一步,允許 系統(tǒng)管理員在任何設(shè)備上掛載任何邏輯文件系統(tǒng)。虛擬文件系統(tǒng)封裝物理設(shè)備和邏輯文件系統(tǒng)的細(xì)節(jié),并且允許用戶進(jìn)程使用統(tǒng)一的接口訪問文件。

除了傳統(tǒng)的文件系統(tǒng)目標(biāo),VFS 也負(fù)責(zé)裝載新的可執(zhí)行文件。這個(gè)任務(wù)由邏輯文件系統(tǒng)模塊完成,使得 Linux 可以支持多種可執(zhí)行文件。

(2)模塊

Linux 概念架構(gòu)的理解


虛擬文件系統(tǒng)模塊

  • 設(shè)備驅(qū)動模塊(device driver module)

  • 設(shè)備獨(dú)立接口模塊(Device Independent Interface):提供所有設(shè)備的同一視圖

  • 邏輯文件系統(tǒng)(logical file system):針對每種支持的文件系統(tǒng)

  • 系統(tǒng)獨(dú)立接口(system independent interface)提供硬件資源和邏輯文件系統(tǒng)都無關(guān)的接口,這個(gè)模塊通過塊設(shè)備節(jié)點(diǎn)或者字符設(shè)備節(jié)點(diǎn)提供所有的資源。

  • 系統(tǒng)調(diào)用模塊(system call interface)提供用戶進(jìn)程對文件系統(tǒng)的統(tǒng)一控制訪問。虛擬文件系統(tǒng)為用戶進(jìn)程屏蔽了所有特殊的特性。

(3)數(shù)據(jù)表示

所有文件使用 inode 表示。每個(gè) inode 都記錄一個(gè)文件在硬件設(shè)備上的位置信息。不僅如此,inode 還存放著指向邏輯文件系統(tǒng)模塊和設(shè)備驅(qū)動的的函數(shù)指針,這些指針能夠執(zhí)行具體的讀寫操作。通過按照這種形式(就是面向?qū)ο笾械奶摵瘮?shù)的思想)存放函數(shù)指 針,具體的邏輯文件系統(tǒng)和設(shè)備驅(qū)動可以向內(nèi)核注冊自己而不需要內(nèi)核依賴具體的模塊特性。

(4)依賴關(guān)系、數(shù)據(jù)流和控制流

一個(gè)特殊的設(shè)備驅(qū)動是 ramdisk,這個(gè)設(shè)備在主存中開辟一片區(qū)域,并把它當(dāng)成持久性存儲設(shè)備使用。這個(gè)設(shè)備驅(qū)動使用內(nèi)存管理模塊完成任務(wù),所以在 VFS 與對內(nèi)存管理模塊存在依賴關(guān)系(圖中的依賴關(guān)系反了,應(yīng)該是 VFS 依賴于內(nèi)存管理模塊)、數(shù)據(jù)流和控制流。

邏輯文件系統(tǒng)支持網(wǎng)絡(luò)文件系統(tǒng)。這個(gè)文件系統(tǒng)像訪問本地文件一樣,從另一臺機(jī)器上訪問文件。為了實(shí)現(xiàn)這個(gè)功能,一種邏輯文件系統(tǒng)通過網(wǎng)絡(luò)子系統(tǒng)完成它的任務(wù)——這引入了 VFS 對網(wǎng)絡(luò)子系統(tǒng)的一個(gè)依賴關(guān)系以及它們之間的控制流和數(shù)據(jù)流。

正如前面提到的,內(nèi)存管理器使用 VFS 完成內(nèi)存交換功能和內(nèi)存映射 I/O。另外,當(dāng) VFS 等待硬件請求完成時(shí),VFS 需要使用進(jìn)程調(diào)度器阻塞進(jìn)程;當(dāng)請求完成時(shí),VFS 需要通過進(jìn)程調(diào)度器喚醒進(jìn)程。***,系統(tǒng)調(diào)用接口允許用戶進(jìn)程調(diào)用來存取數(shù)據(jù)。不像前面的子系統(tǒng),VFS 沒有提供給用戶注冊不明確調(diào)用的機(jī)制,所以沒有從VFS到用戶進(jìn)程的控制流。

4.網(wǎng)絡(luò)接口(Network Interface)架構(gòu)

(1)目標(biāo)

網(wǎng)絡(luò)子系統(tǒng)讓 Linux 系統(tǒng)能夠通過網(wǎng)絡(luò)與其他系統(tǒng)相連。這個(gè)子系統(tǒng)支持很多硬件設(shè)備,也支持很多網(wǎng)絡(luò)協(xié)議。網(wǎng)絡(luò)子系統(tǒng)將硬件和協(xié)議的實(shí)現(xiàn)細(xì)節(jié)都屏蔽掉,并抽象出簡單易用的接口供用戶進(jìn)程和其他子系統(tǒng)使用——用戶進(jìn)程和其余子系統(tǒng)不需要知道硬件設(shè)備和協(xié)議的細(xì)節(jié)。

(2)模塊

Linux 概念架構(gòu)的理解
網(wǎng)絡(luò)協(xié)議層模塊圖

  • 網(wǎng)絡(luò)設(shè)備驅(qū)動模塊(network device drivers)

  • 設(shè)備獨(dú)立接口模塊(device independent interface module)提供所有硬件設(shè)備的一致訪問接口,使得高層子系統(tǒng)不需要知道硬件的細(xì)節(jié)信息。

  • 網(wǎng)絡(luò)協(xié)議模塊(network protocol modules)負(fù)責(zé)實(shí)現(xiàn)每一個(gè)網(wǎng)絡(luò)傳輸協(xié)議,例如:TCP,UDP,IP,HTTP,ARP等等~

  • 協(xié)議無關(guān)模塊(protocol independent interface)提供獨(dú)立于具體協(xié)議和具體硬件設(shè)備的一致性接口。這使得其余內(nèi)核子系統(tǒng)無需依賴特定的協(xié)議或者設(shè)備就能訪問網(wǎng)絡(luò)。

  • 系統(tǒng)調(diào)用接口模塊(system calls interface)規(guī)定了用戶進(jìn)程可以訪問的網(wǎng)絡(luò)編程API

(3)數(shù)據(jù)表示

每個(gè)網(wǎng)絡(luò)對象都被表示為一個(gè)套接字(socket)。套接字與進(jìn)程關(guān)聯(lián)的方法和 inode 節(jié)點(diǎn)相同。通過兩個(gè) task_struct 指向同一個(gè)套接字,套接字可以被多個(gè)進(jìn)程共享。

(4)數(shù)據(jù)流,控制流和依賴關(guān)系

當(dāng)網(wǎng)絡(luò)子系統(tǒng)需要等待硬件請求完成時(shí),它需要通過進(jìn)程調(diào)度系統(tǒng)將進(jìn)程阻塞和喚醒——這形成了網(wǎng)絡(luò)子系統(tǒng)和進(jìn)程調(diào)度子系統(tǒng)之間的控制流和數(shù)據(jù)流。不僅如此,虛擬文件系統(tǒng)通過網(wǎng)絡(luò)子系統(tǒng)實(shí)現(xiàn)網(wǎng)絡(luò)文件系統(tǒng)(NFS)——這形成了 VFS 和網(wǎng)絡(luò)子系統(tǒng)指甲的數(shù)據(jù)流和控制流。

七、結(jié)論

1、Linux 內(nèi)核是整個(gè) Linux 系統(tǒng)中的一層。內(nèi)核從概念上由五個(gè)主要的子系統(tǒng)構(gòu)成:進(jìn)程調(diào)度器模塊、內(nèi)存管理模塊、虛擬文件系統(tǒng)、網(wǎng)絡(luò)接口模塊和進(jìn)程間通信模塊。這些模塊之間通過函數(shù)調(diào)用和共享數(shù)據(jù)結(jié)構(gòu)進(jìn)行數(shù)據(jù)交互。

2、Linux 內(nèi)核架構(gòu)促進(jìn)了他的成功,這種架構(gòu)使得大量的志愿開發(fā)人員可以合適得分工合作,并且使得各個(gè)特定的模塊便于擴(kuò)展。

  • 可擴(kuò)展性一:Linux 架構(gòu)通過一項(xiàng)數(shù)據(jù)抽象技術(shù)使得這些子系統(tǒng)成為可擴(kuò)展的——每個(gè)具體的硬件設(shè)備驅(qū)動都實(shí)現(xiàn)為單獨(dú)的模塊,該模塊支持內(nèi)核提供的統(tǒng)一的接口。通過這種方式,個(gè)人開發(fā)者只需要和其他內(nèi)核開發(fā)者做最少的交互,就可以為 Linux 內(nèi)核添加新的設(shè)備驅(qū)動。

  • 可擴(kuò)展性二:Linux 內(nèi)核支持多種不同的體系結(jié)構(gòu)。在每個(gè)子系統(tǒng)中,都將體系結(jié)構(gòu)相關(guān)的代碼分割出來,形成單獨(dú)的模塊。通過這種方法,一些廠家在推出他們自己的芯片時(shí),他們的內(nèi)核開發(fā)小組只需要重新實(shí)現(xiàn)內(nèi)核中機(jī)器相關(guān)的代碼,就可以講內(nèi)核移植到新的芯片上運(yùn)行。

參考文章:

  1. http://oss.org.cn/ossdocs/linux/kernel/a1/index.html

  2. http://www.cs.cmu.edu/afs/cs/project/able/www/paper_abstracts/intro_softarch.html

  3. http://www.cs.cmu.edu/afs/cs/project/able/www/paper_abstracts/intro_softarch.html

  4. http://www.fceia.unr.edu.ar/ingsoft/monroe00.pdf

  5. 內(nèi)核源碼:http://lxr.oss.org.cn/

 

責(zé)任編輯:王雪燕 來源: 杜琪
相關(guān)推薦

2015-12-09 13:06:15

Linux架構(gòu)內(nèi)核

2010-05-05 18:18:55

IP負(fù)載均衡

2009-07-15 17:11:31

JDBC的概念

2009-08-24 10:29:39

C# 泛型

2009-07-07 17:10:57

JSP和Servlet

2009-06-24 11:12:17

callerJavascript

2009-12-30 15:58:19

Silverlight

2015-11-04 09:57:18

JavaScript原型

2017-07-14 15:40:28

2018-05-07 10:00:17

物聯(lián)網(wǎng)概念技術(shù)架構(gòu)

2009-09-07 04:29:28

SDI MDI

2010-09-17 14:07:07

SIP中繼

2020-12-04 11:40:53

Linux

2021-09-07 07:55:22

Linux CPULinux 系統(tǒng)

2010-09-09 13:30:03

Linux網(wǎng)絡(luò)協(xié)議棧

2019-09-10 11:34:23

軟件技術(shù)數(shù)據(jù)庫

2009-09-02 13:41:57

C#字符串操作

2020-05-25 15:56:59

Python函數(shù)開發(fā)

2021-05-13 08:55:33

Android架構(gòu)功能

2020-01-07 15:10:32

Linuxinode命令
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號