第二讲 操作系统启动 & 中断、异常 和 系统调用

从计算机原理角度看,最基本的就三部分: CPU、I/0(DISK磁/硬盘)设备、内存。 操作系统一开始,并没有放在内存里供CPU去执行。它其实是放在DISK里, 由BIOS提供支持。

启动

DISK: 存放OS

  • 在DISK上,还存在Bootloader,用于加载OS,将OS从硬盘加载到内存中

BIOS: 基本I/0处理系统。它会检查所安装的RAM数量, 键盘和其他基本设备是否已安装并正常响应。然后,加载相应的软件进行执行。

BIOS自己占用部分内存。然后开始完成初始化检查。初始化检查完成后, 接下来, 它会把Bootloader从硬盘上放到内存中。这是BIOS要完成的最基本功能。

BIOS如何把Bootloader放到内存中的呢?

Bootloader一般放在硬盘上第一个主引导扇区。这样的话,硬盘就很容易找到了。然后, 把Bootloader加载到内存中去。 一般来说,硬盘的第一个扇区占512字节。

接下来, Bootloader会将更复杂的系统软件--操作系统从硬盘中加载到内存。

然后, Bootloader将CPU的控制权交给操作系统,也就是跳转到操作系统的起始地址。

中断、异常 和 系统调用

异步: 当一个事件产生的时候,应用程序并不知道什么时候会产生。

同步: 执行一个指令时, 一定会产生。

系统调用可以是异步或同步的。

  • 正常情况下, 当应用程序向系统调用发出请求后, 应用程序一直处于等待状态。操作系统响应请求,并把结果返回给应用程序。这个过程中, 返回是个同步过程。
  • 当应用程序向系统调用发出请求后, 应用程序立即去做其他事情。操作系统响应请求,并把结果异步返回给应用程序。这个过程中, 返回是个异步过程。

对系统调用来说, 它发出的请求点是同步的。它的返回过程、返回点有可能是同步的,也可能是异步的。

中断和异常的处理机制

操作系统里有系统调用/异常/中断向量表。

因此,应用程序完全不用感知到中断的产生。

系统调用

系统调用来源于应用程序,需要操作系统提供服务,这些服务需要操作系统来执行,这个过程就需要一个接口:系统调用接口

程序访问主要是通过高层次的API接口,而不是直接进行系统调用。

用户态:操作系统运行中,级别特别低,不能访问特权指令

内核态:操作系统运行中,级别很高,可以执行任何一条指令,包括特权指令

用户态和内核态的区别

系统调用:触发CPU从用户态到内核态的特权级转换,切换程序和内核的堆栈,需要一定的开销

函数调用只是在一个栈空间完成参数的传递以及返回。

当执行系统调用时,它带来的开销会比函数调用要大很多,当然这个开销是有回报的(安全、可靠,且是必须要付出的代价)。

参考资料

从OS角度看计算机系统

启动 & 中断、异常 和 系统调用

相关推荐
流浪0011 天前
Linux系统篇43——线程(八) 线程的数据不一致问题,从 ticket-- 的非原子性说起
linux·操作系统·线程·线程安全·锁
小小小小钰儿3 天前
2.3-云端API集成
人工智能·计算机·网络安全·操作系统·编程
做系统的大强3 天前
脚本说 PASS、OS 读全零 —— 到底是谁在撒谎?
后端·操作系统
小小小小钰儿3 天前
2.2-模型微调
人工智能·深度学习·机器学习·计算机·网络安全·操作系统·编程
小小小小钰儿4 天前
2.1-Windows本地部署大模型
人工智能·windows·计算机·网络安全·操作系统·编程
流浪0014 天前
Linux系统篇39——线程(四) pthread库的由来和线程的创建与等待
linux·操作系统·线程·pthread库
流浪0015 天前
Linux系统篇42——线程(七) pthread库管理线程的工作流,从创建到回收
linux·操作系统·线程·线程创建到销毁
云计算练习生5 天前
什么是 Linux?从 Unix 到开源生态的完整脉络
linux·开源·操作系统·unix
云计算练习生6 天前
什么是上下文切换?进程切换时 CPU 到底在保存什么
linux·服务器·操作系统·进程切换
CS创新实验室7 天前
为什么三台机器就能选出一个“带头大哥“?——Raft 一致性算法,一次讲透
分布式·操作系统