精华内容
下载资源
问答
  • 系统调用和函数调用

    千次阅读 2015-11-24 13:42:25
    系统调用和函数调用1. 系统调用a. 什么是系统调用系统调用,通俗的讲,说的是操作系统提供给用户程序调用的一组“特殊”接口。用户程序可以通过这组“特殊”接口来获得操作系统内核提供的服务,比如用户可以通过文件...

    系统调用和函数调用


    1. 系统调用

    a. 什么是系统调用

    系统调用,通俗的讲,说的是操作系统提供给用户程序调用的一组“特殊”接口。用户程序可以通过这组“特殊”接口来获得操作系统内核提供的服务,比如用户可以通过文件系统相关的调用请求系统打开文件、关闭文件或读写文件,可以通过时钟相关的系统调用获得系统时间或设置定时器等。

    b. 系统调用的用途

    1. 控制硬件—系统调用往往作为硬件资源和用户空间的抽象接口,比如读写文件时用到的write/read调用。
    2. 设置系统状态或读取内核数据——因为系统调用是用户空间和内核的唯一通讯手段,所以用户设置系统状态,比如开/关某项内核服务(设置某个内核变量),或读取内核数据都必须通过系统调用。
    3. 进程管理—系统调用接口是用来保证系统中进程能以多任务在虚拟内存环境下得以运行。比如 fork、clone、execve、exit等

    c. 系统调用的实现

    Linux中实现系统调用利用了0x86体系结构中的软件中断。首先,用户程序为系统调用设置参数。其中一个参数是系统调用编号。参数设置完成后,程序执行“系统调用”指令。x86系统上的软中断由int产生。这个指令会导致一个异常:产生一个事件,这个事件会致使处理器切换到内核态并跳转到一个新的地址,并开始执行那里的异常处理程序。此时的异常处理程序实际上就是系统调用处理程序。它与硬件体系结构紧密相关。
    新地址的指令会保存程序的状态,计算出应该调用哪个系统调用,调用内核中实现那个系统调用的函数,恢复用户程序状态,然后将控制权返还给用户程序。系统调用是设备驱动程序中定义的函数最终被调用的一种方式。

    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


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

    通俗的讲,函数调用是语言本身的一部分,而系统函数是内核提供给应用程序的接口,属于系统的一部分。函数调用是语言或应用程序的一部分,而系统调用是操作系统的一部分
    具体比较可参考下面的表格:(摘自网络)
    函数调用 系统调用
    在所有的ANSI C编译器版本中,C库函数是相同的 各个操作系统的系统调用是不同的
    它调用函数库中的一段程序(或函数) 它调用系统内核的服务
    与用户程序相联系 是操作系统的一个入口点
    在用户地址空间执行 在内核地址空间执行
    它的运行时间属于“用户时间” 它的运行时间属于“系统”时间
    属于过程调用,调用开销较小 需要在用户空间和内核上下文环境间切换,开销较大
    在C函数库libc中有大约300个函数 在UNIX中大约有90个系统调用
    典型的C函数库调用:system fprintfmalloc 典型的系统调用:chdir fork write brk;

    参考:
    1.https://zh.wikipedia.org/wiki/%E4%BB%BB%E5%8A%A1%E7%AE%A1%E7%90%86%E5%99%A8_(Windows%E5%85%83%E4%BB%B6)
    2. https://zh.wikipedia.org/wiki/%E5%A4%9A%E7%BA%BF%E7%A8%8B
    3. 《操作系统原理》
    4. http://www.kerneltravel.net/journal/iv/syscall.htm
    5. http://blog.csdn.net/yusiguyuan/article/details/23181327
    6. http://wenku.baidu.com/view/3e99ead6195f312b3169a580.html
    7. http://www.zhihu.com/question/19901763
    8. http://baike.baidu.com/view/65706.htm

    展开全文
  • 系统调用和函数调用区别

    千次阅读 2017-10-20 10:53:15
    系统调用和函数调用 1. 系统调用 a. 什么是系统调用 系统调用,通俗的讲,说的是操作系统提供给用户程序调用的一组“特殊”接口。用户程序可以通过这组“特殊”接口来获得操作系统内核提供的服务,比如用户可以...

     

    系统调用和函数调用


    1. 系统调用

    a. 什么是系统调用

    系统调用,通俗的讲,说的是操作系统提供给用户程序调用的一组“特殊”接口。用户程序可以通过这组“特殊”接口来获得操作系统内核提供的服务,比如用户可以通过文件系统相关的调用请求系统打开文件、关闭文件或读写文件,可以通过时钟相关的系统调用获得系统时间或设置定时器等。

    b. 系统调用的用途

    1. 控制硬件—系统调用往往作为硬件资源和用户空间的抽象接口,比如读写文件时用到的write/read调用。
    2. 设置系统状态或读取内核数据——因为系统调用是用户空间和内核的唯一通讯手段,所以用户设置系统状态,比如开/关某项内核服务(设置某个内核变量),或读取内核数据都必须通过系统调用。
    3. 进程管理—系统调用接口是用来保证系统中进程能以多任务在虚拟内存环境下得以运行。比如 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

    函数库调用
    系统调用
    在所有的ANSI C编译器版本中,C库函数是相同 各个操作系统的系统调用是不同
    它调用函数库中的一段程序(或函数) 它调用系统内核的服务
    用户程序相联系操作系统的一个入口点
    在用户地址空间执行 在内核地址空间执行
    它的运行时间属于“用户时间 它的运行时间属于“系统时间
    属于过程调用,调用开销较小 需要在用户空间和内核上下文环境间切换,开销较大
    在C函数库libc中有大约300个函数 在UNIX中大约有90个系统调用
    典型的C函数库调用:system fprintf malloc 典型的系统调用:chdir fork write brk;
    展开全文
  • 系统调用和函数调用的区别

    万次阅读 2018-06-06 22:51:57
    系统调用与函数调用的区别 系统调用 使用INTIRET指令,内核应用程序使用的是不同的堆栈,因此存在堆栈的切换,从用户态切换到内核态,从而可以使用特权指令操控设备, 函数调用 使用CALLRET...

    系统调用

    操作系统服务的编程接口
    通常由高级语言编写(C或C++)
    程序访问通常通过高层次 的API接口(C标准库的库函数)而不是直接进行系统调用
    每个系统调用对应一个系统调用编号

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

    系统调用
    1.使用INT和IRET指令,内核和应用程序使用的是不同的堆栈,因此存在堆栈的切换,从用户态切换到内核态,从而可以使用特权指令操控设备
    2.依赖于内核,不保证移植性
    3.在用户空间和内核上下文环境间切换,开销较大
    4. 是操作系统的一个入口点
    函数调用
    1.使用CALL和RET指令,调用时没有堆栈切换
    2.平台移植性好
    3.属于过程调用,调用开销较小
    4.一个普通功能函数的调用

    展开全文
  • 系统调用、函数调用

    千次阅读 2015-04-16 08:43:23
    操作系统的主要功能是为管理硬件资源为应用程序开发人员提供良好的环境来使应用程序具有更好的兼容性,为了达到这个目的,内核提供一系列具备预定功能的多内核函数,通过一组称为系统调用(system call)的接口...

    1、系统调用

    操作系统的主要功能是为管理硬件资源和为应用程序开发人员提供良好的环境来使应用程序具有更好的兼容性,为了达到这个目的,

    内核提供一系列具备预定功能的多内核函数,通过一组称为系统调用(system call)的接口呈现给用户。系统调用把应用程序的请求

    传给内核,调用相应的的内核函数完成所需的处理,将处理结果返回给应用程序。

    现代的操作系统通常都具有多任务处理的功能,通常靠进程来实现。由于操作系统快速的在每个进程间切换执行,所以一切看起来就

    会像是同时的。同时这也带来了很多安全问题,例如,一个进程可以轻易的修改进程的内存空间中的数据来使另一个进程异常或达到

    一些目的,因此操作系统必须保证每一个进程都能安全的执行。这一问题的解决方法是在处理器中加入基址寄存器界限寄存器。这

    两个寄存器中的内容用硬件限制了对储存器的存取指令所访问的储存器的地址。这样就可以在系统切换进程时写入这两个寄存器的内

    容到该进程被分配的地址范围,从而避免恶意软件。

    为了防止用户程序修改基址寄存器和界限寄存器中的内容来达到访问其他内存空间的目的,这两个寄存器必须通过一些特殊的指令来

    访问。通常,处理器设有两种模式:“用户模式”与“内核模式”,通过一个标签位来鉴别当前正处于什么模式。一些诸如修改基址寄存器

    内容的指令只有在内核模式中可以执行,而处于用户模式的时候硬件会直接跳过这个指令并继续执行下一个。

    同样,为了安全问题,一些I/O操作的指令都被限制在只有内核模式可以执行,因此操作系统有必要提供接口来为应用程序提供诸如读

    取磁盘某位置的数据的接口,这些接口就被称为系统调用

    当操作系统接收到系统调用请求后,会让处理器进入内核模式,从而执行诸如I/O操作,修改基址寄存器内容等指令,而当处理完系统

    调用内容后,操作系统会让处理器返回用户模式,来执行用户代码。

    2、系统调用原理

    操作系统中的状态分为管态(核心态)和目态(用户态)。特权指令:一类只能在核心态下运行而不能在用户态下运行的特殊指令。

    不同的操作系统特权指令会有所差异,但是一般来说主要是和硬件相关的一些指令。访管指令:本身是一条特殊的指令,但不是特权指令。

    (trap指令)。基本功能:“自愿进管”,能引起访管异常。

    用户程序只在用户态下运行,有时需要访问系统核心功能,这时通过系统调用接口使用系统调用。

    3、系统调用与过程(函数)调用的区别

    程序中执行系统调用或过程(函数)调用,虽然都是对某种功能或服务的需求,但两者从调用形式到具体实现都有很大区别。

    (1)调用形式不同。

    过程(函数)使用一般调用指令,其转向地址是固定不变的,包含在跳转语句中;但系统调用中不包含处理程序入口,而仅仅提供功能号,

    按功能号调用。

    (2)被调用代码的位置不同。

    过程(函数)调用是一种静态调用,调用者和被调用代码在同一程序内,经过连接编辑后作为目标代码的一部份。当过程(函数)升级或

    修改时,必须重新编译连结。而系统调用是一种动态调用,系统调用的处理代码在调用程序之外(在操作系统中),这样一来,系统调用

    处理代码升级或修改时,与调用程序无关。而且,调用程序的长度也大大缩短,减少了调用程序占用的存储空间。

    (3)提供方式不同。

    过程(函数)往往由编译系统提供,不同编译系统提供的过程(函数)可以不同;系统调用由操作系统提供,一旦操作系统设计好,

    系统调用的功能、种类与数量便固定不变了。

    (4)调用的实现不同。

    程序使用一般机器指令(跳转指令)来调用过程(函数),是在用户态运行的;程序执行系统调用,是通过中断机构来实现,需要从

    用户态转变到核心态,在管理状态执行,因此,安全性好。


    4、库函数调用与系统调用的区别

    函数库调用是语言或应用程序的一部分,而系统调用是操作系统的一部分。

    库函数调用通常比行内展开的代码慢,因为它需要付出函数调用的开销。但系统调用比库函数调用还要慢很多,因为它需要把上下文环

    境切换到内核模式。







    说明:本文内容来自百度百科,以及操作系统书中。


    展开全文
  • C++ 函数调用和系统调用的区别

    千次阅读 2018-02-06 10:59:27
     所谓系统调用就是用户在程序中调用操作系统所提供的一个子功能,也就是系统API,系统调用可以被看做特殊的公共子程序。系统中的各种共享资源都由操作系统统一掌管,因此在用户程序中,凡是与资源有关的操作(如...
  • 浅谈C语言函数调用系统调用

    千次阅读 2019-11-12 09:55:50
    1. 函数调用和系统调用概述 1.1 定性的去区分函数调用和系统调用 很多初学C语言的同学,亦或者开发中很少接触系统底层的同学可能会认为函数调用以及系统调用是一回事。因为在应用程序,两者都被抽象成接口去给应用...
  • new创建对象是否调用构造函数和析构函数

    千次阅读 多人点赞 2019-11-18 19:43:25
    1.指针不会调用构造析构函数,只是定义了一个指针,没有申请内存: 使用new创建对象时,申请分配内存,调用构造函数: 当我们使用new为指针开辟空间,然后用delete释放掉空间会分别调用构造析构函数: ...
  • Linux系统调用函数列表

    千次阅读 多人点赞 2017-08-30 10:24:19
    以下是Linux系统调用的一个列表,包含了大部分常用系统调用和系统调用派生出的的函数。这可能是你在互联网上所能看到的唯一一篇中文注释的Linux系统调用列表,即使是简单的字母序英文列表,能做到这么完全也是很...
  • 系统调用函数的区别

    千次阅读 2006-01-16 13:51:00
    系统调用是要求操作系统为用户提供进程,提供某种服务,通常是涉及系统的硬件资源一些敏感的软件资源等。 函 数库的函数,尤其与输入输出相关的函数,大多必须通过Linux的系统调用来完成。因此我们可以将函数库的...
  • 2、编写一段程序,使用系统调用函数fork( )创建两个子进程,再用系统调用函数signal( )让父进程捕捉信号SIGINT(用kill命令来触发),当捕捉到中断信号后,父进程用系统调用函数kill( )向两个子进程发出信号,子进程...
  • 操作系统设置了系统调用函数,方便用户使用。也就是说,用户进入内核空间的唯一途径就是通过系统调用,当然,还有一些间接地方法,但是最终都是通过系统调用来执行函数,完成相应的功能。 API函数:类似于驱动函数...
  • java开发者在定义类中的方法时,不会关心方法的定义相对于调用语句的位置。 但是python中需要注意:函数必须先定义、后调用...4、但是语句对函数调用,必须在函数调用之后,包括直接调用的函数调用的其他函数也必...
  • C语言中的函数调用和函数返回值

    万次阅读 2016-10-31 23:19:11
    函数调用也就是主调函数使用被调函数,函数调用的一般形式为:函数名({实际参数表}) 对无参函数调用时则无实际参数表。 实际参数表中的参数可以是常数,变量或其他构造类型数据及表达式。 各实参之间用逗号分隔...
  • 批处理定义和调用函数

    万次阅读 2013-12-04 17:41:47
    作者:朱金灿来源:http://blog.csdn.net/clever101 批处理程序也可以定义和调用函数的,下面是一个简单例子:@echo off set DestPath=F:\Publish\SDK set ClearPath=%DestPath%\SDK\lib\ set DestExt=*.exp rem ...
  • Windows系统调用学习笔记(一)—— API函数调用过程前言Windows API实验:分析ReadProcessMemory第一步:定位函数第二步:开始分析 前言 一、学习自滴水编程达人中级班课程,官网:https://bcdaren.com 二、海东...
  • js系列教程4-函数、函数参数教程全解js中的4种函数调用模式javascript一共有4种调用模式:函数调用模式、方法调用模式、构造器调用模式间接调用模式。【1】函数调用模式 当一个函数并非一个对象的属性时,那么它...
  • C++函数调用过程内置函数详解

    千次阅读 2018-03-12 10:15:01
    上图表示函数调用过程:①程序先执行函数调用之前的语句;②流程的控制转移到被调用函数入口处,同时进行参数传递;③执行被调用函数中函数体的语句;④流程返回调用函数的下一条指令处,将函数返回值带回;⑤接着...
  • 何时调用构造函数和析构函数

    万次阅读 2012-03-05 23:38:43
    何时调用构造函数和析构函数 构造函数的作用是保证每个对象的数据成员都有何时的初始值。 析构函数的作用是回收内存资源,通常用于释放在构造函数或对象生命期内获取的资源。 一般我们都知道构造析构的次序:...
  • C语言函数定义和函数调用

    千次阅读 2020-04-01 19:05:47
    函数是C源程序的基本模块,程序的许多功能是通过对 函数模块的调用来实现的,学会编写和调用函数可以提高编程效率。 函数的定义通常包含以下内容: 类型 函数名(形参表说明) /函数首部/ { 说明语句 /函数体/ 执行语句 }...
  • JS中的命名函数,匿名函数,自调用函数和回调函数(一). 命名函数:函数如果有名字,就是命名函数function f1(){ console.log("这个函数就是命名函数"); }(二).匿名函数:函数如果没有名字,就是匿名函数 ...
  • 引用函数与调用函数的区别引用函数与调用函数的差别与函数名称后是否附有括号()有关。函数引用只会单独出现,但函数调用则必定后随括号,很多时候还附有自变量。 举个例子// 函数引用 代码一 function f(){ var x =...
  • C语言函数调用三种方式:传值调用,引用调用和传地址调用
  • c语言调用api函数

    万次阅读 2017-10-28 13:41:52
    c语言中怎么调用windowsAPI函数, 要详细,请举个程序例子,不要说加个#include。这个我清楚 我的环境也是VC++,我想要一个c语言中怎么调用windows API的实例,谢谢! 比如messagebox()这个API函数在WINDOWS.H文件中...
  • 它其实就是一个函数定义,比如常见read()、write()等函数说明了如何获得一个给定的服务,但是系统调用是通过软中断向内核发出一个明确的请求,再者系统调用是在内核完成的,而用户态的函数是在函数库完成的。...
  • 在matlab里.m文件分执行文件和函数文件 在c++中执行文件指:main函数 函数文件:其他所有需要用到的函数 在c++中,函数文件名没有特殊讲究,将文件添加到工程目录便能使用 对函数的要求有三点 函数的完整文件 输入...
  • 关于Linux系统调用,内核函数

    万次阅读 2010-11-04 21:00:00
    现在自己的理解是,用户程序不可用直接调用内核函数,除非通过系统调用接口。如果想调用哪个内核函数(或自己写的内核函数),怎么办?增加一个系统调用就行了。 原文如下: Linux系统调用  ...
  • 系统调用和库函数调用的区别

    千次阅读 2018-09-04 16:19:24
    一:系统调用和库函数调用的区别: 1:系统调用是最底层的应用,是面向硬件的。而库函数的调用是面向开发的,相当于应用程序的API(即预先定义好的函数)接口; 2:各个操作系统系统调用是不同的,因此系统调用...
  • 函数的嵌套调用和递归调用

    千次阅读 2018-10-09 09:07:05
    背景:最近一直在学习C++,从中学习到了很多以前没有听过的内容,现在来总结...比如函数1调用函数2,函数2调用函数3,这便形成了函数的嵌套调用。 例子:求三个数中最大数最小数的差值。 分析:这里设计了3...
  • 1.系统调用:  应用程序内核间的桥梁,是应用程序访问内核的... API常以c库(libc)的形式提供,c库提供了绝大部分API,每个系统调用在c库中都有对应的封装函数(通常封装函数系统调用的名称相同)。系统调用与c库函

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 4,311,544
精华内容 1,724,617
关键字:

系统调用和函数调用