linux:进程 & 页表

在学习liinux的过程中,多处渗透着操作系统的知识,我们先来谈一谈进程及页表

进程,主要包含三个元素:
o. 一个可以执行的程序;
o. 和该进程相关联的全部数据(包括变量,内存空间,缓冲区等等);
o. 程序的执行上下文(execution context)。

一个进程表示的,就是一个可执行程序的一次执行过程中的一个状态 操作系统对进程的管理,典型的情况,是通过进程表完成的。进程表中的每一个表项,记录的是当前操作系统中一个进程的情况。对于单CPU的情况而言,每一特定时刻只有一个进程占用CPU,但是系统中可能同时存在多个活动的(等待执行或继续执行的)进程。
一个称为" 程序计数器(program counter,pc)"的寄存器,指出当前占用CPU的进程要执行的下一条指令的位置。
当分给某个进程的CPU时间已经用完,操作系统将该进程相关的寄存器的值,保存到该进程在进程表中对应的表项里面;把将要接替这个进程占用CPU的那个进程的上下文,从进程表中读出,并更新相应的寄存器(这个过程称为"上下文交换(process context switch)",程序寄存器pc指出程序当前已经执行到哪里,是进程上下文的重要内容,换出CPU的进程要保存这个寄存器的值,换入CPU的进程,也要根据进程表中保存的本进程执行上下文信息,更新这个寄存器)。


下面说一说进程页表的知识:

页表是一种特殊的数据结构,放在系统空间的页表区,存放逻辑页与物理页帧的对应关系。 每一个进程都拥有一个自己的页表,PCB表中有指针指向页表。

通过画图来帮助理解:
基本分页存储管理方式:

用固定大小的 页(Page)来描述逻辑地址空间,用相同大小的 页框(Frame)来描述物理内存空间,由操作系统实现从逻辑页到物理页框的 页面映射,同时负责对所有页的管理和进程运行的控制。


页表实现从页号到物理块号的地址映射:

逻辑地址转换成物理地址的过程是:用页号p去检索页表,从页表中得到该页的物理块号,把它装入物理 地址寄存器 中。同时,将页内地址d直接送入物理 地址寄存器 的块内地址字段中。这样,物理 地址寄存器 中的内容就是由二者拼接成的实际访问内存的地址,从而完成了从逻辑地址到物理地址的转换。


注:
逻辑地址空间:由程序所生成的所有逻辑地址的集合。
物理地址空间:与逻辑地址相对应的内存中所有物理地址的集合,用户程序看不见真正的物理地址。

也就是说我们之前学习的时候都被欺骗啦?我们在学习c时取地址&一直获取的是其逻辑地址,并非真正的物理地址。

在古老的操作系统里面,所有进程都是共用同一物理内存空间的,这种方法会有一些问题,比如两个进程之前相互踩内存,一个进程污染(踩内存)后,无法隔离,必须整个系统复位,才能恢复干净的环境。在这种操作系统下,进程之间无法隔离。

为了解决进程之间内存隔离,提供了虚拟内存这个概念。
进程看到的是虚拟内存,这根本看不到物理内存,物理内存是OS给它分配的,它不需要感知物理内存。对于同一程序运行起来的两个进程,它们的虚拟空间布局可能完全一样,但他们真实使用的物理内存空间则不相同,通过这种方式来实现进程之间的隔离。








  • 4
    点赞
  • 14
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Linux x64 中,虚拟地址空间是 2^48 (256 TB)。为了管理这么大的地址空间,Linux 使用了四级页。 四级页包含了四个级别的页,每个页的大小都是 512 个条目。每个条目的大小为 8 字节,因此一个页的大小为 4 KB。因此,一个四级页的大小为 4 KB * 512 * 512 * 512 * 512 = 256 TB。 在四级页中,虚拟地址被划分为五个部分:PGD(Page Global Directory)、PUD(Page Upper Directory)、PMD(Page Middle Directory)、PTE(Page Table Entry)和偏移量。 - PGD:PGD 是最高级的页,它包含了 512 个 PUD 条目。 - PUD:PUD 包含了 512 个 PMD 条目。 - PMD:PMD 包含了 512 个 PTE 条目。 - PTE:PTE 包含了物理页框号和一些标志。 - 偏移量:偏移量用于计算物理地址。 当 CPU 访问一个虚拟地址时,它首先使用 PGD 条目找到对应的 PUD 条目,然后使用 PUD 条目找到对应的 PMD 条目,依此类推。最后,CPU 使用 PTE 条目找到对应的物理页框号,并将虚拟地址中的偏移量添加到物理页框号中,得到物理地址。 Linux x64 中的页是按需分配的。当进程第一次访问某个虚拟地址时,Linux 会分配一个物理页框,并将该页框映射到对应的虚拟地址。如果进程再次访问同一虚拟地址,则直接使用之前分配的物理页框。 这是 Linux x64 中页的基本原理。理解页的工作原理对于理解 Linux 内核的内存管理非常重要。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值