《操作系统原理》学习笔记:第2章 操作系统基础操作

  • 2.1 操作系统的启动
  • 2.2 操作系统与设备和程序交互
  • 2.3 中断、异常和系统调用三者有什么区别和特点
  • 2.4 操作系统如何实现中断、异常和系统调用?
  • 2.4.1 中断
  • 2.4.2 异常
  • 2.4.3 系统调用


2.1 操作系统的启动

DISK:存放OS(操作系统并不是存放在内存中,而是放在磁盘,由BIOS提供支持)

BIOS:基本I/O处理系统(计算机开机后,可以检测各种外设,加载相应软件执行)

如何学习bios bios入门_操作系统原理


1⃣️ BIOS从特定地址开始执行,之后POST(加电自检,寻找显卡和执行BIOS)

2⃣️ BIOS将Bootloader从磁盘的引导扇区加载至内存中一个特定地址(bootloader一般放于磁盘的第一个扇区)

3⃣️ Bootloader将操作系统的代码和数据从硬盘加载到内存

4⃣️ 跳转到OS的起始地址(将CPU的控制权交给操作系统)

如何学习bios bios入门_操作系统原理_02

2.2 操作系统与设备和程序交互

  • interface的设计问题
    面向外设:使用中断,IO进行处理
    面向应用程序:使用系统调用和异常提供功能
  • 为什么应用程序不能直接访问外设,而要通过操作系统?
    在计算机运行中,内核是被信任的第三方
    只有内核可以执行特权指令
    为了方便应用程序(提供简单一致的接口,应用程序不需要关心底层复杂细节)

2.3 中断、异常和系统调用三者有什么区别和特点

中断

异常

系统调用

来源

外设不同硬件设备的计时器和网络的中断

应用程序不良行为非法指令或者其它坏的处理状态(如内存出错)

应用程序主动请求操作提供服务

处理时间

异步不一定什么时候产生

同步特定指令下产生,比如除零

同步或同步发出指令同步,结果返回可能同步可能异步

响应

持续,对应用程序是透明的

杀死或者重新执行意想不到的应用程序指令

等待和持续

2.4 操作系统如何实现中断、异常和系统调用?

2.4.1 中断
  • 硬件
    外设产生中断标记
    CPU可以得到此中断,产生中断号,将中断号发给操作系统
    操作系统根据中断号查询中断表得到具体中断例程的起始地址,跳转到此执行即可。
  • 软件(保存与恢复机制)
    保存当前被打断的执行现场
    中断服务程序处理
    清除中断标记
    恢复之前保存的处理状态
2.4.2 异常
  • 保存现场
  • 异常处理(根据不同异常号进行不同处理,比如:杀死产生了异常的程序、重新执行异常执行)
  • 恢复现场
2.4.3 系统调用
  • 应用程序需要操作系统提供服务,这个接口称为系统调用接口
  • 应用系统发出请求,操作系统完成请求后返回成功或失败,应用程序间接控制计算机系统
    e.g 应用程序调用printf()时,会触发系统调用write(),调用包含一些参数(哪个设备显示字符串,以及字符串内容)
    操作系统获取参数后,去访问对应设备,比如屏幕
  • 程序访问主要通过高层次API(而不是直接进行系统调用)
    Win32 API用于Windows
    POSIX API用于POSIX-based systems(包括UNIX、LINUX、Mac OS X的所有版本)

Java API用于JAVA虚拟机(如果运行在Windows系统还是使用的Win32 API,如果运行在……)

  • 应用程序直接或间接通过Library Code访问系统调用接口,会触发从用户态到内核态的转换,从而使得控制权从应用程序交给操作系统,操作系统可以对系统调用ID号做出标识,来识别具体的系统调用,完成相应的服务。

用户态:应用程序在执行过程中,CPU处于特权级较低的状态,不能直接访问某些特殊的机器指令,不能直接访问IO

内核态:操作系统运行中,CPU所处的一种状态,操作系统可以执行任何指令,包括特殊指令,可以完全控制整个计算机系统

系统调用

函数调用

是否需切换堆栈

应用程序和操作系统内核拥有各自的堆栈,应用程序发出系统调用之后,切换到内核中执行时,需要切换堆栈

一个栈空间完成参数的传递和返回

开销

切换堆栈与用户态到内核态转换,需要开销大

开销相对小

安全性

保证操作系统安全性

  • 中断、异常、系统调用会跨越操作系统与Devices和app交互,跨越操作系统边界的开销远超过程序调用。这些开销包括:
  • 建立中断/异常/系统调用号与对应服务例程映射关系的初始化开销
  • 建立内核堆栈(操作系统与应用程序有各自堆栈)
  • 验证参数(操作系统在收到应用程序调用后会检查参数)
  • 内核态映射到用户态的地址空间,更新页面映射权限(内存拷贝)
  • 内核态独立地址空间TLB