一级日韩免费大片,亚洲一区二区三区高清,性欧美乱妇高清come,久久婷婷国产麻豆91天堂,亚洲av无码a片在线观看

Linux概念架構解讀

時(shí)間:2024-10-15 17:16:33 Linux認證 我要投稿
  • 相關(guān)推薦

Linux概念架構解讀2016

  Linux系統一般有4個(gè)主要部分:內核、shell、文件系統和應用程序。內核、shell和文件系統一起形成了基本的操作系統結構,它們使得用戶(hù)可以運行程序、管理文件并使用系統。下面一起來(lái)看看專(zhuān)家對Linux系統架構的最新解讀吧!

  Linuxkernel成功的兩個(gè)原因:(1)靈活的架構設計使得大量的志愿開(kāi)發(fā)者能夠很容易加入到開(kāi)發(fā)過(guò)程中;(2)每個(gè)子系統(尤其是那些需要改進(jìn)的)都具備良好的可擴展性。正是這兩個(gè)原因使得Linux kernel可以不斷進(jìn)化和改進(jìn)。

  一、Linux內核在整個(gè)計算機系統中的位置

  Fig 1 - 計算機系統分層結構

  分層結構的原則: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.

  這種子系統之間的依賴(lài)性只能是從上到下,也就是在上圖中位于頂層的子系統依賴(lài)位于底層的子系統,反之則不行。

  二、內核的作用

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

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

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

  三、Linux內核的整體架構

  Linux內核的整體架構

  中心系統是Process Scheduler(SCHED):所有其余的子系統都依賴(lài)于Process Scheduler,因為其余子系統都需要阻塞和恢復進(jìn)程。當一個(gè)進(jìn)程需要等待一個(gè)硬件動(dòng)作完成時(shí),相應子系統會(huì )阻塞這個(gè)進(jìn)程;當這個(gè)硬件動(dòng)作完成時(shí),子系統會(huì )將這個(gè)進(jìn)程恢復:這個(gè)阻塞和恢復動(dòng)作都要依賴(lài)于Processor Scheduler完成。

  Process Scheduler依賴(lài)Memory manager:進(jìn)程恢復執行時(shí),需要依靠Memory Manager分配供它運行的內存。

  IPC子系統依賴(lài)于Memory manager:共享內存機制是進(jìn)程間通信的一種方法,運行兩個(gè)進(jìn)程利用同一塊共享的內存空間進(jìn)行信息傳遞。

  VFS依賴(lài)于Network Interface:支持NFS網(wǎng)絡(luò )文件系統;

  VFS依賴(lài)于Memory Manager:支持ramdisk 設備

  memory manager依賴(lài)于VFS,因為要支持swapping,可以將暫時(shí)不運行的進(jìn)程換出到磁盤(pán)上的swap分區,進(jìn)入掛起狀態(tài)。

  四、高度模塊化設計的系統,利于分工合作。

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

  硬件設備驅動(dòng)(hardware device drivers)、文件系統模塊(logical filesystem

  modules)、網(wǎng)絡(luò )設備驅動(dòng)(network device drivers)和網(wǎng)絡(luò )協(xié)議模塊(network protocol modules)這四個(gè)模塊的可擴展性最高。

  五、系統中的數據結構

  Task List

  Process Scheduler 針對每個(gè)進(jìn)程維護一個(gè)數據結構task_struct;所有的進(jìn)程用鏈表管理,形成task list;process

  scheduler還維護一個(gè)current指針指向當前正在占用CPU的進(jìn)程。

  Memory Map

  Memory

  Manager存儲每個(gè)進(jìn)程的虛擬地址到物理地址的映射;并且也提供了如何換出特定的頁(yè),或者是如何進(jìn)行缺頁(yè)處理。這些信息存放在數據結構mm_struct中。每個(gè)進(jìn)程都有一個(gè)mm_struct結構,在進(jìn)程的task_struct結構中有一個(gè)指針mm指向次進(jìn)程的mm_struct結構。

  在mm_struct中有一個(gè)指針pgd,指向該進(jìn)程的頁(yè)目錄表(即存放頁(yè)目錄首地址)——>當該進(jìn)程被調度時(shí),此指針被換成物理地址,寫(xiě)入控制寄存器CR3(x86體系結構下的頁(yè)基址寄存器)

  I-nodes

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

  Data Connection

  內核中所有的數據結構的根都在Process Scheduler維護的task list鏈表中。系統中每個(gè)進(jìn)程的的數據結構task_struct中有一個(gè)指針mm指向它的內存映射信息;也有一個(gè)指針files指向它打開(kāi)的文件(用戶(hù)打開(kāi)文件表);還有一個(gè)指針指向該進(jìn)程打開(kāi)的網(wǎng)絡(luò )套接字。

  六、子系統架構

  1. Process Scheduler 架構

  (1)目標

  process scheduler是Linux

  kernel中最重要的子系統。系統通過(guò)它來(lái)控制對CPU的訪(fǎng)問(wèn)——不僅僅是用戶(hù)進(jìn)程對CPU的訪(fǎng)問(wèn),也包括其余子系統對CPU的訪(fǎng)問(wèn)。

  (2)模塊

  進(jìn)程調度器

  調度策略模塊(scheduling policy

  module):決定哪個(gè)進(jìn)程獲得對CPU的訪(fǎng)問(wèn)權;調度策略應該讓所有進(jìn)程盡可能公平得共享CPU。

  體系結構相關(guān)模塊(architecture-specific

  module)設計一組統一的抽象接口來(lái)屏蔽特定體系接口芯片的硬件細節。這個(gè)模塊與CPU交互以阻塞和恢復進(jìn)程。這些操作包括獲取每個(gè)進(jìn)程需要保存的寄存器和狀態(tài)信息、執行匯編代碼來(lái)完成阻塞或者恢復操作。

  體系結構無(wú)關(guān)模塊(architecture-independent module)

  與調度策略模塊交互將決定下一個(gè)執行的進(jìn)程,然后調用體系結構相關(guān)的代碼去恢復那個(gè)進(jìn)程的執行。不僅如此,這個(gè)模塊還會(huì )調用memory

  manager的接口來(lái)確保被阻塞的進(jìn)程的內存映射信息被正確得保存起來(lái)。

  系統調用接口模塊(system call interface) 允許用戶(hù)進(jìn)程訪(fǎng)問(wèn)Linux

  Kernel明確暴露給用戶(hù)進(jìn)程的資源。通過(guò)一組定義合適的基本上不變的接口(POSIX標準),將用戶(hù)應用程序和Linux內核解耦,使得用戶(hù)進(jìn)程不會(huì )受到內核變化的影響。

  (3). 數據表示

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

  (4). 依賴(lài)關(guān)系、數據流、控制流

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

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

  2. Memory Manager 架構

  (1)目標

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

  (2)模塊

  內存管理子系統

  架構相關(guān)模塊(architecture specific module)提供訪(fǎng)問(wèn)物理內存的虛擬接口;

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

  系統調用接口(system call interface) 為用戶(hù)進(jìn)程提供嚴格的訪(fǎng)問(wèn)接口(malloc和free;mmap和ummap)。這個(gè)模塊允許用進(jìn)程分配和釋放內存、執行內存映射文件操作。

  (3)數據表示

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

  最后,內存管理模塊還應該存放訪(fǎng)問(wèn)和技術(shù)信息,以保證系統的安全。

  (4)依賴(lài)關(guān)系、數據流和控制流

  內存管理器控制物理內存,當page fault發(fā)生時(shí),接受硬件的通知(缺頁(yè)中斷)—— 這意味著(zhù)在內存管理模塊和內存管理硬件之間存在雙向的數據流和控制流。內存管理也依賴(lài)文件系統來(lái)支持swapping和內存映射I/O——這種需求意味著(zhù)內存管理器需要調用對文件系統提供的函數接口(procedure calls),往磁盤(pán)中存放內存頁(yè)和從磁盤(pán)中取內存頁(yè)。因為文件系統請求非常慢,所以在等待內存頁(yè)被換入之前,內存管理器要讓進(jìn)程需要進(jìn)入休眠——這種需求讓內存管理器調用process scheduler的接口。由于每個(gè)進(jìn)程的內存映射存放在進(jìn)程調度器的數據結構中,所以在內存管理器和進(jìn)程調度器之間也有雙向的數據流和控制流。用戶(hù)進(jìn)程可以建立新的進(jìn)程地址空間,并且能夠感知缺頁(yè)錯誤——這里需要來(lái)自?xún)却婀芾砥鞯目刂屏。一般?lái)說(shuō)沒(méi)有用戶(hù)進(jìn)程到內存管理器的數據流,但是用戶(hù)進(jìn)程卻可以通過(guò)select系統調用,從內存管理器獲取一些信息。

  3. Virtual File System 架構

  (1)目標

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

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

  (2)模塊

  虛擬文件系統模塊

  設備驅動(dòng)模塊(device driver module)

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

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

  系統獨立接口(system independent

  interface)提供硬件資源和邏輯文件系統都無(wú)關(guān)的接口,這個(gè)模塊通過(guò)塊設備節點(diǎn)或者字符設備節點(diǎn)提供所有的資源。

  系統調用模塊(system call interface)提供用戶(hù)進(jìn)程對文件系統的統一控制訪(fǎng)問(wèn)。虛擬文件系統為用戶(hù)進(jìn)程屏蔽了所有特殊的特性。

  (3)數據表示

  所有文件使用i-nodes表示。每個(gè)inode都記錄一個(gè)文件在硬件設備上的位置信息。不僅如此,inode還存放著(zhù)指向邏輯文件系統模塊和設備驅動(dòng)的的函數指針,這些指針能夠執行具體的讀寫(xiě)操作。通過(guò)按照這種形式(就是面向對象中的虛函數的思想)存放函數指針,具體的邏輯文件系統和設備驅動(dòng)可以向內核注冊自己而不需要內核依賴(lài)具體的模塊特性。

  (4)依賴(lài)關(guān)系、數據流和控制流

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

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

  正如前面提到的,內存管理器使用VFS完成內存swap功能和內存映射I/O。另外,當VFS等待硬件請求完成時(shí),VFS需要使用進(jìn)程調度器阻塞進(jìn)程;當請求完成時(shí),VFS需要通過(guò)進(jìn)程調度器喚醒進(jìn)程。最后,系統調用接口允許用戶(hù)進(jìn)程調用來(lái)存取數據。不像前面的子系統,VFS沒(méi)有提供給用戶(hù)注冊不明確調用的機制,所以沒(méi)有從VFS到用戶(hù)進(jìn)程的控制流。

  4. Network Interface 架構

  (1)目標

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

  (2)模塊

  網(wǎng)絡(luò )協(xié)議層模塊圖

  網(wǎng)絡(luò )設備驅動(dòng)模塊(network device drivers)

  設備獨立接口模塊(device independent interface

  module)提供所有硬件設備的一致訪(fǎng)問(wèn)接口,使得高層子系統不需要知道硬件的細節信息。

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

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

  系統調用接口模塊(system calls interface)規定了用戶(hù)進(jìn)程可以訪(fǎng)問(wèn)的網(wǎng)絡(luò )編程API

  (3)數據表示

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

  (4)數據流,控制流和依賴(lài)關(guān)系

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

  七、結論

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

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

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

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

【Linux概念架構解讀】相關(guān)文章:

Linux認證的概念03-25

Linux認證概念03-19

Linux中的more命令解讀202405-06

新概念英語(yǔ)解讀01-22

Linux主機被入侵后的處理案例解讀12-27

Linux進(jìn)程關(guān)系最新解讀201603-04

Linux認證考點(diǎn)03-19

Linux認證優(yōu)勢03-19

學(xué)習Linux的忠告03-21

一级日韩免费大片,亚洲一区二区三区高清,性欧美乱妇高清come,久久婷婷国产麻豆91天堂,亚洲av无码a片在线观看