【Linux内核源码剖析】进程原理及系统调用

发布于:2022-11-07 ⋅ 阅读:(673) ⋅ 点赞:(0)

前言

操作系统作为硬件的使用层,提供使用硬件资源的能力,进程作为操作系统使用层,提供使用操作系统抽象出的资源层的能力。

进程:是指计算机中已运行的程序。 进程本身不是基本的运行单位,而是线程的容器。程序本身只是指令、数据及其组织形式的描述,进程才是程序(那些指令和数据)的真正运行实例。

一、什么是进程

1. 进程的四要素

  1. 有一段程序代其执行;
  2. 有进程专用的系统堆栈空间;
  3. 在内核有task_struct数据结构;
  4. 进程有独立的存储空间,拥有专有的用户空间;

如果具备前面三条而缺少第四条,那就称为“线程”;
如果完全没有用户空间,就称为“内核线程”;
如果共享用户空间,则就称为“用户线程”。

2. 进程的生命周期

Linux操作系统属于多任务操作系统,系统中的每个进程能够分时复用CPU时间片,通过有效的进程调度策略实现多任务并行执行。
而进程在被CPU调度运行,等待CPU资源分配以及等待外部事件时会属于不同的状态。

进程之间的状态关系:

运行:该进程此刻正在执行。

等待:进程能够运行,但没有得到许可,因为CPU分配给另一个进程。调度器可以在下一次任务切换时选择该进程。

睡眠:进程正在睡眠无法运行,因为它在等待一个外部事件。调度器无法在下一次任务切换时选择该进程。

二、task_struct数据结构分析

Linux内核涉及进程和程序的所有算法都围绕一个名为task_struct的数据结构建立,该结构定义在include/linux/sched.h中。
这是系统中主要的一个结构。在阐述调度器的实现之前,了解一下Linux管理进程的方式是很有必要的。

如下图,在include/linux目录下找到sched.h头文件

在这里插入图片描述

在这里插入图片描述

在1379行找到task_struct的定义

在这里插入图片描述

1. 对task_struct的注释

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

三、进程优先级(待补充。。)

本文含有隐藏内容,请 开通VIP 后查看

网站公告

今日签到

点亮在社区的每一天
去签到