《操作系统导论》 知识总结 第13章 抽象:地址空间

老师没有讲第10章,默认考试不会考(我也不知道第10章考不考)😥😥😥

早期系统

操作系统早期是一组函数,在内存中(在本例中,从物理地址0开始),然后有一个正在运行的程序(进程),目前在物理内存中(在本例中,从物理地址64KB开始),并使用剩余的内存。
在这里插入图片描述

多道程序和时分共享

多道程序系统时代开启,多个进程在给定时间准备运行,比如当有一个进程在等待 I/O 操作的时候,操作系统会切换这些进程,这样增加了 CPU 的有效利用率(utilization)。那时候,效率(efficiency)的提高尤其重要。

进入分时系统的时代,交互性(interactivity)变得很重要,因为许多用户可能同时在使用机器,每个人都在等待(或希望)他们执行的任务及时响应。

一种实现时分共享的方法,是让一个进程单独占用全部内存运行一小段时间,然后停止它,并将它所有的状态信息保存在磁盘上(包含所有的物理内存),加载其他进程的状态信息,再运行一段时间,这就实现了某种比较粗糙的机器共享

缺点:太慢了特别是当内存增长的时候。因此,在进程切换的时候,我们仍然将进程信息放在内存中,这样操作系统可以更有效率地实现时分共享
在这里插入图片描述
上图有 3 个进程(A、B、C),每个进程拥有从512KB 物理内存中切出来给它们的一小部分内存。假定只有一个 CPU,操作系统选择运行其中一个进程(比如 A),同时其他进程(B 和 C)则在队列中等待运行。

地址空间

一个进程的地址空间包含运行的程序的所有内存状态

  • 程序的代码(code,指令)必须在内存中,因此它们在地址空间里。
  • 当程序在运行的时候,利用(stack)来保存当前的函数调用信息,分配空间给局部变量,传递参数和函数返回值。
  • (heap)用于管理动态分配的、用户管理的内存,就像你从 C 语言中调用 malloc()或面向对象语言中调用 new 获得内存。

下面有个地址空间的例子
在这里插入图片描述
上图中,我们有一个很小的地址空间(只有 16KB)。程序代码位于地址空间的顶部(在本例中从 0 开始,并且装入到地址空间的前 1KB)。在程序运行时,地址空间有两个区域可能增长或者收缩)。它们就是堆(在顶部)和栈(在底部)。堆可能向下增长(当用户通过 malloc()请求更多内存时),栈可能向上增长(当用户进行程序调用时)。

目标

虚拟内存(VM)系统有几个目标:

  1. 透明。操作系统实现虚拟内存的方式,应该让运行的程序看不见。程序不应该感知到内存被虚拟化的事实,相反,程序的行为就好像它拥有自己的私有物理内存。
  2. 效率。操作系统应该追求虚拟化尽可能高效(efficient),包括时间上(即不会使程序运行得更慢)和空间上(即不需要太多额外的内存来支持虚拟化。
  3. 保护。操作系统应确保进程受到保护(protect),不会受其他进程影响,操作系统本身也不会受进程影响。

小结

我们介绍了操作系统的一个重要子系统:虚拟内存。虚拟内存系统负责为程序提供一个巨大的、稀疏的、私有的地址空间的假象,其中保存了程序的所有指令和数据。操作系统在专门硬件的帮助下,通过每一个虚拟内存的索引,将其转换为物理地址,物理内存根据获得的物理地址去获取所需的信息。操作系统会同时对许多进程执行此操作,并且确保程序之间互相不会受到影响,也不会影响操作系统。整个方法需要大量的机制(很多底层机制)和一些关键的策略。

参考

https://github.com/2w1nd/os-study/tree/main/%E8%99%9A%E6%8B%9F%E5%8C%96

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值