自拍偷在线精品自拍偷,亚洲欧美中文日韩v在线观看不卡

Linux系統(tǒng)內(nèi)存去哪兒了?

系統(tǒng) Linux
在Linux下,我們經(jīng)常使用free命令來查看系統(tǒng)的內(nèi)存使用情況。細(xì)心的同學(xué)會發(fā)現(xiàn),它只顯示總量為3419MB(實際內(nèi)存為4GB,32bit系統(tǒng)),為什么Linux系統(tǒng)沒能全部識別出來呢?Linux系統(tǒng)內(nèi)存去哪兒了?

[[111344]]

在Linux下,我們經(jīng)常使用free命令來查看系統(tǒng)的內(nèi)存使用情況。

  1. [root@AC1 ~]# free -m 
  2.              total       used       free     shared    buffers     cached 
  3. Mem:          3419       3101        318          0         62       1930 
  4. -/+ buffers/cache:       1109       2310 
  5. Swap:            0          0          0 

細(xì)心的同學(xué)會發(fā)現(xiàn),為何它只顯示總量為3419MB呢?好像一般情況下沒有這種不上不下的內(nèi)存大小(其實我的內(nèi)存為4GB,32bit系統(tǒng))。那么為什么Linux系統(tǒng)沒能全部識別出來呢?難道從硬件識別過程就出錯了?好吧,我重啟機器進入BIOS看看,memory為4GB,說明BIOS是可以識別出全部內(nèi)存,那就在linux啟動時沒有了識別到全部內(nèi)存了。再看看kernel啟動日志與內(nèi)存相關(guān)的打?。?/p>

  1. [root@AC1 ~]# more /var/log/dmesg 
  2. …… 
  3. [    0.000000] 2695MB HIGHMEM available. 
  4. [    0.000000] 887MB LOWMEM available. 
  5. …… 
  6. [    0.000000] Initializing HighMem for node 0 (000377fe:000dffc0) 
  7. [    0.000000] Memory: 3494612k/3669760k available (3678k kernel code, 174680k reserved, 2107k data, 396k init, 2760456k highmem) 
  8. …… 

小學(xué)老師沒有好好教數(shù)學(xué),所以我只會用計算器計,算了一下2695MB+887MB=3582MB,說明kernel啟動時就只識別到了這么多內(nèi)存。再看,3582MB*1024=3667968KB與22行3669760K很接近,本行3494612K和free命令顯示的total mem接近。所以kernel很老實,按部就班的執(zhí)行這它該做的事,沒有偷偷吃掉內(nèi)存。沒辦法了,只好往前看dmsg。

很快就到了dmesg開始的地方,再也沒有更前面的東東了。

  1. [0.000000] BIOS-provided physical RAM map: 
  2. [0.000000]  BIOS-e820: 0000000000000000 - 000000000009bc00 (usable) 
  3. [0.000000]  BIOS-e820: 000000000009bc00 - 00000000000a0000 (reserved) 
  4. [0.000000]  BIOS-e820: 00000000000e0000 - 0000000000100000 (reserved) 
  5. [0.000000]  BIOS-e820: 0000000000100000 - 00000000dffc0000 (usable) 
  6. [0.000000]  BIOS-e820: 00000000dffc0000 - 00000000dffce000 (ACPI data) 
  7. [0.000000]  BIOS-e820: 00000000dffce000 - 00000000dffe0000 (ACPI NVS) 
  8. [0.000000]  BIOS-e820: 00000000dffe0000 - 00000000e0000000 (reserved) 
  9. [0.000000]  BIOS-e820: 00000000fee00000 - 00000000fee01000 (reserved) 
  10. [0.000000]  BIOS-e820: 00000000ffb00000 - 0000000100000000 (reserved) 
  11. [0.000000]  BIOS-e820: 0000000100000000 - 0000000120000000 (usable) 
  12. [0.000000] Notice: NX (Execute Disable) protection cannot be enabled: non-PAE kernel! 

這些打印是kernel從BIOS中獲取到的系統(tǒng)內(nèi)存映射,乍一看很正常的呀。***一行說我沒有使用PAE選項,但我的內(nèi)存沒有超過4GB所以不需要打開它。但我的系統(tǒng)時32位的,映射時哪里來了那么長的地址呀?數(shù)數(shù)32*4=128位,我**,這BIOS好強悍,也不管我的系統(tǒng)行不行就搞了這么大,幸好前面還是有好多0的。再次靠計算器計算一下:2^32 = 4294967296 = 0x100000000(不用數(shù)了,8個0)。 至此是不是有所發(fā)現(xiàn)了?

看上面第12行:0000000100000000 - 0000000120000000 這段地址超過了32位系統(tǒng)能訪問的范圍。在算算0x20000000=512M,加到free -m看到的3419M就等于……(還是用一下計算器:等于3931M)貌似與4G還是差的有點多。其實應(yīng)該把512M加上3582M才對,這個3582M怎么來的?不知道的請復(fù)習(xí)本文前面內(nèi)容。這下加起來結(jié)果就是4094M,與4096M(4G)就基本一樣了?,F(xiàn)在就知道原因了:BIOS可能會把部分系統(tǒng)內(nèi)存映射到OS不能訪問的位置(有些廠商的BIOS會可惡點,讓OS訪問不到更多的內(nèi)存)。

提供兩種解決辦法:

1. 打開kernel PAE編譯選項,其中PAE選項要選擇64GB;

2. 使用64bit系統(tǒng)。

責(zé)任編輯:黃丹 來源: 51CTO博客
相關(guān)推薦

2018-10-29 13:46:02

2019-02-01 08:12:16

果粉蘋果庫克

2014-02-19 14:33:17

2012-12-21 12:40:15

智慧云手機軟件

2017-10-12 10:06:23

Linux內(nèi)存free命令

2018-12-24 08:48:14

NginxApache Cookie

2014-02-13 16:16:33

云架構(gòu)云計算

2021-09-09 18:12:22

內(nèi)存分段式網(wǎng)絡(luò)

2014-02-13 09:40:20

架構(gòu)師春節(jié)旅游

2022-08-30 15:12:10

架構(gòu)實踐

2015-11-13 09:34:25

流量wifi運營商

2019-08-22 09:30:15

舊iPhone蘋果手機

2015-11-10 10:40:56

百度愛奇藝規(guī)劃

2017-05-15 15:54:50

MySQL數(shù)據(jù)庫

2014-06-09 16:32:55

大數(shù)據(jù)大數(shù)據(jù)人才

2024-07-25 13:04:21

2021-09-29 09:50:41

Linux內(nèi)核日志

2021-09-08 05:46:51

Linux內(nèi)核日志

2015-11-12 17:33:01

去哪兒

2013-11-08 10:19:10

點贊
收藏

51CTO技術(shù)棧公眾號