笔记.ucore.中断&异常&系统调用
启动
- 计算机体系结构该书
- 计算机内存和硬盘布局
- 系统启动流程
中断异常和系统调用
计算机体系结构概述
cpu:计算能力,执行指令
内存:存储能力
IO:跟外界有交互,网络,磁盘,键盘
cpu加电之后执行的第一条指令在哪里
在内存里面
关掉电源之后没有东西了
ram,rom
rom加电之后还有电东西,就从这个地方开始
磁盘上是有文件系统的,bios中不能认识所有的文件代码,
加载bios,bios加载启动程序,启动程序去读内核映像
把操作系统加载进来之后就可以跳到操作x
bios系统调用:
字符显示,磁盘扇区读写等等
系统启动流程
系统加电,bios初始化硬件
bios读取主引导扇区代码
主引导扇区代码读取活动分区的引导扇区代码
引导扇区代码读取文件系统的加载程序
bios -> 主 -> 活动分区 -> 文件系统
cpu初始化
bios初始化过程:
硬件自检
硬件中内存显卡都在工作状态
进行设备初始化
执行系统bios,进行系统检测
更新escd扩展系统配置数据,就知道当前系统有什么设备
按照指令启动顺序从软盘、硬盘、光盘驱动
主引导记录MBR格式:
bios:
固化到计算机主板上的程序
包括系统设置、自检程序、系统自启动程序
有多个分区之后,需要选择从那个分区启动,有了下面这些
bios-mbr
GPT全局唯一表示分区表
pxe网络启用标准,联结到服务器上去
UEFI
接口标准,在所有平台上一致的操作系统服务
中断异常、系统调用
背景:
为什么需要中断、异常、系统调用
应用程序没有办法完全信任,但是又需要使用操作系统提供的服务
中断异常希望解决的问题:
当外设连接计算机时,会出现什么现象
处理意想不到的行为
系统调用希望解决的问题:用户应用程序得到系统服务
系统调用和功能调用的不同之处
操作系统和外界打交道就是:中断异常系统调用
系统调用:应用程序主动向操作系统发出的服务请求
异常:非法指令/其他原因导致当前指令执行失败
中断:来自硬件设备的处理请求
中断 | 异常 | 系统调用 | |
---|---|---|---|
源头 | 外设 | 应用程序意想不到的情况 | 应用程序请求操作 |
响应方式 | 异步 | 同步 | 异步/同步 |
处理机制 | 持续,对应用程序是透明的 | 杀死/重新执行意想不到的程序指令 | 等待和持续 |
中断、异常处理机制
硬件处理:在cpu初始化时设置中断使能标志
软件:现场保存(编译器操作),中断服务处理(服务历程),清除中断标志(服务历程),现场恢复(编译器操作),
中断嵌套:正在搞中断的时候,另一个中断来了,先去处理这个中断,中断请求会保持到cpu作出响应
异常服务历程:可被打断,异常服务历程执行时可能出现硬件中断.可以嵌套,可能出现缺页
系统调用的概念和实现
printf()会调用操作系统调用中的write(),
操作系统服务的编程接口,一般用C或者C++实现,程序访问通过高层次的api:
系统调用的内部实现:系统调用每个都有一个编号
系统调用 | 函数调用 | |
---|---|---|
int iret | call ret | |
堆栈切换&特权级的转换 | 常规调用没有堆栈切换 |
###这三个的开销
开销 > 函数调用
引导机制,建立内核堆栈,验证参数,内核态映射到用户态的地址空间,内核态独立地址空间
系统调用示例
代码:
int就是系统调用
用户态已经看不到了
下来是内核态:
这个里面有个syscall();