操作系统之进程四要素

本文详细介绍了操作系统中进程的四个核心要素:程序、系统堆栈、task_struct数据结构和独立的用户空间堆栈。强调了task_struct在进程调度中的重要性,并探讨了进程的睡眠状态,包括可中断和不可中断的区别。最后,阐述了进程之间的树形组织、查找进程的杂凑表方法以及线性队列的组织方式,展示了进程在系统中的动态交互。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

进程所具备的条件

一般来说,linux系统中的进程都具备下列诸元素:
(1)有一段程序供其执行,即使是和其他进程共用;
(2)有进程专用的系统堆栈空间;
(3)有task_struct数据结构,也就是进程控制块。有了这个数据结构,进程才能成为内核调度的一个基本单位,从而接受内核的调度。但同时,该数据结构也记录着进程所占用的各项资源;
(4)有独立的存储空间,即用户空间堆栈。

这四条都是必要条件,缺一不可,否则就只能称作是线程了。如果完全没有用户空间,就称作是“内核线程”;而共享用户空间就称作是“用户线程”。也统称线程。

这是内核层面的线程,与用户空间里实现的线程是完全不同的。参考操作系统之用户空间和内核空间实现线程

另外,在linux系统中“进程”和“任务”是同一个意思,主要是因为linu想源自Unix和i376系统结构。而Unix中的进程在Intel的技术资料中则称为“任务”。

task_struct与用户空间堆栈的联系

前面讲到,每个进程都有一个task_struct数据结构和一片用作系统空间堆栈的存储空间。这两者缺一不可,又有紧密的联系,所以在物理存储空间也连在一起。内核为每个进程分配一个task_struct结构时,实际上是分配两个连续的物理页面(共8192字节),如图:
这里写图片描述
系统堆栈的空间不像用户空间堆栈那样可以在运行时动态地扩展,而是静态的确定了的。所以,在中断服务程序、内核软中断服务程序以及其他设备驱动程序的设计中,注意不能让这些函数嵌套太深。同时也不宜使用太多、太大的局部变量。这也是为什么决定了内核中的一些宏操作的定义。</

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值