当前位置: 首页 > news >正文

【复习408】操作系统进程描述与控制详解

文章目录

    • 一、进程的基本概念
      • 1.1 进程定义
      • 1.2 进程与程序的区别
    • 二、进程的描述:进程控制块(PCB)
      • 2.1 PCB的概念与作用
      • 2.2 PCB的主要内容
    • 三、进程状态与转换
      • 3.1 基本状态模型
        • 3.1.1 三态模型
        • 3.1.2 五态模型
        • 3.1.3 七态模型
      • 3.2 状态转换图
    • 四、进程控制操作
      • 4.1 进程创建与终止
        • 4.1.1 fork()系统调用
        • 4.1.2 exec()系列系统调用
        • 4.1.3 wait()和waitpid()系统调用
        • 4.1.4 exit()和\_exit()系统调用
    • 五、进程调度
      • 5.1 调度的基本概念
      • 5.2 常见调度算法
        • 5.2.1 先来先服务(FCFS)
        • 5.2.2 短任务优先(SJF)
        • 5.2.3 时间片轮转(RR)
        • 5.2.4 多级反馈队列调度(MLFQ)
      • 5.3 Linux调度策略
    • 六、进程间通信(IPC)
      • 6.1 IPC的基本概念
      • 6.2 主要IPC机制
    • 七、进程同步
      • 7.1 同步的基本概念
      • 7.2 信号量机制
        • 7.2.1 PV操作
        • 7.2.2 信号量类型
      • 7.3 经典同步问题
    • 八、进程死锁
      • 8.1 死锁的基本概念
      • 8.2 死锁的四个必要条件
      • 8.3 死锁处理策略
        • 8.3.1 预防死锁
        • 8.3.2 避免死锁
        • 8.3.3 检测和解除死锁
      • 8.4 死锁检测算法
    • 总结

一、进程的基本概念

1.1 进程定义

进程是程序在数据集上的一次执行过程,是操作系统进行资源分配和调度的最小单位。它包含了程序代码、相关数据以及内核为该进程分配的资源信息。每个进程都有自己的地址空间、内存空间和资源,具有动态性和并发性特点。

1.2 进程与程序的区别

  • 程序:静态概念,是一系列指令的集合,存储在外部介质上
  • 进程:动态概念,是程序的执行过程,具有生命周期,包括创建、执行和终止

二、进程的描述:进程控制块(PCB)

2.1 PCB的概念与作用

进程控制块(Process Control Block, PCB),又称进程描述符,是操作系统内核用于记录进程相关信息的关键数据结构。每个进程都有一个唯一的PCB,操作系统通过PCB来管理和控制进程。

在Linux系统中,PCB通过task_struct结构体实现,包含了描述进程状态的全部信息。

2.2 PCB的主要内容

PCB包含但不仅限于以下信息:

类别内容描述具体信息
进程标识符唯一标识进程PID、PPID(父进程ID)
处理器状态CPU上下文寄存器集合、程序计数器PC
调度信息调度相关的参数优先级、时间片、调度策略
资源信息分配的资源内存、文件描述符、信号量
状态信息当前进程状态就绪、运行、阻塞等
链接信息队列指针同步和通信机制指针

三、进程状态与转换

3.1 基本状态模型

3.1.1 三态模型
状态描述转换条件
运行态(Running)进程正在CPU上执行时间片用完 → 就绪态等待资源 → 阻塞态
就绪态(Ready)进程具备运行条件,等待分配CPUCPU空闲 → 运行态
阻塞态(Blocked/Waiting)进程等待某个事件发生事件发生 → 就绪态
3.1.2 五态模型

在三态模型基础上增加了新建态和终止态:

状态描述
新建态(New)进程刚被创建,尚未进入就绪队列
终止态(Terminated)进程完成任务或异常终止,等待被清除
3.1.3 七态模型

在五态模型基础上增加了挂起就绪态和挂起阻塞态,用于内存不足时的内存管理:

状态描述
挂起就绪态(Ready Suspended)进程在外存中,具备运行条件
挂起阻塞态(Blocked Suspended)进程在外存中,正在等待某事件

3.2 状态转换图

新建态 → 就绪态 → 运行态 → {终止态或阻塞态}↗          ↕{时间片用完、更高优先级进程到达}

四、进程控制操作

4.1 进程创建与终止

4.1.1 fork()系统调用

fork()是用于创建新进程的系统调用,其定义在<unistd.h>头文件中:

pid_t fork(void);
  • 返回值
    • 在父进程中返回子进程的PID
    • 在子进程中返回0
    • 失败时返回-1

fork()创建的子进程是父进程的几乎完全复制,包括:

  • 栈、数据段、堆和执行文本段的拷贝
  • 相同的程序计数器PC和寄存器集合
  • 相同的虚拟地址空间映射
  • 复制的文件描述符和信号处理动作
4.1.2 exec()系列系统调用

exec()用于加载并运行新程序,取代原调用进程的数据段、代码段和堆栈段:

int execl(const char *path, const char *arg, ...);
int execv(const char *path, char *const argv[]);
int execle(const char *path, const char *arg, ..., char *const envp[]);
4.1.3 wait()和waitpid()系统调用

wait()让父进程等待子进程结束,获取子进程的退出状态:

pid_t wait(int *status);
pid_t waitpid(pid_t pid, int *status, int options);
4.1.4 exit()和_exit()系统调用

exit()用于终止当前进程,释放占用的资源:

void exit(int status);
void _exit(int status);

五、进程调度

5.1 调度的基本概念

进程调度是操作系统的核心功能之一,决定了进程如何以及何时获得CPU资源。调度目标是在公平性、响应时间和吞吐量之间取得平衡。

5.2 常见调度算法

5.2.1 先来先服务(FCFS)

