About Intrrupt
自问自答
1. 什么是中断
这个问题我在1996年的时候就问自己了, 实际上到现在仍没有完全搞清楚.
先看看下面的问题
2. 什么是BIOS中断
看看维基百科再说 http://en.wikipedia.org/wiki/BIOS_interrupt_call
3. 在boot.s里面调用中断, 和在linux汇编下调用中断有什么区别
这个问题最搞人, 既然一开机没有加载操作系统的时候就可以调用中断, 那么在linux的用户模式下调用中断算哪门子事?!
OK, BIOS中断是ROM里面的一段一段机器代码, 你别想修改他们, ROM不是RAM(当然除了你刷BIOS)
当计算机加电的时候, 你除了可以用寄存器做算术以外, 也要读读磁盘, 谢谢屏幕吧! 这些写在BIOS里面的程序就是给你用的.
你不能修改BIOS中的中断服务程序, 但是你可以修改中断向量表
Linux内核就是通过修改中断向量表来支持硬件的
IRQ中断请求线, 可以请求硬中断, 一共有15条(我不知道现在的CPU有几条), 你的键盘, 鼠标, 磁盘或者pci设备都回通过这些IRQ电一下CPU, 让CPU调用相应的中断服务程序处理硬件上的数据
软中断, 比如cpu指令int可以调用, 区别是软件发出的(利用这个原理是不是也可以做什么虚拟光驱什么的, 应为软件也可以触发中断, 外带写个driver就行了)
中断是一种机制, linux除了修改中断向量表用自己的代码响应硬件以外, 自己也占用了0x80中断, 方便asm调用linux的system call
这就是说, 你可以调用内核的C函数来system call, 也可以写汇编来调用system call
我的感觉, 汇编写的肯定别想跨平台了... C写的可以.
但是在linux下面写汇编, 你不可能调用所有的中断, 有些只能硬件触发的中断号是不给你调用的, 这就是权限.
当然某些硬中断内核和用户都可以调用.
可以下载 linux 0.01 的内核, 看看 kernel/traps.c
一些想了很久的问题, 今天一吐为快!
1. 什么是中断
这个问题我在1996年的时候就问自己了, 实际上到现在仍没有完全搞清楚.
先看看下面的问题
2. 什么是BIOS中断
看看维基百科再说 http://en.wikipedia.org/wiki/BIOS_interrupt_call
3. 在boot.s里面调用中断, 和在linux汇编下调用中断有什么区别
这个问题最搞人, 既然一开机没有加载操作系统的时候就可以调用中断, 那么在linux的用户模式下调用中断算哪门子事?!
OK, BIOS中断是ROM里面的一段一段机器代码, 你别想修改他们, ROM不是RAM(当然除了你刷BIOS)
当计算机加电的时候, 你除了可以用寄存器做算术以外, 也要读读磁盘, 谢谢屏幕吧! 这些写在BIOS里面的程序就是给你用的.
你不能修改BIOS中的中断服务程序, 但是你可以修改中断向量表
Linux内核就是通过修改中断向量表来支持硬件的
IRQ中断请求线, 可以请求硬中断, 一共有15条(我不知道现在的CPU有几条), 你的键盘, 鼠标, 磁盘或者pci设备都回通过这些IRQ电一下CPU, 让CPU调用相应的中断服务程序处理硬件上的数据
软中断, 比如cpu指令int可以调用, 区别是软件发出的(利用这个原理是不是也可以做什么虚拟光驱什么的, 应为软件也可以触发中断, 外带写个driver就行了)
中断是一种机制, linux除了修改中断向量表用自己的代码响应硬件以外, 自己也占用了0x80中断, 方便asm调用linux的system call
这就是说, 你可以调用内核的C函数来system call, 也可以写汇编来调用system call
我的感觉, 汇编写的肯定别想跨平台了... C写的可以.
但是在linux下面写汇编, 你不可能调用所有的中断, 有些只能硬件触发的中断号是不给你调用的, 这就是权限.
当然某些硬中断内核和用户都可以调用.
可以下载 linux 0.01 的内核, 看看 kernel/traps.c
一些想了很久的问题, 今天一吐为快!

feed