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

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

2.1操作系统的启动


(1)CPU, I/O, 内存通过总线连接。


(2)DISK:存放OS;

BIOS:基本I/O处理系统( basic I/O system); Bootloader: 加载OS到内存中。


(3)当电脑通电时,段寄存器CS和指令寄存器IP能够确定一个内存地址,例如CS:IP = 0xf000:fff0.


(4)POST(加电自检),寻找显卡和执行BIOS。(显示器,键盘…是否正常)。


(5)步骤:

-BIOS: 将Bootloader从磁盘的磁盘的引导扇区(512字节)加载到0x7c00;跳转到CS:IP=0000:7c00的内存区域(以便下一步)

-Bootloader:将操作系统的代码和数据从硬盘加载到内存中;跳转到操作系统的起始地址。

image.png


(6)系统调用:(来源于应用程序)应用程序主动向操作系统发出服务请求。


(7)异常:(来源于不良的应用程序)非法指令或其它花的处理状态(e.g.内存出错)。


(8)中断:(来源于外设)来自不同的硬件设备的计时器和网络的中断。


(9)为什么应用程序不能直接访问硬件而是通过操作系统?

-计算机运行时,内核是被信任的第三方。

-只有内核可以执行特权指令。

-为了方便应用程序。


(10)讨论的问题:操作系统如何设计和实现中断/异常和系统调用;他们三者的区别和特点。


(11)产生的源头

-中断:外设(键盘/鼠标/网卡/声卡/显卡,可以产生各种事件)

-异常:应用程序意想不到的行为(e.g.异常,恶意程序,应用程序需要的资源未得到满足)

-系统调用(system call):应用程序请求操作提供服务(e.g.打开/关闭/读写文件,发送网络包)


(12)处理时间

-中断:异步;

-异常:同步;

-系统调用:同步或异步。


(13)响应

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

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

-系统调用:等待和持续


2.2操作系统的终端、异常、和系统调用


中断和异常的处理机制

中断是外设的事件

异常是内部迫使cpu访问一些被中断和异常服务访问的功能


中断和异常都一个硬件的处理过程和软件的处理过程,两者和在一起才构成操作系统的具体服务。

将中断和异常编号容易区分,每一个编号有一个对应的地址。

这些中断号会构成一个表,当发生中断或者是异常的时候,只需要去查找这个表,就可以容易查找到对应是哪一个。


中断的处理过程:(包括软件和硬件)

硬件:设置中断标记[cpu初始化]

1、将内部、外部事件设置中断标记

2、中断事件的ID


软件:

1、保存当前的处理状态。便于后续从打断的点继续完成。

2、中断服务程序处理

3、清楚中断标记

4、恢复之前保存的处理状态


异常的处理过程:(异常也会有一个异常的编号)

1、保存现场

2、异常处理

a、杀死产生了异常的程序

b、重新执行异常指令,重新执行这个指令,程序可以继续的执行。

3、恢复现场


系统调用:

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

image.png

这些API定义了可以提供哪些系统调用


  • 通常情况下,与每个系统调用相关的序号

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

  • 系统调用接口调用内核态中预期的系统调用

    并返回系统调用的状态和其他任何返回值

  • 用户不需要知道系统调用是如何实现的

1)只需要获取API和了解操作新系统将什么作为返回结果

2)操作系统接口的细节大部分都隐藏在API中

3)通过运行程序支持的库来管理(用包含编译器的库来创建函数集)


两个概念:用户态和内核态


  • 用户态:

应用程序在执行的过程中,cpu所处于的一个特权级的状态,其特权级特别低,不能访问某些特殊的机器指令和io


  • 内核态:

操作系统运行过程中cpu所处于的一个状态,cpu可以执行任何的一条特权指令和io,可以完全的控制这个计算机系统

**ps:**当一个应用程序调用一个系统调用的时候,会完成从用户态到内核态的转换,从而使控制权从应用程序交到了操作系统来。操作系统就是可以对系统调用识别来完成具体的服务。


函数的调用和系统调用的区别:

函数的调用只是简单的在一个栈空间里完成函数的调用和返回。而在系统调用过程中,由于应用程序和内核都有各自的堆栈,所以这回涉及到一个堆栈的切换,还会涉及特权级的转换,从用户态转换到内核态。这个是有消耗的,但是会换来安全和可靠。


