當前位置:首頁 » 操作系統 » linux頁

linux頁

發布時間: 2022-10-25 00:41:50

1. linux中塊和頁的區別

塊的讀取速度大於頁。也易於文件交換。
當塊不夠的時候,就分頁。
像我們的課本一般。

2. 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空間 ,頁表緩存使用 虛擬機標識符 區分不同虛擬機的轉換表項,避免每次虛擬機切換都要清空頁表緩存,在虛擬機標識符回繞時把處理器的頁表緩存清空。

3. Linux中內存的頁面怎樣理解

分頁機制的首要作用是保護內核、隔離進程。其次才是以較小的內存運行遠超內存大小的程序。你問的交換空間、按需調入均屬於後者,這兩項功能對內核來說不是必須的,所以你應該先把前者搞懂。

其實我覺得這么說還是有點本末倒置,因為分頁是需要硬體支持的,換而言之分頁是某些CPU的一大賣點!你說製造商為啥要設計這樣一個功能還加價?為啥寫操作系統的人喜歡這種CPU?想明白這個問題就可以了。

PS:
1.INTEL 80386 PROGRAMMER'S REFERENCE MANUAL 1986,
Computer Systems: A Programmer's Perspective 都是不錯的讀物。
2.別被操作系統教材誤導了,它們所講的分段機制幾乎沒用,建議直接忽略。
3.造CPU和寫kernel是密不可分的,歷史包袱很多。

-

4. linux關閉聚頁

退出命令界面:ctrl+altl+F7
進入命令界面:ctrl+altl+F1-F6 或打開一個終端,輸入命令:init 3,回車;再輸入命令:init 5,回車;稍等片刻圖形界面就會推到選擇用戶登錄界面,該界面上有restart和shutdown選擇,選擇shutdown,系統就會關閉圖形界面服務,進入命令行界面。

5. Linux裡面頁面502怎麼解決

1:php-cgi進程數不夠用 (我就是採用此方法解決的)
vim php-fpm.conf
修改其中的2個參數
(1)在安裝好使用過程中出現502問題,一般是因為默認php-cgi進程是5個,可能因為phpcgi進程不夠用而造成502,需要修改/usr/local/php/etc/php-fpm.conf 將其中的max_children值適當增加
這個數值是不確定的 需要我們自己算的,這個值原則上是越大越好,php-cgi的進程多了就會處理的很快,排隊的請求就會很少,減小出現502錯誤的機率。
一般來說,一台伺服器的正常情況下每一個php-cgi要耗費的內存為20M左右。如果我就將此值設為80,那麼也就是說大概要耗費伺服器1600M內存。
查看一下當前系統中有多少個php-cgi進程在運行
netstat -anpo | grep php-cgi | wc -l
如果這個值接近你的在配置文件裡面設置的值,說明需要增加
註:這要根據機器的實際情況而定,每個機器的硬體設施和環境不一樣
參數為:<value name=」max_children」>80</value>
(2)另外一個參數就是php-cgi腳本的執行時間
<value name=」request_terminate_timeout」>0s</value>這里寫0s的意思是讓php-cgi一直執行下去,沒有時間限制。
注意:如果你做不到這一點,也就 是說你的PHP-CGI可能出現某個BUG,或者你的寬頻不夠充足或者其他的原因導致你的PHP-CGI假死那麼就建議你給 request_terminate_timeout賦一個值,這個值可以根據伺服器的性能進行設定。一般來說性能越好你可以設置越高,20分鍾-30分 鍾都可以。
修改完這兩個參數,重啟一下php-cgi,看是否還出現502錯誤
2: php執行時間長
php執行超時,修改/usr/local/php/etc/php.ini 將max_execution_time 改為300
重啟一下php-cgi,看是否還出現502錯誤
3: php-cgi進程死掉
殺死其進程,重啟php-cgi

6. linux操作系統的存儲管理中,頁的大小為多少

頁大小是4096 1024*4 4KB

7. Linux的透明大頁如何啟用禁用

Linux繼承了Unix以網路為核心的設計思想,是一個性能穩定的多用戶網路操作系統。這片文章介紹了Linux的Transparent HugePages,一是介紹了查看是否啟用透明大頁,二是如何啟用、禁用透明大頁,需要的朋友可以參考下

禁用、啟用透明大頁功能

方法1:設置/etc/grub.conf文件,在系統啟動是禁用。

[root@getlnx06 ~]# vi /etc/grub.conf

# grub.conf generated by anaconda

#

# Note that you do not have to rerun grub after making changes to this file

# NOTICE: You have a /boot partition. This means that

# all kernel and initrd paths are relative to /boot/, eg.

# root (hd0,0)

# kernel /vmlinuz-version ro root=/dev/mapper/VolGroup--LogVol0-LogVol01

# initrd /initrd-[generic-]version.img

