目录

概述

概念

用户空间与内核空间

用户空间与内核空间

  1. 什么是内核空间与用户空间
    • 在操作系统分为用户空间和内核空间用户空间里运行着应用程序
    • 用户程序不能直接操作内核
    • 内核空间独立于普通的应用程序 可以访问受保存的内存空间,也可以访问底层硬件设备
  2. 为什么要区分内核空间和用户控件
    • 很简单 为了安全 因为用户程序可能会有很多隐患 比如清空内存 清空寄存器
    • 操作系统也分了特权指令和非特权指令,对于非常危险的指令 只允许操作系统及其相关的模块使用 也就是特权指令
    • 用户程序的指令 就是非特权指令 这里要注意 中断指令也是非特权指令
    • intel的cpu分为4个特权等级 Ring0~Ring3 如果等级是Ring3则说明进程是运行在用户态 Ring0则说明是进程运行在内核态

时钟管理

时钟管理

  1. 什么是时钟管理
    • 在操作系统里面有个非常重要的就是时钟 他还是一个硬件
  2. 作用
    • 记录着系统时间
    • 时钟中断 (用来进行 进程 or 线程 切换)

中断机制

中断机制

  1. 什么是中断
    • 中断 是为了解决外部设备完成某些工作后通知CPU的一种机制(譬如硬盘完成读写操作后通过中断告知CPU已经完成)
  2. 中断的分类
    • 中断可以分为同步中断和异步中断
    • 同步中断是当指令执行时由 CPU 控制单元产生,之所以称为同步,是因为只有在一条指令执行完毕后 CPU 才会发出中断,而不是发生在代码指令执行期间 — 比如系统调用
    • 异步中断是指由其他硬件设备依照 CPU 时钟信号随机产生,即意味着中断能够在指令之间发生 — 例如键盘中断
    • 根据 Intel 官方资料,同步中断称为异常(exception),异步中断被称为中断(interrupt)。中断可分为 可屏蔽中断(Maskable interrupt)和 非屏蔽中断(Nomaskable interrupt)。异常可分为 故障(fault)、陷阱(trap)、终止(abort)三类 从广义上讲,中断可分为四类:中断、故障、陷阱、终止
  3. 中断分类图示
    • https://raw.githubusercontent.com/vlicecream/cloudImage/main/data/202302082110920.png

中断的处理过程

  1. 关中断
    • 进入不可再次响应中断的状态,由硬件实现
  2. 保存断点
    • 为了在[中断处理]结束后能正确返回到中断点。由硬件实现
  3. 引出中断服务程序
    • 将[中断服务程序]入口地址送PC,转向[中断服务程序]。可由硬件实现,也可由软件实现
  4. 保存现场和屏蔽字
    • 保护现场、置屏蔽字、开中断,即保护CPU中某些寄存器的内容、设置[中断处理]次序、允 许更高级的中断请求得到响应,实现中断嵌套由软件实现
  5. 开中断
    • 看 - 4
  6. 执行中断服务程序
    • 实际上有效的中断处理工作是在此程序段中实现的。由软件程序实现
  7. 退出中断
    • 在退出时,又应进入不可中断状态,即关中断、恢复屏蔽字、恢复现场、开中断、中断返回。由软件实现
  8. 流程图示
    • https://raw.githubusercontent.com/vlicecream/cloudImage/main/data/202302082110921.png

系统调用

执行一个系统调用时,OS 发生的过程

  1. 执行用户程序(如:fork)
  2. 根据glibc中的函数实现,取得系统调用号并执行int $0x80产生中断
  3. 进行地址空间的转换和堆栈的切换,执行SAVE_ALL。(进行内核模式)
  4. 进行中断处理,根据系统调用表调用内核函数
  5. 执行内核函数
  6. 执行 RESTORE_ALL 并返回用户模式

系统调用跟函数调用的区别

https://raw.githubusercontent.com/vlicecream/cloudImage/main/data/202303022118832.png

原语

原语

  1. 什么是原语
    • 有若干条指令组成,是一个程序段, 用来完成某个特定功能 执行过程不会被中断具有原子性的叫做原语
  2. 原语运行在内核空间