本文对Linux系统编程的一些基本概念做一些介绍,对应用程序系统调用的流程进行说明。
该系列文章为《Linux/Unix系统编程手册》的学习笔记,由于该书太过冗长,属于工具书的类别,这里对书中的一些核心内容加以提炼和整理。 书中的编程练习这里不做展示和说明。
内核
是操作系统的核心,指管理和分配计算机资源(如CPU、RAM和设备)的核心软件层。
具体职责
- 进程调度
- 内存管理
- 文件系统
- 创建和终止进程
- 设备访问
- 联网
- 提供系统调用应用编程接口(API)
内核态
CPU运行的两种不同状态:内核态和用户态。
相应的,虚拟内存内存区域划分(标记)为用户空间部分和内核空间部分,CPU处于用户态时只能访问用户空间的内存,处于内核态时可访问所有部分。
只有处于内核态的CPU才可以执行特定操作,如宕机、访问内存管理硬件、初始化I/O设备等。
系统调用
受控的内核入口,应用程序可以请求内核以自己名义去执行某些动作,内核以API形式提供这些入口。
所有系统调用进入内核的方式相同,系统以一个唯一数字标识不同的系统调用,对应用程序不可见。
每个系统调用在内核中有自己的系统调用服务例程,借助glibc的外壳函数可以调用相应的服务例程,因此完整意义上的调用系统调用即借助外壳函数来调用相应的系统调用服务例程。
调用系统调用的执行过程
调用系统调用过程通过中断指令实现用户态到内核态的切换。
(End)