操作系统进程管理

本文详细介绍了操作系统中的进程管理,包括进程的概念、PCB、进程创建与撤销、原语操作、线程、临界区和锁、同步与P-V操作、经典同步问题、Linux同步机制、进程通信以及死锁等内容。重点讨论了进程的生命周期、状态转换、进程控制原语以及进程间的同步与通信策略。

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

1. 进程的概念

为什么引入进程?
由于并发运行的程序,操作系统调用每个程序过程不确定导致程序运行结果不可再现(程序运行被干扰),所以要对操作系统调用程序运行过程施加相互制约,由此要引出进程的概念。

运行的程序称为进程,进程是描述和管理程序的“运行过程”。
进程是动态的:程序的一次执行过程;程序是静态的:一组指令的有序集合。


Linux上进程状态
在这里插入图片描述
由fork()初建的进程是处于就绪状态的。

1.1 进程的描述

操作系统要根据进程的状态的信息对其进行管理。进程的状态信息存储在进程控制块(Process Control Block,PCB)这个数据结构中(struct),其描述了进程状态、资源、和与相关进程关系的数据结构。PCB是进程的标志:创建进程时创建PCB;进程撤销后PCB同时撤销。
在这里插入图片描述
PCB一般包含:

name(ID):进程名称(标识符)
status:状态
next:指向下一个PCB的指针
start addr:程序地址
priority:优先级
cpu_status:现场保留区(堆栈)
comm_info:进程通信
process_family:家族
own_resource:资源

LinuxPCB信息:

Task_struct{
   //linux/sched.h 
	Volatile long state;
	Long counter;//counter:进程还可运行tick数量,减至0后进入就绪。
	Long priority;
	Unsigned long signals;//pending sigs 信号处理函数的入口。
	Unsigned long blocked;//masked sigs 阻塞的信号
	int pid,pgrp,uid,euid,gid,egid;
	struct linux_binfmt;
	struct task_struct p_opptr;//ptr to original parent(原始父进程)
	struct struct task_struct p_pptr;//ptr to immediate parent(父进程)
	task_struct p_cptr;//ptr to most recent child(最新子进程)
	struct task_struct p ysptr;//ptr to following sibling(新兄弟)
	struct task_struct p_osptr;//ptr to previous sibling(老兄弟)
	struct task_struct*next task;//in process list 
	struct task_struct*prev_task;//in process list 
	struct task struct*next run;//in ready queue 
	struct task_struct*prev_run;//in ready queue

1.2 进程的切换

进程的上下文(Context):进程运行环境,主要指CPU环境(各个寄存器的值)。
进程切换过程::换入进程的上下文进入CPU(从栈上来);换出进程的上下文离开CPU(到栈上去)。

2. 进程控制

2.1 进程创建

创建进程的过程:

  • 创建一个空白PCB
  • 获得并赋予进程标
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

是浩浩子

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

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

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

打赏作者

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

抵扣说明:

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

余额充值