linux中的进程页表 -ag凯发k8国际
是什么
进程页表是用于管理进程虚拟地址空间和物理内存之间映射关系的数据结构。它记录了进程中每个虚拟页对应的物理页的信息。
什么作用
进程使用进程页表的方式是通过虚拟地址访问内存。当进程访问一个虚拟地址时,操作系统会根据进程页表中的映射关系,将虚拟地址转换为物理地址,然后进行内存访问操作。
谁维护
内核。进程页表的创建、更新和销毁等操作都由内核负责。
什么结构
通常是一个多级页表,由多个页表项组成。每个页表项记录了虚拟页和物理页的映射关系,包括虚拟页号、物理页号、权限位等信息。多级页表的结构可以有效地管理大型的虚拟地址空间。
什么时间创建
进程页表在进程创建时被创建。当一个新的进程被创建时,操作系统会为该进程分配一个独立的虚拟地址空间,并为其创建一个新的页表。页表的创建过程包括分配页表所需的内存空间,并建立虚拟页和物理页的映射关系。
cpu切换进程时
操作系统会切换进程的页表。具体操作包括将新进程的页表加载到mmu(内存管理单元)中,以更新虚拟地址空间和物理内存的映射关系。这样,当新进程执行时,它的虚拟地址访问将会映射到正确的物理内存位置。
进程从用户态切换内核态时
会发生一次上下文切换;在这个过程中,进程的页表也会发生切换:当进程发起系统调用或触发异常时,cpu会自动切换到内核态,并将当前进程的页表切换为内核页表。内核页表是内核专用的页表,用于管理内核地址空间和物理内存之间的映射关系。
与内核页表的区别
进程页表和内核页表是两个独立的数据结构,用于管理不同的地址空间。进程页表用于管理进程的用户态地址空间,而内核页表用于管理内核的地址空间。进程页表和内核页表之间没有直接的映射关系,它们是独立的。
当进程从用户态进入到内核态时,内核页表会被加载到mmu中,以便进程可以访问内核地址空间中的代码和数据。当进程从内核态返回到用户态时,内核页表会被切换回进程页表,以恢复进程的用户态地址空间。
什么是缺页异常
指当进程访问一个尚未映射到物理内存的虚拟页时,操作系统会产生一个缺页异常。这种设计是为了实现虚拟内存的概念,即将进程的虚拟地址空间扩展到比物理内存更大的范围。当发生缺页异常时,操作系统会根据页表的映射关系,将相应的物理页加载到内存中,并更新页表的映射关系,以便进程继续访问该虚拟页。
附录
linux系统文件页表目录和页表结构(图文详解)
参考:linux系统文件页表目录和页表结构(图文详解)
linux查看某一进程详细信息
cat /proc/进程号/status
vmsize(kb) 任务虚拟地址空间的大小 (total_vm-reserved_vm),其中total_vm为进程的地址空间的大小,reserved_vm:进程在预留或特殊的内存间的物理页
vmlck(kb) 任务已经锁住的物理内存的大小。锁住的物理内存不能交换到硬盘 (locked_vm)
vmrss(kb) 应用程序正在使用的物理内存的大小,就是用ps命令的参数rss的值 (rss)
vmdata(kb) 程序数据段的大小(所占虚拟内存的大小),存放初始化了的数据; (total_vm-shared_vm-stack_vm)
vmstk(kb) 任务在用户态的栈的大小 (stack_vm)
vmexe(kb) 程序所拥有的可执行虚拟内存的大小,代码段,不包括任务使用的库 (end_code-start_code)
vmlib(kb) 被映像到任务的虚拟内存空间的库的大小 (exec_lib)
vmpte 该进程的所有页表的大小,单位:kb
threads 共享使用该信号描述符的任务的个数,在posix多线程序应用程序中,线程组中的所有线程使用同一个信号描述符
进程个各个数据段的虚拟地址是在什么时候确定的
在linux中,进程的各个数据段的虚拟地址是在进程创建时确定的。具体来说,当进程被创建时,内核会为其分配一块虚拟地址空间,其中包括代码段、数据段、堆和栈等。这些虚拟地址是由内核根据进程的需求和系统的配置来确定的。
进程各个数据段的作用
进程的虚拟地址空间中,代码段用于存放可执行代码,数据段用于存放全局变量和静态变量,堆用于存放动态分配的内存,栈用于存放函数调用的局部变量和函数调用的上下文信息。
哪些数据段会一直驻留内存
在linux中,代码段和数据段通常会一直驻留在内存中,因为它们是进程的静态数据。而堆和栈是动态分配的,它们的大小和位置会随着进程的运行而变化。当堆和栈的空间不足时,进程会触发内存分配和释放操作,这时才会将相应的内存页写入或从内存中释放。
swap的作用
当系统的物理内存不足时,操作系统会将一些不常用的内存页换出到swap分区中,以释放物理内存供其他进程使用。具体来说,当发生缺页中断时,如果内存中没有空闲的物理页,操作系统会选择一个不常用的内存页,将其写入swap分区,并更新进程页表中的映射关系。这样,物理内存就可以为新的内存页腾出空间。当进程再次访问被换出的内存页时,会触发缺页中断,操作系统会将其从swap分区中读入内存,并更新进程页表中的映射关系。
总结
以上是ag凯发k8国际为你收集整理的linux中的进程页表的全部内容,希望文章能够帮你解决所遇到的问题。
- 上一篇:
- 下一篇: