亚洲激情专区-91九色丨porny丨老师-久久久久久久女国产乱让韩-国产精品午夜小视频观看

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

Linux內核指的是什么

發布時間:2022-01-21 10:32:53 來源:億速云 閱讀:185 作者:kk 欄目:開發技術

今天就跟大家聊聊有關Linux內核指的是什么,可能很多人都不太了解,為了讓大家更加了解,小編給大家總結了以下內容,希望大家根據這篇文章可以有所收獲。

內核屬于操作系統的核心部分,它具有操作系統基本的功能,主要負責管理系統的內存、進程、設備驅動程序、文件系統和網絡接口,因此,操作系統的性能和穩定性由內核決定。

1、內存管理

  1. 進程對內存的使用
    計算機中所有要執行的程序都必須占有一定數量的內存,它主要是用來存放從磁盤中存放的程序代碼,也可以是存放來自用戶輸入的數據等。

Linux 操作系統采用的是虛擬內存管理技術,這樣可以使每個進程都有各自互不干擾的進程地址存儲空間。該空間是塊大小為 4GB 的線性虛擬空間,用戶所看到和所接觸到的都是虛擬的地址,并不能看到實際的物理內存地址。因此利用虛擬地址不僅能保護操作系統,而且方便用戶程序使用比實際物理內存較大的地址空間。

一個普通的進程包括代碼段、數據段、BSS 段、堆和棧 5 個不同的數據段:

代碼段:主要用來存放可執行文件的操作指令。代碼段只允許讀取操作,不允許修改操作,它是為了防止在運行時被非法修改;

數據段:數據段用來存放可執行文件中已經初始化的全局變量,也就是存放程序靜態分配的變量和全局變量;

BSS 段:BSS 段包含了程序中未初始化的全局變量,在內存中 BSS 段全部置“0”;

堆:堆是用于存放進程運行中被動態分配的內存段,它的大小并不固定,可動態地擴張或縮減。當進程調用“malloc”函數分配內存時,新分配的內存就被動態地添加到堆上(堆被擴張);當利用“free”函數釋放內存時,被釋放的內存從堆中被刪除(堆被縮減);

棧:棧是用戶為了存放程序而臨時創建的一個局部變量。棧具有先進先出的特點,所以棧可以用來保存或恢復調用現場。因此,可以把堆棧當作一個寄存、交換臨時數據的內存區。

注意,數據段、BSS和堆通常是被連續存儲的即在內存位置上是連續的。

  1. 物理內存

物理內存是系統硬件提供的真實的內存大小,除了物理內存之外,在 Linux 系統中還有一個虛擬內存,虛擬內存是為了滿足物理內存的不足而存在的,它是利用磁盤空間虛擬出的一塊邏輯內存,用作虛擬內存的磁盤空間被稱為交換空間。

對于計算機系統而言,計算機的內存以及其他資源都是固定且有限的。為了讓有限的物理內存滿足應用程序對內存的大需求量,Linux 系統采用了稱為“虛擬內存”的內存管理方式。雖然應用程序操作的對象是映射到物理內存之上的虛擬內存,但處理器直接操作的是物理內存。例如,當一個應用程序訪問一個虛擬地址時,首先必須將虛擬地址轉化成物理地址,然后處理器才能解析地址訪問請求。

作為物理內存的擴展,Linux 系統會在物理內存不足時,使用交換分區的虛擬內存,總的來說,就是內核會將暫時不用的內存塊信息存儲到交換空間,從而使物理內存得到了釋放,這塊內存就可以用于其他目的了,當需要用到原始內容時,這些信息會被重新從交換空間讀入到物理內存。

Linux 系統將內存劃分為容易處理的“內存頁”。Linux 包括了管理可用內存的方式,以及物理和虛擬映射所使用的硬件機制。但內存管理要管理的可不止 4KB 緩沖區。Linux 提供了對 4KB 緩沖區的抽象,例如 slab 分配器。這種內存管理模式使用 4KB 緩沖區為基數,然后從中分配結構,并跟蹤內存頁的使用情況,例如哪些內存頁是滿的,哪些頁面沒有完全使用,哪些頁面為空。這樣就允許該模式根據系統需要來動態調整內存使用。

