【Linux】库函数和系统调用 您所在的位置:网站首页 系统调用与函数调用的区别 【Linux】库函数和系统调用

【Linux】库函数和系统调用

2023-04-10 21:29| 来源: 网络整理| 查看: 265

(一)系统调用和库函数

概念:

系统调用:在内核空间中实现的函数,内核空间中执行(内核态)库函数:在函数库中实现的函数,用户空间执行(用户态)(二)用户空间和内核空间

(三)当调用系统调用都发生了什么??

当一个进程在用户空间执行系统调用时,将系统调用号写入eax寄存器并触发0x80中断,此时系统对该程序进行现场保护,CPU停止执行该进程用户空间的代码,进程会从运行态——>阻塞态,系统会让内核执行,内核通过读取eax寄存器中的调用号查询系统调用表,来执行对应的系统调用的内核代码(可能会访问PCB中的信息),内核代码执行完毕后,会进行现场恢复。

通过调用open系统调用加深理解:

用户空间代码调用open系统调用将系统调用号写入eax寄存器中,并触发0x80中断系统对用户空间代码数据进行现场保护进程状态从运行态转成阻塞态内核从eax得到系统调用号,内核通过查询系统调用表得到内核代码(内核代码执行会访问用户空间的文件表,查询最小的文件描述符,再进行对open的文件分配文件描述符,最终返回写入用户空间的文件表中)内核代码执行完毕,恢复现场(四)printf库函数和write系统调用

众所周知,printf是c库函数的打印函数,printf函数有一个输出缓冲区,每次将输出的数据暂时存放在这个缓冲区中,当遇到\n或者缓冲区满或者fflush(stdout)来刷出缓冲区中的内容时,就会调用write系统调用将缓冲区中的数据输出在屏幕上。



【本文地址】

公司简介

联系我们

今日新闻

    推荐新闻

    专题文章
      CopyRight 2018-2019 实验室设备网 版权所有