按照进程到达就绪队列的顺序调度,实现简单但可能效率不高。

5.2.2 短任务优先(SJF)

优先调度预计执行时间短的进程,可降低平均等待时间。

5.2.3 时间片轮转(RR)

给每个进程分配一个时间片,轮流执行。时间片过小增加上下文切换开销,时间片过大则退化为FCFS调度。

5.2.4 多级反馈队列调度(MLFQ)

最复杂也是最灵活的调度算法,结合了多种算法的优点。包含多个优先级不同的就绪队列,每个队列采用不同的时间片。进程在队列间动态移动,以平衡不同类型的进程需求。

5.3 Linux调度策略

Linux使用CFS(完全公平调度器),目标是提供公平的CPU分配,确保所有可运行进程获得近似相等的CPU时间。

六、进程间通信(IPC)

6.1 IPC的基本概念

进程间通信机制允许不同进程之间交换信息和协同工作。不同IPC机制在效率、功能和适用场景上各有特点。

6.2 主要IPC机制

IPC机制特点适用场景
管道(Pipe)单向通信,只能在有亲缘关系的进程间使用简单数据传输
命名管道(Named Pipe)允许无亲缘关系的进程通信文件系统命名的进程间通信
消息队列(Message Queue)交换结构化消息,大小有限制需要消息队列的场景
共享内存(Shared Memory)最快捷的通信方式,多个进程访问同一块内存区域高效数据交换
信号量(Semaphore)用于同步和互斥的计数器,配合PV操作使用进程同步和互斥控制
套接字(Socket)可用于同一台机器上进程间的通信,也可用于网络进程间通信网络通信和本地通信

七、进程同步

7.1 同步的基本概念

进程同步机制用于协调相关进程的执行顺序,确保它们按照正确的顺序访问共享资源。

7.2 信号量机制

信号量是解决进程同步与互斥的核心机制,通过P、V操作控制资源访问。

7.2.1 PV操作

PV操作由两个不可中断的原语组成:

P(S): S = S - 1if (S < 0) 阻塞进程,等待信号量V(S):S = S + 1if (S <= 0) 唤醒等待信号量的进程
7.2.2 信号量类型
信号量类型描述应用场景
互斥信号量用于进程互斥访问临界资源互斥控制
同步信号量用于进程同步进程同步

7.3 经典同步问题

经典的生产者-消费者问题、读者-写者问题等都可以通过信号量机制得到有效解决。

八、进程死锁

8.1 死锁的基本概念

死锁是指多个进程因竞争资源而造成互相等待的现象,每个进程都在等待某个被其他进程占有的资源[83†]。

8.2 死锁的四个必要条件

条件描述说明
互斥条件只有互斥使用的资源才会导致死锁资源不能共享
持有并等待条件进程持有资源的同时等待其他资源不释放已占用资源
不可剥夺条件资源不能从进程处强行剥夺资源只能由进程主动释放
环路等待条件进程间形成循环等待资源的环路资源循环等待

8.3 死锁处理策略

8.3.1 预防死锁

通过破坏产生死锁的必要条件来预防死锁:

  • 禁止进程持有资源的同时请求其他资源
  • 允许强制剥夺进程占有的资源
  • 建立资源分级使用规则
8.3.2 避免死锁

系统对进程发出的资源申请进行动态检查,预测资源分配后的安全性,如果安全则分配资源。

8.3.3 检测和解除死锁

定期检测系统状态,使用算法(如银行家算法)发现死锁并终止部分进程以解除死锁。

8.4 死锁检测算法

常见的死锁检测算法包括资源分配图法和深度优先搜索法,通过检测资源分配图中是否存在环路来判断系统中是否存在死锁。

总结

进程的描述与控制是操作系统的核心功能之一,涉及进程的基本概念、进程控制块、进程状态转换、进程控制操作、进程调度、进程间通信、进程同步以及进程死锁等多个方面。深入理解这些概念和机制,有助于更好地设计和优化多进程应用程序,提高系统的性能和可靠性。

http://www.dtcms.com/a/605155.html

相关文章:

  • 实战1: worldskills3.vmem
  • redis-manger管理平台
  • 基于SpringBoot与Vue的海外理财系统设计与实现
  • 测开学习DAY28
  • android短视频sdk,灵活集成,快速上线!
  • Android AIDL 的详细讲解和实践指南
  • 制作网站首页教案网站建设外包兼职平台
  • 荆门网站制作网站建设ktv
  • 适合实现多生产者单消费者(MPSC)队列的常见数据结构及其优缺点
  • 【高级机器学习】5. Dictionary learning and Non-negative matrix factorisation
  • PPTX 格式的底层数据结构
  • 前端错误监控与上报:Sentry 接入与自定义告警规则
  • 27.Telnet
  • 多级缓存体系与热点对抗术--速度是用户体验的王道,而缓存是提升速度的银弹
  • CPU 缓存 高并发探索
  • 郑州三牛网站建设企业邮箱号码从哪里查
  • 《C++在量化、KV缓存与推理引擎的深耕》
  • php网站建立教程wordpress 合并js
  • [MSSQL] 读写分离(主从备份)
  • 潮州市住房和城乡建设局网站石英手表网站
  • Spring Boot 应用的云原生 Docker 化部署实践指南
  • tekla 使用笔记 切管 分割指定长度的管
  • 算法(二)滑动窗口
  • 《从根上理解MySQL》第一章学习笔记
  • C++笔记 详解虚基表跟虚函数表
  • 【开源-AgentRL】创新强化学习 多项任务超闭源模型
  • 渝水区城乡建设局网站有哪些wordpress博客
  • 龙岩网站推广软件wordpress文章图片粘贴固定大小
  • 物联网运维中的多模态数据融合与智能决策优化技术
  • lora学习