epr*_*mer 13 c kernel system-calls linux-kernel
我目前正在学习操作系统使用陷阱来促进Linux内核中的系统调用.我在traps.c中找到了陷阱表,并在entry.S中实现了许多陷阱.
但是,我被指示在Linux内核中找到两个系统调用的实现,它使用陷阱来实现系统调用.虽然我可以找到陷阱本身的定义,但我不确定内核中的其中一个陷阱的"调用"是什么样的.因此,我正在努力寻找这种行为的一个例子.
在有人问之前,是的,这是作业.
作为一个注释,我正在使用Github浏览内核源代码,因为kernel.org已关闭:https: //github.com/torvalds/linux/
对于x86架构,SYCALL_VECTOR(0x80)中断仅用于32位内核.您可以在中看到中断向量布局arch/x86/include/asm/irq_vectors.h.在trap_init()从功能traps.c是设置在所定义的陷阱处理程序的一个entry_32.S:
set_system_trap_gate(SYSCALL_VECTOR, &system_call);
对于64位内核,出于性能原因使用新的SYSENTER(Intel)或SYSCALL(AMD).该syscall_init()函数arch/x86/kernel/cpu/common.c设置定义的"处理程序" entry_64.S并使用相同的名称(system_call).
对于用户空间的持久性,您可能需要查看此页面(对于函数/文件名有点过时).
我被指示在 Linux 内核中找到两个系统调用的实现,它们利用陷阱来实现系统调用
每个系统调用都会利用一个陷阱(如果我没记错的话,中断 0x80),因此“内核”位将在 PSW 中打开,并且特权操作将可供处理器使用。
正如您所提到的,系统调用在entry.S下指定sys_call_table:,并且它们都以“sys”前缀开头。
您可以在以下位置找到系统调用函数头:include/linux/syscalls.h,您可以在这里找到它: http: //lxr.linux.no/#linux+v3.0.4/include/linux/syscalls.h
一般使用lxr(如上面的评论已经提到的)来浏览源代码。
总之,该函数是使用 SYSCALL_DEFINE1 或其他版本的宏来实现的,请参见 http://lxr.linux.no/#linux+v3.0.4/kernel/sys.c
| 归档时间: |
|
| 查看次数: |
3712 次 |
| 最近记录: |