一、BIOS:基本I/O处理系统

Bootloader:加载OS

操作系统一开始是放在DISK(硬盘)中,并不是放在内存中。

BIOS:基本I/O处理系统。内存中有一部分空间(固定的)是用来存放BIOS的。

以X86为例:

1.X86PC开机时,CPU处于实模式,这时候内存的计算方式是 段基址 <<4 + 段内偏移;

2.CPU的第一条指令是通过CS:IP(CS:段寄存器;IP:指令寄存器)来取得,而此时CS=0xFFFF,IP=0x0000。这是硬件设定好的。

3.所以最开始执行的指令地址就是0xFFFF0,放在这里的是个跳转指令,调到系统BIOS中真正的启动代码处:主板的BIOS ROM(只读存储区)中。

4.系统BIOS的启动代码首先进行加电自检(POST,Power-On Self Test),检测系统中的一些关键设备是否存在和能否正常工作,例如内存和显卡等。

5.寻找显卡的BIOS。

6.将BootLoader加载到内存中。BootLoader一般放在硬盘的第一个主引导扇区,也就是磁盘0磁道0扇区(一般512个字节)。比如在X86中,BIOS将BootLoader加载在0x7cdd。

7.之后BootLoader将操作系统的代码和数据从硬盘加载到内存中。

完成上述操作后,跳转到操作系统的起始地址,将计算机系统的硬件管理交给OS。

二、系统启动流程:

三、中断、异常和系统调用的比较

系统调用(system call):应用程序主动向操作系统发出的服务请求

异常(exception):非法指令或者其他原因导致当前指令执行失败(如内存出错后的处理请求)

中断(hardware interrupt):来自硬件设备的处理请求

1、中断、异常和系统调用比较

①源头

中断:外设

异常:应用程序意想不到的行为

系统调用:应用程序请求OS提供服务

②响应方式

中断:异步

异常:同步

系统调用:异步或同步

③处理机制

中断:持续,对用户应用程序是透明的

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

系统调用:等待和持续

2、中断(中断、异常、系统调用)处理机制

①硬件处理:在CPU初始化时设置中断使能标志

依据内部或外部事件设置中断标志;

依据中断向量调用相应中断服务例程;

②软件: 现场保存(编译器)——>中断服务处理(服务例程)——>清除中断标记(服务例程)——>现场恢复(编译器)

4、中断嵌套

①硬件中断服务例程可被打断

不同硬件中断源可能硬件中断处理时出现

硬件中断服务例程中需要临时禁止中断请求

中断请求会保持到CPU左除响应

②异常服务例程可被打断

异常服务例程执行时可能出现硬件中断

4、系统调用

1、系统调用:

操作系统服务的编程接口

通常由高级语言编写(C或C++)

程序访问通常是通过高层次的API接口而不是直接进行系统调用

例:WIN32 API、POSIX API、Java API

2、系统调用的实现

①每个系统调用对应一个系统调用号(如第三节图所示)

系统调用接口根据系统调用号来维护表的索引

②系统调用接口调用内核态中的系统调用功能实现,并返回系统调用的状态和结果

③用户不需要知道系统调用的实现

需要设置调用参数和获取返回结果

操作系统接口的细节大部分都隐藏在应用编程接口后

3、函数调用和系统调用的不同

①系统调用:INT和IRET指令用于系统调用

系统调用时,堆栈切换和特权级的切换

②函数调用:CALL和RET用于常规调用

常规调用时没有堆栈切换

4、中断、异常和系统调用的开销

①超过函数调用

②开销:引导机制、建立内核堆栈、验证参数、内核态映射到用户态的地址空间、内核态独立地址空间

补充:

1、大多数计算机系统将CPU执行状态分为管态和目态。管态又称为特权状态、系统态或核心态。通常,操作系统在管态下运行。目态又叫做常态或用户态,用户程序只能在目态下运行,如果用户程序在目态下执行特权指令,硬件将发生中断,由操作系统获得控制,特权指令执行被禁止,这样可以防止用户程序有意或无意的破坏系统。从目态转换为管态的唯一途径是中断。

2、系统调用与库函数的区别

系统调用:运行在用户空间的应用程序向操作系统内核请求某些服务的调用过程。

系统调用提供了用户程序与操作系统之间的接口。

函数库调用是语言或应用程序的一部分,而系统调用是操作系统的一部分。

库函数是语言本身的一部分,而系统函数是内核提供给应用程序的接口,属于系统的一部分。

①.系统调用是为了方便应用使用操作系统的接口,而库函数是为了方便人们编写应用程序而引出的,比如你自己编写一个函数其实也可以说就是一个库函数。

②.系统调用可以理解为内核提供给我们在用户态用的接口函数,可以认为是某种内核的库函数。

③.write/read就是系统调用,而printf/fread就是C标准库函数.

