操作系统 之 库函数和系统调用
2016-03-09 22:44
323 查看
一. 概念
系统调用(英语:system
call),指运行在用户空间的应用程序向操作系统内核请求某些服务的调用过程。 系统调用提供了用户程序与操作系统之间的接口。一般来说,系统调用都在内核态执行。由于系统调用不考虑平台差异性,由内核直接提供,因而移植性较差(几乎无移植性)。在linux下包含以下几种类型:进程控制(如:fork)、文件系统控制(如:write)、系统控制(如:reboot)、内存管理(如:getpagesize
获取页面大小——没见过。。。)、网络管理(getdomainname 取域名 )、socket控制(如:上文提到socket、bind等)、用户管理(getuid 获取用户标识号 )、进程间通信(pipe创建管道)等。在应用程序调用系统调用时,会将该程序的进程从用户态切换到内核态。系统调用也要包含头文件。
库函数(library function),是由用户或组织自己开发的,具有一定功能的函数集合,一般具有较好平台移植性,通过库文件(静态库或动态库)向程序员提供功能性调用。程序员无需关心平台差异,由库来屏蔽平台差异性。把一些常用到的函数编完放到一个文件里,供别人用.别人用的时候把它所在的文件名用#include<>加到里面就可以了
API是WINDOWS提供的应用程序编程接口,系统调用也是指API调用吧。VC库函数包括MFC,ATL,C/C++库
二.比较
1、调用形式不同。过程(函数)使用一般调用指令,其转向地址是固定不变的,包含在跳转语句中;但系统调用中不包含处理程序入口,而仅仅提供功能号,按功能号调用。
2、被调用代码的位置不同。过程(函数)调用是一种静态调用,调用者和被调用代码在同一程序内,经过连接编辑后作为目标代码的一部份。当过程(函数)升级或修改时,必须重新编译连结。而系统调用是一种动态调用,系统调用的处理代码在调用程序之外(在操作系统中),这样一来,系统调用处理代码升级或修改时,与调用程序无关。而且,调用程序的长度也大大缩短,减少了调用程序占用的存储空间。
3、提供方式不同。过程(函数)往往由编译系统提供,不同编译系统提供的过程(函数)可以不同;系统调用由操作系统提供,一旦操作系统设计好,系统调用的功能、种类与数量便固定不变了。
4、调用的实现不同。程序使用一般机器指令(跳转指令)来调用过程(函数),是在用户态运行的;程序执行系统调用,是通过中断机构来实现,需要从用户态转变到核心态,在管理状态执行,因此,安全性好。
系统调用(英语:system
call),指运行在用户空间的应用程序向操作系统内核请求某些服务的调用过程。 系统调用提供了用户程序与操作系统之间的接口。一般来说,系统调用都在内核态执行。由于系统调用不考虑平台差异性,由内核直接提供,因而移植性较差(几乎无移植性)。在linux下包含以下几种类型:进程控制(如:fork)、文件系统控制(如:write)、系统控制(如:reboot)、内存管理(如:getpagesize
获取页面大小——没见过。。。)、网络管理(getdomainname 取域名 )、socket控制(如:上文提到socket、bind等)、用户管理(getuid 获取用户标识号 )、进程间通信(pipe创建管道)等。在应用程序调用系统调用时,会将该程序的进程从用户态切换到内核态。系统调用也要包含头文件。
库函数(library function),是由用户或组织自己开发的,具有一定功能的函数集合,一般具有较好平台移植性,通过库文件(静态库或动态库)向程序员提供功能性调用。程序员无需关心平台差异,由库来屏蔽平台差异性。把一些常用到的函数编完放到一个文件里,供别人用.别人用的时候把它所在的文件名用#include<>加到里面就可以了
API是WINDOWS提供的应用程序编程接口,系统调用也是指API调用吧。VC库函数包括MFC,ATL,C/C++库
二.比较
1、调用形式不同。过程(函数)使用一般调用指令,其转向地址是固定不变的,包含在跳转语句中;但系统调用中不包含处理程序入口,而仅仅提供功能号,按功能号调用。
2、被调用代码的位置不同。过程(函数)调用是一种静态调用,调用者和被调用代码在同一程序内,经过连接编辑后作为目标代码的一部份。当过程(函数)升级或修改时,必须重新编译连结。而系统调用是一种动态调用,系统调用的处理代码在调用程序之外(在操作系统中),这样一来,系统调用处理代码升级或修改时,与调用程序无关。而且,调用程序的长度也大大缩短,减少了调用程序占用的存储空间。
3、提供方式不同。过程(函数)往往由编译系统提供,不同编译系统提供的过程(函数)可以不同;系统调用由操作系统提供,一旦操作系统设计好,系统调用的功能、种类与数量便固定不变了。
4、调用的实现不同。程序使用一般机器指令(跳转指令)来调用过程(函数),是在用户态运行的;程序执行系统调用,是通过中断机构来实现,需要从用户态转变到核心态,在管理状态执行,因此,安全性好。
相关文章推荐
- Linux 系统调用
- linux编译内核添加system call
- mkdir 系统调用
- 《现代操作系统》(第3版)读书笔记(1)之系统调用(关键词:操作系统/系统调用)
- Android调用系统通讯录,并返回联系人号码和称呼
- IOS学习之performSelector:withObject:afterDelay:
- Android一步一步带你实现RecyclerView的拖拽和侧滑删除功能
- iOS framework不能在windows系统下提交到svn
- iOS实现(超级猜图)源码
- Grandle编译时报错:Could not create plugin of type 'AppPlugin'
- Android异步消息处理机制(一):简单使用
- Android Transition框架介绍(1)
- android studio 电脑重启后不识别安卓项目 所有设置被还原
- IOS传值方法- 属性反向传值(delegate)
- 移动端微信h5下ul实现横向滚动css代码
- cocos2dx 无法打开包含文件extensions/ExtensionExport.h
- Android友盟微信分享失败原因
- iOS中用按钮NSbutton实现视图的放大与缩小功能
- Android-自定义View组件切换Activity界面
- ConditionVariable在Android应用开发中的用法