深入理解Linux内核服务调用与中断机制
1. 栈的作用与INT指令引入
栈在程序执行中有着重要作用。当你需要使用某个寄存器进行其他操作时,可以将其当前值压入栈中,之后再从栈中弹出恢复。虽然这样做会消耗一定时间,不适合在频繁循环中使用,但它让我们在不增加实际寄存器的情况下,获得了额外寄存器的优势。
栈的简单用途是程序执行时的短期存储,而更重要的用途是调用程序和Linux内核服务。理解了栈之后,我们就可以探索神秘的INT指令了。
2. 通过INT 80h使用Linux内核服务
在 eatsyscall.asm 程序中,核心工作是在Linux控制台显示一行文本,这通过INT指令(参数为80h)来调用Linux操作系统实现。
Linux就像一个“神”和“巨魔”的结合体,它以“神”的方式控制着机器的关键元素,如磁盘驱动器、打印机、键盘、各种端口和显示器;同时又像“巨魔”,你告诉它要做什么,它就会帮你完成。Linux提供了简单的PC显示器访问服务,对于编写第一个汇编语言程序来说,这些简单服务就足够了。
要使用Linux的服务,需要通过Linux内核,借助软件中断来请求服务。
3. 软件中断的本质
软件中断这个名称可能会让人困惑,因为实际上并没有真正的“中断”发生。它是一种礼貌的“中断”,不会打断任何事情。
Linux内部隐藏着各种库例程,这些例程是专注于单个任务的机器指令序列,用于完成诸如从文件读取数据、向文件发送数据、获取当前时间、访问网络端口等有用的工作。Linux利用这些例程完成自身工作,也将其提供给程序员使用。
<
超级会员免费看
订阅专栏 解锁全文
1178

被折叠的 条评论
为什么被折叠?



