系统调用、函数调用

article/2025/10/7 13:04:24

1、系统调用

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

2、系统调用原理

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

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

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

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

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

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

(1)调用形式不同。

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

按功能号调用。

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

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

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

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

(3)提供方式不同。

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

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

(4)调用的实现不同。

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

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


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

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

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

境切换到内核模式。







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



http://chatgpt.dhexx.cn/article/HU51xf0T.shtml

相关文章

C++ 虚基类

C 虚基类 概述多重继承的问题虚基类初始化例子 总结 概述 虚基类 (virtual base class) 是用关键字 virtual 声明继承的父类. 多重继承的问题 N 类: class N { public:int a;void display(){cout << "A::a" << a <<endl;} };A 类: class A :…

虚基类

虚基类 意义:假设定义了一个公共基类A。类B和类C都由类A公有派生,类D由类B和类C公有派生。显然D包含类A的两个拷贝,不仅多占用内存,而且还造成多个拷贝的数据不一致。 不定义虚基类的效果如下: class A {public:int x;void SetX(int a) { x = a; }A(int a = 0) { x = a…

【操作系统】系统调用

文章目录 系统调用系统调用举例文件拷贝的系统调用过程应用程序接口系统调用接口C语言系统调用接口Windows和UNIX系统调用示例系统调用与的库函数区别补充说明系统调用 系统调用,System call,提供了操作系统的服务接口。这些系统调用通常以C或C++编写,对某些底层任务可能以…

C++之基类调用自己的虚函数

每个类中存在虚函数时&#xff0c;当构造一个对象时&#xff0c;系统会为对象分配相应的内存空间。但是虚函数表存放在程序的只读数据段中&#xff0c;在实例化对象时&#xff0c;编译器会自动在对象里安插一个指针vPtr指向虚函数表VTable&#xff1b; 下面看一个小例子&#x…

如何调用基类私有的虚函数

直接看代码 #include <iostream> #include <stdio.h> using namespace std;class person { public:virtual void name(){cout<<"A::name"<<endl;}private:virtual void sex(){cout<<"A::sex"<<endl;} };class studen…

详解虚函数的实现过程之虚基类(4)

博客虚函数实现过程3 时提到过虚基类&#xff0c;这里呢&#xff0c;我们来详细讲述一下&#xff1a; 当我们在虚函数的声明结尾处添加“0”&#xff0c;这种虚函数就被称为纯虚函数。 它好似一个没有实现只有声明的函数&#xff0c;它的存在就是为了让类具有抽象类的功能&…

虚基类的基本概念

1.虚基类的作用 类B与类C都为类D的基类&#xff0c;而类A为类B与类C的基类&#xff0c;因此类D会继承类B与类C的多份同名成员。如下图所示&#xff1a; 在引用这些同名成员时&#xff0c;必须在派生类对象后增加直接基类名&#xff0c;以避免产生二义性&#xff0c;如&#x…

【虚基类、虚函数及应用】

虚基类 1.虚基类存在的意义 当在多条继承路径上有一个公共的基类,在这些路径中的某几条汇合处&#xff0c;这个公共的基类就会产生多个实例(或多个副本)&#xff0c;若只想保存这个基类的一个实例&#xff0c;可以将这个公共基类说明为虚基类。 在继承中产生歧义的原因有可能是…

虚函数的调用机理

C中&#xff0c;必然会接触到虚函数这个概念&#xff0c;那么&#xff0c;会不会对虚函数的内部机理产生疑问呢&#xff1f;而这里&#xff0c;就是对其的简单的研究&#xff08;本人水平有限(&#xff61;•́︿•̀&#xff61;) &#xff09; 首先&#xff0c;先来简单介绍…

系统调用

程序接口是 OS 专门为用户程序设置的&#xff0c;也是用户程序取得 OS 服务的唯一途径。程序接口通常是由各种类型的系统调用所组成的&#xff0c;因而&#xff0c;也可以说&#xff0c;系统调用提供了用户程序和操作系统之间的接口&#xff0c;应用程序通过系统调用实现其与 O…

舵机内部结及工作原理浅析

一、舵机实物图 就像上面这张照片&#xff0c;相信大家都不会陌生&#xff0c;我们常见到的舵机就是这个模样&#xff0c;一般是塑料外壳&#xff0c;当然很少见的也有金属外壳的舵机&#xff0c;因为涉及到控制信号&#xff0c;所以一般有三条引出线。 像上图所示的样子&#…

舵机控制原理详解

控制信号由接收机的通道进入信号调制芯片&#xff0c;获得直流偏置电压。它内部有一个基准电路&#xff0c;产生周期为20ms&#xff0c;宽度为1.5ms的基准信号&#xff0c;将获得的直流偏置电压与电位器的电压比较&#xff0c;获得电压差输出。最后&#xff0c;电压差的正负输出…

PWM驱动舵机原理、SG90、舵机控制

舵机自控系统 自控制电路板接收来自信号线的控制信号&#xff0c;控制电机转动&#xff0c;电机带动一系列齿轮组&#xff0c;减速后传动至输出舵盘。舵机的输出轴和位置反馈电位计是相连的&#xff0c;舵盘转动的同时&#xff0c;带动位置反馈电位计&#xff0c;电位计将输出…

舵机的原理和控制

舵机的原理和控制控制信号由接收机的通道进入信号调制芯片&#xff0c;获得直流偏置电压。它内部有一个基准电路&#xff0c;产生周期为20ms&#xff0c;宽度为1.5ms的基准信号&#xff0c;将获得的直流偏置电压与电位器的电压比较&#xff0c;获得电压差输出。最后&#xff0c…

小白入门STM32(2)---控制SG90舵机---基础工作原理详解

文章目录 序言一、基础理论1.1 舵机控制原理--PWM习题 1.2 定时器1.2.1 基础定时器时钟装置循环计数器 1.2.2 比较定时器习题 二、实战上手2.1 设置定时器和单片机接线习题 2.2 代码 三、习题答案 序言 本人一枚软件编程人员&#xff0c;有一定C语言基础&#xff0c;目前自学S…

舵机的控制

舵机是一种位置「角度」伺服的驱动器&#xff0c;适用于那些需要角度不断变化并可以保持的控制系统。目前在高档遥控玩具、航模、机器人中已经得到普遍使用。舵机是一种俗称&#xff0c;其实是一种伺服马达。本篇通过官方驱动库来实现舵机控制。 一. 舵机介绍 1、结构组成 舵机…

51单片机SG90舵机控制原理

舵机三根线的接法:黄线接信号线&#xff0c;红线接vcc&#xff0c;褐色线接GND 舵机控制原理:通过控制PWM来控制舵机转动的角度&#xff0c;关于PWM的知识可以去智能小车专栏进行学习&#xff0c;转动周期设置为20ms&#xff0c;控制高电平的时间来进行舵机转动的角度。 对于1…

单片机PWM舵机控制原理

舵机的控制一般需要一个20ms的时基脉冲&#xff0c;该脉冲的高电平部分一般为0.5ms~2.5ms范围内的角度控制脉冲部分。以180度角度舵机为例&#xff0c;那么对应的控制关系是这样的&#xff1a; 0.5ms--------------0度&#xff1b; 1.0ms------------45度&#xff1b; 1.5ms---…

STM32 PWM控制舵机——原理、接线、源程序

STM32——PWM 控制舵机 通用定时输出PWM PWM的工作原理PWM的模式 TIM_OCMode_PWM1 &#xff08;边沿对齐模式&#xff09;TIM_OCMode_PWM2&#xff08;中央对齐模式&#xff09; 占空比 舵机 实物图接线舵机工作原理周期TPWM占空比 TIM3 PWM输出 驱动SG90电机 配置过程&#xf…

pwm波控制舵机原理(转)

文章转自&#xff1a;http://www.geek-workshop.com/thread-70-1-1.html 一、关于舵机&#xff1a; 舵机&#xff08;英文叫Servo&#xff09;&#xff1a;它由直流电机、减速齿轮组、传感器和控制电路组成的一套自动控制系统。通过发送信号&#xff0c;指定输出轴旋转角度。…