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;