管理软/硬件资源,为程序提供服务的程序
“精准”的定义毫无意义
操作系统如何从一开始变成现在这样的?
- 三个重要线索
- 计算机(硬件)
- 程序(软件)
- 操作系统(管理软件的软件)
操作系统=对象+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
版权声明:
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如若内容造成侵权、违法违规、事实不符,请将相关资料发送至xkadmin@xkablog.com进行投诉反馈,一经查实,立即处理!
转载请注明出处,原文链接:https://www.xkablog.com/bcyy/49314.html