通过Rust编写操作系统之内存的分页与管理介绍(上)

Rust是一门系统编程语言,专注于安全,尤其是并发安全,支持函数式和命令式以及泛型等编程范式的多范式语言。Rust在语法上和C++类似,但是设计者想要在保证性能的同时提供更好的内存安全。 Rust最初是由Mozilla研究院的Graydon Hoare设计创造,然后在Dave Herman, Brendan Eich以及很多其他人的贡献下逐步完善的。 Rust的设计者们通过在研发Servo网站浏览器布局引擎过程中积累的经验优化了Rust语言和Rust编译器。 

Rust编译器是在MIT License 和 Apache License 2.0双重协议声明下的免费开源软件。 Rust已经连续三年(2016,2017,2018)在Stack Overflow开发者调查的“最受喜爱编程语言”评选项目中折取桂冠。

本文介绍了内存分页技术,这是一种非常常见的内存管理方案,我们也将该技术用于通过 Rust 编写操作系统中。内存分页技术解释了为什么需要内存隔离、分段如何工作、虚拟内存是什么以及分页如何解决内存碎片(memory fragmentation)问题。另外,本文还探讨了x86_64体系结构上的多级页表布局情况,本文的完整源代码可以在GitHub 的post-08主题中找到。

内存保护

操作系统的一个主要任务是将程序彼此隔离。例如,web浏览器不应该干扰文本编辑器。为了实现这个目标,操作系统利用硬件功能来确保一个进程的内存区域不被其他进程访问。根据硬件和操作系统实现的不同,有不同的方法。PHP大马

例如,一些ARM Cortex-M处理器(用于嵌入式系统)有一个内存保护单元(MPU),它允许你定义少量具有不同访问权限(例如无访问权限、只读限、写入权限)的内存区域。在每次内存访问时,MPU都会确保该地址位于具有正确访问权限的区域,否则发出异常警报。通过更改每个进程切换(process switch)上的区域和访问权限,操作系统可以确保每个进程只访问自己的内存,从而将进程彼此隔离。

在x86上,硬件支持两种不同的内存保护方法:分段分页

分段

分段技术早在1978年就已经被开发出来了,最初是为了增加可寻址内存的数量。当时的情况是cpu只使用16位地址,这将可寻址内存的数量限制为64KiB。为了使更多的64KiB可访问,就需要引入额外的段寄存器,每个段寄存器包含一个偏移地址。CPU会在

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值