注意,Linux 系統內核的內存管理采取的是分頁存取機制,為了保證物理內存能得到充分的利用,內核會在適當的時候將物理內存中不經常使用的數據塊信息自動交換到虛擬內存中,而將經常使用的信息保留到物理內存。

為了支持多個用戶使用內存,有時會出現可用內存被完全消耗的情況。由于這個原因,頁面可以移出內存并放入磁盤中,這個過程稱為交換,就是頁面會從內存中被交換到硬盤上。

Linux 系統進行頁面交換是有條件的,不是所有頁面在不用時都交換到虛擬內存,Linux 內核根據最近最經常使用的算法,只需要將一些不經常使用的頁面文件交換到虛擬內存中。例如,一個占用很大內存的進程運行時,需要耗費很多內存資源,此時就會有一些不常用的頁面文件被交換到虛擬內存中,當這個占用很多內存資源的進程結束并釋放了很多內存時,剛才被交換出去的頁面文件不會自動地交換進物理內存,這時系統物理內存就會有很多的空閑,同時交換空間也被使用。

交換空間的頁面在使用時會首先被交換到物理內存,如果此時沒有足夠的物理內存來容納這些頁面,它們會被馬上交換出去,如此一來,虛擬內存中可能沒有足夠的空間來存儲這些交換頁面,最終導致 Linux 系統出現假死機、服務異常問題,雖然它可以在一段時間內自行恢復,但是恢復后的系統已經基本不可以使用了。

因此,合理規劃和設計 Linux 內存使用,是非常重要的。
2、進程管理

  1. 進程是什么

進程是在自身的虛擬地址空間運行的一個獨立的程序,從操作系統的角度來看,所有在系統上運行的東西,都可以稱為一個進程。在 Linux 系統中,能夠同時運行多個進程,Linux 通過在短的時間間隔內輪流運行這些進程而實現“多任務”。這一短的時間間隔稱為“時間片”,讓進程輪流運行的方法稱為“進程調度”,完成調度的程序稱為調度程序。

程序和進程的區別是:進程雖然由程序產生,但是它并不是程序。程序是一個進程指令的集合,它可以啟用一個或多個進程,同時,程序只占用磁盤空間,而不占用系統運行資源,而進程僅僅占用系統內存空間,是動態的、可以改變的。如果進程關閉,其所占用的內存資源將隨之釋放。

進程調度控制進程對 CPU 的訪問。當需要選擇下一個進程運行時,由調度程序選擇最值得運行的進程。運行的進程是指在等待 CPU 資源的進程,如果某個進程在等待其他資源,則該進程是不可運行進程。Linux 使用了比較簡單的基于優先級的進程調度算法選擇新的進程。

通過多任務機制,每個進程可以單獨占用計算機,從而簡化了程序的編寫。每個進程有自己單獨的地址空間,并且只能由這一進程訪問,這樣,操作系統避免了進程之間的互相干擾以及“惡意攻擊”程序對系統可能造成的危害。為了完成某項特定的任務,有時需要綜合兩個程序的功能,例如一個程序輸出文本,而另一個程序對文本進行排序。為此,操作系統還提供進程間的通信機制來幫助完成這樣的任務。Linux 系統中常見的進程間通信機制有信號、管道、共享內存、信號量和套接字等。

內核通過 SCI 提供了一個應用程序編程接口(API)來創建一個新進程(fork、exec 或 Portable Operating System Interface [POSⅨ]函數),停止進程(kill、exit),并在它們之間進行通信和同步(signal 或者 POSⅨ 機制)。

  1. 進程的分類

按照進程的功能和運行的程序分類,進程可劃分為兩大類:

系統進程:可以執行內存資源分配和進程切換等管理工作;而且,該進程的運行不受用戶的干預,即使是 root 用戶也不能干預系統進程的運行;

用戶進程:通過執行用戶程序、應用程序或內核之外的系統程序而產生的進程,此類進程可以在用戶的控制下運行或關閉。

針對用戶進程,又可以分為交互進程、批處理進程和守護進程這 3 種:

交互進程:由一個 Shell 終端啟動的進程,在執行過程中,需要與用戶進行交互操作,可以運行于前臺,也可以運行在后臺;

批處理進程:該進程是一個進程集合,負責按順序啟動其他的進程;

