操作系统 —— 进程篇

news2025/1/12 20:08:45

文章目录

        • 进程的概念
        • 程序的概念
        • 进程控制块 PCB
        • 进程的组成
        • 进程状态
          • 进程状态转换
        • 进程队列
        • 进程的组织
        • 进程控制
          • 内核的两大功能
          • 进程创建
          • 进程终止
          • 进程阻塞与唤醒
          • 进程切换
        • 进程通信

进程的概念

进程是操作系统中的基本概念,用于描述正在运行的程序实例。

它是计算机系统中一个程序或任务的执行过程,每个进程都是独立的实体,相互之间不受影响。

进程具有以下特征:

  • 动态性

  • 并发性

  • 独立性

  • 异步性

  • 结构性

程序的概念

程序是静态的,存储在磁盘上的可执行文件,是一系列指令的集合;用于解决特定问题或实现特定功能的计算机软件。

进程和程序之间是多对多的关系,一个进程可以对应多个线程,而一个程序可以对应一个或多个进程。

进程控制块 PCB

进程控制块 PCB(Process Control Block) 是在创建进程时,系统给每个进程分配的管理者,是进程存在的唯一标识。

它包含了操作系统维护进程所需的所有信息,用于跟踪和管理每个进程的状态、上下文、资源分配等关键信息。

PCB 由下列四个部分组成:

1. 进程标识信息:包括进程ID(PID)和父进程ID,用于唯一标识一个进程以及确定其父进程。

2. 进程控制和管理信息: 包括进程的状态(就绪、运行、阻塞等)、调度优先级、时间片、进程的状态改变原因等。

3. 资源分配清单:记录进程所分配的资源,例如:内存、磁盘、处理器等。

4. 处理机状态信息: 记录了进程的寄存器内容,程序计数器(PC)和堆栈指针等,用于保存和恢复进程的执行上下文。

进程的组成

每个独立的进程主要由三个部分组成,分别是:

  • PCB

  • 程序段: 指进程执行的程序代码,它包括了程序的指令集合。

  • 数据段:指进程所使用的数据,包括程序执行过程中需要处理的数据、变量、常量等。保存了程序运行时所需的各种数据信息。

其中 PCB 是供操作系统使用的,程序段和数据段是供进程使用的。

进程状态

在操作系统中,进程可以处于不同的状态,这些状态描述了进程在其生命周期中的不同情况和条件,主要有 5 中进程状态,分别是:

1. 创建态:进程刚刚被创建,正在进行初始化。

2. 就绪态:除 CPU 外的资源都已经分配完毕,等待系统调用执行。

3. 运行态:进程正在 CPU 上执行指令,处于运行状态。

4. 阻塞态(等待态): 进程因为某些事件而暂时停止执行,等待特定的事件发生,如等待输入输出完成、等待某个信号等。处于阻塞态的进程不会消耗系统的 CPU 资源,但会占用一定的系统内存资源。

5. 结束态:进程执行完毕或被操作系统终止,释放其占用的系统资源。

进程状态转换

在进程的整个生命周期中,主要会处于就绪态、运行态以及阻塞态这三种状态。

基于单 CPU 的情况下,同一时刻只会有一个进程处于运行状态,由此便可以引出进程之间的转换概念。

在这里插入图片描述

状态转换:

  • 创建态 ——> 就绪态:一个新创建的进程会进入就绪状态等待调度器分配 CPU 时间片。

  • 就绪态 ——> 运行态:系统调用分配时间片后,进入运行状态。

  • 运行态 ——> 就绪态:系统分配的时间片用完后,重新进入就绪状态等待分配时间片。

  • 运行态 ——> 阻塞态:运行状态的进程可能因为等待某个事件而转入阻塞状态。(主动操作)

  • 阻塞态 ——> 就绪态:系统给处于阻塞状态的进程分配了所需资源,重新进入就绪态。(被动操作)

  • 运行态 ——> 终止态:进行运行完毕或者出现异常,释放资源,结束进程。

