Linux的虚拟存储及动态内存管理及共享内存

物理内存与虚拟内存

虽然应用程序操作的对象是映射到物理内存之上的虚拟内存,但是处理器直接操作的却是物理内存。所以当用程序访问一个虚拟地址时,首先必须将虚拟地址转化成物理地址,然后处理器才能解析地址访问请求。地址的转换工作需要通过查询页表才能完成,概括地将,地址转换需要将虚拟地址分段,使每段虚拟地址都作为一个索引指向页表,而页表则指向下一级别的页表或者指向最终的物理页面。

    linux中使用三级页表完成地址转换。利用多级页表能够节约地址转换需占用的存放空间。如果利用三级页表转换地址,即使64位机器,占用的空间也很有限。linux使用的机制:

    顶级页表示页全局目录(PGD),它包含一个pgd_t类型数组,多数体系结构中pgd_t类型等同于无符号长整型。PGD中的表项指向二级页目录中的表项:PMD

    二级页表是中间页目录(PMD),它是个pmd_t类型数据,其中的表项指向PTE中的表项。

    最后一级的页表简称页表,其中包含了pte_t类型的页表项,该页表项指向物理页面。多数体系结构中,搜索页表的工作由硬件完成。每个进程都有自己的页表,内存描述符的pgd域指向的就是进程的页全局目录。

 

虚拟存储器

虚拟存储器提供了三个重要的能力:

1)将主存看成是一个存储在磁盘上的地址空间的高速缓存,在主存中只保存活动区域,并根据需要在磁盘和主存之间来回传送数据,通过这种方式,高效的使用的主存。

2)为每个进程提供了一致的地址空间,从而简化了存储器管理

3)保护了每个进程的地址空间不被其他进程破坏

Linux操作系统同样也采用了虚拟存储技术,对一个技术而言,好像可以访问整个系统的所有物理内存,即使单独一个进程而言,它拥有的地址空间可以远远大于系统物理内存。

 

用户空间与内核空间

4G的地址空间被人为的分为两个部分,用户空间和内核空间,

用户空间从0-3G,内核空间占据3G-4G.用户进程通常情况下只能访问用户空间的虚拟地址,不能范围内和空间的虚拟地址

除非用户进程执行系统调用时,切换进内核态执行,可以访问到内核空间。

每个进程的用户空间时完全独立的,互不相关的。

mm_struct

Linux为每个进程都维持了一个单独的虚拟地址空间,这个虚拟地址空间例包括我们所熟知的代码段,数据段,堆栈等。

 

内核为系统中的每个进程维护一个单独的数据结构task_struct,里面除了之前所学到的,还包括一个mm_struct的指针,指向一个结构体mm_struct

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值