系统调用 - syscall

系统调用 - syscall,第1张

linux系统调用是通过中断实现的,软中断指令int发起中断信号。

linux只占用一个中断向量号,即:0x80。

系统调用前,linux在eax寄存器中写入子功能号,中断处理程序根据eax寄存器的值来判断用户进程申请哪种系统调用。

syscall 是一个库函数

man syscall

调用glibc中不提供的函数,如获取线程内核id

gettid函数文档如下,文档明确指出Glibc不提供该函数封装,所以我们需要自己通过syscall封装该函数。

man gettid

通过syscall实现gettid函数如下:

该函数输出的线程id与top -H -p <pid>命令查看的id一致

系统中断分两种:硬件中断和软中断

硬件中断:来自于硬件异常或事件发生,如键盘按下。

软中断:一条指令,带一个中断号,如Linux下int 0x80为系统调用中断。

中断类型号是系统为每一个中断源分配的代号,它是8位的,与系统的中断源一一对应。

中断类型号负责引导CPU找到中断服务程序的入口点。

通过中断类型号查中断向量表可得到中断向量(中断服务程序入口地址),其中:物理地址为4*n的单元是中断服务程序入口点的偏移地址;物理地址为4*n+2的单元是中断服务程序的段首址。

扩展资料

一般来说,外部中断主要有以下几种:

(1)I/O设备:如显示器、键盘、打印机等;

(2)数据通道:软盘、硬盘、光盘等;

(3)实时时钟:如外部的定时电路等;

(4)用户故障源:如掉电、奇偶校验错误等。

产生于CPU内部的中断源有几种:

(1)由CPU得运行结果产生:如除数为0、结果溢出、单步执行等;

(2)执行中断指令INT:INT3;

(3)非法 *** 作或指令引起异常处理。

参考资料来源:百度百科--中断类型码

参考资料来源:百度百科--中断向量表

中断向量表,和 DOS 等 *** 作系统无关,只是和 CPU 有关。

80x86 CPU 是 Intel 公司设计的。

它支持这样一种指令:INT xxH, 这些指令,称为中断调用指令。

当 CPU 执行中断调用指令的时候,CPU 会到内存 00000H ~ 003FFH 中去找对应的入口地址。

这些,都是 Intel 公司设计好的。

我们(或微软公司)编写程序的时候,可以编写 256 个子程序。

这些子程序,可以放在 1M 的内存中的其它地址,

但是要把它们的入口地址,写入 00000H ~ 003FFH 中,便于 CPU 去找。

子程序,也可以用 CALL 指令调用,但是不如用 INT xxH 快捷、规范。

早年,曾有人用 8086 制作控制板,完全不用 DOS,但是,其中也有中断向量表,因为这是 80x86 CPU 特有的方法。


欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/yw/8452333.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2023-04-16
下一篇2023-04-16

发表评论

登录后才能评论

评论列表(0条)

    保存