1、
系统调用(system call):应用程序主动向操作系统发出的服务请求
异常(exception):非法指令或者其他原因导致当前指令执行失败后的处理请求
中断(hardware interrupt):来自硬件设备的处理请求
2、
Win32 API
POSIX API
Java API
3、系统调用:
INT和IRET指令用于系统调用
内核态和用户态是使用不同的堆栈的,系统调用时需要进行堆栈切换和特权级的转换
函数调用:
CALL和RET用于常规调用
常规调用时没有堆栈切换
系统调用比函数调用的开销大
4、x86启动
CS=F000H, EIP=0000FFF0H
实际地址是:
Base+EIP=FFFF0000H+0000FFF0H=FFFFFFF0H
这是BIOS的EPROM所在地
实模式下寻址空间只有1M
BIOS做一些硬件初始化的工作,加载存储设备上的第一个扇区的512字节到内存的0x7c00
这个扇区的代码称为bootloader
5、
bootloader做的事情:
使能保护模式和段机制
从硬盘上读取kernel放到内存中的固定位置
跳转到OS的入口点执行,控制权转移到OS
6、中断:
外部中断:串口、硬盘、网卡、时钟……
软件产生的中断:
The INT n 指令,通常用于系统调用
异常:
程序错误
软件产生的异常
机器检查出的异常
7、中断服务例程(ISR)
8、系统调用可以理解为一种特殊的中断,它称之为trap 陷入 或者叫软中断