系统调用和函数调用区别
来源:互联网 发布:openwrt 挂载网络磁盘 编辑:程序博客网 时间:2024/05/30 02:24
系统调用和函数调用
1. 系统调用
a. 什么是系统调用
系统调用,通俗的讲,说的是操作系统提供给用户程序调用的一组“特殊”接口。用户程序可以通过这组“特殊”接口来获得操作系统内核提供的服务,比如用户可以通过文件系统相关的调用请求系统打开文件、关闭文件或读写文件,可以通过时钟相关的系统调用获得系统时间或设置定时器等。
b. 系统调用的用途
- 控制硬件—系统调用往往作为硬件资源和用户空间的抽象接口,比如读写文件时用到的write/read调用。
- 设置系统状态或读取内核数据——因为系统调用是用户空间和内核的唯一通讯手段,所以用户设置系统状态,比如开/关某项内核服务(设置某个内核变量),或读取内核数据都必须通过系统调用。
- 进程管理—系统调用接口是用来保证系统中进程能以多任务在虚拟内存环境下得以运行。比如 fork、clone、execve、exit等
c. 系统调用的实现
Linux中实现系统调用利用了0x86体系结构中的软件中断。首先,用户程序为系统调用设置参数。其中一个参数是系统调用编号。参数设置完成后,程序执行“系统调用”指令。x86系统上的软中断由int产生。这个指令会导致一个异常:产生一个事件,这个事件会致使处理器切换到内核态并跳转到一个新的地址,并开始执行那里的异常处理程序。此时的异常处理程序实际上就是系统调用处理程序。它与硬件体系结构紧密相关。
新地址的指令会保存程序的状态,计算出应该调用哪个系统调用,调用内核中实现那个系统调用的函数,恢复用户程序状态,然后将控制权返还给用户程序。系统调用是设备驱动程序中定义的函数最终被调用的一种方式。
(为系统调用设置参数,系统调用号压入寄存器,产生80中断, 由用户态切换到内核态 ,保护现场将程序运行相关信息压栈,执行系统调用处理程序 system_call,根据系统调用表找和系统调用号执行完函数,返回值压入寄存器,从内核态回到用户态,恢复现场,程序获得返回值 。)
d. 系统调用的过程
e. 系统调用列表
常见的系统调用有:connect用于连接远程主机getuid获取用户标志号fork()waitpid()等详情可以从下列网址获取:
http://www.ibm.com/developerworks/cn/linux/kernel/syscall/part1/appendix.html
2. 函数调用
函数调用就相对熟悉多了。我们大一、大二编程所用的函数调用大多都是这里的函数调用,它运行在用户空间。
它主要通过压栈操作来进行函数调用。
例如,函数调用会执行下列操作:
⒈ 将帧指针压入栈中:pushebp
⒉ 使得帧指针等于栈指针:movebp,esp
⒊ 使栈指针自减,自减得到的内存地址应当能够(足够)用来存储被调用函数的本地状态:sub esp,0CCh
- 系统调用和函数调用区别
- 系统调用和函数调用
- 系统调用与函数调用的区别
- 系统调用与函数调用的区别
- 函数调用与系统调用的区别
- 库函数调用和系统调用的区别
- 库函数调用和系统调用的区别
- 总结系统调用和库函数调用区别
- 系统调用和库函数调用的区别
- 库函数调用和系统调用的区别
- 库函数调用和系统调用的区别
- 库函数调用和系统调用的区别
- 库函数调用和系统调用区别何在?
- 库函数调用和系统调用的区别
- 系统调用和库函数调用的区别
- 库函数调用和系统调用的区别
- 库函数调用和系统调用的区别
- 库函数调用和系统调用的区别
- bootstrap常用语句
- 解决Android手机 屏幕横竖屏切换
- 信息检索的评价指标 precision recall F1 mAP NDCG MRR ROC
- 下拉刷新
- 自动轮播的框架(Banner)的介绍以及使用
- 系统调用和函数调用区别
- 毫秒值与date格式的时间之间的转换
- 国内下载pypi库的方式
- 运行时常用的功能
- 一些被忽略且好用的API
- dex文件格式——思维导图
- kong API gateway(二):添加API
- Matlab 方程组求解
- 进程间通讯-——管道