系统启动

  • 启动过程

    • CPU加电稳定后从0XFFFF0读取第一条指令
  • BIOS
    • 固化到计算机主板上的程序
    • 包括系统设置、自检程序和系统自启动程序
    • 系统加电后读BIOS
    • 加电自检POST,内存、显卡等关键部件是否在工作
    • 更新CMOS中的扩展系统配置数据ESCD
    • 按指定启动顺序从软盘、硬盘或光驱启动
    • 主引导记录BIOS-MBR
    • 全局唯一标识分区表BIOS-GPT(多分区启动)
    • 将加载程序从从磁盘的引导扇区加载到内存
  • UEFI
    • 在所有平台上一致的操作系统启动服务
  • 加载程序
    • 依据配置加载操作系统内核
    • 将操作系统的代码和数据从硬盘加载到内存中
    • 跳转到操作系统的起始地址

中断、异常和系统调用

  • 为什么需要

    • 计算机运行中,内核是被信任的第三方
    • 只有内核可以执行特权使用
    • 与外设交互
    • 处理应用程序意想不到的行为
    • 为应用程序提供系统服务
  • 内核的进入与退出
    • 中断、异常、系统调用
    • 应用程序调用函数库,通过系统调用接口进入内核

  • 系统调用(system call)

    • 源头:应用程序主动向操作系统发出的服务请求
    • 响应方式:异步或同步
    • 处理机制:等待和持续
  • 异常(exception)
    • 源头:非法指令或其他原因导致当前指令执行失败(如内存出错)后的处理请求
    • 响应方式:同步
    • 处理机制:杀死或重新执行意想不到的应用程序指令
  • 中断(hardware interrup)
    • 源头:来自硬件设备的处理请求
    • 响应方式:异步
    • 处理机制:持续,对用户应用程序是透明的
  • 中断处理机制
    • 硬件

      • CPU初始化时设置中断使能标志
      • 依据内部或外部时间设置中断标志
      • 依据中断向量调用相应中断服务例程
    • 软件
      • 现场保存(编译器)
      • 中断服务处理(服务例程)
        • 中断向量表接收
        • 中断->设备驱动
        • 异常->异常服务例程
        • 系统调用->系统调用表
      • 清除中断标记(服务例程)
      • 现场恢复(编译器)
  • 中断嵌套
    • 硬件中断服务例程可被打断

      • 中断源不同的,根据优先级高低处理
      • 可在一段时间里禁止其他中断请求
      • 中断请求会保持到CPU做出响应
    • 异常服务例程可被打断
      • 异常执行时可能出现硬件中断
    • 异常服务例程可嵌套
      • 异常服务例程可能出现缺页
  • 系统调用
    • 应用程序调用printf()时,会触发到系统调用write()
    • 操作系统服务的编程接口
    • 通常由高级语言编写(C或C++)
    • 程序通过标准库API接口而不是直接进行系统调用
    • 三种最常用应用程序编程接口(API)
      • Win32 API 用于Windows
      • POSIX API 用于UNIX、Linux、MAC OS X
      • Java API 用于JAVA虚拟机(JVM)

    • 系统调用实现

      • 每个系统调用对应一个系统调用号,系统调用接口根据系统调用号来维持表的素索引
      • 系统调用接口调用内核态中的系统调用功能实现,并返回系统调用的状态和结果
      • 用户不需要知道系统调用的实现,需要设置调用参数和获取返回结果   
    • 系统调用和函数调用的不同
      • 系统调用使用INT和IRET,执行时有堆栈切换和特权级的转换
      • CALL和RET用于常规调用,执行时没有堆栈切换
      • Intel 64 and IA-32 指令集
    • 中断、异常和系统调用的开销
      • 开销超过函数调用

        • 引导机制
        • 建立内核堆栈
        • 验证参数
        • 内核态映射到用户态的地址空间,更新页面映射权限
        • 内核态独立地址空间,TLB 
    • 文件复制过程中的系统调用序列
      • ucore中库函数read()的功能是读文件
      • read()的参数和返回值
        • int fd -- 文件句柄
        • void * buf -- 数据缓冲区指针
        • int length -- 数据缓冲区长度
        • int return_value -- 返回读出数据长度 

 

