linux - 看书学习Linux内核

标签 linux linux-kernel operating-system

<分区>

我已经阅读了这些相关问题的一般答案,

但仍然留下了我自己的问题。例如,在 int 0x80 上,内核为系统调用提供服务,但“为”调用提供服务意味着什么?例如如果为 getuid 调用服务电话

#define __NR_getuid (__NR_SYSCALL_BASE+ 24)

然后一旦 int 0x80 发生,内核就会为调用提供服务。那么内核究竟必须做什么来实现getuid呢?某处一定有一些代码在 int 0x80 之后运行。假设已经下载了 Linux 内核源代码,您可以在哪里(例如什么路径)找到 __NR_getuid 的源代码实现?

最佳答案

getuid(2) 的处理程序在 kernel/timer.c 中,但您会在那里找到一个单行函数,它不会启发

我通过在内核源目录的顶层输入 make tags 找到该文件,然后输入 vi -t sys_getuidsys_*() 是系统调用入口点在内核中的命名方式。完成后,您就会明白为什么 0xDen 给出的 find 命令应该起作用,事实上在我的系统上也是如此。但是,使用 tags更快更容易。

这就是为什么我一直建议那些想了解内核如何工作的人阅读有关它的书的原因。这些书并没有从字面上告诉您每个系统调用是如何实现的,因为那将要求它基本上逐行引导您完成所有代码。 There are millions of SLOC在内核中。如果您将其打印出来,它实际上需要一个书架才能容纳所有内容,即使您以小字体双面打印它也是如此。

即使您忽略所有非核心部分,例如驱动程序、奇怪的文件系统、不太流行的 CPU 类型等,以便您能够将其减少到总大小的 1%,您仍然留下了十万个 SLOC 来耕耘。这本身就可以写成一本大书,没有留下太多评论的余地。

因此,一本关于内核的书要做的是让您全面了解其中发生的事情,以便您能够自己找出事物存在的位置以及它们是如何被激活的。您将了解将它们联系在一起的数据结构,以便您可以跟踪调用链等。

关于linux - 看书学习Linux内核,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14498810/

相关文章:

Linux SCTP 堆栈与同一台机器上的其他非操作系统 SCTP 堆栈一起部署

php - 使用来自 php 的 shell 脚本生成 android apk?

linux - Linux需要可写文件系统吗

linux-kernel - .config 和 kconfig 之间的区别

ios - iOS中所有进程的父进程是什么?

c - 在 Linux 3.x 上 Hook sys_execve()

linux - 如何在具有 AWK 语句的 bash 脚本中使用 --enable-switch

java - action.keyDown(Keys.CONTROL).sendKeys ("a").keyUp(Keys.CONTROL).build() 在 Windows 上有效,但在 Linux 上无效

c - 来自内核的信号用户应用程序

linux - Windows 内存页面是否始终以 4096 字节为单位?