系统调用

发布于 2024-03-09  68 次阅读


1.系统调用是什么:

在电脑里面,系统调用指运行在用户空间的程序向操作系统内核请求需要更高权限运行的服务

系统内核通过包装一些能够实现特定功能的特殊硬件指令和硬件状态,即为内核函数,通过一组称为系统调用的接口呈现给用户

进程在系统上的运行有两个级别:

1.用户态:用户态运行的进程可以直接读取用户程序的数据

2.系统态:系统态运行的程序可以访问计算机的任何资源,不受限制;诸如一些修改寄存器内容的命令,比如次磁盘的IO操作、访问物理页内存、访问网络上的数据包

2.系统调用过程:

  • 当系统发起调用时通常通过一个称为陷阱的特殊硬件指令,硬件将控制权转移到预先指定的陷阱处理程序,并同时将特权级别提升到内核模式
  • 内核模式下,操作系统可以完全访问系统的硬件,因此可执行更多功能
  • 当操作系统完成请求的服务时,他通过特殊的陷阱返回指令将控制权交还给用户,该指令返回到用户模式,同时将控制权交还给程序

3.用户态到内核态切换途径方式:

操作系统一般是通过中断来从用户态切换到内核态的

中断一般有两个属性:1.中断号 2.中断处理程序

当中断到来时,cpu会暂停正在执行的代码,根据中断号去中断向量表找出对应的中断处理程序并调用。中断处理程序执行完成后,会继续执行之前的代码。

中断分为硬件中断和软件中断,软件中断通常是一条指令,使用这条指令用户可以手动触发某个中断

0x80指令会让cpu陷入中断,执行对应的0x80中断处理函数。不过在这之前,cpu还需要进行栈切换,即就是ESP寄存器的值所指向的栈。

主要分为几步:

1.保存各种寄存器

2.根据系统调用号执行对应的系统调用程序,将返回结果存入到eax中

3.恢复各种寄存器

在这里插入图片描述

The world's full of lonely people afraid to make the first move.