BIOS(基本IO处理系统): 开机后从特定内存地址开始执行,检查外设,然后加载Bootloader;
Bootloader:放在硬盘第一个主引导扇区、将OS从硬盘加载到内存、跳转到OS起始地址;
系统调用:应用主动向OS发出服务请求;
异常:应用的非法指令/坏的处理状态;
中断:来自外设,通知OS需要中断处理。
1、判首缓来源不同:中断来自外设;异常来自应用程序的异常行为;系统调用来自应用程序请求系统提供服务;
2、处理时间不同:中断是异步事件、掘模异常同步、系统调用返回可以是异步,请求是同步的。
3、响应:中断:持续,对应用透明;异常:杀死/重新执行指令;系统调用:等待系统调用完成后继续执行芹瞎。
硬件上:1、将事件设置中断标记;2、key记录中断事件ID,(value有中断事件地址,给OS查询中断表);
软件上:1、保存当前处理状态;2、执行中断程序;3、清除中断标记;4、恢复之前的保存状态;
1、保存现场;2、异常处理(杀死进程/重新执行);3、恢复异常。
应用通过高层API(System Call Interface)使用,完成从用户态到内核态的切换。
1、建立中断/异常/系统调用号与对应服务号的开销;
2、内核堆栈的建立;
3、验证系统调用参数;
4、内核态数据拷贝到用户态;
5、内存状态改变(Cache/TLB 刷新的开销)。
这个问题有很多种解决方法,各种方法如下:1.扩展外部中断,但成本会很拆祥大高;
2.简化程序,将字符移动作为系统主资源程序,中断程序只进旅竖行按键读入,字符每移动一个点格就判断一次是否有新的按键按下,没有则继续执行此程序,有则跳转到相应程序,当然响应程序每隔一定语块也要加上按键宴棚判断语句,可以用循环完成,判断语句在循环末尾。
还有很多种用软件模拟扩展中断的方法,但都十分复杂。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)