mos pi

一 操作系统概述

1.2 什么是操作系统

  • 操作系统由两个职责:
    • 对硬件进行管理抽象
    • 为应用提供服务进行管理
  • 狭义的os是指os内核与Shell,随着硬件种类和应用需要越来越丰富,大量的共性功能沉淀到os中
  • 广义的os又分为os内核与os框架:
    • os内核负责硬件资源的管理和抽象,为os框架提供基础的系统服务。
    • os框架基于os内核提供的服务为不同的应用领域提供编程接口与运行环境
  • 如果—台机器有且只有一个应用程序,开机后自动运行且不会退出,是否还需要操作系统?外核架构,库os与虚拟化容器都使用了实现一套与硬件打交道的库的方式

1.4 操作系统接口

  • 包括系统调用POSIX接口领域应用接口
    • 系统调用接口,向内核申请服务
    • POSIX接口
    • 领域应用接口

二 硬件结构

2.1 CPU与指令集架构

2.1.2 特权级

  • 系统调用与异常是同步CPU特权级切换
  • 中断是异步的CPU特权级切换

2.1.3 寄存器

  • 在AArch64架构下,有两个页表基地址寄存器,一般是内核空间一个,用户空间一个。与x86-64的CR3寄存器相比,在切换特权级时,不用切换页表?似乎,即使要切换,也只是切换一个寄存器而已,或者说是自动根据虚拟地址选择页表翻译?

三 操作系统结构

操作系统的机制与策略

  • 操作系统乃至计算机系统中控制复杂度的一个重要设计原则是:讲策略与机制分离,策略表示要做什么机制表示如何做

操作系统复杂度管理方法

  • MALH方法,即模块化(modularity), 抽象(abstraction),分层(layering),层级(hierarchy)
    • 模块化就是分而治之,将一个复杂系统化解为一系列通过明确定义的接口进行交互的模块,并严格保障模块之间的界限,
    • 抽象,是在模块化的基础上,将接口内部实现分离,从而使模块之间只需要通过抽的接口进行相互调用,无需关注各个模块内部实现
    • 即使有模块化与抽象,对于过大的系统,分解出的模块会非常多,相互交互关系非常复杂,那么需要进一步通过分层层级来解决
    • 分层,就是将模块按照一定原则进行层次的划分,约束每层内部模块之间的交互方式与跨层次间的交互方式,有效减少模块之间的交互。
    • 层级,首先将一些功能相近的模块组成一个具有清晰接口的自包含子系统,然后将这些子系统递归的组成一个具有清晰接口的更大子系统。在os中,虚拟内存是一个子模块,与物理内存分配,缺页异常处理,页换入换出等一起构成内存管理模块,内存管理模块再和进程管理模块,设备驱动模块等一起构成操作系统内核
    • 层级分层之间的区别层级是同类模块之间的分层,而分层则相反

3.3.2 宏内核架构

  • linux宏内核,驱动容易出问题,其代码一半是驱动,kernel代码千锤百炼,不容易出错,驱动代码一般测试的时间少。另外由于linux kernl复杂,导致无法做到最坏情况时延分析
  • 宏内核难以扩展linux过于庞大,导致无法通过汽车安全完整认证

3.3.3 微内核

  • 最小化内核功能,将os kernel的功能般到用户态,在各个模块之前用消息传递机制通信,但是这种通信比较慢
  • 微内核与宏内核中文件系统的交互
  • 微内核的Mach实现了系统调用重定向,也就是允许用户态处理系统调用,也就是某个应用程序可以通过自己的系统调用,扩展内核的系统调用,为其他程序提供服务用户态多线程,设备支持,分布式支持Mach中允许用户态的Paging,也就是允许用户态程序提供,这个Paging也就是用户态的一个程序,而Paging这个进程的内存不能够缺页,需要保证其内存能够pin在内存中,而不能够换页换出去允许发生中断时,直接执行用户的二进制
  • L3/L4是更快的微内核
  • seL4,一个可以被形式化证明的微内核通过Haskell构造原型,再手动转换为C
  • Google Fushsia,一个OS,Zircon是一个内核
  • 微内核易于扩展,易于移植但是性能差,生态差
  • 混合内核,macOS/iOS,Windows NT

3.3.4 外核架构

  • 外核架构是将mincrokernel进一步mincro
  • Exokernel由应用自己去提供硬件抽象,只负责将计算资源与应用绑定比如将硬盘绑定给一个数据库应用将对于硬件的抽象变成一个libOS,如果应用想要使用,可以使用libOS,也可以自己写,不同应用可以使用不同的LibOS,LibOS与应用其代码之间通过函数调用直接交互,性能更高。minkernel与libOS的区别是什么?minkernel是将OS服务放在用户态,而libOS是将OS功能打包为库,打包到用户态一起,是以函数的方式调用,所以快
  • 这里由os提供保护,由应用去提供管理用LibOs与计算资源绑定,防止这些计算资源被其他LibOS访问kernel可以主动解除应用与资源的绑定
  • Unikernel,每个虚拟机只使用内核态?内核态只运行一个应用+LibOS,虚拟机中有两个态,一个用户态,一个内核态?
  • linux作为LibOS?

3.3.5 multikernel

  • 要每一个cpu都有一个kernelOS整体是一个分布式系统

四 内存管理

  • 虚拟内存可以实现不同应用程序之间高效安全的使用物理内存资源

4.2.1 AARch64架构下的4级页表

  • TLB分为L1与L2两层,L1又分为数据TLB和指令TLB,L2一般不区分数据和指令
  • AArch64体系结构上,用户态与内核态使用不同的页表,TTBR0_EL1和TTBR1_EL1,两个不同的页表基地址寄存器以供它们使用,系统调用期间不需要切换页表,因此也就是避免了TLB刷新的开销
  • 通过添加ASID标签的方式,使得TLB可以在切换进程时,不刷新TLB

4.2.3 换页与缺页异常

  • AArch64体系结构中通过8号异常,操作系统根据ESR寄存器存储的信息来判断发生的异常是否为缺页异常
  • 访问为为0,还需要计算年龄,再去将其访问位设置位0?

4.3.3 内存去重

  • 与写时复制相反,os会定期在内存中扫描具有相同内容的物理页,虽然有可能存在安全问题
posted @ 2022-06-06 10:33  抿了抿嘴丶  阅读(91)  评论(0编辑  收藏  举报