linux64位內存
1. 64位的linux上單個進程可以使用的最大內存數量是多少
對於64位Linux允許多達128個TB單個進程的虛擬地址空間,並且能夠解決大約64 TB的物理存儲器,但是受處理器和系統的限制。原話:64-bit Linux allows up to 128 TB of virtual address space for indivial processes, and can address approximately 64 TB of physical memory, subject to processor and system limitations.只要你的機器有足夠的內存統統可以給你放倒。連銀河曙光都能放下你的機器肯定不在話下:)而理論值更高,一個64位的微處理器可定址存儲器16 EB(1TB=1024GB,1PB=1024TB,1EB=1024PB自己換算)。順便說一下64位的windows企業伺服器最大2TB內存。
2. linux進程地址空間劃分
Linux 64位系統在理論上擁有16位十六進製表示的巨大內存地址空間,即從0x0000000000000000到0xFFFFFFFFFFFFFFFF。然而,Linux僅實際使用了其中的256T空間,其餘部分未被使用。
在Linux 64位操作中,實際使用的是低47位地址,高17位用於擴展,只能取全0或全1值。這樣,可用的地址空間被分為兩部分:用戶空間(0x0000000000000000至0x00007FFFFFFFFFFF)和內核空間(0xFFFF800000000000至0xFFFFFFFFFFFFFFFF),剩餘部分未被利用。
用戶空間主要包含以下部分:代碼段、數據段、BSS段、堆和棧。
代碼段用於存放程序執行代碼,即CPU執行的機器指令。
數據段存放已初始化且初值不為0的全局變數和靜態局部變數,屬於靜態內存分配,可讀可寫。
BSS段包括未初始化全局變數和靜態局部變數的空間。
堆(heap)是動態分配內存的區域,當進程讀取文件時,若文件未在內存中,會通過缺頁中斷獲取物理內存,通過磁碟調頁將文件數據讀入內存,實現文件的讀取。
文件在兩個進程間共享時,即使它們映射到同一文件,虛擬地址空間也可能不同。若進程A先讀取文件,則會獲取物理內存,通過磁碟調頁將文件數據讀入內存。進程B在訪問文件時,若文件數據不在內存中,則會查找緩存區,如果緩存中有文件數據,則建立映射關系,實現進程間通信。
棧(stack)用於存儲函數調用時的局部變數。
以數組s和指針p3為例,數組s的內容是在運行時賦值,而指針p3指向的常量區字元串內容在編譯時已賦值。
使用malloc函數分配內存時,虛擬內存的分配情況如下:
當malloc分配的內存小於128k時,使用brk分配內存,將_edata向高地址移動,只分配虛擬空間,不對應物理內存。第一次讀/寫數據時,會觸發內核缺頁中斷,內核分配物理內存,建立虛擬地址空間映射關系。若分配的內存不被訪問,對應的物理內存不會被分配。
brk分配的內存需要等待高地址內存釋放後才能釋放,可能導致內存碎片。
當malloc分配的內存大於128k時,使用mmap分配內存,在堆和棧之間尋找空閑內存分配,對應獨立內存且初始化為0。mmap分配的內存可以直接通過free釋放。
當最高地址空間的空閑內存超過128k時,Linux執行內存緊縮操作,釋放部分內存。
當進程訪問未建立映射關系的虛擬內存時,邏輯地址轉換為物理地址,發現當前頁不在內存中,處理器自動觸發缺頁異常。
3. LINUX對硬體支持有上限么最大多少內存多大硬碟容量
32位的Linux的內存最大支持到4GB,64位的Linux的最大支持內存在TB級別上。實際上最大支持多大的內容跟操作系統的種類無關,而是跟操作系統是幾位的還有CPU是幾位的有關。
DOS是16位的,所以DOS支持的最大內存是64MB(2的16次方位元組等於64MB)。
32位的Linux和32位的Windows(XP、Vista...)支持的最大內存是4GB,2的32次方位元組=4GB。
64位的Linux和Windows支持的最大內存=16EB。
至於最大硬碟容量(你應該是指最大能用多大的硬碟吧?)這個應該跟主板BIOS有關,跟操作系統無關。最大單文件大小和最大分區大小倒是跟系統有點關系。不過真正相關的倒是文件系統(file system),也就是分區的格式。
NTFS格式(windows的分區,Linux也能用):支持最大分區為2TB,最大文件為2TB;
FAT32格式(windows的分區,Linux也能用):支持最大分區為128GB,最大文件為4GB;
Ext2格式:最大分區大小為4TB,最大文件大小為1TB;
Ext3格式:最大分區大小為16TB,最大文件大小為2TB;
EXT4格式:最大分區大小為1EB,最大文件大小為16TB;
ReiserFS格式:最大分區大小為4TB,最大文件大小為1TB;