| |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
-> 系统运维 -> DOS中断/ BIOS中断 -> 正文阅读 |
|
[系统运维]DOS中断/ BIOS中断 |
目录 前言中断是指计算机运行过程中,出现某些意外情况需主机干预时,机器能自动停止正在运行的程序并转入处理新情况的程序,处理完毕后又返回原被暂停的程序继续运行。 提示:以下是本篇文章正文内容,下面案例可供参考 一、中断简介????????执行完当前指令后,检测到从CPU内部或者外部发送过来的中断信息,并且可以立即对所接受到的信息进行处理; 1.1 中断信息????????中断信息根据来自CPU内部和外部分为:内中断和外中断 1.2 内中断? ? ? ? (1)硬件故障:断电等 ????????(2)软件异常:缺页、除法错误、溢出等 ????????(3)调用int指令引发中断 ? ? ? ? ? 例:BIOS中以中断处理程序的形式提供了微机中基本I/O设备的控制程序,称为"BIOS中断",应用程序可以用"INT n"指令调用这些程序。? 1.3 外中断? ? ? ? 外部中断是实时地处理外部事件的一种内部机制。当某种外部事件发生时,中断系统将迫使CPU暂停正在执行的程序,转而去进行中断事件的处理;中断处理完毕后.又返回被中断的程序处,继续执行下去。 ? ? ? ? 例:鼠标、键盘引起的中断; 二、中断服务程序????????通过执行事先编好的某个特定程序,用来处理中断信息的程序。 ? 2.1 BIOS中断????????BIOS中,以中断处理程序的形式提供了计算机中基本I/O设备的控制程序,称为"BIOS中断",应用程序可以用"INT n"指令调用这些程序。 例:"int 0x13h" BIOS提供给程序控制磁盘IO资源;? 2.2 DOS中断????????程序运行的主要软件环境是操作系统。 ????????操作系统为程序运行提供基本的服务,如,程序的装入、结束,内存的分配,文件管理等。以DOS操作系统为例,它也以中断处理程序的形式提供这些服务,称为"DOS中断",?应用程序也用"INT n"指令调用这些服务。 ? ? ? ? 也可称为:操作系统提供系统调用(接口)来供上层应用来和操作系统交互,进而控制系统资源。 例:如计算机应用程序用 “ int 0x80h” 或者 “ int 0x21h”,通过操作系统提供的系统调用来操作计算机资源;
三、系统调用????????通过执行事先编好的某个特定程序,用来处理中断信息的程序。 3.1 操作系统为什么要提供系统调用?? ? ? ? 为防止用户程序随意对操作系统内核区域的访问与操作,操作系统进行权限控制; 3.2 操作系统如何进行权限限制????????操作系统将内存区域分为了用户态和内核态,由于CS:IP是当前的指令,所以使用CS的最低两位来表示: 0是内核态,3是用户态。
?3.3?如何访问内核函数? ? ? ? 操作系统提供了中断指令int 0x80(DOS系统调用)来主动进入内核,这是用户程序发起的调用访问内核代码的唯一方式;
调用系统函数时会通过内联汇编代码插入int 0x80的中断指令,(不仅会插入中断指令,还会将系统调用编号设置给 %eax 寄存器) 核心:内核接收到int 0x80中断后,需要查询IDT表来取出中断处理函数地址,此处不同与其他操作系统区域的代码,int 0x80的idt表中的DPL被设置成了3,所以能从用户态能直接访问int 0x80的中断指令的(唯一入口),然后将CPL修改为0(访管指令),后续就可以正常访问内核代码。
注:这是一段在系统初始化阶段执行的代码,主要工作是用来设置0x80的中断处理IDT表项,设置相应的&system_call入口函数的地址。并且注意到这里面会将0x80的IDT表项的DPL设置为3,这样CPL=3用户态的程序就能进入,跳入IDT表之后,段选择符是8,将段和偏移设置为新的pc,cs=8,ip=&system_call,这个cs=8 还要再找gdt表,就是从内核0位开始,此时CPl已经变成了0。也就完成了特权级的转化。再下一步,在system_call中会根据%eax中跳转到相应的处理函数执行,这样就完成了一个系统函数的调用过程 总结????????Linux的系统调用通过int 80h实现,用系统调用号来区分入口函数。 操作系统实现系统调用的基本过程是:
|
|
|
上一篇文章 下一篇文章 查看所有文章 |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年12日历 | -2024/12/27 11:13:44- |
|
网站联系: qq:121756557 email:121756557@qq.com IT数码 |
数据统计 |