操作系统45战笔记(1)


这总结与彭东老师的《操作系统45讲》,强烈推荐去看

1,Cpu的工作的三种模式

自从cpu迭代而来,产生了三种模式,

  • 实模式
  • 保护模式
  • 长模式

1、x86 CPU的位数越来越高,从16到32到64,每次进步都尽量的去兼容了
之前的CPU架构,所以:

A、16位时寻址能力不足,所以要借助额外的寄存器进行1M空间的寻   址;32位时,
每个程序都有自己独立的4G寻址空间,操作系统用低位的1G-2G,其余留给用户程
序;64位后,暂时就遇不到寻址能力不足的事情了;

B、前一代的寄存器尽量保留,不够用就扩展新的

C、寄存器的长度升级后,其低位可以兼容上一代的寄存器

2、CPU同时在安全性上也要提升,从只有实模式【可以随意执行全部CPU指令,内存可以直接通过物理地址访问,随意访问随意读写】,到了32的保护模式【将指令划分为ring0到ring3,CPU指令不是你想调用就能调用;内存不是你想访问就能访问,首先CPU要允许,而且操作系统允许】,而64的长模式在安全方面与32并没有本至区别;

3、从实模式到保护模式,访问内存时,需要访问的地址变大了,需要控制的内容变多了,于是引入了段描述符,所有的段描述符组成了描述符表,包括唯一的全局描述符GDT和多个局部描述符号LDT。GDT是操作系统特供,要重点关注。CPU寻址的时候,要通过段寄存器+GDTR寄存器定位到的内存中的描述符,判断是否允许访问。然后,再根据段描述符中地址进行访问。

4、同时内存中内存管理有段、页、段页三种常用模式。一般在应用层,程序员感受不太到,操作系统全给咱们做完了。

5、中断,其实是通过硬件或软件方式告诉CPU,来执行一段特殊的代码。比如咱们键盘输入,就是通过硬件中断的方式,告知操作系统的。在实模式下,中断是直接执行的。但到了保护模式和长模式下,就要特权级别校验通过才能执行,所以引入了中断门进行控制。在ring3调用中断一般是要通过操作系统切换到内核态ring0进行的,与内存类似,要通过中断向量表,确认中断门中权限是否允许,然后定位到指定代码执行。

6、BIOS引导后,系统直接进入最简单、特权最大的实模式;而后告知CPU,切换到保护模式,并运行在ring0。后续的用户进程,一般就在ring3,想执行特权指令要通过操作系统来执行。

2,虚拟地址和物理地址的转换

每一个进程都会有一个属于自己的虚拟地址。而真正执行的又是需要物理地址,而这两者转换时依靠MMU来执行的。
在这里插入图片描述
为什么需要虚拟地址:

实模式中如果运行多道程序有一些问题需要解决:

地址冲突

控制互相访问

代码占用的空间大到物理内存放不下怎么办

不同计算机的容量各不相同,方案如何全部支持

给每个程序一个私有的连续的独立的虚拟的地址空间,和计算机无关,和其它程序无关.

解决思路:

将虚拟地址与物理地址分离,让应用程序从实际的物理内存中解耦出来,增加中间层
MMU去做地址转换,对程序透明.
MMU:

设计思路:

虚拟地址到物理地址直接做映射,则映射关系大到无法接收,维护成本太高.

虚拟段基址映射到物理段基址,看似可以,但是段长度各不相同,并且粒度可能会很大.

因此把虚拟地址和物理地址空间都分成同等大小的块,按照虚拟页和物理页进行映射
和转换,地址转换表中存放虚拟页地址对应的物理页地址即可.

实现思路:

纯硬件实现没有灵活性,用软件实现太低效,因此使用软硬件结合的方式.

用硬件电路逻辑实现地址转换器件,接受虚拟地址和地址关系转换表,输出物理地址.

为什么需要多级页表:

每个进程都有自己的页表,多级页表可以省掉大量未映射页表占用的空间,为null则说明
后面的页都没有使用.

虚拟地址由虚拟页号和虚拟页号偏移组成,多级页表查找时可以使用索引.

cache和内存的关系

在这里插入图片描述
为了弥补cpu和内存之间巨大的速度差异,就引入了内存。内存分为三级

  • 一级时有两个cache,分别是指令和数据,大小是16kb
  • 二级cache不拆分,,但是每个cpu享用一个单独的cache
  • 三级cache是多个cpu所共享的。

局部性原理

  CPU 大多数时间在访问相同或者与此相邻的地址,执行相同的指令或者与此
  相邻的指令。这种现象就是程序局部性原理。

cache的组成

  Cache 主要由高速的静态储存器、地址转换模块和 Cache 行替换模块组成。

cache引发的一致性失误的解决办法

Cache一致性协议 MESI。这个协议由 Cache 硬件执行,对软件透明。
MESI分别代表了高速缓存行的四种状态:

最开始只有一个核读取了A数据,此时状态为E独占,数据是干净的,

后来另一个核又读取了A数据,此时状态为S共享,数据还是干净的,

接着其中一个核修改了数据A,此时会向其他核广播数据已被修改,让其他核的
数据状态变为I失效,而本核的数据还没回写内存,状态则变为M已修改,等待
后续刷新缓存后,数据变回E独占,其他核由于数据已失效,读数据A时需要重
新从内存读到高速缓存,此时数据又共享了

三节课的脑图
在这里插入图片描述

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值