linux系统调用第一篇

这篇具有很好参考价值的文章主要介绍了linux系统调用第一篇。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

系统调用

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

从逻辑上来说,系统调用可被看成是一个内核与用户空间程序交互的接口——它好比一个中间人,把用户进程的请求传达给内核,待内核把请求处理完毕后再将处理结果送回给用户空间。

linux系统调用第一篇

系统服务之所以需要通过系统调用来提供给用户空间的根本原因是为了对系统进行“保护”,因为我们知道 Linux 的运行空间分为内核空间与用户空间,它们各自运行在不同的级别中,逻辑上相互隔离。所以用户进程在通常情况下不允许访问内核数据,也无法使用内核函数,它们只能在用户空间操作用户数据,调用用户空间函数。

实现

系统调用是属于操作系统内核的一部分的,必须以某种方式提供给进程让它们去调用。CPU 可以在不同的特权级别下运行,而相应的操作系统也有不同的运行级别,用户态和内核态。运行在内核态的进程可以毫无限制的访问各种资源,而在用户态下的用户进程的各种操作都有着限制,比如不能随意的访问内存、不能开闭中断以及切换运行的特权级别。显然,属于内核的系统调用一定是运行在内核态下,但是如何切换到内核态呢?

答案是软件中断。软件中断和我们常说的中断(硬件中断)不同之处在于,它是通过软件指令触发而并非外设引发的中断,也就是说,又是编程人员开发出的一种异常(该异常为正常的异常)。操作系统一般是通过软件中断从用户态切换到内核态。

系统调用(system call)和库函数(library function)是编程中常用的两种调用方式,它们之间有以下几点区别:

  1. 触发方式
    • 系统调用是由用户程序通过特殊的指令(例如软中断指令或者特定的处理器指令)触发的,以请求操作系统提供服务或执行特定操作。
    • 库函数是由用户程序直接调用的函数,这些函数通常封装在库文件中,用户程序通过链接库文件来调用这些函数。
  2. 特权级别
    • 系统调用执行时会导致用户态和内核态之间的切换,因为系统调用需要访问操作系统的内核空间,具有较高的权限级别。
    • 库函数的执行在用户态完成,不需要切换到内核态,因此无需特殊的权限。
  3. 功能
    • 系统调用通常提供了与操作系统相关的底层功能,例如文件操作、进程管理、网络通信等。
    • 库函数提供了各种常用的功能,例如字符串处理、数学运算、内存管理等。
  4. 性能开销
    • 由于系统调用涉及用户态和内核态之间的切换,因此通常会伴随着较大的性能开销。
    • 库函数的调用通常只涉及用户态,因此性能开销较小。
  5. 跨平台性
    • 系统调用的接口是由操作系统定义的,因此在不同的操作系统上可能存在差异,需要编写特定平台的代码。
    • 库函数通常是标准化的接口,在不同的编程语言和平台上都可以使用,具有较好的跨平台性。

linux系统调用第一篇

C库IO函数工作流程

linux系统调用第一篇

后续提供具体代码

虚拟地址空间

每个进程都会分配虚拟地址空间,在32位机器上,该地址空间为4G:

linux系统调用第一篇

linux系统调用第一篇

代码里体现的都是用户区的数据段。linux系统调用第一篇

在进程里平时所说的指针变量,保存的就是虚拟地址。当应用程序使用虚拟地址访问内存时,处理器(CPU)会将其转化成物理地址。

这样做的好处在于:

  • 进程隔离,更好的保护系统安全运行

  • 屏蔽物理差异带来的麻烦,方便操作系统和编译器安排进程地址

具体对于虚拟地址空间的理解我看的这一篇文章来源地址https://www.toymoban.com/news/detail-852259.html

