内存段及内存管理

31 篇文章 1 订阅
7 篇文章 0 订阅

复杂度3/5
机密度3/5

最后更新2021/04/25

前面介绍过内存分配以段为组织进行分配,也就是不同特性的内存申请会从不同的segmeng中分配,每个segment都维护着sbrk和max_stack两个值,用于验证页面是否合法。如果不合法,当前进程会直接被core dump掉,而如果是内核进程,则可能会导致整个系统dump。

另一个检验是DMA,此处的DMA不是跨体系的(server内存和io设备内存之间的映射),而是跨驱动或者跨进程的异步操作,当前进程把访问请求交给接手的进程后,两者之间数据通信可以通过DMA映射完成,而无需数据通过cpu在两者地址空间挪来挪去。DMA映射导致在数据没有被调用程序彻底释放之前是不能被访问的。如果发生这种情况,当前进程就会被置于等待CPU队列中,等待下次被唤醒。

程序访问内存页面时可能会遇到如下异常状态:

Page Faults Not Allowed
当中断发生,正在中断处理例程中,或者部分中断被禁止,通常只有kernel代码会执行禁止操作,当这种情况发生,vmm产生kernel exception,视情况不同,可能core进程,也可能crash操作系统

Page Does Not Exist,可能原因:
Page number超限(前面提到的segment上下两个限制位置sbrk和max_stack),Segment ID非法

Segment Faults
请求的segment地址不在当前segment地址表中,VMM将开始查找全部(分配的)segment number,如果找到,则被load进segment table,并且重新执行刚才导致exception的指令。有可能需要把当前的一个segment id清掉才能给新segment id空出空间。如果找不到segment number,与非法访问地址处理方式相同。

Memory Exceptions
如果在内核处理部分,所有exception处理例程被执行,根据预先定义处理;如果在用户处理部分,process/thread接收到SIGSEGV信号,被core

Fatal Memory Exceptions
以下情况发生,系统不进行任何处理,直接halt
中断处理时发生page fault;访问内核处理部分数据发生protection fault;paging space满,内核数据io错误;
在内核处理部分发生指令/数据存储意外(exception,要访问的页面不在内存,如果是数据意外没有定义handler)

在hardware segment registers中保留了4位用于对当前segment进行属性标记:
SID bit 0 (bit 8 in a segment register)表示该页正在或即将进行I/O,用来“隐藏”页面
SID bits 1-3 (bits 9-11 in a segment register) 用于允许文件系统访问大到2Gb的文件而不用使用其它8位segment IDs
(注:AIX限制使用48-bit internal virtual addresses即256 Terabytes of virtual space,并不是64bit)

Memory Protection
通过 page-protect (PP) bits可以对某个页面进行保护,保护通过硬件机制完成
在硬件进行数据访问(读或写)之前,先查看几个重要的保护位
Current execution state (User or Kernel mode) in MSR
Corresponding key bit in segment register (Kp or Ks)
PP bits in page table entry for this page, PP位组合可能有下面几种情况:
——————-
1 00 Read/Write
1 01 Write
x 10 None
x 11 Write
——————

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Ensighine

如需特定专题,踢我

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值