进程队列

进程队列是指在操作系统中,相同状态的进程所形成的组织,称为:队列。

进程队列是操作系统实现多道程序设计和进程调度的重要工具,用于存储和组织系统中的各个进程,以便操作系统能够有效地管理它们。

主要的进程队列有以下几种类型:

1. 就绪队列:存放所有已经准备好运行但尚未得到 CPU 执行的进程。根据优先级,操作系统的调度程序会从这个队列中选择一个进程,分配 CPU 时间片,使其进入运行状态。

2. 阻塞队列 :存放因为等待某个事件发生而暂时停止执行的进程。例如:输入输出、资源分配等事件完成。阻塞队列也可以划分为更为详细的队列,例如:等待摄像头阻塞队列,等待磁盘阻塞队列等

3. 完成队列:存放已经执行完成的进程的队列。进程完成后,其 PCB 可能会被移至此队列等待释放资源或其他操作。

队列远远不止提到的这几种,根据划分的形式、定义不同,可以衍生出各种队列。

进程的组织

在一个操作系统中,每一个进程都会拥有一个唯一的 PCB,大量的 PCB 由此便产生了对进程的组织方式。

常用的组织方式有三种:

1. 线性方式:将所有的 PCB 以线性结构的形式组织在一张表中,通常,这张表可以是一个数组或链表,其中存储了所有进程的 PCB 信息。

2. 链接方式

链接方式就是分为各种各样的指针队列,以链表的形式进行索引。

  • 执行指针:指向当前处于运行状态的进程。
  • 就绪队列指定:指向当前处于就绪态的进程。

3. 索引方式:根据不同的状态,建立索引表,访问速度快。例如:就绪索引表、阻塞索引表。

进程控制

进程控制指的是操作系统对进程的监控、调度、协调和管理,以确保系统中的多个进程能够有效、安全、有序地运行。它涵盖了对进程的创建、调度、状态转换、资源分配、终止等方面的控制和管理。

从创建进程到终止进程,这期间会执行多个原子性操作,确保进程的安全、完整。

内核的两大功能

支撑功能

  • 中断处理
  • 时钟管理
  • 原语操作

资源管理功能

  • 进程管理
  • 存储器管理
  • 设备管理
进程创建

在创建进程阶段,操作系统会进行原语创建,主要包含以下几个操作:

  1. 申请 PCB;
  2. 为进程分配所需资源(CPU 除外);
  3. 初始化 PCB;
  4. 由创建态 ——> 就绪态。

引起进程创建的事件:

  1. 作业调度:多道操作系统中,当作业放入内存时,会为其建立一个进程。
  2. 交互登录:分时系统中,用户登录成功时。
  3. 服务请求:当操作系统为某个作业提供某项服务时。
  4. 程序执行:提交一个新的程序进行执行时。
进程终止

进程终止时,会撤销针对这个进程的原语,主要包含以下几个操作:

  • 找到 PCB;
  • 终止其所属的子进程;
  • 释放资源或归还给父进程;
  • 删除 PCB;
  • 由运行态 ——> 终止态。

引起进程删除的事件:

  1. 正常结束
  2. 异常结束
  3. 外界干预
进程阻塞与唤醒

阻塞

在进程产生阻塞的阶段,主要包含以下几个操作:

  • 找到对应 PCB;
  • 保护进程运行现场,挂起;
  • 进入阻塞队列;
  • 由运行态 ——> 阻塞态。

引起进程阻塞的事件:

  1. 等待系统分配某种资源
  2. 依赖其它进程的返回结果

唤醒

在进程唤醒的阶段,主要包含以下几个操作:

  • 找到在等待队列中的 PCB;
  • 进入就绪队列;
  • 由阻塞态 ——> 就绪态。

引起进程唤醒的事件:

  1. 系统为等待队列中的进程分配了所需资源
  2. 依赖的进程结果已经返回

