導航:首頁 > 編程系統 > linux頁表進程

linux頁表進程

發布時間:2023-09-23 13:14:20

linux中進程的頁表是自動生成的嗎

是的,在進程clone的時候會復制進程頁表設置只讀,訪問的時候觸發缺頁中斷

㈡ Linux操作系統具有哪些特點

一、 Linux的誕生
Linux的興起可以說是Internet創造的一個奇跡。 1991年初,當年輕的芬蘭大學生Linus Torvalds在開始其Linux 操作系統的設計時,他的目的只不過是想看一看Intel 386存儲 管理硬體是怎樣工作的,而絕對沒有想到這一舉動會在計算機界 產生如此重大的影響。他的設計進展得很順利,只花了幾個月時 間就在一台Intel 386微機上完成了一個類似於Unix 的操作系統, 這就是最早的Linux版本。1991年底,Linus Torvalds首次在Internet 上發布了基於Intel 386體系結構的Linux源代碼,從此以後,奇跡開始 發生了。由於Linux具有結構清晰、功能簡捷等特點,許多大專院校的學 生和科研機構的研究人員紛紛把它作為學 習和研究的對象。他們在更正原 有Linux版本中錯誤的同時,也不斷地為Linux增加新的功能。在眾多熱心者的 努力下,Linux逐漸成為一個穩定可靠、功能完善的操作系統。一些軟體公司, 如Red Hat、InfoMagic等也不失時機地推出了自己的以Linux為核心的操作系統 版本,這大大推動了Linux的商品化。在一些大的計算機公司的支持下,Linux還 被移植到以Alpha APX、PowerPC、Mips及Sparc等為處理機的系統上。Linux的使 用日益廣泛,其影響力直逼Unix。

Linux的成功得益於如下因素:
(1) 具有良好的開放性。Linux及其生成工具的源代碼均可通過Internet免費獲取,linux愛 好者能非常 容易地建立一個Linux開發平台。

(2) Internet的普及使熱心於Linux的開發者們能進行高效、快捷的交流,從而為Linux 創造了一個優良的分布式開發環境。

(3) Linux具有很強的適應性,能適應各種不同的硬體平台。
Linux的版本更新很快。在短短的七年時間里,其版本已升至2.1.x。這里之所以用"x"表示,是因為 x的值變化太快,很難准確地定位它的值。這也從側面反映了從事Linux的研究者之多。不過,Linux用得最 多的版本還是2.0.30,許多商品化的操作系統都以它為核心。

二、 Linux的主要特點
作為一個操作系統,Linux幾乎滿足當今Unix操作系統的所有要求,因此,它具有Unix操作系統的基本 特徵。
1.符合POSIX 1003.1標准
POSIX 1003.1標準定義了一個最小的Unix操作系統介面,任何操作系統只有符合這一標准,才有可能運 行Unix程序。考慮到Unix具有豐富的應用程序,當今絕大多數操作系統都把滿足POSIX 1003.1標准作為實現 目標,Linux也不例外,它完全支持POSIX 1003.1標准。另外,為了使Unix System V和BSD上的程序能直接在 Linux上運行, Linux還增加了部分System V和BSD的系統介面,使Linux成為一個完善的Unix程序開發系統。

2.支持多用戶訪問和多任務編程
Linux是一個多用戶操作系統,它允許多個用戶同時訪問系統而不會造成用戶之間的相互干擾。另外, Linux還支持真正的多用戶編程,一個用戶可以創建多個進程,並使各個進程協同工作來完成用戶的需求.

3.採用頁式存儲管理
頁式存儲管理使Linux能更有效地利用物理存儲空間,頁面的換入換出為用戶提供了更大的存儲空間。

4.支持動態鏈接
用戶程序的執行往往離不開標准庫的支持,一般的系統往往採用靜態鏈接方式,即在裝配階段就已將 用戶程序和標准庫鏈接好,這樣,當多個進程運行時,可能會出現庫代碼在內存中有多個副本而浪費存儲 空間的情況。Linux 支持動態鏈接方式,當運行時才進行庫鏈接,如果所需要的庫已被其它進程裝入內存, 則不必再裝入,否則才從硬碟中將庫調入。這樣能保證內存中的庫程序代碼是唯一的。

