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

操作系统-进程

进程描述

进程控制块PCB(Process Control Block)

为了方便控制管理每个程序的独立运行,在操作系统中为之配置了一种专门的数据结构,称为进程控制块。

进程实体:又称进程映像。由程序段、相关数据段和PCB三部分构成。

PCB在进程切换中的作用

系统是根据PCB来感知进程存在的。操作系统可以通过对PCB进行修改实现进程的切换

进程的定义

  • 进程是程序的一次执行
  • 进程是一个程序及其数据在处理机上顺序执行时所发生的活动
  • 进程是具有独立功能的程序在一个数据集合上运行的过程,它是系统进行资源分配和调度的一个独立单位 

进程使得作业的并发执行得以实现。

引发的问题

  • 增加了空间开销:需要为进程创建PCB
  • 增加了时间开销:需要管理、跟踪、协调进程的执行
  • 增加了控制难度

进程状态

五种状态

根据进程所拥有资源不同,划分为5种状态:

  1. 就绪状态:进程已获取到了除了处理器之外执行所需的所有资源
  2. 执行状态:进程已获取到了包括处理器在内执行所需的所有资源
  3. 阻塞状态:进程在执行过程种因等待某事件的发生而无法继续执行
  4. 创建状态:进程缺少完整PCB与运行所需资源
  5. 终止状态:进程释放所拥有资源的过程

就绪状态、执行状态、阻塞状态,称为进程的基本状态。

PCB的组织方式

不同应用可以产生很多异类进程,一个应用可以产生很多同类进程。无论是什么进程,按照它们的状态将它们组织到一起,常见的组织方式有两种:

  • 链表方式:同一状态的进程的PCB组成一个链表,多种状态的进程PCB组成多个链表,此时会产生诸如就绪链表、阻塞链表等不同链表
  • 索引表方式:所用PCB都放入同一链表,再为每种状态创建出不同的PCB索引链表

 

状态转换 

 

  • 创建完成的进程直接到达的是就绪态
  • 就绪态不可能直接进入阻塞态 
  • 进程只能是在执行时终止

挂起与激活

挂起是将进程由活动状态变为静止状态,激活是将进程由静止状态变为活动状态 

  • 静止就绪态不能直接使用CPU
  • 静止阻塞态等待的事件发生会进入静止就绪态

挂起的作用:

  • 满足终端用户的需求
  • 满足父进程的需求
  • 满足负载调节的需求

进程控制

进程创建

父子进程

进程一般是由OS内核创建,但是也允许使用一个用户进程去创建另一个进程。此时这个用户进程被称为父进程,被创建的进程称为子进程。子进程还可以再创建出更多的孙子进程,最终呈现树形结构。

子进程可以继承父进程的所有资源,且父进程不能拒绝子进程的继承权。当子进程终止时,会将其从父进程获取到的资源全部归还给父进程

父进程可以管理子进程的生命周期。父进程在终止时会将所有子进程全部终止。

在Windows种,父子进程不存在层级结构,所有进程具有同等的地位,但父进程在创建子进程时会获得子进程的句柄,可以实现对子进程的控制。 

进程创建事件

一般有三类典型事件需要创建进程:

  • 用户登录:在分时系统种,用户登录后,系统内核会为用户创建一个进程
  • 作业调度:在多道批处理系统种,当作业调度程序调度到某作业后,会将其装入内存,并由系统内核为该作业创建一个进程
  • 请求处理:当某进程在运行过程中剔除某种请求后,系统内核或主进程会创建一个相应的子进程来处理该请求

进程创建过程

进程的创建都是调用了进程创建原语完成的。进程创建原语的创建过程如下:

  1. 生成进程标识符PID,进程的唯一数字标识符
  2. 申请空白PCB
  3. 为进程分配除了CPU之外所需的一切资源
  4. 初始化PCB,填写自己和父进程PCB所需的信息
  5. 将进程写入就绪队列或静止就绪队列

进程终止

进程终止事件

典型的事件有三类:

  • 正常结束:当进程的任务执行完毕后,进程会发出一条终止指令,此时会产生终端,通知OS马上终止
  • 异常结束:进程运行过程种发生了某种异常,导致进程无法继续运行(如访问越界、非法指令、权限异常、运行超时、IO异常)
  • 外界干预:进程被外界干预终止(如用户直接终止、OS终止、父进程终止) 

进程终止过程

