Gee*_*eek 12 libraries system-calls architecture
我已经完成了这个问题的答案,但不太明白系统调用和库函数之间的区别。从概念上讲,两者有什么区别?
Use*_*ess 19
从概念上讲,库函数是流程的一部分。
在运行时,您的可执行代码和它所依赖的任何库(例如 libc.so)的代码都会链接到一个进程中。因此,当您调用此类库中的函数时,它会作为您进程的一部分执行,并具有相同的资源和权限。这与调用您自己编写的函数的想法相同(可能有例外,例如 PLT 和/或蹦床函数,如果您愿意,可以查找)。
从概念上讲,系统调用是一个特殊的接口,用于从您的代码(通常没有特权)调用内核(它有权根据需要提升特权)。
例如,请参阅 Linux man brk。当 C 程序调用malloc
分配内存时,它正在调用 glibc 中的库函数。
如果进程内部已经有足够的空间用于分配,它可以进行任何必要的堆管理并将内存返回给调用者。
如果没有,glibc 需要从内核请求更多内存:它(可能)调用brk
glibc 函数,后者又调用brk
系统调用。只有通过系统调用将控制权传递给内核后,才能修改全局虚拟内存状态以保留更多内存,并将其映射到进程的地址空间。
Did*_*hen 11
添加到 Useless 的答案:
库函数比系统调用更快,并且通常不包含权限/安全考虑,因为它们以进程的特权和内存运行。
另一方面,系统调用,因为它们在内核中运行,可以访问系统中的所有内容,因此它们需要控制调用进程在调用它们时可以做什么(验证它是否具有打开文件的权限,例如例如),此外,由于系统调用在内核中,因此调用它们需要在 CPU 中进行上下文切换,相对于仅调用库调用而言,这是一个非常繁重的过程。
系统调用通常反映为监控程序中的系统 CPU 使用率。
归档时间: |
|
查看次数: |
23828 次 |
最近记录: |