[OS] 操作系统课程(五)的更多相关文章

  1. [OS] 操作系统课程(三)

    工具 源码阅读:understand 源码文档自动生成工具:Doxygen 编译环境:gcc 运行环境:x86机器或QEMU 调试工具:QEMU+(GDB or IDE) IDE:Eclipse-CD ...

  2. solr与.net系列课程(五)solrnet的使用

     solr与.net系列课程(五)solrnet的使用 最近因项目比较忙,所以这篇文章出的比较晚,离上一篇文章已经有半个月的时间了,这节课我们来学下一下solr的.net客户端solrnet 出处   ...

  3. Bryce1010的操作系统课程设计

    https://download.csdn.net/download/fire_to_cheat_/10221003 上面是课程设计的代码,下载需要一些积分. 1.作业调度 2.磁盘调度 常见的磁盘调 ...

  4. Oracle 课程五之优化器和执行计划

    课程目标 完成本课程的学习后,您应该能够: •优化器的作用 •优化器的类型 •优化器的优化步骤 •扫描的基本类型 •表连接的执行计划 •其他运算方式的执行计划 •如何看执行计划顺序 •如何获取执行计划 ...

  5. Android灭亡论之Firefox OS操作系统出现

    今天是2014年7月1日,过几天就要到深圳实训去了,实训核心内容是Android开发.尽管Android现在很火,但作为程序猿的我们必须时刻保持清醒的头脑.我虽不是什么预言家,但近期接触的Androi ...

  6. 课程五(Sequence Models),第三周(Sequence models & Attention mechanism) —— 2.Programming assignments:Trigger word detection

    Expected OutputTrigger Word Detection Welcome to the final programming assignment of this specializa ...

  7. 清华大学OS操作系统实验lab1练习知识点汇总

    lab1知识点汇总 还是有很多问题,但是我觉得我需要在查看更多资料后回来再理解,学这个也学了一周了,看了大量的资料...还是它们自己的80386手册和lab的指导手册觉得最准确,现在我就把这部分知识做 ...

  8. [OS] 操作系统常考知识点

    转自:http://jennica.space/2017/03/21/os-principle/ 大纲如下: 1.操作系统概述2.操作系统运行环境3.进程线程模型4.处理器调度5.同步机制6.存储模型 ...

  9. ucore操作系统学习(五) ucore lab5用户进程管理

    1. ucore lab5介绍 ucore在lab4中实现了进程/线程机制,能够创建并进行内核线程的调度.通过上下文的切换令线程分时的获得CPU,使得不同线程能够并发的运行. 在lab5中需要更进一步 ...

随机推荐

  1. STM32内存结构介绍和FreeRTOS内存分配技巧

    这是我第一次使用FreeRTOS构建STM32的项目,踩了好些坑,又发现了我缺乏对于操作系统的内存及其空间的分配的知识,故写下文档记录学习成果. 文章最后要解决的问题是,如何恰当地分配FreeRTOS ...

  2. 博文推荐|多图详解 Apache Pulsar 消息存储模型

    关于 Apache Pulsar Apache Pulsar 是 Apache 软件基金会顶级项目,是下一代云原生分布式消息流平台,集消息.存储.轻量化函数式计算为一体,采用计算与存储分离架构设计,支 ...

  3. 「HTML+CSS」--自定义加载动画【010】

    前言 Hello!小伙伴! 首先非常感谢您阅读海轰的文章,倘若文中有错误的地方,欢迎您指出- 哈哈 自我介绍一下 昵称:海轰 标签:程序猿一只|C++选手|学生 简介:因C语言结识编程,随后转入计算机 ...

  4. springcloud面试题【第一期】

    全文目录 1:谈一谈你对微服务的理解? 2:微服务之间是如何独立进行通讯的? 3:springcloud和dubbo有哪些区别? 4:springboot和spring cloud得区别? 5:Eur ...

  5. 将一个字符串进行反转:将字符串中指定部分进行反转。比如“abcdefg”反转为”abfedcg”

    将一个字符串进行反转:将字符串中指定部分进行反转.比如"abcdefg"反转为"abfedcg"方式一:转换为char[] public String reve ...

  6. 会议更流畅,表情更生动!视频生成编码 VS 国际最新 VVC 标准

    阿里云视频云的标准与实现团队与香港城市大学联合开发了基于 AI 生成的人脸视频压缩体系,相比于 VVC 标准,两者质量相当时可以取得 40%-65% 的码率节省,旨在用最前沿的技术,普惠视频通话.视频 ...

  7. Go-06-数据类型、常量、运算符

    数据类型转换 Go语言采用数据类型前置加括号的方式进行类型转换,格式如:T(表达式).T表示要转换的类型:表达式包括变量.数值.函数返回值等. var a int =100 b := float(a) ...

  8. 2. IntelliJ Idea 常用快捷键列表

    Ctrl+E,最近的文件 Ctrl+Shift+E,最近更改的文件 Shift+Click,可以关闭文件 Ctrl+[ OR ],可以跑到大括号的开头与结尾 Ctrl+F12,可以显示当前文件的结构 ...

  9. JavaScript 简写技巧

    1. 声明变量 //普通写法 let x; let y = 20; //简写 let x, y = 20; 2. 给多个变量赋值 //普通写法 let a, b, c; a = 5; b = 8; c ...

  10. Civil3d中 如何用管轴线的变坡点桩号控制其他纵断面数据的显示?

    如何用管轴线的变坡点桩号控制其他纵断面数据的显示?如下图所示: 主要进行两步操作,下面以地面高程为例. 第1步: 右键纵断面图,打开纵断面图特性对话框,选择"标注栏"选项卡,分别设 ...