清华大学操作系统OS学习(三)——启动、中断、异常和系统调用相关推荐

  1. 操作系统原理:操作系统的启动 中断/异常/系统调用

    操作系统的存储刚开始并不是内存里,而是先放在硬盘DIsk上   .由BIOS(基本输入输出系统)提供支持. 开机时,BIOS首先检查外设,检查完没问题.再加载相应的软件 . Bootloader: 这 ...

  2. 操作系统OS学习笔记(1):操作系统的发展

    操作系统(OS)的目标 实现:方便性/有效性/可扩充性/开放性 方便性 如果在计算机硬件上配置了OS=可以使用编译命令将用户采用高级语言编写的程序翻译成机器代码,或者直接通过OS所提供的各种命令来操纵 ...

  3. 《操作系统》OS学习(一):OS相关

    清华大学操作系统OS(向勇.陈渝)视频地址:http://www.xuetangx.com/courses/course-v1:TsinghuaX+30240243X+sp/about 在ucore实 ...

  4. 《操作系统》OS学习(二):启动、中断、异常

    Bootloader:加载OS.操作系统一开始是放在DISK(硬盘)中,并不是放在内存中. BIOS:基本I/O处理系统.存放在ROMRead-Only Memory)只读存储中 BIOS(Basic ...

  5. 操作系统from清华大学向勇,陈渝 笔记(二)操作系统的启动、中断、异常、系统调用

    下一篇在这里(三)(四)内存层次和连续.非连续分配 上一篇绪论在这里(一)操作系统绪论 INDEX 2-1 操作系统的启动 2-2 操作系统的中断.异常.系统调用 2-1 操作系统的启动 启动:机器三 ...

  6. 【OS学习笔记】三十九 保护模式十:中断和异常的处理与抢占式多任务对应的汇编代码----动态加载的用户程序/任务一代码

    本文是以下几篇文章对应的动态加载的用户程序/任务一代码: [OS学习笔记]三十四 保护模式十:中断和异常区别 [OS学习笔记]三十五 保护模式十:中断描述符表.中断门和陷阱门 [OS学习笔记]三十六 ...

  7. 【OS学习笔记】三十八 保护模式十:中断和异常的处理与抢占式多任务对应的汇编代码----微型内核汇代码

    本文是以下几篇文章对应的微型内核代码汇编代码: [OS学习笔记]三十四 保护模式十:中断和异常区别 [OS学习笔记]三十五 保护模式十:中断描述符表.中断门和陷阱门 [OS学习笔记]三十六 保护模式十 ...

  8. 【OS学习笔记】三十七 保护模式十:中断和异常的处理与抢占式多任务对应的汇编代码----主引导扇区代码

    本文是以下几篇文章对应的主引导扇区代码汇编代码: [OS学习笔记]三十四 保护模式十:中断和异常区别 [OS学习笔记]三十五 保护模式十:中断描述符表.中断门和陷阱门 [OS学习笔记]三十六 保护模式 ...

  9. 【OS学习笔记】三十四 保护模式十:中断和异常区别

    上几篇文章学习了分页机制的一些原理: [OS学习笔记]三十 保护模式九:段页式内存管理机制概述 [OS学习笔记]三十一 保护模式九:页目录.页表和页三者的关系详解 今天继续学习保护模式下的关于中断与异 ...

  10. 【操作系统/OS笔记03】启动、中断、异常和系统调用

    本次笔记内容: 2.1 启动 2.2 中断.异常和系统调用 文章目录 启动 BIOS加载Bootloader 操作系统与设备和程序交互 定义 从源头区分 从处理时间区分 从响应区分 中断.异常和系统调 ...

最新文章

  1. [BZOJ] 1606: [Usaco2008 Dec]Hay For Sale 购买干草
  2. 在vs2012下编译出现Msvcp120d.dll 丢失的问题
  3. 延时消息_手把手实现一条延时消息
  4. python权重初始值设置_pytorch自定义初始化权重的方法
  5. 94级计算机科学,清华大学计算机科学与技术系
  6. python水印_Python如何为图片添加水印
  7. hbase shell相关命令
  8. Git可视化工具-小乌龟
  9. 项目:智能语音对话机器人
  10. python桌面整理小助手
  11. 前端,计算中四舍五入保留两位小数操作3中方法
  12. 初入职场,菜鸟北漂记
  13. 网易云音乐人申请教程(会唱歌即可)
  14. Ngnix:防止恶意域名解析
  15. 求大家别秀智商了:请给我一面国旗 @微信官方
  16. SpringBoot整合支付宝付款(沙箱环境)
  17. ue4 项目模板_Unreal 学习和使用UE4的第二步——创建项目和模板试玩 - 游戏编程 ️...
  18. C++面向对象 - 继承、派生和多态
  19. 《预训练周刊》第51期:无重构预训练、零样本自动微调、一键调用OPT
  20. 手把手教你使用pytorch实现双向LSTM机器翻译

热门文章

  1. 3月13 论文学习步骤:google的cartographer的论文《Real-Time Loop Closure in 2D LIDAR SLAM》
  2. 09 Softmax回归+损失函数
  3. 四、矩阵特征值与特征向量的计算
  4. Go基础系列:Go实现工作池的两种方式(一)
  5. Struts Tiles 页面模板引擎初实践
  6. Linux中grep命令使用方法
  7. 学科前沿技术专题第九章
  8. shell添加用户时设置密码脚本
  9. [原]工欲善其事,必先利其器,记一次处理Oracle Listener挂掉的处理过程
  10. 30而立--男人必须明白的事