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

前言:该系列文章为笔者学习清华大学《操作系统原理》相关课程笔记,参考书籍《操作系统概念》《现代操作系统等》。如果涉及相关书籍或课程版权,联系即删~

章节博文
1《操作系统原理》学习笔记:第1章 概述
2《操作系统原理》学习笔记:第2章 操作系统基础操作
3《操作系统原理》学习笔记:第3章 操作系统内存管理
4《操作系统原理》学习笔记:第4章 非连续内存分配
5《操作系统原理》学习笔记:第5章 虚拟内存
6待续……

2.1 操作系统的启动

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

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

请添加图片描述
1⃣️ BIOS从特定地址开始执行,之后POST(加电自检,寻找显卡和执行BIOS)
2⃣️ BIOS将Bootloader从磁盘的引导扇区加载至内存中一个特定地址(bootloader一般放于磁盘的第一个扇区)
3⃣️ Bootloader将操作系统的代码和数据从硬盘加载到内存
4⃣️ 跳转到OS的起始地址(将CPU的控制权交给操作系统)
请添加图片描述

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
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值