Skip to content

系统调用

:material-circle-edit-outline: 约 429 个字 :material-clock-time-two-outline: 预计阅读时间 1 分钟

系统调用是内核向用户进程提供服务的唯一方法,应用程序调用操作系统提供的功能模块(函数)。

用户程序通过系统调用从用户态(user mode)切换到核心态(kernel mode),从而可以访问相应的资源。

一些概念

运行模式

Linux使用了其中的两个:特权级0和特权级3 ,即内核模式(kernel mode)和用户模式(user mode)

地址空间

每个进程的虚拟地址空间可以划分为两个部分:用户空间和内核空间。

上下文

一个进程的上下文可以分为三个部分:用户级上下文、寄存器上下文以及系统级上下文。

  • 用户级上下文:正文(代码)、数据、用户栈以及共享存储区;
  • 寄存器上下文:通用寄存器、程序寄存器(eip)、处理机状态寄存器(eflags)、栈指针(esp);
  • 系统级上下文:进程控制块task_struct、内存管理信息(mm_struct、vm_area_struct、 pgd、pmd、pte等)、核心栈等。

内核函数

内核函数在形式上与普通函数一样,但它是在内核实现的,需要满足一些内核编程的要求

系统调用是用户进程进入内核的接口层,它本身并非内核函数,但它是由内核函数实现的

进入内核后,不同的系统调用会找到各自对应的内核函数,这些内核函数被称为系统调用的“服务例程”

当用户态的进程调用一个系统调用时,CPU切换到内核态并开始执行一个内核函数

image-20240926145808640