十天掌握操作系统——存储器(0)

存储器管理的功能

用户程序和系统无法预先知道程序会被放在存储器中具体哪一个位置,所以不能直接按照在主存中的实际位置对程序进行编址。
比如说在一个代码段结束之后要跳转到另一个代码段执行,在这个这两个代码段被放入存储器之前,用户和系统都无法预知“另一个代码段”将会被防止在存储器中具体哪一处物理地址空间。
所以此时只能用逻辑地址编址。之后再依靠存储器管理将逻辑地址重定位到实际的物理地址。

这里的程序指的不是之前在进程的部分提到的那个静态的“程序代码”,而是指的是可以执行的机器语言

存储器管理有以下功能: (管理存储要做什么事、要实现什么功能、解决什么问题)

  • 存储器分配:解决多进程共享主存的问题
  • 地址转换或重定位: 研究地址变换的方法
  • 存储器共享:研究并发进程如何共享主存中的程序和数据
  • 存储器保护:如何保护存储器免受故障程序的破坏
  • 存储器扩充: 采用多级存储技术实现虚拟存储器

内存被划分为用户空间和操作系统空间,存储器管理是针对用户空间的。
操作系统空间上运行操作系统自身的进程,比如进程调度、存储器管理这些服务等

在本文中将会分别介绍上面几个方面的内容,在后续更新的本模块的文章中还会涉及:单用户单道程序的存储器分配、多用户多道程序的存储器分配、覆盖与交换技术、页式存储器管理、段式存储器管理、虚拟存储器管理技术。


下面这一段是个人理解,如有误,欢迎指正。

这几个技术之间的关系网认为是这样的:”单用户单道程序“、 “多用户多道程序” 、 “页式”、“段式” 都是一套完整的方案,应用场景和成熟度不同而已。而“覆盖与交换” 像是“多用户多道程序”的一个优化buff,“虚拟存储”是“页式”“段式” 的优化buff。

而且上面的几个技术并不是每一个都实现了前面提到的存储器管理的几种功能。因为有一些是比较古早的技术。

除了虚拟存储器管理技术以外,前面的几种存储器管理技术都属于实存管理技术。只有虚拟存储器管理技术实现了存储器扩充。实存管理技术要求进程的大小必须小于主存中的可用空间,否则不能运行。大致原理就是每次只将一部分代码段装到主存运行。


下面会更加详细的介绍上面提到的地址重定位存储器保护,以及一些相关的重要概念。

地址重定位

逻辑地址空间:是(数据和指令在)程序内部的相对地址
物理地址空间:是计算机内存中实际的地址
逻辑地址是在编译的时候编译器分配的
地址重定位:把程序种的逻辑地址转换成主存中的物理地址
需要地址重定位的原因:
处理机在执行进程的时候访问的必须是指令或者数据的真实物理地址。而编译之后产生的逻辑地址和

在这里插入图片描述

静态重定位

在把程序装入CPU执行的时候(在执行之前)就把用户程序中的逻辑地址全部转换成物理地址。(装入CPU执行时就都是物理地址了)
特点:

  • 不需要硬件地址转换机构
  • 为每一个程序分配连续的存储区
  • 程序执行区间不能移动,主存利用率低
  • 难以做到程序和数据的共享。

动态重定位

在装入的时候还是逻辑地址,在执行的时候利用硬件转换机构(即重定位寄存器)转换。
在这里插入图片描述
特点:

  • 可以移动程序
  • 程序不必占有连续的存储空间。
  • 便于多用户共享存储器中的同一程序和数据。
  • 需额外的硬件支持,增加了系统成本

存储器保护

存储器保护的目的:

  • 防止地址越界
    确保进程只访问分配给该进程的存储区域
    如果一个进程可以访问其他进程的空间,会导致一些安全漏洞,比如缓冲区溢出
  • 保证进程正确的存取程序
    防止由于错误的操作破坏数据的完整性
  • 30
    点赞
  • 17
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

赛博游客

你的鼓励将是我创作的最大动力

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

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

打赏作者

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

抵扣说明:

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

余额充值