《码农翻身》读书笔记一:局部性原理、虚拟地址、页框、页、页表、段

环境

《码农翻身》

前言

一直对,操作系统的底层概念不是很了解,看着那些枯燥的概念,过不了多久就会忘记。最近看了看这本有趣的书,做个笔记加深这几个概念的理解

局部性原理

时间局部性:在一段时间内,访问了这段程序,那么未来也很有可能访问这段程序
空间局部性:近期访问了这段空间,那么未来也很有可能访问这段空间。

书中定义
① 时间局部性:如果程序中的某条指令开始执行,则不久之后该指令可能再次被执行;如果某数据被访问,则不久之后,该数据可能再次被访问。
②空间局部性:指一旦程序访问了某个存储单元,则不久之后,某个附近的存储单元也将被访问。

可以看出,书读完了,我视乎没理解透,只是理解了个大概的。

页框

程序如果都同时加载进入内存,明显是种资源的浪费,拿java类加载举例,都是按需加载的。
所以操作系统加载程序时,是把程序分为一小块一小块来加载的。

我们把这一个个小块叫做页框,每个是4KB大小。

也可以理解成,其把物理空间,分成了一个个小块,每块是4KB大小。

虚拟空间 和 虚拟地址

因为局部性原理的存在,程序没必要全部都加载进入内存,所以我们可以假装给每个程序都分配了4G的内存。(假设电脑内存就为4G,虚拟机的话,这个值一般可以设置。)
我们把这种假装给的内存叫做 虚拟内存。程序在这个空间中使用的地址,就叫做虚拟地址

因为程序时分块加载进来的,所以虚拟空间也应该是分块来使用的。
我们把虚拟空间的分块叫做

页表

虚拟空间终究是虚拟的,需要和物理空间映射才能使用。
我们把这个映射关系称之为页表

在这里插入图片描述

上图中,
① 页号:记录的是虚拟页面地址;
② 页框号:记录的是物理页面地址;

分段 是对程序的特性提出的概念;
一个程序通常会有:
① 代码段
② 数据段
③ 堆栈段
④ 共享段
等等 …

每个段的内部,依然是按照分页来处理的。

翻译地址的过程也变复杂了:
首先 程序知道逻辑地址:段号偏移量

① 通过段号找到基址,然后和偏移量相加得到一个线性地址;
② 再将这个线性地址通过分页系统转换,得到物理地址;

具体如下图:(来自书中
在这里插入图片描述

偏移量 个人理解就是 基址寄存器里面的值。

内存满了怎么办?

如果内存满了,操作系统就要判断,把内存已有的数据,根据算法规则来置换到硬盘中

程序访问了没有被装载的页?

如果程序访问了没有被装载的页,会产生缺页的中断,由操作系统去硬盘中调取。

总结

用自己的话来写一遍,更深刻了些。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

山鬼谣me

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

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

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

打赏作者

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

抵扣说明:

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

余额充值