前言
操作系统作为硬件的使用层,提供使用硬件资源的能力,进程作为操作系统使用层,提供使用操作系统抽象出的资源层的能力。
进程:是指计算机中已运行的程序。 进程本身不是基本的运行单位,而是线程的容器。程序本身只是指令、数据及其组织形式的描述,进程才是程序(那些指令和数据)的真正运行实例。
一、什么是进程
1. 进程的四要素
- 有一段程序代其执行;
- 有进程专用的系统堆栈空间;
- 在内核有task_struct数据结构;
- 进程有独立的存储空间,拥有专有的用户空间;
如果具备前面三条而缺少第四条,那就称为“线程”;
如果完全没有用户空间,就称为“内核线程”;
如果共享用户空间,则就称为“用户线程”。
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 后查看