【OS操作系统】Operating System 第二章:启动、中断、异常和系统调用

OS操作系统系列文章目录

【OS操作系统】Operating System 第一章:操作系统的概述
【OS操作系统】Operating System 第二章:启动、中断、异常和系统调用
【OS操作系统】Operating System 第三章:连续内存分配
【OS操作系统】Operating System 第四章:非连续内容分配
【OS操作系统】Operating System 第五章:虚存技术
【OS操作系统】Operating System 第六章:页面置换算法
【OS操作系统】Operating System 第七章:进程与线程
【OS操作系统】Operating System 第八章:处理机调度
【OS操作系统】Operating System 第九章:同步互斥问题
【OS操作系统】Operating System 第十章:信号量与管程
【OS操作系统】Operating System 第十一章:死锁与进程通信
【OS操作系统】Operating System 第十二章:文件系统


目录

  • OS操作系统系列文章目录
  • 第二章:启动、中断、异常和系统调用
    • 计算机的启动过程
    • 中断、异常、系统调用
      • 中断(异步)
      • 异常(同步)
      • 系统调用(异步或同步)
      • 区别


第二章:启动、中断、异常和系统调用

计算机的启动过程

  • CPU、I/O、内存 通过总线连接;
  • Disk(硬盘):存放OS和Bootloader;
  • BIOS(基于I/O处理系统):开机自检外设,并加载相应的软件进行执行;
  • Bootloader:加载OS,将OS从硬盘放入到内存中;
    • 位于磁盘的第一个引导扇区;
    • 会将OS的代码和数据加载到内存中;
    • OS加载完成后,会跳转到OS的起始地址,并将控制权交给OS;

  • 开机流程:
    • 电脑通电,CPU通过CS:IP = 0xf000:fff0的内存地址(由硬件设定),执行第一条指令,即启动BOIS;
      其中CS是段寄存器,IP是指令寄存器;
    • BIOS首先会进行POST(加电自检),检测各I/O口和外设;
    • BIOS将Bootloader从磁盘的引导扇区(512字节)加载到内存0x7c00中;
    • 跳转到CS:IP = 0000:7c00的内存区域;
    • Bootloader会将OS的代码和数据从磁盘加载到内存中;
    • 跳转到OS的内存位置,至此OS开始执行;

中断、异常、系统调用

中断(异步)

  • 中断来源于外设,来自不同的硬件设备的计时器和网络的中断;

  • 中断处理流程:
    • 先进行硬件部分:
      • 将内部、外部事件设置中断标记;
      • 中断事件的ID识别;
    • 后进行软件部分:
      • 保存当前的处理状态(寄存器之类的一些数据);
      • 根据中断事件的ID跳转到中断服务程序,中断程序进行处理;
      • 清除中断标记,并恢复之前保存的处理状态;

异常(同步)

  • 异常来源于不良的应用程序,非法指令或其它坏的处理状态(如:内存出错);

  • 异常处理流程:
    • 保存现场;
    • 异常处理:
      • 杀死产生异常的程序;
      • 重新执行异常程序;
    • 恢复现场;

系统调用(异步或同步)

  • 系统调用来源于应用程序,应用程序主动向OS发出服务请求;
    程序访问主要是通过高层次的API,而不是直接调用系统;

  • API分类
    • Win32 API用于Windows;
    • POSIX API用于POSIX-based systems(包括UNIX、LINUX、Mac OS X);
    • Java API用于JAVA虚拟机(JVM);

  • 特点:
    • 一般情况,系统调用都有对应的序号;
      而系统调用接口根据这些序号来维护表的索引;
    • 系统调用接口 ,会去 调用内核态中,预期的系统调用;
      并返回系统调用的 状态和其它任何返回值;
    • 用户不需要知道系统调用是如何实现的;
      只需要获取API和了解OS会返回什么结果;
      OS接口的细节大部分都会隐藏在API中;

  • 用户态:OS运行中,CPU执行的特权级的状态,特权很低,不能访问特殊机器指令和IO,且不能直接执行特权指令;
  • 内核态:OS运行中,CPU执行的特权级的状态,特权很高,可以执行CPU任何一条指令;

  • 系统调用进行时,涉及到特权级从用户态转到内核态的过程,且应用程序和OS拥有各自的堆栈空间;
    这两个变化比函数调用的开销更大,但也更安全和可靠;
    (程序调用是在一个栈空间实现参数的调用和返回)

  • 跨越OS边界的开销
    • 在执行时间上的开销超过程序调用的;
    • 开销包括:
      • 建立中断、异常、系统调用号与对应服务例程映射关系的初始化开销;
      • 建立内核堆栈;
      • 验证参数;
      • 内核态映射到用户态的地址空间(更新页面映射权限);
      • 内核态独立的地址空间(TLB);

区别

类型 源头 处理时间 响应
中断 外设 异步 持续,对应用程序透明
异常 应用程序意想不到的行为 同步 杀死或重新执行指令
系统调用 应用程序请求系统提供服务 同步或异步 等待或持续

中断的异步:应用程序不知道什么时候会发生中断

异常的同步:执行到某一条指令一定会发生该异常

  • 应用程序不能直接访问硬件
    • 在计算机运行时,内核是被信任的第三方;
    • 只有内核可以执行特权指令;
    • 为了方便应用程序的设计;

你可能感兴趣的:(操作系统,os,操作系统)