5.支持多種文件系統
Linux能支持多種文件系統。目前支持的文件系統有:EXT2、EXT、XIAFS、ISOFS、HPFS、MSDOS、UMSDOS、 PROC、NFS、SYSV、MINIX、SMB、UFS、NCP、VFAT、AFFS。Linux最常用的文件系統是EXT2,它的文件名長度可 達255字元,並且還有許多特有的功能,使它比常規的Unix文件系統更加安全。

6.支持TCP/IP、SLIP和PPP
在Linux中,用戶可以使用所有的網路服務,如網路文件系統、遠程登錄等。SLIP和PPP能支持串列線上的 TCP/IP協議的使用,這意味著用戶可用一個高速Modem通過電話線連入Internet網中。

除了上述基本特徵外,Linux還具有其獨有的特色:

支持硬碟的動態Cache 這一功能與MS�DOS中的Smartdrive相似。所不同的是,Linux能動態調整所用的 Cache存儲器的大小,以適合當前存儲器的使用情況,當某一時刻沒有更多的存儲空間可用時,Cache將被減少, 以增加空閑的存儲空間,一旦存儲空間不再緊張,Cache的大小又將增加。
支持不同格式的可執行文件 Linux具有多種模擬器,這使它能運行不同格式的目標文件。其中,DOS和 MS�Windows正在開發之中,iBCS2模擬器能運行SCO Unix的目標程序。(iBCS2 模擬器不是Linux標准核心的 一部分,但可從ftp.informatik.hu�berlin.de:/pub/os/linux下載)

三、 Linux的主要構成
Linux主要由存儲管理、進程管理、文件系統、進程間通信等幾部分組成,在許多演算法及實現策略上, Linux借鑒了Unix的成功經驗,但也不乏自己的特色。

1.存儲管理
Linux採用頁式存儲管理機制,每個頁面的大小隨處理機晶元而異。例如,Intel 386處理機頁面大小 可為4KB和2MB兩種,而Alpha處理機頁面大小可為8KB、16KB、32KB和64KB。頁面大小的選擇對地址變換算 法和頁表結構會有一定的影響,如Alpha的虛地址和物理地址的有效長度隨頁面尺寸的變化而變化,這種變 化必將在地址變換和頁表項中有所反映。
在Linux中,每一個進程都有一個比實際物理空間大得多的進程虛擬空間,為了建立虛擬空間和物理空 間之間的映射,每個進程還保留一張頁表,用於將本進程空間中的虛地址變換成物理地址。頁表還對物理頁 的訪問許可權作出了規定,定義了哪些頁可讀寫,哪些頁是只讀頁,在進行虛實變換時,Linux將根據頁表中規 定的訪問許可權來判定進程對物理地址的訪問是否合法,從而達到存儲保護的目的。
Linux存儲空間分配遵循的是不到有實際需要的時候決不分配物理空間的原則。當一個程序載入執行時, Linux只為它分配了虛空間,只有訪問某一虛地址而發生了缺頁中斷時,才為它分配物理空間,這樣就可能 出現某些程序運行完成後,其中的一些頁從來就沒有裝進過內存。這種存儲分配策略帶來的好處是顯而易見的,因為它最大限度地利用了物理存儲器。
盡管Linux對物理存儲器資源的使用十分謹慎,但還是經常出現物理存儲器資源短缺的情況。Linux有一 個名為kswapd的進程專門負責頁面的換出,當系統中的空閑頁面小於一定的數目時,kswapd將按照一定的淘 汰演算法選出某些頁面,或者直接丟棄(頁面未作修改),或者將其寫回硬碟(頁面已被修改)。這種換出方式不 同於較舊版本Unix的換出方式,它是將一個進程的所有頁全部寫回硬碟。相比之下,Linux的效率更高。