守護進程:守護進程是一直運行的一種進程,經常在 Linux 系統啟動時啟動,在系統關閉時終止。它們獨立于控制終端,并且周期性地執行某種任務或等待處理某些發生的事件。

  1. 進程的狀態

進程啟動之后,并不是馬上開始運行,通常有以下 5 種狀態:

可運行狀態:正在運行或者正準備運行;

可中斷的等待狀態:處于阻塞狀態,如果達到某種條件,就會變為運行的狀態。同時該狀態的進程也會由于接收到信號而被提前喚醒,從而進入到運行的狀態;

不中斷的等待狀態:與“可中斷的等待狀態”含義類似,不同的地方是處于這個狀態的進程對信號不做任何的回應;

僵死狀態:又稱僵死進程,每個進程在結束后都會處于僵死狀態,等待父進程調用進而釋放資源,處于該狀態的進程已經結束,但是它的父進程還沒有釋放其系統資源;

暫停狀態:表明此時的進程暫時停止,來接收某種特殊處理。

3、文件系統

Linux 操作系統對各種文件系統的支持是通過名為 VFS(Virtual File System)的組件實現的,也就是虛擬文件系統。

虛擬文件系統隱藏了各種硬件的具體細節,把文件系統操作和不同文件系統的具體實現細節分離了開來,為所有的設備提供了統一的接口,虛擬文件系統提供了數十種不同的文件系統。虛擬文件系統可以分為邏輯文件系統和設備驅動程序。邏輯文件系統是指 Linux 所支持的文件系統,如 ext 3、fat 等,設備驅動程序指為每一種硬件控制器所編寫的設備驅動程序模塊。

虛擬文件系統是 Linux 內核中非常有用的一個方面,因為它為文件系統提供了一個通用的接口抽象,即 VFS 在用戶和文件系統之間提供了一個交換層。
注意,Linux 操作系統啟動時,第一個必須掛載的是根文件系統;若系統不能從指定設備上掛載根文件系統,則系統會出錯而退出啟動。之后可以自動或手動掛載其他的文件系統。因此,一個系統中可以同時存在不同的文件系統。

本小節先簡單介紹一下文件系統,后續章節會進行更詳細地講解。

4、設備驅動程序

設備驅動程序是 Linux 內核的主要部分,它就是應用程序與實際硬件之間的一個軟件層,相同的硬件,加載不同的驅動程序就可能提供不同的功能。

和操作系統的其他部分類似,設備驅動程序運行在高特權級的處理器環境中,從而可以直接對硬件進行操作,但正因為如此,任何一個設備驅動程序的錯誤都可能導致操作系統的崩潰。設備驅動程序實際控制操作系統和硬件設備之間的交互。

設備驅動程序提供一組操作系統可理解的抽象接口來完成和操作系統之間的交互,而與硬件相關的具體操作細節由設備驅動程序完成。一般而言,設備驅動程序和設備的控制芯片有關,例如,如果計算機硬盤是 SCSI 硬盤,則需要使用 SCSI 驅動程序,而不是 IDE 驅動程序。

設備的分類如下:

  1. 字符設備

字符設備是能夠像文件一樣被訪問的設備,由字符設備驅動程序來實現這種特性。字符設備驅動程序通常至少要實現 open、close、read、write 系統調用。

字符設備可以通過文件系統節點來訪問,這些設備文件和普通文件之間的唯一差別就在于對普通文件的訪問可以前后移動訪問位置,而大多數字符設備是一個只能順序訪問的數據通道。一個字符設備是一種字節流設備,對設備的存取只能按順序、字節的存取進行訪問,不能隨機訪問,字符設備沒有請求緩沖區,所有的訪問請求都是按順序執行的。

  1. 塊設備

塊設備也是通過設備節點來訪問。塊設備上能夠容納文件系統。

在大多數 UNIX 系統中,進行 I/O 操作時塊設備每次只能傳輸一個或多個完整的塊,而每塊包含 513 字節。Linux 系統內核可以讓應用程序向字符設備一樣讀寫塊設備,允許一次傳遞任意多字節的數據。因而,塊設備和字符設備的區別僅僅在于內核內部管理數據的方式不同,也就是內核及驅動程序之間的軟件接口,而這些不同對用戶來講是透明的。

