Ste*_*ini 5 operating-system interrupt internals low-level
灵感来自这个问题
我想知道INT 21h是一个概念.现在,我对内部有一些非常生疏的知识,但没有那么多细节.我记得在C64中你有定期中断和不可屏蔽中断,但我的知识在这里停止.你能告诉我一些线索吗?这是DOS相关策略吗?
DOS可以被认为是一个用于为PC提供文件/目录抽象的库(以及更多).int 21h是一个简单的硬件"技巧",可以很容易地从这个库调用代码,而无需事先知道它将在内存中的位置.或者,您可以将此视为使用DOS API的方法.
现在,软件中断的主题是一个复杂的主题,部分原因是随着英特尔在x86系列中添加功能,同时试图保持与旧软件的兼容性,这些概念随着时间的推移而演变.一个正确的解释需要几页,但我会尽量简短.
主要问题是您是处于实模式还是保护模式.
实模式是x86处理器的简单"原始"操作模式.这是DOS运行的模式(当您在Windows下运行DOS程序时,实模式处理器是虚拟化的,因此在其中适用相同的规则).当前运行的程序可以完全控制处理器.
在实模式中,有一个向量表,告诉处理器从0到255的每个中断跳转到哪个地址.该表由BIOS和DOS以及设备驱动程序填充,有时还有特殊需要的程序.其中一些中断可以由硬件生成(例如通过按键).其他由某些软件条件生成(例如除以0).可以通过执行指令生成它们中的任何一个int n.
程序可以设置/清除"启用中断"标志; 此标志仅影响硬件中断,不会影响int指令.
DOS设计者选择使用中断号21h来处理DOS请求 - 这个数字没有实际意义:它当时只是一个未使用的条目.还有很多其他的(例如,10h是BIOS安装的中断例程,用于处理图形).另请注意,所有这些仅适用于IBM PC兼容机.嵌入式系统中的x86处理器的软件和中断表排列方式可能完全不同!
保护模式是复杂的"安全感知"模式,它在286处理器中引入,并在386上进行了大量扩展.它提供了多个权限级别.操作系统必须配置所有这些(如果操作系统出错,则可能存在安全漏洞).用户程序通常局限于"最小权限"操作模式,其中尝试访问硬件端口,或更改中断标志,或访问某些内存区域,停止程序并允许操作系统决定做什么(终止程序或给程序看起来想要的东西).
中断处理变得更加复杂.可以说,通常,如果用户程序执行软件中断,则中断号不会用作中断表的向量.而是生成一般保护异常,并且所述异常的OS处理程序(如果OS是以这种方式设计的)可以计算出该过程想要的内容并为该请求提供服务.我非常确定Linux和Windows过去(如果不是当前)使用这种机制进行系统调用.但是还有其他方法可以实现这一点,例如SYSENTER指令.