Linux--进程地址空间在线程方面的补充--页表的操作模式 0109

上一篇有关地址空间的博客

(入门自用)--Linux--程序地址空间--程序的创建--0907-0913_Gosolo!的博客-CSDN博客

 很久之前写的,最近会完善。

 1. 进程地址空间在线程方面的补充

 线程由于资源都是从主进程直接拿来的,所以他们的pcb结构体中的地址空间结构体(mm_struct)是相同的。

线程在程序内部执行,是操作系统调度的基本单位。

1.1 在堆上申请空间是连续的吗

我们在堆上申请空间,malloc、new我们只表明了空间的大小,没有表示申请空间的起始位置和结束位置。

struct vm_area_struct
{
    unsigned long vm_start;
    unsigned long vm_end;
    struct vm_area_struct *vm_next,*vm_prev;
}

在pcb内部有这样一个结构体的指针,可以帮助OS做到进程资源的细粒度划分。

1.2 页帧和页框

由于操作系统和磁盘进行IO的基本单位是4KB,为了方便OS运作,起始磁盘和物理内存已经将自己的内存划分好了区域,供操作系统读取。

.exe就是一个文件。我们的可执行程序本来就是按照地址空间方式进行编译的。

可执行程序,其实已经按照区域被划分为了以4KB为单位。每一个4KB称为页帧

物理内存的4KB用于接受页帧,称为页框。所以每一次的IO操作其实就是页帧放入页框的过程。

1.3 page结构体

物理内存假如是4GB,分成4KB的小区域,那就需要100w+个小区域,操作系统如何管理?

假如程序终止,那他占用的物理内存就要被删除,删除需要全部置零吗?

我们需要一个结构体,里面有很多标记位来表示该物理内存是否有效、是否过期等很多功能。

struct page
{
    int flag;
}

具体结构体可见大佬博文

Linux内存描述之内存页面page--Linux内存管理(四)_CHENG Jian的博客-CSDN博客

 所以在操作系统层面,就需要一个struct page mem[1000000+]来管理每一个page

 1.4 页表的操作模式

在32位系统中,有2^32次个地址,如果页表采用Key,Value的模式会导致页表占用的内存过高。

所以将32位的地址划分为10位,10位和12位。

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值