存儲設備一般屬于塊設備,塊設備有請求緩沖區,并且支持隨機訪問而不必按照順序去存取數據。Linux 系統內核下的磁盤設備都是塊設備,盡管在 Linux 系統內核下有塊設備節點,但應用程序一般是通過文件系統及其高速緩存來訪問塊設備的,而不是直接通過設備節點來讀寫塊設備上的數據。

  1. 網絡設備

網絡設備不同于字符設備和塊設備,它是面向報文的而不是面向流的,它不支持隨機訪問,也沒有請求緩沖區。由于不是面向流的設備,因此將網絡接口映射到文件系統中的節點比較困難。

內核和網絡設備驅動程序間的通信,完全不同于內核和字符以及塊驅動程序之間的通信,內核調用一套和數據包傳輸相關的函數而不是 read、write。網絡接口沒有像字符設備和塊設備一樣的設備號,只有一個唯一的名字,如 eth0、eth2 等,而這個名字也不需要與設備文件節點對應。

字符設備與塊設備的區別,大致有以下 3 個方面:
字符設備是面向流的,最小訪問單位是字節;而塊設備是面向塊的,最小訪問單位是 513 字節;
字符設備只能順序按字節訪問,而塊設備可隨機訪問;
塊設備上可容納文件系統,訪問形式上,字符設備通過設備節點訪問,而塊設備雖然也可通過設備節點訪問,但一般是通過文件系統來訪問數據的。

5、網絡接口

網絡接口可分為網絡協議和網絡驅動程序。網絡協議負責實現每一種可能的網絡傳輸協議。眾所周知,TCP/IP 協議是 Internet 的標準協議,同時也是事實上的工業標準。

  1. 網絡接口的命名

網絡接口的命名沒有較明確的規范,但網絡接口名字的定義一般都是要有意義的。例如:
lo:local 的縮寫,一般指本地接口;
eth0:ethernet 的縮寫,一般用于以太網接口;
wifi0:wifi 是無線局域網,一般指無線網絡接口。

  1. 網絡接口的工作

網絡接口是用來發送和接收數據包的基本設備。系統中的所有網絡接口組成一個鏈狀結構,應用層的程序使用網絡接口時按名稱調用。每個網絡接口在 Linux 系統中對應于一個 struct net_device 結構體,包含 name、mac、mask 等信息。一個硬件網卡對應一個網絡接口,其工作完全由相應的驅動程序控制。

  1. 虛擬網絡接口

虛擬網絡接口的應用范圍已經非常廣泛。“lo”(本地接口)是最常見的接口之一,基本上每個 Linux 系統都有這個接口。虛擬網絡接口并不真實地從外界接收和發送數據包,而是在系統內部接收和發送數據包,因此虛擬網絡接口不需要驅動程序。

注意,虛擬網絡接口和真實存在的網絡接口在使用上是一致的。

  1. 網絡接口的創建

硬件網卡的網絡接口由驅動程序創建。而虛擬的網絡接口由系統創建或通過應用層程序創建。驅動中創建網絡接口的函數有以下兩種:
register_netdev(struct net_device *)

或者
register_netdevice(struct net_device *)

這兩個函數的區別是,前者會自動生成以“eth”作為打頭名稱的接口,而后者則需要提前指定接口的名稱。

注意,register_netdev(struct net_device *) 也是通過調用 register_netdevice(struct net_device *) 來實現的。

什么是Linux系統

Linux是一種免費使用和自由傳播的類UNIX操作系統,是一個基于POSIX的多用戶、多任務、支持多線程和多CPU的操作系統,使用Linux能運行主要的Unix工具軟件、應用程序和網絡協議。

看完上述內容,你們對Linux內核指的是什么有進一步的了解嗎?如果還想了解更多知識或者相關內容,請關注億速云行業資訊頻道,感謝大家的支持。

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

新野县| 铁岭市| 康平县| 行唐县| 克什克腾旗| 安远县| 门头沟区| 抚顺市| 佛学| 洞头县| 芒康县| 河津市| 安福县| 济南市| 云和县| 连云港市| 漯河市| 肥城市| 湖北省| 宣城市| 泸西县| 潢川县| 乌兰浩特市| 山阴县| 武川县| 新龙县| 资溪县| 襄垣县| 蓝山县| 游戏| 崇义县| 新疆| 沐川县| 玉田县| 乐安县| 丰都县| 东丽区| 塘沽区| 南开区| 东乡族自治县| 大悟县|