系统调用和函数调用的区别

系统调用

  操作系统服务的编程接口

  通常由高级语言编写(C或C++)

  程序访问通常通过高层次 的API接口(C标准库的库函数)而不是直接进行系统调用

  每个系统调用对应一个系统调用编号

系统调用与函数调用的区别

系统调用

  1.使用INT和IRET指令,内核和应用程序使用的是不同的堆栈,因此存在堆栈的切换,从用户态切换到内核态,从而可以使用特权指令操控设备

  2.依赖于内核,不保证移植性

  3.在用户空间和内核上下文环境间切换,开销较大

  4. 是操作系统的一个入口点

函数调用

  1.使用CALL和RET指令,调用时没有堆栈切换

  2.平台移植性好

  3.属于过程调用,调用开销较小

  4.一个普通功能函数的调用

原文地址:https://www.cnblogs.com/tianzeng/p/9692418.html

时间: 2024-10-01 05:14:50

系统调用和函数调用的区别的相关文章

系统调用与函数调用

函数调用 看这样一段代码: int main() { printf("Hello,world!"); return 0; } 其中用到了printf函数,函数从标准C库中调用,实际上是进入到内核态调用write()函数. 系统调用 应用程序通过系统调用接口进入内核,首先通过中断向量表转移到系统调用表,每一个系统调用都有对应的编号,根据编号实现相应的操作并返回. 系统调用与函数调用的区别 系统调用:指令int和IRET 堆栈切换(内核和用户态使用不同堆栈),特权级的转换 函数调用:cal

javascript 与 jquery 中的函数调用的区别

标签:例如<input id="btn_show" type="button" onclick="show()" /> <script type="text/javascript"> $(function(){ function show(){ -- } }) function show(){ -- } </script> 注意, 此时button的点击事件不会调用jquery中的show(

硬件中断和软件中断以及中断与函数调用的区别

<汇编语言程序设计>Richard Blum著:6.2.3中断   中断有两种形式: (1)硬件中断: (2)软件中断.   硬件设备生成硬件中断. 使用硬件中断发出信号,表示硬件层发生的事件(比如I/O端口接收到输入信号时).   程序生成软件中断. 它们是把控制交给另一个程序的信号.   当一个程序被中断调用时,发出调用的程序暂停,被调用的程序接替它运行.指令指针被转移到被调用的程序,并且从被调用的程序内继续执行.被调用的程序完成时,它可以把控制返回给发出调用的程序(使用中断返回指令).

系统调用、函数调用

1.系统调用 操作系统的主要功能是为管理硬件资源和为应用程序开发人员提供良好的环境来使应用程序具有更好的兼容性,为了达到这个目的, 内核提供一系列具备预定功能的多内核函数,通过一组称为系统调用(system call)的接口呈现给用户.系统调用把应用程序的请求 传给内核,调用相应的的内核函数完成所需的处理,将处理结果返回给应用程序. 现代的操作系统通常都具有多任务处理的功能,通常靠进程来实现.由于操作系统快速的在每个进程间切换执行,所以一切看起来就 会像是同时的.同时这也带来了很多安全问题,例如

系统调用与API的区别

1.为什么用户程序不能直接访问系统内核模式提供的服务? 在linux中,将程序的运行空间分为内核与用户空间(内核态和用户态),在逻辑上它们之间是相互隔离的,因此用户程序不能访问内核数据,也无法使用内核函数. 2.什么是系统调用? 答:系统调用就是一种特殊的接口.通过这个接口,用户可以访问内核空间.系统调用规定了用户进程进入内核的具体位置. 具体步骤:用户进程-->系统调用-->内核-->返回用户空间. 系统调用就是为了解决上述问题而引入的,是提供给用户的“特殊接口”. 系统调用规定用户进

[转]宏定义和函数调用的区别

含参数的宏与函数的区别 ?         宏替换不占运行时间,只占编译时间:而函数调用则占运行时间(分配单元.保留现场.值传递.返回),所以每次执行都要载入所以执行起来比较慢一些.. ?         定义宏的时候不要在宏及其参数之间键入空格,因为宏替换的时候会把你不经意打的空格当作宏的一部分进去. ?         在宏定义中把每个参数都用括号括起来,同时把整个结果也用括号(对于单个表达式的宏,可以使用小括号(),对于宏定义的复合语句可以使用{},Linux内核中有一个比较好的宏定义,d

Linux 库函数与系统调用的关系与区别

上周总结了<C 标准库的基础 IO>,其实这些功能函数通过「系统调用」也能实现相应功能.这次文章并不是要详细介绍各系统调用接口的使用方法,而是要深入理解「库函数」与「系统」调用之间的关系和区别. 一.系统调用 系统调用,我们可以理解是操作系统为用户提供的一系列操作的接口(API),这些接口提供了对系统硬件设备功能的操作.这么说可能会比较抽象,举个例子,我们最熟悉的 hello world 程序会在屏幕上打印出信息.程序中调用了 printf() 函数,而库函数 printf 本质上是调用了系统

中断与函数调用的区别

http://www.cnblogs.com/linuxbird/archive/2013/06/06/3121738.html 在<微机原理>和<计算机组成>等课程[1-4]教学中(本文以MCS-51单片机为例),中断过程既是教学难点又是教学重点,它与主程序调用子程序过程有一定相似性,但又有很大区别,调用子程序过程相对比较容易掌握,通过把两过程结合起来,采用比较教学方法,能收到了很好的教学效果. 1.两过程定义与作用    子程序是微机基本程序结构中的1种,基本程序结构包括顺序(

转:函数调用的区别:_cdecl以及_stdcall

函数调用的几个概念:_stdcall,_cdecl.... 1._stdcall是Pascal程序的缺省调用方式,通常用于Win32 Api中,函数采用从右到左的压栈方式,自己在退出时清空堆栈.VC将函数编译后会在函数名前面加上下划线前缀,在函数名后加上"@"和参数的字节数. 2.C调用约定(即用__cdecl关键字说明)按从右至左的顺序压参数入栈,由调用者把参数弹出栈.对于传送参数的内存栈是由调用者来维护的(正因为如此,实现可变参数的函数只能使用该调用约定).另外,在函数名修饰约定方