启动、中断、异常、系统调用

启动

1、DISK

(1)OS:

(2)Bootloader:一般放在硬盘的第一个引导扇区,占用 512 byte

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

(1)一开始加电,BIOS 执行固定内存地址:CS:IP=0xf000:fff0(CS:段寄存器;IP:指令寄存器)

(2)POST(加电自检):检查外设是否正常工作

(3)BIOS 将 Bootloader 从磁盘的第一个引导扇区,加载到内存(地址:0x7c00)

(4)跳转到 CS:IP=0000:7c00,CPU 控制权交给 Bootloader 

6、Bootloader 

(1)找到 OS 在硬盘的起始扇区,以及 OS 长度,并将 OS 加载到内存

(2)跳转到 OS 的起始地址,CPU 控制权交给 OS

 

OS 的 Interface

1、面向外设:中断、IO

2、面向应用程序:系统调用、异常

 

特点

1、系统调用

(1)来源:应用程序,主动向操作系统发出服务请求

(2)处理时间:异步 / 同步

(3)响应:等待和持续

2、异常

(1)来源:不良的应用程序,非法指令或者其他坏的处理状态,如:内存出错

(2)处理时间:同步

(3)响应:杀死或者重新执行意想不到的应用程序指令

3、中断

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

(2)处理时间:异步

(3)响应:持续,对用户应用程序是透明的

 

中断处理机制

1、硬件

(1)设置中断标记(CPU初始化)

(2)将内部、外部事件设置中断标记

(3)中断事件的 ID:程序访问的中断向量地址

2、软件

(1)保存当前处理状态

(2)中断服务程序处理

(3)清除中断标记

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

 

异常处理机制

1、保存异常编号

2、异常处理

(1)杀死产生了异常的程序

(2)重新执行异常指令

3、恢复现场

 

系统调用

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

(1)Win 32 API:用于Windows

(2)POSIX API:用于 POSIX-based systems(包括UNIX,LINUX,Mac OS X 的所有版本)

2、通常情况下,与每个系统调用相关的序号,系统调用接口根据这些序号来维护表的索引

3、系统调用接口调用内核态中预期的系统调用,并返回系统调用的状态和其他任何返回值

4、用户不需要知道系统调用是如何实现的,只需要获取 API 和了解操作新系统将什么作为返回结果,操作系统接口的细节大部分都隐藏在 API 中,通过运行程序支持的库来管理(用包含编译器的库来创建函数集)

5、实现

(1)应用程序直接 / 间接通过库,访问系统调用的 API

(2)触发转换:用户态 -> 内核态,CPU 控制权:应用程序 -> OS

(3)用户态:应用程序执行过程中,CPU 特权级的状态,级别低,不能直接访问 IO、特殊机器指令

(4)内核态:OS 执行过程中,CPU 特权级的状态,级别高,可以访问任何指令,保证安全性

(5)OS 对应用程序发出系统调用的参数,标识其的 ID 号(使其可以被识别),完成具体服务

6、区别

(1)函数调用:应用程序发出函数调用,在一个栈空间,完成参数传递、返回

(2)系统调用:应用程序、OS 有各自的堆栈,应用程序发出系统调用,需要切换堆栈,同时,用户态 -> 内核态,即完成特权级的转换

(3)系统调用的开销,远大于函数调用的开销,但更安全可靠

 

跨越操作系统边界的开销

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

2、开销情况

(1)建立中断 / 异常 / 系统调用号与对应服务,例如,程映射关系的初始化开销

(2)建立内核堆栈

(3)验证参数

(4)内核态映射到用户态的地址空间,更新页面映射权限

(5)内核态独立地址空间:TLB

posted @   半条咸鱼  阅读(67)  评论(0编辑  收藏  举报
(评论功能已被禁用)
相关博文:
阅读排行:
· 微软正式发布.NET 10 Preview 1:开启下一代开发框架新篇章
· 没有源码,如何修改代码逻辑?
· PowerShell开发游戏 · 打蜜蜂
· 在鹅厂做java开发是什么体验
· WPF到Web的无缝过渡:英雄联盟客户端的OpenSilver迁移实战
点击右上角即可分享
微信分享提示