启动
操作系统放在了disk上,
BIOS:检索I/O,从特定地址执行,-》加载bootloder
CS段寄存器,
IP:指令寄存器
POSt(加电后):寻找显卡和执行BIOS
bootloder:把OS代码和数据从硬盘放到内存
操作系统与设备,程序交互
interface:系统调用,异常,中断。
系统调用:应用程序向操作系统发出请求,特殊的一条指令
异常:应用程序在执行中非法指令
中断:外设发出请求处理
应用程序为什么不能直接访问硬件呢?
OS可信任,提供安全的服务,而应用程序是不安全的
通过操作系统屏蔽底层的复杂性。
来源不同
中断:来源外设,键盘,鼠标,字符的事件,移动的事件
异常:应用程序不想主动产生的请求。去执行一些非法代码,恶意的程序想获取别的程序的地址
系统调用:应用程序主动请求莫方面的请求,打开文件,读写文件,打开网络包。
处理时间
中断:异步
异常:同步
系统调用:异步or 同步
响应状态:
中断:对应用程序透明,是操作系统的偷偷处理
异常:
系统调用:等待后持续运行
处理过程
分为硬件的处理过程和软件的处理过程
硬件:
中断异常由什么特定的去服务–中断号
对应的地址去处理对应的中断。
软件
即查中断表后去继续执行中断,将原处理时的执行现场环境保护起来
跳到中断具体情况去处理,处理完之后去继续执行原来的数据,清除中断标记。
异常:
异常编号:
保存现场,根据异常编号去进行异常处理。
1,杀死异常程序
2,重新执行异常执行,在之前将异常修补好(因为应用程序也不知道什么时候发生异常)
系统调用:
接口:
print() 触发系统调用write()
程序访问主要是高层次的API调用,java的API不是系统调用,而是虚拟机转换为win的API来系统调用
触发从 用户态 到 内核态 的转换 包括特权指令,控制权从应用程序到操作系统。堆栈也需要转换。
在执行中断。。。的开销
对应映射表,中断表,异常表,
操作系统有自己的堆栈,
操作系统不信任应用程序,对请求进行检查也需要开销
这些开销使操作系统安全可靠的执行。
内存管理(物理内存)
计算机体系结构,内存分层体系
硬件结构
CPU 内存 外设
内存(存储器)的层次结构:
主存(物理内存):断电后就没了
硬盘:永远保存。
进程间的交互:共享内存
方法
程序重定位
分段
分页
虚拟内存
按需分页虚拟内存
地址空间和地址怎么生成的
物理地址空间–硬件
逻辑地址空间–运行的程序看到的地址空间,最终会转换成物理地址。