#boot=/dev/sda

default=0

timeout=5

splashimage=(hd0,0)/grub/splash.xpm.gz

hiddenmenu

title Red Hat Enterprise Linux 6 (2.6.32-504.el6.x86_64)

root (hd0,0)

kernel /vmlinuz-2.6.32-504.el6.x86_64 ro root=/dev/mapper/VolGroup--LogVol0-LogVol01 rd_NO_LUKS LANG=en_US.UTF-8 rd_NO_MD SYSFONT=latarcyrheb-sun16 crashkernel=auto rd_LVM_LV=VolGroup-LogVol0/LogVol01 rd_LVM_LV=VolGroup-LogVol0/LogVol00 KEYBOARDTYPE=pc KEYTABLE=us rd_NO_DM rhgb quiet

initrd /initramfs-2.6.32-504.el6.x86_64.img

transparent_hugepage=never

方法2:設置/etc/rc.local文件

[root@getlnx06 ~]# vi /etc/rc.local

#!/bin/sh

#

# This script will be executed *after* all the other init scripts.

# You can put your own initialization stuff in here if you don't

# want to do the full Sys V style init stuff.

touch /var/lock/subsys/local

if test -f /sys/kernel/mm/redhat_transparent_hugepage/enabled; then

echo never > /sys/kernel/mm/redhat_transparent_hugepage/enabled

fi

使用上面的配置後必須重啟操作系統才能生效,你也可以運行下面命令不用重啟操作系統。

You must reboot your system for the setting to take effect, or run the following two echo lines to proceed with the install without rebooting:

[root@getlnx06 ~]# echo never > /sys/kernel/mm/redhat_transparent_hugepage/enabled

[root@getlnx06 ~]# cat /sys/kernel/mm/redhat_transparent_hugepage/enabled

always madvise [never]

[root@getlnx06 ~]#

補充:Linux基本命令

1.ls命令:

格式::ls [選項] [目錄或文件]

功能:對於目錄,列出該目錄下的所有子目錄與文件;對於文件,列出文件名以及其他信息。

常用選項:

-a :列出目錄下的所有文件,包括以 . 開頭的隱含文件。

-d :將目錄像文件一樣顯示,而不是顯示其他文件。

-i :輸出文件的i節點的索引信息。

-k :以k位元組的形式表示文件的大小。

-l :列出文件的詳細信息。

-n :用數字的UID,GID代替名稱。

-F : 在每個文件名後面附上一個字元以說明該文件的類型,“*”表示可執行的普通文 件;“/”表示目錄;“@”表示符號鏈接;“l”表示FIFOS;“=”表示套接字。

2.cd命令

格式:cd [目錄名稱]

常用選項:

cd .. 返回上一級目錄。

cd ../.. 將當前目錄向上移動兩級。

cd - 返回最近訪問目錄。

3.pwd命令

格式: pwd

功能:顯示出當前工作目錄的絕對路徑。

相關閱讀:Linux主要特性

完全兼容POSIX1.0標准

這使得可以在Linux下通過相應的模擬器運行常見的DOS、Windows的程序。這為用戶從Windows轉到Linux奠定了基礎。許多用戶在考慮使用Linux時,就想到以前在Windows下常見的程序是否能正常運行,這一點就消除了他們的疑慮。

多用戶、多任務

Linux支持多用戶,各個用戶對於自己的文件設備有自己特殊的權利,保證了各用戶之間互不影響。多任務則是現在電腦最主要的一個特點,Linux可以使多個程序同時並獨立地運行。

良好的界面

Linux同時具有字元界面和圖形界面。在字元界面用戶可以通過鍵盤輸入相應的指令來進行操作。它同時也提供了類似Windows圖形界面的X-Window系統,用戶可以使用滑鼠對其進行操作。在X-Window環境中就和在Windows中相似,可以說是一個Linux版的Windows。

支持多種平台

8. Linux命令行翻頁

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

熱點內容
市裡煤炭資源配置是什麼意思 發布:2025-05-14 01:52:23 瀏覽:306
c刪除一行資料庫 發布:2025-05-14 01:50:53 瀏覽:74
sql輔助 發布:2025-05-14 01:50:46 瀏覽:324
為什麼要限制上傳速度 發布:2025-05-14 01:45:07 瀏覽:619
kindeditor上傳圖片絕對路徑 發布:2025-05-14 01:06:27 瀏覽:276
廣數g96編程實例 發布:2025-05-14 01:01:56 瀏覽:912
安卓手機如何做一個小程序 發布:2025-05-14 01:01:51 瀏覽:969
linux怎麼訪問外網 發布:2025-05-14 01:00:24 瀏覽:953
玩dnf什麼配置不卡卡 發布:2025-05-14 00:57:02 瀏覽:807
android優秀項目源碼 發布:2025-05-14 00:54:58 瀏覽:206