进程阻塞和唤醒往往都是成对出现的,谁阻塞谁唤醒,举例说明:当前摄像头正在被其它进程占用,导致无法运行,那么等摄像头空闲时,该进程将会被唤醒。

进程切换

进程切换顾名思义就是在进程的几种状态之间进行转换,主要包含以下几个操作:

  • 保存处理机上下文;
  • 更新当前 PCB 信息;
  • 将当前 PCB 切换到对应状态;
  • 选择另一个进程执行,更新其 PCB 信息;
  • 更新内存管理的数据结构;
  • 恢复处理机上下文。

引起进程切换的事件:

  1. 系统所分配的时间片用完了;
  2. 阻塞;
  3. 当前程序运行完毕;
  4. 优先级更高的进程进入了队列;
  5. 程序出错。
进程通信

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1074765.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

GG-Net: 超声图像中乳腺病变分割的全局指导网络

ATTransUNet 期刊分析摘要贡献方法整体框架1. Global Guidance Block2. Spatial-wise Global Guidance Block3. Channel-wise Global Guidance Block4. Breast Lesion Boundary Detection Module 实验1. 对比实验2. 消融实验2.1 Ablation Analysis of our GG-Net2.2 Ablation A…

maven_修改项目名_修改模块名_复制模块_导入模块

修改模块名 1、删除.idea和.iml 2、修改gav(记得修改子模块) 复制模块名&修改模块名 1、复制文件并修改artifactId

(二)Web服务器之Linux多进程

一、基础概念 Linux操作系统一般由以下四个主要部分组成:内核、shell、文件系统和应用程序 。 内核(Kernel):是操作系统的核心部分,负责管理系统的硬件资源、进程管理、内存管理、文件系统等。它直接与硬件交互&…

Java中的 try-finally 代码块的题目