2.進程管理
在Linux中,進程是資源分配的基本單位,所有資源都是以進程為對象來進行分配的。 在一個進程的生 命期內,它會用到許多系統資源,會用CPU運行其指令,用存儲器存儲其指令和數據,它也會打開和使用文件 系統中的文件,直接或間接用到系統中的物理設備,因此,Linux設計了一系列的數據結構,它們能准確地描 述進程的狀態和其資源使用情況,以便能公平有效地使用系統資源。Linux的調度演算法能確保不出現某些進程 過度佔用系統資源而導致另一些進程無休止地等待的情況。

進程的創建是一個十分復雜的過程,通常的做法需為子進程重新分配物理空間,並把父進程空間的內容全 盤復制到子進程空間中,其開銷非常大。為了降低進程創建的開銷,Linux採用了Copy�on�write技術,即不 拷貝父進程的空間,而是拷貝父進程的頁表,使父進程和子進程共享物理空間,並將這個共享空間的訪問許可權 置為只讀。當父進程和子進程的某一方進行寫操作時,Linux檢測到一個非法操作,這時才將要寫的頁進行復制 。這一做法免除了只讀頁的復制,從而降低了開銷。
Linux目前尚未提供用戶級線程,但提供了核心級線程,核心線程的創建是在進程創建的基礎上稍做修改, 使創建的子進程與父進程共享虛存空間。從這一意義上講,核心線程更像一個共享進程組。

3.文件系統
Linux最重要的特徵之一就是支持多個不同的文件系統,前面我們已經看到,Linux目前支持的文件系統 多達十餘種,隨著時間的推移,這一數目還在不斷增加。在Linux中,一個分離的文件系統不是通過設備標識 (如驅動器號或驅動器名)來訪問,而是 把它合到一個單一的目錄樹結構中,通過目錄來訪問,這一點與Unix十分相似。Linux用 安裝命令將一個新的文件系統安裝到系統單一目錄樹的某一目錄下,一旦安裝成功,該目錄下的所有內容將 被新安裝的文件系統所覆蓋,當文件系統被卸下後,安裝目錄下的文件將會被重新恢復。

Linux最初的文件系統是Minix。該文件系統對文件限制過多,並且性能低下,如文件名長度不能超過14 個字元、文件大小不能超過64MB。為了解決這些問題,Linux的開發者們設計了一個Linux專用的文件系統EXT。 EXT對文件的要求放鬆了許多,但在性能上並沒有大的改觀,於是就有了後面的EXT2文件系統。EXT2文件系統 是一個非常成功的文件系統,它無論是對文件的限制還是在性能方面都大大優於EXT文件系統,所以,EXT2自 從推出就一直是Linux最常用的文件系統。
為了支持多種文件系統,Linux用一個被稱為虛擬文件系統(VFS)的介面層將真正的文件系統同操作系統及 系統服務分離開。VFS掩蓋了不同文件系統之間的差異,使所有文件系統在操作系統和用戶程序看來都是等同的。VFS允許用戶同時透明地安裝多個不同的文件系統。

4.進程間通信
Linux提供了多種進程間的通信機制,其中,信號和管道是最基本的兩種。除此以外,Linux也提供 System V的進程間通信機制,包括消息隊列、信號燈及共享內存。為了支持不同機器之間的進程通信, Linux還引入了BSD的Socket機制。

四、 Linux的不足及發展趨勢
Linux從出現到現今只經歷了短短七年的時間,但其發展速度是驚人的,這與它的開放性和優良的性能 是密不可分的。不過我們應該看到,作為一個由學生開發的系統,Linux還有許多先天不足,它的設計思想 過多地受到傳統操作系統的約束,沒有體現出當今操作系統的發展潮流,具體表現在以下幾個方面:

不是一個微內核操作系統;
是一個分布式操作系統;
不是一個安全的操作系統;
沒有用戶線程;
不支持實時處理;

代碼是用C而不是C++這樣的現代程序設計語言編寫的。
盡管Linux有這樣和那樣的不足,但其發展潛力不容低估,其發展的動力就是遍布全球、為數眾多的 Linux熱心者。今後Linux將會朝著完善功能、提高效率的方向發展,包括允許用戶創建線程、增加實時處 理功能、開發適合多處理機體系結構的版本。我們相信,Linux、Unix及NT三足鼎立的時代將為期不遠。

