四、操作系统的启动,中断,异常和系统调用

简介: 四、操作系统的启动,中断,异常和系统调用

1、启动


计算机通电之后,计算机会首先进行POST(加电自检),包括寻找显卡和执行BIOS。之后由BIOS将BootLoader加载到内存之中,再有BootLoader将硬盘中的OS系统加载到内存之中,然后计算机的控制权力转移到OS系统手中。

199bb4bbb0b44a80be2345130960ae9c.png



2、操作系统与设备和程序交互


操作系统包含三个interfaces,分别是面向外设通过中断和I/O进行处理;面向应用程序通过系统调用异常来提供相应的功能。


为什么应用程序不能直接来操作外设和计算机硬件?


首先处于安全的考虑,不是所有的应用程序都是可信任的,在计算机运行之中,内核是被信任的第三方,只有内核可以执行特权命令;另一方面是为了方便应用程序的开发,通过OS来屏蔽底层的复杂性。



2.1、系统调用


系统调用是指应用程序主动向操作系统发出的服务请求(system call),其来源于应用程序。


系统调用的源头是应用程序,处理时间是异步或者同步的,系统调用命令发出情况下其是同步的,但是接受OS返回的命令时,其可能是异步的;OS对系统调用的响应是等待服务完成之后再继续执行,等待和持续。


发生系统调用时,OS处理过程,OS接收到应用程序发出的系统调用指令之后,会传输指令到指定设备中执行指定的命令。基本的系统调用API包括WIN32 API用于windows和POSIX API用于POSIX-based systems,如Linux,UNIX,Mac OS等。Java API用于Java虚拟机,但其本质还是调用WIN32 API和POSIX API。


系统调用涉及到特权级的转换,由应用程序的“用户态”转换成OS的“内核态”。系统调用相对于函数调用有所区别,函数调用是在同一个堆栈空间之内进行,也不需要进行特权级的转换;而系统调用涉及到堆栈空间的转换,以为需要从应用程序申请的堆栈空间转换到OS系统函数所在的堆栈空间进行执行。从而系统调用相对于函数调用要消耗更多的资源,但是可以保证安全性和可靠性


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


在执行时间上的开销超过程序调用


开销


♣建立中断/异常/系统调用号与对应服务里程映射对应关系


表的初始化开销


♣建立内核堆栈

♣验证参数

♣内核态映射到用户态的地址空间,更新页面的映射关系

♣内核态独立的地址空间(TLB)



2.2、异常


异常指令或者其他坏的处理状态(如:内存出错等 ),其来源于不良的应用程序。异常的源头是应用程序,处理时间是同步的;OS对异常的响应是杀死或者重新执行意想不到的应用程序指令。


发生异常时,OS处理过程,首先需要保存现场,之后进行异常处理(杀死产生异常的程序或者重新执行异常指令),最后再恢复现场。



2.3、中断


来自不同硬件设备的计时器和网络的中断,其来源于外设。中断的源头是外设;处理时间是异步的;OS对于中断的响应是持续的,对用户应用程序是透明的。


发生中断时,硬件和软件的处理过程,对于硬件来说,其需要设置中断标记[CPU的初始化],将内部、外部事件设置中断标记,将中断时间的ID发送给OS,由OS来处理中断事件。对于软件OS来说,其需要保存当前处理状态,中断服务程序的处理,清除中断标记最后恢复程序之前的处理状态。








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