Linux页目录在加载进入内存的时候室加载在固定的物理内存0地址开始处,还是可以根据CR3加载在任意的物理内存中,而不是必须加载在内核区或用户区,页目录项存储的是页表的物理地址的页号是不是?
每个页表在内存中的位置是不是 不是连续的,每个页表是不是在物理内存的用户区,如果是内核的页表应该放在内核区的物理内存页中还是也是随机分配?
请问下,进程在虚拟内中会被分成代码,数据等等段么?如果有,我们怎么确认这个进程的各个段?是不是每个段都应该有整数个页面?各个段必须都是相连的么?
追答1.不确切的说(请看下文),早期的Linux会把进程分代码段和数据段。好像从2.4版开始,Linux实际上已经不用分段机制。所有的段基址全为0,长度全为4G。进程间的隔离完全用分页机制实现。
2.如果你用分了段的早期Linux,需要找当前进程的各段信息的话,请去找LDTR寄存器中的LDT表描述符。LDT表中第二项是代码段描述符,第三项是数据段描述符。
当然,前提是你有调试操作系统的调试器。
3.不用。但是Linux给各段分内存时都是整页整页分的。多出的内存会被浪费……
4.前提仍然是你用分了段的早期Linux。
理论上,各个段没有相连的必要。
事实上,你看Linux 0.11内核的代码时,会发现数据段和代码段基址是相同的!代码段和数据段大多数地址是共用的。
顺便更正一个错误,不知道从哪一版的Linux开始,各进程有了各自的页目录。我没查到是哪个版本,抱歉。
谢谢
关于虚拟内存中页目录与页表在物理内存中加载的问题
首先,物理内存无所谓内核区用户区,所有地址都一样。虚拟的地址空间才分内核区用户区。处理器通过查看页目录和页表,把虚拟地址换算成物理地址。用户区与内核区的两个不同的虚拟地址对应同一个物理地址也不要紧。内核区与用户区的真正区别在于普通进程能不能访问该区域中的地址。在正常情况下,操作系统肯...
磁盘缓存,虚拟内存,页面文件,和物理内存的关系
一个进程虚拟内存页的加载流程大致是这样的:一旦用户进程一虚拟页需要被加载,则操作系统会在“交换区”中为该页分配一个页,一旦CPU访问的虚拟地址落入该页地址空间,则该页才被换入到物理内存中。在这个过程中虚拟页有多个状态,分别如下:未分配的 - 进程虚拟页未得到加载指令,仍安静的待在磁盘...
理论+实例,带你掌握Linux的页目录和页表
页目录自身占用4KB物理内存,对于小空间程序来说浪费。通过拆分映射表为1024个页表,每个页表只占用1个物理页的空间,更有效地利用内存。用户程序通常只需要几十个页表,比如10MB程序只需3个页表,加上页目录,总共16KB空间。处理器通过CR3寄存器获取当前任务的页目录地址,每个程序有自己的页目录和页表。在...
为什么页表占用一定的物理内存?
三、现在问题是页表占用一定的内存。(一)现在假设有2GB(一定要小于16GB)内存。1、那么它一共有2GB\/4KB=512K个页,也就是说页表项有512K项,而每个页表项的大小4B,那么页表在内存中占用的大小是:512K*4B=2MB,意味着,只要2MB就可以表示512K个页(每个页是4KB,总内存大小是2G),它页表本身...
Linux 页表初探
在虚拟内存中,页表是一个映射表概念,用于从进程理解的线性地址映射到存储器上的物理地址。当进程在 CPU 上运行时,CPU 并不是直接访问物理内存地址,而是通过虚拟地址空间间接访问物理内存。CPU 使用的地址都是虚拟地址,而数据存放在物理内存中,此时需要将虚拟地址转换为实际的物理地址,然后根据物理地址...
【操作系统基础】内存管理——虚拟内存概念及分页机制
页表既然是存放在内存中,也就存在物理大小的概念。由于页表需要记录所有地址的映射关系,因此页表的大小与虚拟内存容量正相关。假设虚拟内存的地址位宽为32bit,其中12bit为页内偏移,则剩下的20bit为页的数量。既然每个页都需要被记录,则页表项为2^20个。通常一个页表项需要记录20bit的物理页号,因此...
页表在页式内存管理中起到什么重要的作用?
首先,页表是虚拟内存系统的基础组件,它允许操作系统将虚拟地址空间映射到物理内存。在页式内存管理中,内存被划分为固定大小的页,每个页可以独立地加载到物理内存中。页表记录了哪些虚拟页面当前被映射到了哪些物理页面。当程序尝试访问一个虚拟地址时,处理器会查阅页表,找到对应的物理地址,然后执行实际...
内存分页与物理分页一一对应的吗?
内存分页与物理分页一一对应。在操作系统中,内存分页和物理分页是一一对应的。内存分页是指将进程的虚拟地址空间划分为大小相等的页,而物理分页是指将物理内存划分为大小相等的页框。每个虚拟页都会映射到一个物理页框上,这个映射关系是由操作系统的页表来维护的。当进程访问某个虚拟地址时,操作系统会...
分页内存管理——虚拟地址到物理地址的转换
虚拟地址到物理地址的转换工作由内存管理单元(MMU)完成,它只处理虚拟地址的页面号转换,不处理页内偏移值。MMU为每个程序配备页表,存储虚拟页面到物理页面的映射。在查找物理页面号时,若找不到,则通过缺页中断将需要的虚拟页面从磁盘加载到物理内存。随着虚拟页面的进出内存,页表内容不断更新。页表...
[原创] 深入剖析mmap原理 - 从三个关键问题说起
上述例子,在mmap之后,如下图: 在mmap之后,并没有在将文件内容加载到物理页上,只上在虚拟内存中分配了地址空间。当进程在访问这段地址时(通过mmap在写入或读取时FileA),若虚拟内存对应的page没有在物理内存中缓存,则产生"缺页",由内核的缺页异常处理程序处理,将文件对应内容,以页为单位(4096)加载到物理内存,注...