零基础理解,什么是进程

目录

1、什么是进程?

2、task_struct内部的属性

3、内核原码


1、什么是进程?

课本概念:程序是一个执行实例,正在进行的程序等
内核观点:担当分配系统资源(CPU时间、内存)的实体

长什么样子?就是下面

你会发现,一个操作系统内部,可以同时存在多个进程
有多个进程,就要管理
怎么管理?
先描述,再组织。
运用前面博主关于操作系统从管理角度的理解的文章,延展出来,将之逻辑套用在进程的进行理解。

按照这个逻辑,什么是进程?
进程 = PCB + 进程本身的数据和代码
要管理进程,首先要描述
用c语言描述,就是一个名为PCB的结构体(process control block 进程控制模块)
注意,一个进程必须对应一个PCB
这个结构体包含该进程的所有信息,例如执行时间、数据代码位置、进程id等等信息
即:

struct PCB 
{
    //所有属性
    struct PCB* next;
    //内存指针(指向进程所在内存的代码和数据位置)
};

这样,用一个统一的PCB结构体,完成了一个进程的描述
A进程,创建A的PCB结构体
B进程,创建B的PCB结构体
C进程,创建C的PCB结构体
以此类推,每一个进程对应创建一个PCB进程
所有的进程都同属于一个PCB类型对象,不同只是各自的属性值和数据
为什么要有PCB?因为操作系统对进程要进行管理

如此,对象类型描述完毕,接下来就是组织
每一个PCB都有一个next指针
我们每新创建一个新的进程,就将这个进程加入进程链表
A->B->C->…….
到此,对进程的管理,就变成了对进程链表的管理,即增删查改
也变成了对进程数据的管理,类似于上文校长对学生的管理。
这个链表数据结构存在操作系统内部,称为内核数据结构

操作系统的代码和数据本身也是存在磁盘,
电脑开机的时间,其实就是把操作系统的代码和数据加载到内存中运行的时间

到此,对于进程的基本理解就已经有了
同时,上述对操作系统的管理理解部分,也是为了引出PCB这个概念的合理性
不显的那么突兀,理解顺畅

而PCB是一个操作系统学科上,对进程控制模块的一个统称,是一个抽象的概念
事实上各个操作系统有不同的命名,例如Linux对PCB的命名为task_struct
同时,进程的执行,就是把一个一个进程队列的对头拷到CPU内部执行的过程
这个就是进程的调度


2、task_struct内部的属性

(1)PID:process_id 进程id

(2)进程状态:int status;

进程状态对应着task_struct内部的一个属性值
例如:

#define RUN 0
#define SLEEP 1
#define STOP 2
....
status = RUN / SLEEP / STOP

内部的细节,有如下图表所示:

在 Linux 内核中,task_struct 结构体包含了大量的属性来描述和管理进程的状态、资源和行为。以下是一些主要的 task_struct 内部属性的表格组织:

属性描述
pid_t pid进程的唯一标识符
volatile long state进程的当前状态(运行、等待、停止等)
struct task_struct *real_parent父进程的指针
struct list_head children子进程链表
struct list_head sibling兄弟进程链表
struct mm_struct *mm进程的内存管理信息
struct files_struct *files进程打开的文件列表
struct signal_struct *signal进程的信号处理信息
struct sighand_struct *sighand进程的信号处理方法
struct nsproxy *nsproxy进程的命名空间代理
struct cred *cred进程的安全凭证信息
unsigned long flags进程的标志位,如运行在用户态还是内核态等
char comm[TASK_COMM_LEN]进程的名称
int prio进程的调度优先级
int static_prio进程的静态优先级
int normal_prio进程的普通优先级
unsigned int time_slice进程的时间片大小
unsigned int rt_priority进程的实时优先级
struct sched_entity se进程的调度实体信息
struct timer_list real_timer实时定时器,用于实时进程的调度
struct task_struct *group_leader进程组的领导者
unsigned long policy进程的调度策略
struct sched_param sched_param进程的调度参数
struct timer_list *timer进程的定时器列表
struct pid_link pids[PIDTYPE_MAX]进程的 PID 链接列表
struct user_struct *user进程的用户信息

这些属性组织在 task_struct 中,为内核提供了管理和控制进程的各种信息和能力。具体的结构和属性可能会因不同的 Linux 内核版本而有所不同。

3、内核原码

有兴趣的同学,还可以自己去查看原码,网站地址如下

The Linux Kernel Archivesicon-default.png?t=N7T8https://www.kernel.org/

  • 16
    点赞
  • 16
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

二十5画生

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值