操作系统(1)—— 基本概念、系统调用、异常和中断

什么是操作系统

  • 用户角度上,操作系统是一个系统软件
  • 管理应用程序
  • 为应用程序提供服务
  • 杀死应用程序
  • 资源管理
  • 管理外设,分配资源

操作系统架层次结构

  • 硬件之上,应用程序之下

    应用软件:办公软件、视频播放软件

    操作系统位于应用程序之下,为应用软件提供服务支撑

  • Linux、Windows、Android的界面

    属于外壳(Shell) ,而不是内核(Kernel) 。Kernel是研究重点,在Shell以下。

  • Kernel 操作系统内部组件,包括:

    • CPU调度器
    • 物理内存管理
    • 虚拟内存管理
    • 文件系统管理
    • 中断处理与设备驱动
  • OS Kernel的特征

    • 并发:计算机同时存在多个运行的程序,需要OS管理和调度

    • 共享:同时访问、互斥共享

    • 虚拟:利用多道程序设计技术,让每个用户都觉得有一个计算机专门为他服务

    • 异步:程序的执行不是一贯到底,而是走走停停,向前推进的速度不可预知,但只要运行环境相同,OS需要保证程序运行的结果也要相同。

为什么学习操作系统

  • 综合课程:结合多种不同的课程,包括程序设计语言、数据结构、算法等。
  • 已经有了很多操作系统,例如Windows、Linux、Unix。

操作系统:计算机科学研究的基石之一。

  • 计算机系统的基本组成部分
  • 由硬件的发展和应用需求所驱动
  • 学术和工业的持续推进

操作系统的需求

  • 操作系统必须是高效的,低耗CPU、内存、磁盘的
  • 操作系统出错意味着机器出错,操作系统必须比用户程序拥有更高的稳定性
  • 操作系统是系统安全的基础
  • 操作系统需要权衡:空间与时间、性能和可预测性、公平和性能
  • 硬件方面的需要:良好的硬件管理、合理的资源分配,例如磁盘速度跟CPU、内存相差很多,操作系统需要协调处理。

历史概要

  • 早期计算机使用纸带传输程序和数据,操作系统只起到加载作用;
  • CPU等硬件快速发展,计算机速度得到提升,性能未得到充分利用;
  • 内存的容量越来越大,CPU执行多个程序;
  • 出现了分时系统、分布式操作系统、松紧耦合系统。

操作系统的启动

相关组成部分:CPUI/O(timer/Disk,etc)、内存
  • Disk:硬盘,存放OS。
  • BIOS:基本O/I处理系统,用来检测外设。
    • BIOS启动时的固定特殊地址:CS:IP=0xf000:fff0。(CS:段寄存器,IP:指令寄存器)
    • POST(加电自检):寻找显卡和执行BIOS。
  • Bootloader:加载OS,位于内存的第一个扇区,使CPU可以执行操作系统。

操作系统与设备和程序交互(Interface:系统调用、异常、中断)

1. 定义
  • 系统调用(来源于应用程序):应用程序主动向操作系统发出服务请求。
  • 异常(来源于不良的应用程序):非法指令或者其他坏的处理状态,如内存出错。
  • 中断(来源于外设):来自不同的硬件设备的计时器和网络的中断。
2. 为什么应用程序不能直接访问外设或操作系统
  • 在计算机运行中,内核时被信任的第三方
  • 只有内核可以执行特权应用
  • 为了方便应用程序
3. 三者的区别与特点

源头

  • 中断:外设
  • 异常:应用程序意想不到的行为
  • 系统调用:应用系统请求操作系统提供服务

处理时间

  • 中断:异步(不知道产生的时间点)
  • 异常:同步(已知发生的时间点)
  • 系统调用:异步或同步
响应:
  • 中断:持续,对用户应用程序是透明的
  • 异常:杀死或重新执行意想不到的应用程序指令
  • 系统调用:等待和持续
4. 中断和异常的处理机制
(1)中断处理

硬件:设置中断标记(CPU初始化)

  • 将内部、外部事件设置中断标记
  • 中断事件的ID

软件

  • 保存当前处理状态,便于后续恢复现场
  • 中断服务程序处理
  • 清除中断标记
  • 恢复之前保存的处理状态

(2)异常处理

异常:异常编号

  • 保存现场
  • 异常处理:杀死产生了异常的程序/重新执行异常指令
  • 恢复现场
5. 系统调用的处理机制
  • 程序访问主要是通过高层次的API接口而不是直接进行系统调用
    • Win 32 API 用于 Windows
    • POSIX API 用于 POSIX-based systems,包括Unix、Linux、Mac OS X的所有版本
    • Java API 用于 Java虚拟机(JVM)
  • 通常情况下,有每个系统调用相关的序号,系统调用接口根据这些序号来维护表的索引;
  • 系统调用接口调用内核态中预期的系统调用,并返回系统调用的状态和其他返回值;
  • 用户不需要知道系统调用是如何实现的,只需要获取API和返回结果。
6. 跨越操作系统边界的开销
  • 在执行时间上的开销超过系统调用
  • 开销:
    • 简历中断/异常/系统调用序号与对应服务例程映射关系的初始化开销
    • 建立内核堆栈
    • 验证参数
    • 内核态映射到用户态的地址空间——更新页面映射权限
    • 内核态独立地址空间(TLB)
发布了76 篇原创文章 · 获赞 30 · 访问量 5840

猜你喜欢

转载自blog.csdn.net/weixin_45926367/article/details/104711586
今日推荐