到了这里,关于linux系统调用第一篇的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 【云原生监控系列第一篇】一文详解Prometheus普罗米修斯监控系统(山前前后各有风景,有风无风都很自由)

    zabbix是传统的监控系统,出现比云原生早,使用的是SQL关系型数据库;而Prometheus基于谷歌的borgemon使用go语言开发,使用TSDB数据库,所以支持云原生。zabbix最新发布的6.0版本,知道自己处于生死存亡时刻,也支持了Prometheus使用的TSDB数据库。 Prometheus 是一个开源的服务监控系

    2024年02月03日
    浏览(44)
  • FFmpeg<第一篇>:环境配置

    1、官网地址 2、linux下载ffmpeg 3、FFmpeg ./configure编译参数汇总 解压 ffmpeg-snapshot.tar.bz2 之后,在根目录下有配置文件:configure,执行该文件可以生成Makefile,configure文件中记录了configure的编译参数。 【1】Help options 帮助选项 【2】 Standard options 标准选项 【3】Licensing options 证书选

    2024年02月11日
    浏览(43)
  • spring---第一篇

    1、配置文件配置包扫描路径 2、递归包扫描获取.class文件 3、反射、确定需要交给IOC管理的类 4、对需要注入的类进行依赖注入 配置文件中指定需要扫描的包路径 定义一些注解,分别表示访问控制层、业务服务层、数据持久层、依赖注入注解、获取配置文件注 解 从配置文件

    2024年02月09日
    浏览(45)
  • 单元测试spcok第一篇

    简单案例第一篇 https://tech.meituan.com/2021/08/06/spock-practice-in-meituan.html SpockRunner和Sputnik该如何选择? Sputnik和SpockRunner都是Spock框架中的类,用于运行Spock测试。 在早期的Spock版本中,测试运行器的类名是SpockRunner。但在后来的版本中,这个类被重命名为Sputnik。 因此,Sputnik和Spo

    2024年02月03日
    浏览(36)
  • Eureka-第一篇

    ​ 一、Eureka的概述 Eureka的基本概念和作用 Eureka是一个基于REST的服务,主要用于定位运行在AWS域中的中间层服务,以达到负载均衡和中间层服务故障转移的目的。Eureka是Netflix开发的服务发现框架,主要用于解决在云计算环境中动态位置服务和快速弹性变化的问题。在微服务

    2024年01月24日
    浏览(46)
  • Mysql随心记--第一篇

    MylSAM:查询速度快,有较好的索引优化和数据压缩技术,但是它不支持事务 InnoDB:它支持事务,并且提供行级的锁定,应用也相当广泛 查看linux中创建了多少个docker容器下的mysql(只查看当前运行的去掉-a) 启动容器下的mysql 设置容器下的mysql自启动--restart always 使用该命令进

    2024年02月14日
    浏览(35)
  • ElasticSearch篇---第一篇

    前些天发现了一个巨牛的人工智能学习网站,通俗易懂,风趣幽默,忍不住分享一下给大家。点击跳转到网站,这篇文章男女通用,看懂了就去分享给你的码吧。 首先说分词是给检索用的。 英文:一个单词一个词,很简单。I am a student,词与词之间空格分隔。 中文:我是学

    2024年02月04日
    浏览(39)
  • Vue入门简介【第一篇】

            🌴  1.1  什么是Vue      vue是一个构建用户界面UI的 渐进式javascript框架 ,渐进式的框架是指可以一步一步的由浅入深的去使用该框架。       vue官网: https://cn.vuejs.org/         🌴  1.2 Vue的 优点  ⭐️  1、体积小     压缩后33k左右,体积小意味着下载速度很快

    2024年02月03日
    浏览(48)
  • Linux--进程(一篇博客让你理解操作系统的底层)

    本篇博客讲开始进入进程模块,我们先从冯诺依曼的体系结构和操作系统讲起,由浅入深,先梳理一个Linux相关知识体系框架~   身为一个程序员,我们必须要了解冯诺依曼体系结构,比如我们常见的笔记本电脑,不常见的计算机,如云服务器等,绝大多数都遵循我们的冯诺

    2024年02月05日
    浏览(38)
  • Benchmark 第一篇 了解Benchmark

    目录 一、Benchmark(基准)简介 二、Benchmark的组成 三、工具 1.集成式测试工具 2.单组件测试工具 四、Benchmark特征 五、Benchmark测试需要考虑的因素 六、Benchimark测试步骤 1.观察 2.假设 3.预测 4.环境控制 5.测试 6.推论和结论 七、Benchmaark测试数据的实际用途/意义 八、Benchmark的重

    2023年04月09日
    浏览(32)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包