跨越操作系统边界的开销:

1、建立中断、异常、系统调用号与对应服务例程映射关系的初始化开销,并且会有一个映射的表,需要对这个表进行维护。

2、操作系统有自己堆栈,需要对这个堆栈进行维护有消耗。(当然,应用程序也有自己的堆栈)

3、操作系统不信任应用程序,会对参数进行检查,会有一个时间是上的开销。

4、数据的内存拷贝,从内核到用户空间,会有一个拷贝的开销。


参考资料:

https://www.bilibili.com/video/av6538245?p=11

https://blog.csdn.net/iwanderu/article/details/103934399


目录
相关文章
|
6月前
|
消息中间件 存储 算法
【软件设计师备考 专题 】操作系统的内核(中断控制)、进程、线程概念
【软件设计师备考 专题 】操作系统的内核(中断控制)、进程、线程概念
190 0
|
17天前
|
Linux 开发者 iOS开发
Python系统调用实战:如何在不同操作系统间游刃有余🐟
本文介绍了 Python 在跨平台开发中的强大能力,通过实际例子展示了如何使用 `os` 和 `pathlib` 模块处理文件系统操作,`subprocess` 模块执行外部命令,以及 `tkinter` 创建跨平台的图形用户界面。这些工具和模块帮助开发者轻松应对不同操作系统间的差异,专注于业务逻辑。
32 2
|
29天前
|
网络协议 Linux 调度
深入探索Linux操作系统的心脏:内核与系统调用####
本文旨在揭开Linux操作系统中最为核心的部分——内核与系统调用的神秘面纱,通过生动形象的语言和比喻,让读者仿佛踏上了一段奇妙的旅程,从宏观到微观,逐步深入了解这两个关键组件如何协同工作,支撑起整个操作系统的运行。不同于传统的技术解析,本文将以故事化的方式,带领读者领略Linux内核的精妙设计与系统调用的魅力所在,即便是对技术细节不甚了解的读者也能轻松享受这次知识之旅。 ####
|
26天前
|
缓存 算法 安全
深入理解Linux操作系统的心脏:内核与系统调用####
【10月更文挑战第20天】 本文将带你探索Linux操作系统的核心——其强大的内核和高效的系统调用机制。通过深入浅出的解释,我们将揭示这些技术是如何协同工作以支撑起整个系统的运行,同时也会触及一些常见的误解和背后的哲学思想。无论你是开发者、系统管理员还是普通用户,了解这些基础知识都将有助于你更好地利用Linux的强大功能。 ####
36 1
|
1月前
|
Linux 开发者 iOS开发
Python系统调用实战:如何在不同操作系统间游刃有余🐟
【10月更文挑战第2天】Python 以其卓越的跨平台能力和丰富的标准库,成为解决多操作系统环境下编程挑战的理想选择。本文将通过实际例子展示 Python 如何简化跨平台开发。从文件系统操作到系统调用,再到 GUI 应用开发,Python 提供了多种工具和模块,如 `os`、`pathlib` 和 `subprocess`,帮助开发者轻松应对不同平台间的差异,让你成为真正的跨平台高手。
18 5
|
3月前
|
Linux 开发者 iOS开发
Python系统调用实战:如何在不同操作系统间游刃有余🐟
【8月更文挑战第5天】Python系统调用实战展示了如何轻松应对跨平台挑战。通过`os`与`pathlib`模块处理文件系统操作,如创建目录及获取用户主目录,自动适配不同操作系统的路径格式。利用`subprocess`模块执行外部命令,智能选择`ls`或`dir`等系统特定指令。借助Tkinter创建图形用户界面,实现一次编写到处运行的目标。这些技巧让开发者专注于应用逻辑,简化跨平台开发流程。
45 0
|
5月前
|
算法 Linux 调度
技术好文共享:详解操作系统中断
技术好文共享:详解操作系统中断
|
6月前
|
存储 程序员
操作系统的运行机制、中断和异常、系统调用
操作系统的运行机制、中断和异常、系统调用
101 1
|
6月前
|
Linux 开发工具 C语言
【操作系统】实验四 增加Linux系统调用
【操作系统】实验四 增加Linux系统调用
271 1
|
6月前
|
Unix 编译器 Linux
操作系统的启动和中断
操作系统的启动和中断
40 0