我有一个问题,不知道是否完全合理:
如果在中断向量中有一个中断函数,其中每个地址槽都是指向处理中断的某些函数的指针(类似于服务,并在内核模式下运行),那么我的问题是:
使用软件中断而不是使用系统调用(也称为函数)是否有所不同?
让我们举个例子:我可以用两种方式在Windows中销毁进程:
1. 我只需要调用“ExitProcess” 2. 我只需在汇编中使用“int80h”中断(好吧,至少在Linux中是这样。在Windows中可能吗?)
两者都能起作用并产生相同的结果。我认为唯一的区别是中断会停止CPU,而因为系统调用不是中断,所以它不会阻止CPU执行其他操作(这允许多线程并且不需要停止整个CPU做一些不需要停机的事情)。
我的真正意思是WIN32API(或任何其他OS中的所有函数)都可以改为实现为中断,而不会有任何区别。然后,这将使WIN32API变成一个不必要的层。你不这么认为吗?那么,软中断和系统调用之间有什么区别? 您只需要在WIN32API中调用函数来请求服务,而对于中断,您只需要通过堆栈或寄存器传递参数并调用由编号标识的指定中断。 我想到的唯一原因是DLL(这些的实例)是每个进程创建的,而您只使用所需的功能。
这在中断中是不可能的,并且所有进程都将共享相同的数据,这并不总是人们所希望的。
附:这是一个额外的问题,超出了主题范围,但是这是一个小问题:我在哪里可以查看可以在操作系统中调用的所有中断的参考/列表?我无法在任何地方找到文档。
1. 我只需要调用“ExitProcess” 2. 我只需在汇编中使用“int80h”中断(好吧,至少在Linux中是这样。在Windows中可能吗?)
两者都能起作用并产生相同的结果。我认为唯一的区别是中断会停止CPU,而因为系统调用不是中断,所以它不会阻止CPU执行其他操作(这允许多线程并且不需要停止整个CPU做一些不需要停机的事情)。
我的真正意思是WIN32API(或任何其他OS中的所有函数)都可以改为实现为中断,而不会有任何区别。然后,这将使WIN32API变成一个不必要的层。你不这么认为吗?那么,软中断和系统调用之间有什么区别? 您只需要在WIN32API中调用函数来请求服务,而对于中断,您只需要通过堆栈或寄存器传递参数并调用由编号标识的指定中断。 我想到的唯一原因是DLL(这些的实例)是每个进程创建的,而您只使用所需的功能。
这在中断中是不可能的,并且所有进程都将共享相同的数据,这并不总是人们所希望的。
附:这是一个额外的问题,超出了主题范围,但是这是一个小问题:我在哪里可以查看可以在操作系统中调用的所有中断的参考/列表?我无法在任何地方找到文档。