OS会调用进程终止原语去终止进程,进程终止的原语过程如下:

  1. 根据被终止进程的PID,找到其PCB
  2. 从PCB中读取其状态,若进程处于执行态,则立即终止执行。并置调度标志为真,标识该进程可以被重新调度
  3. 从PCB中读取其子进程PID,若该进程还有子进程,则终止其所有子进程
  4. 从PCB中读取其所拥有的全部资源,全部释放
  5. 将该进程的PCB从PCB队列或链表中移除
  6. 释放该PCB空间 

进程阻塞与唤醒

进程在执行过程中突然发生了执行条件缺失,进而暂停进程等待条件满足的事件被称为阻塞,当其具备了执行条件,从而继续执行的事件被称为唤醒。

阻塞是进程自身的一种主动行为

唤醒是相关进程调用唤醒原语,将阻塞进程唤醒,是一种被动行为

典型引发进程阻塞的事件:

  • 等待资源:在运行的过程中需要某种资源,由于系统中的该类资源已被其它进程所使用,无法分配其资源。
  • 等待IO完成:当进程启动IO操作后,如果该进程必须在该IO操作完成后才能继续执行,则会先将进程阻塞
  • 等待数据到达:对于相互合作的进程,如果一个进程专门用于处理由其它进程提供的数据,那么在其它进程提供的数据到来之前,这个进程将一直处于阻塞状态。
  • 等待任务到达:对于某些系统中,特别是在分布式系统环境中,往往会设置一些特定功能的进程,每当完成特定任务后就会把自己阻塞起来,等待新任务的到来。

进程阻塞过程:

  1. 立即暂停CPU的执行,保留当前CPU的现场
  2. 将PCB中的状态由执行态修改为阻塞态
  3. 将PCB写入到相应阻塞原因的阻塞队列
  4. 启用调度程序进行重新调度,即将CPU分配给另一就绪进程
  5. 按照新进程的PCB设置CPU的新环境

进程唤醒过程:

  1. 将该进程的PCB从 阻塞队列移除
  2. 修改PCB中的状态由阻塞变为就绪
  3. 将PCB插入到就绪队列

图片来源于网络

http://www.lryc.cn/news/585144.html

相关文章:

  • HelloKitty IP 翻红,品牌营销如何借势?
  • 性能狂飙 Gooxi 8卡5090服务器重新定义高密度算力
  • day17 力扣654.最大二叉树 力扣617.合并二叉树 力扣700.二叉搜索树中的搜索 力扣98.验证二叉搜索树
  • Excel 转 JSON by WTSolutions API 文档
  • c++STL-优先队列priority_queue和仿函数
  • CS144 lab2 tcp_receiver
  • 机器学习之线性回归(七)
  • TransUnet医学图像分割模型
  • 如何设置直播间的观看门槛,让直播间安全有效地运行?
  • 解锁48V USB-C供电潜力,慧能泰重磅推出PD3.2 DRP芯片HUSB253
  • Flutter优缺点
  • Koa+Puppeteer爬虫教程页面设计
  • 【java17】使用 Word 模板导出带替换符、动态表格和二维码的文档
  • 格式规范公文处理助手:一键排版 标题 / 正文 / 页码一键调,Word 脚本自定义
  • 专题:2025云计算与AI技术研究趋势报告|附200+份报告PDF、原数据表汇总下载
  • 关闭 GitLab 升级提示的详细方法
  • 基于gitlab 构建CICD发布到K8S 平台
  • Tomcat问题:启动脚本startup.bat中文乱码问题解决
  • 信号肽预测工具PrediSi本地化
  • 【flutter】flutter网易云信令 + im + 声网rtm从0实现通话视频文字聊天的踩坑
  • CentOS 安装 JDK+ NGINX+ Tomcat + Redis + MySQL搭建项目环境
  • 『 C++ 入门到放弃 』- 多态
  • MyBatis-Plus通用中等、大量数据分批查询和处理
  • c语言中的数组IV
  • 卸载软件总留一堆“垃圾”?这款免费神器,一键扫清注册表和文件残留!
  • Python shutil模块详解
  • GPT3/chatGPT/T5/PaLM/LLaMA/GLM主流大语言模型的原理和差异
  • 从零实现一个GPT 【React + Express】--- 【3】解析markdown,处理模型记忆
  • 【LeetCode 热题 100】146. LRU 缓存——哈希表+双向链表
  • 0102基础补充_交易演示-区块链-web3