㈢ linux為什麼主要採用分頁機制來實現虛擬存儲管理

1 分頁機制
在虛擬內存中,頁表是個映射表的概念, 即從進程能理解的線性地址(linear address)映射到存儲器上的物理地址(phisical address).
很顯然,這個頁表是需要常駐內存的東西, 以應對頻繁的查詢映射需要(實際上,現代支持VM的處理器都有一個叫TLB的硬體級頁表緩存部件,本文不討論)。
1.1 為什麼使用多級頁表來完成映射

但是為什麼要使用多級頁表來完成映射呢?
用來將虛擬地址映射到物理地址的數據結構稱為頁表, 實現兩個地址空間的關聯最容易的方式是使用數組, 對虛擬地址空間中的每一頁, 都分配一個數組項. 該數組指向與之關聯的頁幀, 但這會引發一個問題, 例如, IA-32體系結構使用4KB大小的頁, 在虛擬地址空間為4GB的前提下, 則需要包含100萬項的頁表. 這個問題在64位體系結構下, 情況會更加糟糕. 而每個進程都需要自身的頁表, 這回導致系統中大量的所有內存都用來保存頁表.
設想一個典型的32位的X86系統,它的虛擬內存用戶空間(user space)大小為3G, 並且典型的一個頁表項(page table entry, pte)大小為4 bytes,每一個頁(page)大小為4k bytes。那麼這3G空間一共有(3G/4k=)786432個頁面,每個頁面需要一個pte來保存映射信息,這樣一共需要786432個pte!
如何存儲這些信息呢?一個直觀的做法是用數組來存儲,這樣每個頁能存儲(4k/4=)1K個,這樣一共需要(786432/1k=)768個連續的物理頁面(phsical page)。而且,這只是一個進程,如果要存放所有N個進程,這個數目還要乘上N! 這是個巨大的數目,哪怕內存能提供這樣數量的空間,要找到連續768個連續的物理頁面在系統運行一段時間後碎片化的情況下,也是不現實的。
為減少頁表的大小並容許忽略不需要的區域, 計算機體系結構的涉及會將虛擬地址分成多個部分. 同時虛擬地址空間的大部分們區域都沒有使用, 因而頁沒有關聯到頁幀, 那麼就可以使用功能相同但內存用量少的多的模型: 多級頁表

但是新的問題來了, 到底採用幾級頁表合適呢?
1.2 32位系統中2級頁表
從80386開始, intel處理器的分頁單元是4KB的頁, 32位的地址空間被分為3部分

單元
描述

頁目錄表Directory 最高10位
頁中間表Table 中間10位
頁內偏移 最低12位
即頁表被劃分為頁目錄表Directory和頁中間表Tabl兩個部分
此種情況下, 線性地址的轉換分為兩步完成.
第一步, 基於兩級轉換表(頁目錄表和頁中間表), 最終查找到地址所在的頁幀
第二步, 基於偏移, 在所在的頁幀中查找到對應偏移的物理地址
使用這種二級頁表可以有效的減少每個進程頁表所需的RAM的數量. 如果使用簡單的一級頁表, 那將需要高達220個頁表, 假設每項4B, 則共需要佔用220?4B=4MB的RAM來表示每個進程的頁表. 當然我們並不需要映射所有的線性地址空間(32位機器上線性地址空間為4GB), 內核通常只為進程實際使用的那些虛擬內存區請求頁表來減少內存使用量.
1.3 64位系統中的分頁
正常來說, 對於32位的系統兩級頁表已經足夠了, 但是對於64位系統的計算機, 這遠遠不夠.
首先假設一個大小為4KB的標准頁. 因為1KB覆蓋210個地址的范圍, 4KB覆蓋212個地址, 所以offset欄位需要12位.
這樣線性地址空間就剩下64-12=52位分配給頁中間表Table和頁目錄表Directory. 如果我們現在決定僅僅使用64位中的48位來定址(這個限制其實已經足夠了, 2^48=256TB, 即可達到256TB的定址空間). 剩下的48-12=36位被分配給Table和Directory欄位. 即使我們現在決定位兩個欄位各預留18位, 那麼每個進程的頁目錄和頁表都包含218個項, 即超過256000個項.
基於這個原因, 所有64位處理器的硬體分頁系統都使用了額外的分頁級別. 使用的級別取決於處理器的類型

