新聞中心
Linux內存管理:PageIn 實現(xiàn)資源調度

成都創(chuàng)新互聯(lián)公司專業(yè)為企業(yè)提供如東網(wǎng)站建設、如東做網(wǎng)站、如東網(wǎng)站設計、如東網(wǎng)站制作等企業(yè)網(wǎng)站建設、網(wǎng)頁設計與制作、如東企業(yè)網(wǎng)站模板建站服務,十年如東做網(wǎng)站經(jīng)驗,不只是建網(wǎng)站,更提供有價值的思路和整體網(wǎng)絡服務。
Linux操作系統(tǒng)一向以其穩(wěn)定、可靠和高效著稱,其中內存管理是其核心之一。內存管理是操作系統(tǒng)的重要組成部分,它主要管理操作系統(tǒng)對內存空間的分配、回收、保護和共享等工作。在現(xiàn)代操作系統(tǒng)中,由于訪問磁盤所需的時間太長,操作系統(tǒng)一般將磁盤上的文件緩存在內存中以提高訪問速度,這就需要一個有效的內存管理機制。本文將重點介紹Linux內存管理中的PageIn機制,并探討它如何實現(xiàn)資源調度。
PageIn機制是Linux內核中的一種內存調度機制。當進程需要訪問缺頁時,系統(tǒng)會將缺頁從虛擬內存中讀到內存中,這個過程就是PageIn。當內存中沒有足夠的空閑空間時,PageIn機制將會自動選擇合適的頁面進行替換,以滿足新的頁面進入操作。PageIn機制的主要功能就是通過控制頁面的分配和釋放,實現(xiàn)對內存的有效管理,從而優(yōu)化內存的使用情況。PageIn機制可以顯著提高系統(tǒng)的性能,是一個非常重要的資源調度機制。
PageIn機制的實現(xiàn)基本上可以分為三個部分:虛擬內存、頁面調度和頁面替換。虛擬內存是一個總體設計概念,它將主存和磁盤進行統(tǒng)一管理,并利用磁盤上的空間來模擬內存空間,從而擴展了內存容量;頁面調度是將可用物理頁面分配給進程所需的虛擬頁面的過程;而頁面替換是當物理內存不足時,通過選擇適當?shù)捻撁嫣鎿Q來釋放物理內存的過程。
為了實現(xiàn)PageIn機制,Linux內核中引入了許多相關概念和數(shù)據(jù)結構。其中比較重要的是頁表和頁表項。頁表是指一張存儲虛擬頁面與物理頁面映射關系的表格,它指示了一個進程的虛擬地址與物理存儲地址之間的映射關系。而頁表項則是描述一個頁面狀態(tài)信息的數(shù)據(jù)結構。Linux內核中,頁表和頁表項都是以分層結構的方式來組織的。
在Linux內存管理中,頁表有三個級別:頁全局目錄(Page Global Directory)、頁中間目錄(Page Mid Directory)和頁表項(Page Table Entry)。其中頁全局目錄和頁中間目錄用于將虛擬地址轉換成頁的物理地址,而頁表項則用于描述物理頁的狀態(tài)。對于每個進程,內核都維護了一個頁表,這個頁表是一個二級頁表,其根節(jié)點存放在進程控制塊中。進程使用虛擬地址訪問內存時,Linux內核會建立一個從虛擬地址到物理地址的映射表,從而實現(xiàn)虛擬地址到物理地址的轉換。
PageIn機制的主要目標是盡可能地提高系統(tǒng)的性能。為了實現(xiàn)這一目標,Linux內核設計了多種不同的頁面替換算法。這些算法的目的是在物理內存滿載的情況下選擇適當?shù)捻撁孢M行替換,從而保證系統(tǒng)性能的穩(wěn)定和高效。目前,Linux內核中最常用的頁面替換算法是LRU(Least recently used)算法。該算法通過維護一個頁訪問時間戳鏈表來實現(xiàn)選擇最近最少使用的頁面進行替換。這種算法的效率很高,因為它可以將最近最少使用的頁面快速地剔除出物理內存。同時,由于Linux內核中實現(xiàn)了緩存預取機制,這些替換頁面的緩存大部分情況下都會被重復使用。
PageIn機制是Linux內核中一種非常重要的內存調度機制。通過精細的頁面調度和頁面替換算法,可以很好地提高系統(tǒng)的性能和穩(wěn)定性。在實際應用中,PageIn機制可以用于管理進程所需的內存資源,并實現(xiàn)進程之間的資源共享。為了更好地實現(xiàn)PageIn機制,我們需要仔細地理解其原理和實現(xiàn)方式,從而能夠更加有效地對系統(tǒng)進行優(yōu)化和調試。
相關問題拓展閱讀:
- 如何測試Linux服務器的性能
- linux硬盤掉線掛載信息還在
如何測試Linux服務器的性能
################### cpu性能查看 ############################################################
1、查看物理cpu個數(shù):
cat /proc/cpuinfo |grep “physical id”|sort|uniq|wc -l
2、查看每個物理旦旁cpu中的core個數(shù):
cat /proc/cpuinfo |grep “cpu cores”|wc -l
3、邏輯cpu的個數(shù):
cat /proc/cpuinfo |grep “processor”|wc -l
物理cpu個數(shù)*核數(shù)=邏輯cpu個數(shù)(不支持超線程技術的情況下)
########################### 內存查看 ################################################################
1、查看內存使用情況:
free -m
totalusedfree shared buffers cached
Mem:
-/+ buffers/cache:
Swap:
total:內存總數(shù)
used:已經(jīng)使用的內存數(shù)
free:空閑內存數(shù)
shared:多個進程共享的內存總額
– buffers/cache:(已用)的內存數(shù),即used-buffers-cached
+ buffers/cache:(可用)的內存數(shù),即free+buffers+cached
Buffer Cache用于針對磁盤塊的讀寫;Page Cache用于針對文件inode的讀寫,這些Cache能有效地縮短I/O系統(tǒng)調用的時間。
對于操作系統(tǒng)來說free/used是系統(tǒng)可用/占用的內存;而對于應用程序來說-/+ buffers/cache是可用/占用內存,因為buffers/cache很快就會被使用。我們工作時候應該從應仿遲叢用角度來看。
################# 硬盤查看 ##########################################################################
1、查看硬盤及分區(qū)信息:
fdisk -l
2、查看文件系統(tǒng)的磁盤空間占用情況:
df -h
3、查看硬盤的I/O性能(每隔一秒顯示一次,顯示5次):
iostat -x 1 5
iostat是含在套裝systat中的,可以用yum -y install systat來安裝。
常關注的參數(shù):
如果%util接近100%,說明產(chǎn)生的I/O請求太多,I/O系統(tǒng)已經(jīng)滿負荷,該磁盤可能存在瓶頸。
如果idle小于70%,I/O的壓力就比較大了,說明讀取進程中有較多的wait。
4、查看linux系統(tǒng)中某目錄的大?。?/p>
du -sh /root
如發(fā)現(xiàn)某個分區(qū)空間接近用完,可以進入該分區(qū)的掛載點,用以下命令找出占用空間最多的文件或目錄,然后按照從大到小的順序,找出系統(tǒng)中占用最多空間的前10個文件或目錄:
du -cksh *|sort -rn|head -n 10
############################################ 查看平均負載 ####################################
有時候系統(tǒng)響應很慢,但又找不到原因,這時就要查看平均負載了,看它是否有大量的進程在排隊等待。
最簡單的命令:
uptime
查看過去的1分鐘、5分鐘和15分鐘內進程隊列中的平均進程數(shù)量。
還有動態(tài)命令:
top
我們只關心以下部分:
top – 21:33:09 up 1:00, 1 user, load average: 0.00, 0.01, 0.05
如果每個邏輯cpu當前的活動進程不大于3,則系統(tǒng)性能良好;
如果每個邏輯cpu當前的活動進程不大于4,表示可以接受;
如果每個邏輯cpu當前的活動進程大于5,則系統(tǒng)性能問題嚴重。
一般計算方法:負載值/邏輯cpu個數(shù)
還可以結合vmstat命令來判斷系統(tǒng)是否繁忙,其中:
procs
r:等待運行的備櫻進程數(shù)。
b:處在非中斷睡眠狀態(tài)的進程數(shù)。
w:被交換出去的可運行的進程數(shù)。
memeory
swpd:虛擬內存使用情況,單位為KB。
free:空閑的內存,單位為KB。
buff:被用來作為緩存的內存數(shù),單位為KB。
swap
si:從磁盤交換到內存的交換頁數(shù)量,單位為KB。
so:從內存交換到磁盤的交換頁數(shù)量,單位為KB。
io
bi:發(fā)送到塊設備的塊數(shù),單位為KB。
bo:從塊設備接受的塊數(shù),單位為KB。
system
in:每秒的中斷數(shù),包括時鐘中斷。
cs:每秒的環(huán)境切換次數(shù)。
cpu
按cpu的總使用百分比來顯示。
us:cpu使用時間。
sy:cpu系統(tǒng)使用時間。
id:閑置時間。
標準情況下r和b的值應該為:
r
假設輸出的信息中:
如果r經(jīng)常大于3或4,且id經(jīng)常少于50,表示cpu的負荷過重。
pi、po長期不等于0,表示內存不足。
bi經(jīng)常不等于0,且在b中的隊列大于2或3,表示io的性能不好。
################################# 其他參數(shù) #####################################
查看內核版本號:
uname -a
簡化命令:
uname -r
查看系統(tǒng)是32位還是64位的:
file /in/init
查看發(fā)行版:
cat /etc/issue
或l_release -a
查看系統(tǒng)已載入的相關模塊:
lod
查看pci設置:
lspci
linux硬盤掉線掛載信息還在
不在了!1 查看已掛載磁盤信息
df -h
?蠢告
2.查看磁盤信息
fdisk -l
?
4.掛載磁盤(把 /dev/sda3 掛載到 /data目錄)
mount /dev/sda3 /data/
?
以上親測有效!
5.實現(xiàn)自動掛載(注意:自動掛載,實測開不了機,還未找到解決方案)
vi /etc/fstab
添加如下內容:
/dev/sda3 /data/ ext4 default 0 0
?
將上面的命令添加進fstab后,為了避免可能的錯誤,我們可以使用mount -a 命令帶虧明來檢驗編輯的內容是否有錯。執(zhí)行mount -a命令后,用df -h查看會發(fā)現(xiàn)磁盤已經(jīng)掛載成功,說明輸入沒有錯誤。下次重啟的空侍時候系統(tǒng)就可以自動進行掛載了。
磁盤掛載與卸載
磁盤分區(qū)完之后需要格式化,格式化之后需要掛載磁盤。
格式化后的磁盤恰是是一個塊設備文件,類型為b。
在掛載某個分區(qū)前需要先建立一個掛載點,這個掛載點是以目錄的形式出現(xiàn)的。一旦把某個分區(qū)掛載到了這個掛載點(目錄)下,那么再往這個目錄寫數(shù)據(jù)時,則會寫到該分區(qū)中。需要注意正尺帶!
在掛載該分區(qū)前,掛載點(目錄)下必須是個空目錄。其實目錄不為空并不影響所掛載分區(qū)的使用。但是一旦掛載上了,那么該目錄下以前的東西就看不到了。只有卸載掉該分區(qū)后才能看到。
命令:mount
單一文件系統(tǒng)不應該被重復掛載在不同的掛載點中
單一目錄不應該重復掛載多個文件系統(tǒng)
作為掛載點的目錄理論上應該都是空目錄
語法:mount
vfstype>
options> device
dir
1.-t
vfstype 指定文件系統(tǒng)的類型,通常不必指定。
2.-o
options 主要用來描述設備或檔案的掛接方式。
3.device
要掛接(mount)的設備。
4.dir設備在系統(tǒng)上的掛接點(mount
point)。
選項:
-a:依照配置文件/etc/fstab
的數(shù)據(jù)將所有未掛載的磁盤都掛載上來
-l:單純輸入mount會顯示目前掛在信息,加上-l
可增列LABEL名稱
-t:可加上文件系統(tǒng)種類來指定欲掛載的類型
-n:在默認情況下,系統(tǒng)會將實際掛載的情況實時寫人/etc/mtab中,以利其他系統(tǒng)運行,但在某些情況下欲避免問題,會刻意不寫入,此時就要加-n選項。
-L:系統(tǒng)除了可以利用設備文件名之外,還可以利用文件系統(tǒng)的卷標名稱來進行掛載
-o:后面可以接一些掛載時額困漏外加上的參數(shù):
常用的選項有:-a、-t、-o.
如果不加任何選項,直接運行mount命令,會顯示如下信息:
# mount
/dev/sda3 on / type ext4 (rw)
proc on /proc type proc (rw)
sysfs on /sys type sysfs (rw)
devpts on /dev/pts type devpts
(rw,gid=5,mode=620)
tmpfs on /dev/shm type tmpfs (rw)
/dev/sda1 on /boot type ext4 (rw)
none on /proc/sys/fs/binfmt_misc type
binfmt_misc (rw)
mount命令舉蘆可以查看當前系統(tǒng)已經(jīng)掛載的所有分區(qū),以及分區(qū)文件系統(tǒng)的類型,掛載點和一些選項等信息。所以如果想知道某個分區(qū)的文件系統(tǒng)類型直接用該命令查看即可。
例:
建一個空目錄,然后在目錄里建一個空白文檔。
# mkdir /newdir
# touch
/newdir/newfile.txt
# ls
/newdir/newfile.txt
/newdir/newfile.txt
然后把格式化的 /dev/sdb5掛載到
/newdir上。
mount: wrong fs type, bad option, bad
superblock on /dev/sdb5,
missing codepage or helper program, or
other error
In some cases useful info is found in
syslog – try
dmesg | tail or so
不能完成掛載,根據(jù)以上掛載錯誤的提示:
# dmesg |tail
Addingk swap on /dev/sda2.
Priority:-1 extents:1 across:k
NET: Registered protocol family 10
lo: Disabled Privacy Extensions
ip6_tables: (C)Netfilter Core
Team
nf_conntrack version 0.5.0 (16100
buckets,max)
ip_tables: (C)Netfilter Core
Team
eth0: link up
eth0: no IPv6 routers present
EXT4-fs (sdb5): bad block size
8192
EXT4-fs (sdb5): bad block size
8192
可以看到,我的/dev/sdb5指定的塊值8192不合法,所以只能重新格式化磁盤。
# mke2fs -t ext4 -L TEST
/dev/sdb5
使用默認塊值即可。繼續(xù)掛載sdb5。
# mount /dev/sdb5
/newdir/
# ls /newdir/
lost+found
# df -h
文件系統(tǒng) 容量 已用 可用 已用% 掛載點
Filesystem Size Used
Avail Use% Mounted on
/dev/sda3 7.8G 2.0G 5.5G 27% /
tmpfs 504M 0 504M 0% /dev/shm
/dev/sda1 97M 26M 67M 29% boot
/dev/sdb5 989M 18M 921M 2% /newdir
把/dev/sdb5掛載到/newdir后,原來在/neddir下的newfile.txt被覆蓋了,通過df
-h可以看到剛才掛載的分區(qū),我們也可以使用LABEL的方式掛載分區(qū):
# umount /newdir/
# df -h
Filesystem Size Used Avail Use% Mounted
on
/dev/sda3 7.8G 2.0G 5.5G 27% /
tmpfs 504M 0 504M 0% /dev/shm
/dev/sda1 97M 26M 67M 29% /boot
# mount LABEL=TEST
/newdir
# df -h
Filesystem Size Used Avail Use% Mounted
on
/dev/sda3 7.8G 2.0G 5.5G 27% /
tmpfs 504M 0 504M 0% /dev/shm
/dev/sda1 97M 26M 67M 29% /boot
/dev/sdb5 989M 18M 921M 2% /newdir
日常運維工作中會遇到這樣的情況,一臺服務器上新裝了兩塊磁盤,磁盤a(在服務器上顯示為sdc)和磁盤b(在服務器上顯示為sdd)。又一次把這兩塊磁盤都拔掉了,然后再重新插上,重啟機器,結果磁盤編號調換了。a變成了sdd,b變化才能了sdc(這是應為把磁盤差錯了卡槽)。
通過上面的學習,掛載磁盤是通過/dev/hdb1這樣的分區(qū)名字來掛載的,如果先前加入到了/etc/fstab中,結果系統(tǒng)啟動后則會掛載錯分區(qū)。
如何避免這種情況發(fā)生?這就要用到UUID,可以通過blkid命令獲取各分區(qū)的UUID:
blkid命令
獲取文件系統(tǒng)類型、UUID
在Linux下可以使用blkid命令對查詢設備上所采用文件系統(tǒng)類型進行查詢。blkid主要用來對系統(tǒng)的塊設備(包括交換分區(qū))所使用的文件系統(tǒng)類型、LABEL、UUID等信息進行查詢。
# blkid
/dev/sda1:
UUID=”37d8fe31-1cdaaa-1eed” TYPE=”ext4″
/dev/sda2:
UUID=”1ac357d6-af-ba6c-1eabad6aa0f2″ TYPE=”swap”
/dev/sda3:
UUID=”51a8587eea8-85ef-bad6a” TYPE=”ext4″
/dev/sdb5: LABEL=”TEST”
UUID=”b45feba7fb25311e” TYPE=”ext4″
這樣可以獲得全部磁盤分區(qū)的UUID,如果格式化的時候指定了LABLE則該命令也會顯示LABEL值,甚至連文件系統(tǒng)類型也會顯示。當然這個命令后面也可以指定哪個分區(qū):
# blkid /dev/sdb5
/dev/sdb5: LABEL=”TEST”
UUID=”b45feba7fb25311e” TYPE=”ext4″
獲得UUID之后的使用方法:
# umount /newdir
# mount
UUID=”b45feba7fb25311e” /newdir
# df -h
Filesystem Size Used Avail Use% Mounted
on
/dev/sda3 7.8G 2.0G 5.5G 27% /
tmpfs 504M 0 504M 0% /dev/shm
/dev/sda1 97M 26M 67M 29% /boot
/dev/sdb5 989M 18M 921M 2% /newdir
也可以把下面這行寫到/etc/fstab中
UUID=b45feba7fb25311e /newdir ext4 defa ults
如果想讓某個分區(qū)開機后就自動掛載,有兩個辦法可以實現(xiàn):在/etc/fstab中添加一行。如上例中那行;把掛載命令寫到/etc/re.d/rc.local文件中去,我會經(jīng)常把想要開機啟動的命令加到這個文件中。系統(tǒng)啟動后會執(zhí)行這個文件中的命令,所以只要想開機后運行什么命令統(tǒng)統(tǒng)寫入到這個文件下面,直接放到最后面即可,把掛載的命令放在文件最后一行:
# cat
/etc/rc.d/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
# vi
/etc/rc.d/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
mount
UUID=”b45feba7fb25311e” /newdir
~
按esc退出,輸入:wq,保存退出即可
以上兩種方法任選其一。
建議掛載磁盤分區(qū)的時候盡量使用UUID或者LABEL這兩種方法。
命令:umount
選項:-l,(非常有用,遇到不能卸載的情況用-l)
在上面的例子中,多次用到這個命令。
umount后面可以跟掛載點,也可以跟分區(qū)名(/dev/hdb1).
但是不可以跟LABEL和UUID。
# umount /dev/sdb5
# mount
UUID=”b45feba7fb25311e” /newdir
# umount /newdir
# mount
UUID=”b45feba7fb25311e” /newdir
# df -h
Filesystem Size Used Avail Use% Mounted
on
/dev/sda3 7.8G 2.0G 5.5G 27% /
tmpfs 504M 0 504M 0% /dev/shm
/dev/sda1 97M 26M 67M 29% /boot
linux 卸載磁盤后掛載目錄還存在
方舟生存進化游戲下載
精選推薦
廣告
linux mount 硬盤掛載和卸載
68閱讀·0評論·0點贊
2023年11月3日
Linux下mount掛載后,原目錄下的內容消失
2.6W閱讀·0評論·2點贊
2023年5月5日
Linux實操篇-Linux 磁盤分區(qū)、掛載
233閱讀·0評論·0點贊
2023年9月3日
新硬盤掛載目錄后文件消失解決辦法
3.1W閱讀·6評論·9點贊
2023年7月29日
linux怎么卸載home文件系統(tǒng),Linux磁盤和文件系統(tǒng)管理(3)_磁盤掛載 卸載
499閱讀·0評論·0點贊
2023年5月14日
ubuntu掛載與卸載
2183閱讀·0評論·0點贊
2023年3月20日
三國新模式,由你帶兵攻城作戰(zhàn)!
精選推薦
廣告
【轉載】Linux新硬盤掛載某目錄后原目錄的文件消失
702閱讀·1評論·3點贊
2023年6月28日
linux各種掛載點作用,Linux 掛載點目錄及其作用
1636閱讀·0評論·0點贊
2023年5月16日
【Linux實驗】系統(tǒng)分區(qū)掛載與卸載配置實驗
455閱讀·0評論·2點贊
2023年5月15日
解決mount掛載問題:wrong fs type, bad option, bad superblock on
2.8W閱讀·0評論·4點贊
2023年6月19日
Linux如何創(chuàng)建掛載點
1.0W閱讀·0評論·1點贊
2023年4月8日
Linux 掛載分區(qū)到文件夾后,文件夾原來數(shù)據(jù)哪去了
736閱讀·0評論·0點贊
2023年2月3日
ubuntu掛載與卸載硬盤
1567閱讀·0評論·1點贊
2023年4月1日
linux掛載前后數(shù)據(jù)會改變么,linux掛載點變化
321閱讀·0評論·0點贊
2023年5月15日
Linux基礎知識-掛載一個磁盤再卸載掉
96閱讀·0評論·0點贊
2023年2月29日
linux取消目錄掛載,Linux取消掛載,刪除用戶及其目錄
261閱讀·0評論·0點贊
2023年5月12日
解決辦法之Linux新硬盤掛載某目錄后原目錄的文件消失
8089閱讀·0評論·9點贊
2023年3月13日
Linux文件系統(tǒng)的的掛載與卸載(mount、umount)
2771閱讀·0評論·1點贊
2023年2月10日
Linux 實用指令(7)–Linux 磁盤分區(qū)、掛載
90閱讀·0評論·0點贊
2023年9月26日
Linux使用mount把目錄掛載到新磁盤后 原目錄的內容消失 解決辦法
1173閱讀·2評論·0點贊
2023年2月26日
去首頁
pagein linux的介紹就聊到這里吧,感謝你花時間閱讀本站內容,更多關于pagein linux,Linux內存管理 PageIn 實現(xiàn)資源調度,如何測試Linux服務器的性能,linux硬盤掉線掛載信息還在的信息別忘了在本站進行查找喔。
香港服務器選創(chuàng)新互聯(lián),2H2G首月10元開通。
創(chuàng)新互聯(lián)(www.cdcxhl.com)互聯(lián)網(wǎng)服務提供商,擁有超過10年的服務器租用、服務器托管、云服務器、虛擬主機、網(wǎng)站系統(tǒng)開發(fā)經(jīng)驗。專業(yè)提供云主機、虛擬主機、域名注冊、VPS主機、云服務器、香港云服務器、免備案服務器等。
分享文章:Linux內存管理PageIn實現(xiàn)資源調度(pageinlinux)
當前鏈接:http://fisionsoft.com.cn/article/djegcoh.html


咨詢
建站咨詢
