gpt4 book ai didi

在 linux 文件夹中找不到 pthread.c

转载 作者:太空狗 更新时间:2023-10-29 11:41:21 25 4
gpt4 key购买 nike

我已经下载了内核,内核位于名为 Linux-2.6.32.28 的文件夹中,我可以在其中找到/Kernel/Kthread.c我找到了 Kthread.c 但在 Linux-2.6.32.28 中找不到 pthread.c我在Linux-3.13/Kernel和Linux-4.7.2/Kernel找到了Kthread.c

locate pthread.c 在我安装 Ubuntu 时出现的 Computer/usr 文件夹中找到文件 pthread.c 但 pthread.c 在下载的文件夹 Linux-2.6.32.28、Linux-3.13、Linux-4.7.2 中不可用

更多:有两组函数调用。 1. 系统调用 2. 库调用。

计算机执行任何任务都必须使用硬件资源。那么,库调用与系统调用有何不同?

系统调用总是使用内核,也就是硬件。库调用意味着不使用内核或硬件?

我知道库调用有时可能会解析为系统调用。

我想知道的是,如果每组函数调用都使用硬件,那么与库调用相比,系统调用将在多大程度上使用硬件资源,反之亦然。

无论函数调用是系统还是库,至少都必须利用 RAM 等硬件资源。对吧?

最佳答案

先读pthreads(7) .它向您解释了 pthreads 是在 C standard library 中实现的。作为nptl(7) .

C 标准库是 Linux 系统的基石,您可能有它的多种变体;然而,大多数 Linux 发行版只有一个 libc,通常是 GNU glibc ,其中包含 NPTL。您可能会使用另一个 C 标准库(例如 musl-libcdietlibc )。小心点,您可以在系统上共存多个 C 标准库。

C 标准库(以及每个 user-space 程序)正在使用 system calls与内核交互。它们列在 syscalls(2) 中.顺便说一句,Linux 上的大多数 C 标准库实现都是 free software ,因此您可以根据需要研究(甚至改进)他们的源代码。您经常在 C 标准库中通过小型包装器 C 函数(例如 write(2) )使用系统调用,甚至更经常通过 C 标准库提供的一些更高级别的函数(例如 fprintf(3) )。

Pthreads 是使用像 clone(2) 这样的底层东西实现的(在 glibc 的 NPTL 层)。和 futex(7)和一些汇编代码。但是除非您要实现线程库(如 NPTL),否则您通常不会直接使用它们。

大多数程序都使用 libc 并将其作为共享库(以及 crt0 )链接,即 /lib/x86_64-linux-gnu/libc.so .6 在我的 Debian/Sid/x86-64 上。但是,您可能(但通常不会)通过一些汇编代码(例如使用 SYSCALLSYSENTER 机器指令)直接调用系统调用。另见 this .


问题被编辑为也问

What I want to know is that, if every set of function calls uses hardware then to what degree system calls will use hardware resources

请阅读更多关于 operating systems 的内容.所以仔细阅读Operating Systems: Three Easy pieces (可免费下载的教科书)并阅读 Instruction Set ArchitectureComputer Architecture .研究其中的几个,例如x86-64RISC-V (或 ARMPowerPC 等...)。了解 CPU modesvirtual memory .

您会发现操作系统管理物理资源(包括 RAM 和处理器的 cores)。每个process有自己的virtual address space .因此,从用户空间的角度来看,进程不直接使用硬件(例如,它运行在虚拟地址空间,而不是 RAM),它运行在一些virtual machine (由操作系统 kernel 提供)由系统调用和 ISA(unpriviledged 机器指令)定义。

Whether a function call is System or Library, at least hardware resource like RAM has to be utilized. Right?

错了,从用户空间的角度来看。所有硬件资源(根据定义)由操作系统管理(通过系统调用提供 abstractions)。一个普通的应用executable程序使用操作系统提供的抽象和软件资源(files、进程、file descriptorssocketsmemory mappings、虚拟地址空间等)。

(所以需要几本书才能真正回答你的问题;我提供了一些引用,请按照它们阅读更多;我们不能在这里解释所有内容)

关于在 linux 文件夹中找不到 pthread.c,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47299856/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com