平台名稱
頁大小
定址所使用的位數
分頁級別數
線性地址分級

alpha 8KB 43 3 10 + 10 + 10 + 13
ia64 4KB 39 3 9 + 9 + 9 + 12
ppc64 4KB 41 3 10 + 10 + 9 + 12
sh64 4KB 41 3 10 + 10 + 9 + 12
x86_64 4KB 48 4 9 + 9 + 9 + 9 + 12

㈣ 怎麼查看linux進程名稱

1、連接上相應的linux主機,進入到等待輸入shell指令的linux命令行狀態下。

㈤ linux kernel 內存管理-頁表、TLB

頁表用來把虛擬頁映射到物理頁,並且存放頁的保護位(即訪問許可權)。
在Linux4.11版本以前,Linux內核把頁表分為4級:
頁全局目錄表(PGD)、頁上層目錄(PUD)、頁中間目錄(PMD)、直接頁表(PT)
4.11版本把頁表擴展到5級,在頁全局目錄和頁上層目錄之間增加了 頁四級目錄(P4D)
各處處理器架構可以選擇使用5級,4級,3級或者2級頁表,同一種處理器在頁長度不同的情況可能選擇不同的頁表級數。可以使用配置宏CONFIG_PGTABLE_LEVELS配置頁表的級數,一般使用默認值。
如果選擇4級頁表,那麼使用PGD,PUD,PMD,PT;如果使用3級頁表,那麼使用PGD,PMD,PT;如果選擇2級頁表,那麼使用PGD和PT。 如果不使用頁中間目錄 ,那麼內核模擬頁中間目錄,調用函數pmd_offset 根據頁上層目錄表項和虛擬地址獲取頁中間目錄表項時 直接把頁上層目錄表項指針強制轉換成頁中間目錄表項

每個進程有獨立的頁表,進程的mm_struct實例的成員pgd指向頁全局目錄,前面四級頁表的表項存放下一級頁表的起始地址,直接頁表的頁表項存放頁幀號(PFN)
內核也有一個頁表, 0號內核線程的進程描述符init_task的成員active_mm指向內存描述符init_mm,內存描述符init_mm的成員pgd指向內核的頁全局目錄swapper_pg_dir

ARM64處理器把頁表稱為轉換表,最多4級。ARM64處理器支持三種頁長度:4KB,16KB,64KB。頁長度和虛擬地址的寬度決定了轉換表的級數,在虛擬地址的寬度為48位的條件下,頁長度和轉換表級數的關系如下所示:

ARM64處理器把表項稱為描述符,使用64位的長描述符格式。描述符的0bit指示描述符是不是有效的:0表示無效,1表示有效。第1位指定描述符類型。
在塊描述符和頁描述符中,內存屬性被拆分為一個高屬性和一個低屬性塊。

處理器的MMU負責把虛擬地址轉換成物理地址,為了改進虛擬地址到物理地址的轉換速度,避免每次轉換都需要查詢內存中的頁表,處理器廠商在管理單元里加了稱為TLB的高速緩存,TLB直譯為轉換後備緩沖區,意譯為頁表緩存。
頁表緩存用來緩存最近使用過的頁表項, 有些處理器使用兩級頁表緩存 第一級TLB分為指令TLB和數據TLB,好處是取指令和取數據可以並行;第二級TLB是統一TLB,即指令和數據共用的TLB

不同處理器架構的TLB表項的格式不同。ARM64處理器的每條TLB表項不僅包含虛擬地址和物理地址,也包含屬性:內存類型、緩存策略、訪問許可權、地址空間標識符(ASID)和虛擬機標識符(VMID)。 地址空間標識符區分不同進程的頁表項 虛擬機標識符區分不同虛擬機的頁表項

如果內核修改了可能緩存在TLB裡面的頁表項,那麼內核必須負責使舊的TLB表項失效,內核定義了每種處理器架構必須實現的函數。

