# 概述


# 概念

# ***用户空间与内核空间***

## ***用户空间与内核空间***

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. ***原语运行在内核空间***

