首页 > 系统相关 >linux系统调用第一篇

linux系统调用第一篇

时间:2024-04-15 14:15:47浏览次数:37  
标签:调用 操作系统 第一篇 系统 用户 内核 linux 库函数

系统调用

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

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

image-20240415102749218

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

实现

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

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

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

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

image-20240415105955948

C库IO函数工作流程

image-20240415110205627

后续提供具体代码

虚拟地址空间

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

image-20240415110854676

image-20240415125012940

代码里体现的都是用户区的数据段。image-20240415125258651

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

这样做的好处在于:

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

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

具体对于虚拟地址空间的理解我看的这一篇

标签:调用,操作系统,第一篇,系统,用户,内核,linux,库函数
From: https://www.cnblogs.com/ivanlee717/p/18135814

相关文章

  • Linux:tcpdump抓包指令
    学习自:Linux网络命令必知必会之tcpdump,一份完整的抓包指南请查收!-Linux云计算网络-SegmentFault思否tcpdump命令详解_tcpdump抓包命令-CSDN博客1、用途tcpdump是一个Linux平台抓包工具。它可以抓取涵盖整个TCP/IP协议族的数据包,支持对网络层、协议、主机、端口的过滤,并......
  • IOS开发——调用相册崩溃闪退的异常情况处理
    软件版本:Xcode14.2测试手机:iPhone 6S Plus IOS版本:15.8.2AppStoreConnect反馈如下:Xcode打开反馈内容:问题解析:看着这么多内容,网上的说法也有很多,但首先要看下工程中有没有引入DCTZImagePickerController,如果没有,那么找到SDK中的DCTZImagePickerController.bundle文件......
  • Linux系统时间与硬件时钟同步
    由于机房没做时间同步服务器,就只能依赖机器的时钟固件了。服务器断电后,服器内置的BIOS芯片的小电池也会继续供电,在硬件时钟层面持续记录时间(需要电池有电)。假如硬件时间与实际时间不一致,硬件时间存储的CST时间(应该存储UTC),断电重启后系统会读取硬件时间作为系统时间,导致系统时间快......
  • 2024年8个最佳Linux IRC客户端整理
    IRC(InternetRelayChat)客户端是用户可以安装在其计算机上的程序,它可以向IRC服务器发送消息或从IRC服务器接收消息。它只是将您连接到IRC服务器的全球网络,并支持一对一和群组通信。尽管IRC被认为是一种老式的在线交流方式,但出于某种原因,仍有许多用户使用IRC 。但不要谈......
  • 浏览器 自带打印调用以及样式修改与调试
    1.代码<!DOCTYPEhtml><htmllang="en"><head><metacharset="UTF-8"><metaname="viewport"content="width=device-width,initial-scale=1.0"><title>print</title></......
  • 在Linux中,如何配置和管理iSCSI目标和发起器?
    在Linux中,iSCSI(InternetSmallComputerSystemInterface)是一种将SCSI接口封装在TCP/IP协议中,从而允许在IP网络上进行数据块级存储的技术。iSCSI目标是提供存储的服务器,而iSCSI发起器是访问存储的客户端。1.配置iSCSI目标安装iSCSI目标软件:在目标服务器上安装targetctl和li......
  • 在Linux中,如何使用NFS和Samba共享文件和目录?
    在Linux中,NFS(NetworkFileSystem)和Samba是两种常用的文件共享协议,分别用于在Unix-like系统之间以及跨Linux和Windows系统共享文件和目录。下面分别详细介绍如何使用它们:1.使用NFS共享文件和目录安装NFS服务:对于基于Debian/Ubuntu的系统:sudoapt-getupdatesudoapt-geti......
  • 在Linux中,如何管理和优化文件系统的性能?
    在Linux中,管理和优化文件系统的性能是确保系统高效运行的关键。以下是一些提高文件系统性能的方法:1.选择合适的文件系统类型不同的文件系统类型具有不同的性能特点。例如,ext4提供了良好的性能和稳定性,而XFS则在处理大文件和大量数据时表现更优。根据你的应用需求选择合适的文件......
  • 在Linux中,如何使用fstab文件配置自动挂载?
    在Linux系统中,/etc/fstab是一个非常重要的系统配置文件,用于定义文件系统及其挂载点,以及它们如何在系统启动时自动挂载。当你想要确保某些磁盘分区或者存储设备在系统启动后自动加载并可用时,你需要编辑这个文件。以下是通过/etc/fstab配置自动挂载的详细步骤:1.确认设备和挂载......
  • 在Linux中,如何进行文件系统的迁移和升级?
    在Linux中,文件系统的迁移和升级是涉及数据完整性和系统稳定性的重要操作。以下是进行文件系统迁移和升级的一般步骤:1.文件系统迁移文件系统迁移通常涉及将数据从一个文件系统迁移到另一个文件系统,例如从ext3迁移到ext4,或者从一个分区迁移到另一个分区。备份数据:在进行任何......