當TLB沒有命中的時候,ARM64處理器的MMU自動遍歷內存中的頁表,把頁表項復制到TLB,不需要軟體把頁表項寫到TLB,所以ARM64架構沒有提供寫TLB的指令。

為了減少在進程切換時清空頁表緩存的需要,ARM64處理器的頁表緩存使用非全局位區分內核和進程的頁表項(nG位為0表示內核的頁表項), 使用地址空間標識符(ASID)區分不同進程的頁表項
ARM64處理器的ASID長度是由具體實現定義的,可以選擇8位或者16位。寄存器TTBR0_EL1或者TTBR1_EL1都可以用來存放當前進程的ASID,通常使用寄存器TCR_EL1的A1位決定使用哪個寄存器存放當前進程的ASID,通常使用寄存器 TTBR0_EL1 。寄存器TTBR0_EL1的位[63:48]或者[63:56]存放當前進程的ASID,位[47:1]存放當前進程的頁全局目錄的物理地址。
在SMP系統中,ARM64架構要求ASID在處理器的所有核是唯一的。假設ASID為8位,ASID只有256個值,其中0是保留值,可分配的ASID范圍1~255,進程的數量可能超過255,兩個進程的ASID可能相同,內核引入ASID版本號解決這個問題。
(1)每個進程有一個64位的軟體ASID, 低8位存放硬體ASID,高56位存放ASID版本號
(2) 64位全局變數asid_generation的高56位保存全局ASID版本號
(3) 當進程被調度時,比較進程的ASID版本號和全局版本號 。如果版本號相同,那麼直接使用上次分配的ASID,否則需要給進程重新分配硬體ASID。
存在空閑ASID,那麼選擇一個分配給進程。不存在空閑ASID時,把全局ASID版本號加1,重新從1開始分配硬體ASID,即硬體ASID從255回繞到1。因為剛分配的硬體ASID可能和某個進程的ASID相同,只是ASID版本號不同,頁表緩存可能包含了這個進程的頁表項,所以必須把所有處理器的頁表緩存清空。
引入ASID版本號的好處是:避免每次進程切換都需要清空頁表緩存,只需要在硬體ASID回環時把處理器的頁表緩存清空

虛擬機裡面運行的客戶操作系統的虛擬地址轉物理地址分兩個階段:
(1) 把虛擬地址轉換成中間物理地址,由客戶操作系統的內核控制 ,和非虛擬化的轉換過程相同。
(2) 把中間物理地址轉換成物理地址,由虛擬機監控器控制 ,虛擬機監控器為每個虛擬機維護一個轉換表,分配一個虛擬機標識符,寄存器 VTTBR_EL2 存放當前虛擬機的階段2轉換表的物理地址。
每個虛擬機有獨立的ASID空間 ,頁表緩存使用 虛擬機標識符 區分不同虛擬機的轉換表項,避免每次虛擬機切換都要清空頁表緩存,在虛擬機標識符回繞時把處理器的頁表緩存清空。

閱讀全文

與linux頁表進程相關的資料

熱點內容
電子資料文件有哪些 瀏覽:241
猥瑣貓表情教程 瀏覽:599
android音頻文件格式 瀏覽:458
漫畫臉app哪裡可以下載 瀏覽:959
購買歡樂升級歡樂豆 瀏覽:282
學習智能機器人用什麼編程最好 瀏覽:655
蘋果手機如何管控app 瀏覽:633
mn文件夾 瀏覽:590
安卓平板通用刷機包下載 瀏覽:751
安卓獲取內部存儲路徑 瀏覽:880
寫代碼兩台顯示器 瀏覽:327
unitypackage壓縮文件 瀏覽:493
奕心安卓 瀏覽:563
使用土地的有關證明文件包含哪些 瀏覽:493
數據標注哪裡可以接 瀏覽:482
在家自學編程下什麼學 瀏覽:705
最近很火的app軟體是什麼軟體 瀏覽:862
ai文字工具 瀏覽:157
蘭博玩游戲路徑怎麼選擇正確文件 瀏覽:972
淘寶直通車恢復老版本 瀏覽:510

友情鏈接