ostep-15-Mechanism-Address-Translation

这章顾名思义,主要介绍了OS中地址转换的细节,之前提到过,用户进程看到的一定是虚拟地址空间,其中虚拟地址空间的转换就由地址转换来做。

这章的后半部分结合地址翻译器,总结了一下目前OS所有需要通过硬件支持做到的事情,包括中断、限制直接执行、地址翻译等等。

其实这章真正描述的地址转换相关内容很少,大概有以下要点:

  • 地址转换主要通过硬件实现,在每个CPU上,会有2个寄存器,专门保存一个base和一个bound,base保存地址的开始,bound保存这块内存的size
  • 某个进程获取内存时,由OS通过内存的free list(暂时理解为一个记录空闲内存的列表),在物理地址中选取一块区域分配给进程,然后因为当前在内核模式,可以直接去修改寄存器中的base为内存物理地址的开始地址,bound为分配给进程的这块内存的大小
  • 在进程执行代码或者尝试操作内存时,实际操作的物理地址=虚拟地址+base(偏移量),这样用户进程就可以认为自己的内存实际从0开始拥有整块内存
  • 同时在执行内存相关操作时,CPU会通过实际访问的内存空间,结合base+bound圈定实际访问的内存范围,如果进程访问到了超过base+bound之外的内存,那么显然这个是越权违法操作,CPU就会触发OS的error handler让OS去决策如何操作(一般是终止进程)
  • 当然,OS在进行进程切换上下文操作的时候,需要保存和恢复base和bound寄存器中的数据,这样才能保证进程切换正确

截止到目前为止的硬件对OS的核心支持能力

这里书中描述的很详细了,直接贴图吧

操作系统针对内存虚拟化需要具备的能力

image-20240618155430143

操作系统启动时需要初始化的一系列东西,我们可以看到有很多handler处理中断,操作系统需要初始化trap table,中断表来响应这些中断,还有启动定时中断器来定时获取整个计算机的控制权

image-20240618155500249

然后是一个时序图,完整的描述了目前位置我们的知识中,操作系统对进程的创建、执行、调度,以及操作系统如何和硬件一起帮助用户进程执行

版权声明:除特殊说明,博客文章均为intotw原创,依据CC BY-SA 4.0许可证进行授权,转载请附上出处链接及本声明。
暂无评论

发送评论 编辑评论


				
|´・ω・)ノ
ヾ(≧∇≦*)ゝ
(☆ω☆)
(╯‵□′)╯︵┴─┴
 ̄﹃ ̄
(/ω\)
∠( ᐛ 」∠)_
(๑•̀ㅁ•́ฅ)
→_→
୧(๑•̀⌄•́๑)૭
٩(ˊᗜˋ*)و
(ノ°ο°)ノ
(´இ皿இ`)
⌇●﹏●⌇
(ฅ´ω`ฅ)
(╯°A°)╯︵○○○
φ( ̄∇ ̄o)
ヾ(´・ ・`。)ノ"
( ง ᵒ̌皿ᵒ̌)ง⁼³₌₃
(ó﹏ò。)
Σ(っ °Д °;)っ
( ,,´・ω・)ノ"(´っω・`。)
╮(╯▽╰)╭
o(*////▽////*)q
>﹏<
( ๑´•ω•) "(ㆆᴗㆆ)
😂
😀
😅
😊
🙂
🙃
😌
😍
😘
😜
😝
😏
😒
🙄
😳
😡
😔
😫
😱
😭
💩
👻
🙌
🖕
👍
👫
👬
👭
🌚
🌝
🙈
💊
😶
🙏
🍦
🍉
😣
Source: github.com/k4yt3x/flowerhd
颜文字
Emoji
小恐龙
花!
上一篇
下一篇