<svg xmlns="http://www.w3.org/2000/svg" style="display: none;"> <path stroke-linecap="round" d="M5,0 0,2.5 5,5z" id="raphael-marker-block" style="-webkit-tap-highlight-color: rgba(0, 0, 0, 0);"></path> </svg> <p></p>
讯享网
管理软/硬件资源,为程序提供服务的程序
“精准”的定义毫无意义
操作系统如何从一开始变成现在这样的?
- 三个重要线索
- 计算机(硬件)
- 程序(软件)
- 操作系统(管理软件的软件)
操作系统=对象+API(应用视角/设计)=C程序(硬件视角/实现)
Bootloader:加载OS(硬盘->内存),使从cpu执行操作系统
BootLoader一般位于硬盘的第一个主引导扇区 (一个扇区的大小为512Byte)

1.POST(加电自检):寻找显卡和执行BOIS
2.BOIS把BootLoader从硬盘加载到内存


定义
- 系统调用(来源于应用程序)
应用程序主动向操作系统发出服务请求

- 异常(来源于不良的应用程序)
非法指令或者其他坏的处理状态(如:内存出错)
- 中断(来源于外设)
来自不同的硬件设备的计时器和网络的中断
为什么应用程序不能直接访问外设而要借助操作系统呢?
- 在计算机运行中,内核是被信任的第三方
- 只有内核可以执行特权指令
- 为了方便应用程序
中断异常系统调用的区别
源头处理时间响应中断外设异步持续,对用户应用程序是透明的异常应用程序意想不到的行为同步杀死或重新执行意想不到的应用程序指令系统调用应用程序请求操作系统提供服务异步或同步等待和持续(等待服务完成之后继续执行)
系统调用发出请求的那个点是同步的,但是返回的那个点可能是异步的
中断和异常处理机制
- 中断是外设的事件
- 异常是内部CPU的事件
- 中断和异常迫使CPU访问一些被中断和异常服务访问的功能
硬件
设置中断标记[CPU初始化]
1.将内部、外部事件设置中断标记
2.中断事件的ID
软件
- 保存当前处理状态
- 中断服务程序处理
- 清除中断标记
- 恢复之前保存的处理状态

异常
- 保存现场(产生异常这条指令的地址,以及当前一些寄存器保存的内容等)
- 异常处理
- 杀死产生了异常的程序
- 重新执行异常指令
- 恢复现场
系统调用
标准C库的一个例子
- C语言中,应用程序调用时,会触发系统调用
程序访问主要是通过高层次的API接口而不是直接进行系统调用
- Win32 API用于Windows
- POSIX API用于POSIX-based systems(包括UNIX Linux Mac OS X的所有版本)
- Java API用于Java虚拟机(JVM)
通常情况下,与每个系统调用相关的序号,系统调用接口根据这些序号来维护表的索引
系统调用接口调用内核态中预期的系统调用,并返回系统调用的状态和其他任何返回值
用户不需要知道系统调用是如何实现的,只需要获取API和了解操作新系统将什么作为返回结果,操作系统接口的细节大部分都隐藏在API中,通过运行程序支持的库来管理(用包含编译器的库来创建函致集)
跨越操作系统边界的开销
中断,异常,系统调用其实是跨越了操作系统的边界,保证了整个系统安全稳定正常的运行,所以会有必要的开销
- 在执行时间上的开销超过程序调用
- 开销
- 建立中断/异常/系统调用号与对应服务例程映射关系的初始化开销
- 建立内核堆栈
- 验证参数
- 内核态映射到用户态的地址空间
更新页面映射权限
- 内核态独立地址空间
TLB


版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容,请联系我们,一经查实,本站将立刻删除。
如需转载请保留出处:https://51itzy.com/kjqy/206435.html