class Test4 {int i 1;public static void main(String[] args) {System.out.println("i的值:" new Test4().test());}int test() {try {// 当 try 代码块执行 return 语句时,返回值已经被确定并保存下来,等待方法结束后返回。尽…

网络原理必知会

前言: 网络初始:对于网络有一个直观的大体的认识 网络编程:让我们真正通过代码感受网络通信程序 网络原理:进一步的理解网络是如何工作的,以理论为主,很多比较抽象的东西,同时这里也包含大量的面…

ssti 前置学习

python venv环境 可以把它想象成一个容器,该容器供你用来存放你的Python脚本以及安装各种Python第三方模块,容器里的环境和本机是完全分开的 创建venv环境安装flask #apt install python3.10-venv #cd /opt #python3 -m venv flask1 #cd /opt 选…

1.1了解python_python量化实用版教程(初级)

Python 特点 Python 安装和使用的编译器选择不展开。 Python 是一种高级编程语言,具有以下特点: - 简单易学:Python 语法简单,易于学习和理解。 - 开放源代码:Python 是开源的,可以免费使用&#…

实验1机器学习之线性回归实验

一、实验目的: (1)理解一元线性回归和多元线性回归的数学原理,能够利用sklearn中相关库解决现实世界中的各类回归问题; (2)掌握利用matplotlib对一元线性回归模型进行可视化的方法&#xff0c…

操作系统 OS

本文章是学习《操作系统》慕课版 和 王道《2024年 操作系统 考研复习指导》后所做的笔记,其中一些图片来源于学习资料。 目录 概念(定义) 目标 方便性 有效性 可扩充性 开放性 作用 OS 作为用户与计算机硬件系统之间的接口 — 人机交…

基于WTMM算法的图像多重分形谱计算matlab仿真

目录 1.算法运行效果图预览 2.算法运行软件版本 3.部分核心程序 4.算法理论概述 4.1、WTMM算法概述 4.2、WTMM算法原理 4.2.1 二维小波变换 4.2.2 模极大值检测 4.2.3 多重分形谱计算 5.算法完整程序工程 1.算法运行效果图预览 2.算法运行软件版本 matlab2022a 3.部…

MinGW的安装和使用

以下内容源于网络资源的学习与整理,如有侵权请告知删除。 参考博客 1、如何在Windows上使用GCC编译器? 2、MinGW安装和使用-腾讯云开发者社区-腾讯云 一、MinGW的简介 GCC 官网提供的 GCC 编译器是无法直接安装到 Windows 平台上的,如果我们…

React 状态管理 - Mobx 入门(上)

Mobx是另一款优秀的状态管理方案 【让我们未来多一种状态管理选型】 响应式状态管理工具 扩展学习资料 名称 链接 备注 mobx 文档 1. MobX 介绍 MobX 中文文档 mobx https://medium.com/Zwenza/how-to-persist-your-mobx-state-4b48b3834a41 英文 Mobx核心概念 M…

编译器优化等级对程序性能的影响

文章目录 前言代码示例性能差异探究原因附录 前言 GCC 有 -O0、-O1、-O2、-O3 四级优化等级&#xff0c;你知道它们对程序性能有多少影响吗&#xff1f;知道性能差异产生的根本原因是什么吗&#xff1f;今天就和大家一起研究下。 代码示例 combine4.c #include <stdio.h…

用什么工具来画UML?

2023年10月9日&#xff0c;周一晚上 目录 我的决定 关于rational rose UML工具有哪些 相关资料 我的决定 我决定用plantUML、draw.io或starUML就可以了 其实没必要在意工具&#xff0c; 重要的是能把图画出来、把图画好画规范&#xff0c; 重要的是知道怎么去画图、把意…

linux,write:xxx has messages disabled 与 Ubuntu多用户同时登录的问题 ubuntu 20.04

write&#xff1a;xxx has messages disabled 问题 被这问题折磨了好久&#xff0c;搜都搜不到&#xff0c;还是灵机一动想到的。 很多 帖子说&#xff0c;要使用 mesg y用了还是没有用&#xff0c;后面我登录了很多用户&#xff0c;发现只有root用户可以给别的用户使用write…

【深度学习实验】卷积神经网络(八):使用深度残差神经网络ResNet完成图片多分类任务

一、实验介绍 本实验实现了实现深度残差神经网络ResNet&#xff0c;并基于此完成图像分类任务。 残差网络&#xff08;ResNet&#xff09;是一种深度神经网络架构&#xff0c;用于解决深层网络训练过程中的梯度消失和梯度爆炸问题。通过引入残差连接&#xff08;residual conne…

java实验(头歌)-Java类和对象之访问限制

/** 任务&#xff1a;实现图书类&#xff0c;该类包含了图书的基本属性和信息。类名为&#xff1a;Book */ // 请在下面的Begin-End之间按照注释中给出的提示编写正确的代码 /********** Begin **********/ public class Book { // 定义四个私有变量 // 图书名称&#xff08;…

近期分享学习心得3

1、全屏组件封装 先看之前大屏端的监控部分全屏代码 整块全屏代码 常规流是下面这种 //进入全屏 function full(ele) {//if (ele.requestFullscreen) {// ele.requestFullscreen();//} else if (ele.mozRequestFullScreen) {// ele.mozRequestFullScreen();//} el…

黑马JVM总结(二十九)

&#xff08;1&#xff09;语法糖-重写桥接 &#xff08;2&#xff09;语法糖-匿名内部类 &#xff08;3&#xff09;类加载-加载 类加载可以分为3个阶段&#xff0c;加载、连接、初始化 我们知道java类编译成字节码以后&#xff0c;运行呢需要类加载器把类的字节码加载到方法…

行业追踪,2023-10-09

自动复盘 2023-10-09 凡所有相&#xff0c;皆是虚妄。若见诸相非相&#xff0c;即见如来。 k 线图是最好的老师&#xff0c;每天持续发布板块的rps排名&#xff0c;追踪板块&#xff0c;板块来开仓&#xff0c;板块去清仓&#xff0c;丢弃自以为是的想法&#xff0c;板块去留让…