【操作系统】进程管理——进程的概念、组成和特征(个人笔记)

学习日期:2024.6.29

内容摘要:进程的基本概念和特征、状态和转换


进程的概念

程序与进程

程序:是静态的,是存放在磁盘里的可执行文件,就是一系列的指令集合

进程(Process):是动态的,是程序的一次执行过程。

比如说,电脑里的QQ应用,是一个程序,但我们可以同时打开三次QQ,此时打开任务管理器,会看到三个腾讯QQ“应用”,这就是进程,同一个程序多次执行会对应多个进程。

进程控制块PCB

操作系统是进程的管理者,那么要如何区分这些进程?

操作系统会给每个进程分配唯一的PID(Process Identifier,进程控制符),相当于各个进程的身份证,程序一运行,系统就会自动分配给进程。进程终止后,PID会被系统回收,也可能被继续分配给新运行的程序。

操作系统要记录PID、进程所属的UID(User Identifier,用户标识符),还要记录给进程分配了哪些资源(如分配了多少内存、正在使用哪些I/O设备、网络流量使用情况等),以及进程当前的状态(就绪态、运行态、阻塞态等等)

这些信息,以及其它所有操作系统对进程进行管理工作所需的信息,都被保存在一个数据结构PCB(Process Control Block)当中,即进程控制块。

PCB是进程存在的唯一标志,当进程被创建时,操作系统为其创建PCB,当进程结束时再回收。

进程的组成

进程实体由PCB,程序段,数据段组成。

为什么不说“进程”?——因为进程是一个动态的概念,进程实体可以理解为进程在运行过程中某一瞬间的照片,反映进程在该瞬间的状态,在进程运行的过程中,进程实体是在不断变化的。

PCB是给操作系统用的,程序段和数据段是给进程自己用的。

进程是进程实体的运行过程, 是系统进行资源分配和调度的一个独立单位

一个进程被“调度”,就是说操作系统决定让这个进程上CPU运行。

进程的特征

动态性:进程是程序的一次执行过程, 是动态的产生、编号、消亡的。(进程最基本的特征)

并发性:内存中有多个进程实体,各进程可以并发执行。

独立性:进程是能独立运行、独立获得资源、独立接受调度的基本单位。

异步性:各进程按各自独立的、不可预知的速度推进,可能导致运行结果的不确定性。

结构性:每个进程都会配置一个PCB。从结构上看,进程由程序段、数据段、PCB组成。

进程的状态和状态转换(重点)

创建态:进程正在被创建时的状态,此时操作系统会为进程分配资源,初始化PCB。

就绪态:进程创建完成后的状态,处于此状态的进程已经具备运行条件,但由于没有空闲CPU,暂时不能运行。

运行态:进程正在运行时的状态,CPU会执行该进程对应的程序。当CPU空闲时,操作系统就会选择一个就绪进程运行。

阻塞态:进程运行的过程中,可能会等待某个事件的发生(如等待某种系统资源的分配,或者其它进程的响应),此时操作系统会让这个进程下CPU,进程进入阻塞态。当CPU空闲时,又会选择另一个“就绪态”进程上CPU运行。

终止态:进程可以执行exit系统调用,请求操作系统终止该进程,此时进程会进入终止态。操作系统会让该进程下CPU,并回收内存空间、PCB等资源。

进程状态的转换——“丁字裤”

运行态到阻塞态是进程主动的,但是从阻塞态到就绪态不是,因为进程能决定它等待的资源什么时候才能获得。

就绪、运行、阻塞中间三个状态是基本状态,进程的整个生命周期中,大部分时间都处于这三种基本状态。单CPU状态下,同一时刻只会有一个进程处于运行态,多核CPU的情况下可能有多个进程处于运行态。在PCB中,会有一个变量state来标识当前状态。

进程的组织

链式方式

操作系统管理一系列的队列,每个队列都会管理相应状态的PCB,就绪队列的指针指向就绪队列的PCB(通常会把优先级高的放在队头),阻塞队列的指针指向处于阻塞状态的PCB,依此类推。

有的操作系统还会根据阻塞原因的不同,划分出多个阻塞队列。

索引方式

操作系统根据进程状态的不同,建立几张索引表,持有指向各个表的指针。


 内容总结自王道计算机考研《操作系统》 和 人民邮电出版社《操作系统导论》

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

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

相关文章

GPT-5:下一代AI如何彻底改变我们的未来

GPT-5 发布前瞻:技术突破与未来展望 随着科技的飞速发展,人工智能领域不断迎来新的突破。根据最新消息,OpenAI 的首席技术官米拉穆拉蒂在一次采访中确认,GPT-5 将在一年半后发布,并描述了其从 GPT-4 到 GPT-5 的飞跃如…

Linux随记(十)

一、升级harbor v2.6.4 --> harbor-offline-installer-v2.11.0-rc3 --> v2.9.4 – 随记 漏洞信息: CVE-2023-20902timing condition in Harbor 2.6.x and below, Harbor 2.7.2 and below, Harbor 2.8.2 and below, and Harbor 1.10.17 and below allows an…

js自定义内容生成二维码,qrcodejs的使用

qrcodejs qrcodejs是基于原生js的文本转换成二维码的库&#xff0c;轻量且使用方法简单&#xff0c;它的实现原理是通过canvas将重新编码的内容绘制在页面元素上&#xff0c; 使用qrcodejs时可以选择引入它的cdn或者使用npm下载 <script type"text/javascript" …

Linux的IO易错点总结

本文主要记录IO的一些易错操作。 阻塞IO和非阻塞IO&#xff0c;一般都是针对数据读取的&#xff0c;因为write是主动行为&#xff0c;不存在阻塞这一说。 非阻塞式IO&#xff0c;一般都要配合while轮询来读取数据。 IO多路复用 当只检测一路IO的时候&#xff0c;和普通IO的作…

软考满分范文“论模型驱动架构设计方法及其应用”,软考高级,系统架构设计师

论文真题 模型驱动架构设计是一种用于应用系统开发的软件设计方法,以模型构造、模型转换和精化为核心,提供了一套软件设计的指导规范。在模型驱动架构环境下,通过创建出机器可读和高度抽象的模型实现对不同问题域的描述,这些模型独立于实现技术,以标准化的方式储存,利用…

linux unzip指令

在Linux中&#xff0c;unzip 命令通常用于解压 .zip 文件。默认情况下&#xff0c;unzip 命令会输出解压过程中的一些信息&#xff0c;但不会生成一个完整的报告。但是&#xff0c;你可以通过重定向输出和结合其他命令来生成一个更详细的报告。 以下是一些方法来使用 unzip 命…

鸿蒙开发Ability Kit(程序框架服务):【向用户申请授权】

向用户申请授权 当应用需要访问用户的隐私信息或使用系统能力时&#xff0c;例如获取位置信息、访问日历、使用相机拍摄照片或录制视频等&#xff0c;应该向用户请求授权&#xff0c;这部分权限是user_grant权限。 当应用申请user_grant权限时&#xff0c;需要完成以下步骤&a…

[AIGC] 深入理解 Crontab:定时任务的艺术

在 Unix 或者 Linux 环境下&#xff0c;有一种被广泛使用的工具可以帮助我们自动执行定时任务&#xff0c;那就是 crontab。本篇文章将带你详细了解 crontab 的相关知识。 文章目录 1. 什么是 Crontab2. Crontab 的结构3. 如何使用 Crontab4. 注意事项 相关疑问1. crontab的系统…

6.The hardest part about learing hard things(学一件难的事,难在哪里)

I’ve been recording a lot of podcast interviews for my upcoming book, Ultralearning.One of the reurring themes I’ve noticed in our conversations is that how people feel about learning is the overwhelming cause of the results they experience. 我为我的新书…

IOS越狱源集合(2024)

常用源 https://wwg135.github.io https://huayuarc.cn/ https://cydia.akemi.ai/ https://laileld.github.io/repo https://themepro.yourepo.com/ https://apt.geometricsoftware.se/ https://repo.anthopak.dev https://www.yourepo.com/ https://julio.hackyouriphone.org…

[leetcode]beautiful-arrangement. 优美的排列

. - 力扣&#xff08;LeetCode&#xff09; class Solution { public:vector<vector<int>> match;vector<int> vis;int num;void backtrack(int index, int n) {if (index n 1) {num;return;}for (auto &x : match[index]) {if (!vis[x]) {vis[x] tru…

python工程打包成exe

1. 使用PyInstaller PyInstaller是打包Python程序最流行的工具之一&#xff0c;它可以生成独立可执行的程序。 参数及其作用&#xff1a; 打包类型&#xff1a; - -F, --onefile&#xff1a;生成单个可执行文件。 - -D, --onedir&#xff1a;生成包含多个文件的可执行目录&am…

深入解析高斯过程:数学理论、重要概念和直观可视化全解

与其他算法相比&#xff0c;高斯过程不那么流行&#xff0c;但是如果你只有少量的数据&#xff0c;那么可以首先高斯过程。在这篇文章中&#xff0c;我将详细介绍高斯过程。并可视化和Python实现来解释高斯过程的数学理论。 多元高斯分布 多元高斯分布是理解高斯过程所必须的概…

flink使用StatementSet降低资源浪费

背景 项目中有很多ods层&#xff08;mysql 通过cannal&#xff09;kafka&#xff0c;需要对这些ods kakfa做一些etl操作后写入下一层的kafka&#xff08;dwd层&#xff09;。 一开始采用的是executeSql方式来执行每个ods→dwd层操作&#xff0c;即类似&#xff1a; def main(…

MySQL影院订票系统

DDL -- 影院表 CREATE TABLE Theaters (TheaterID INT PRIMARY KEY,Name VARCHAR(100),Address VARCHAR(200) );-- 电影表 CREATE TABLE Movies (MovieID INT PRIMARY KEY,Title VARCHAR(100),ReleaseDate DATE );-- 放映场次表 CREATE TABLE Showings (ShowingID INT PRIMARY…

观察者模式在金融业务中的应用及其框架实现

引言 观察者模式&#xff08;Observer Pattern&#xff09;是一种行为设计模式&#xff0c;它定义了一种一对多的依赖关系&#xff0c;使得多个观察者对象同时监听某一个主题对象。当这个主题对象发生变化时&#xff0c;会通知所有观察者对象&#xff0c;使它们能够自动更新。…

MISRA C

介绍 MISRA C 是由汽车产业软件可靠性协会&#xff08;Motor Industry Software Reliability Association&#xff09;提出的 C 语言编程标准&#xff0c;可提高嵌入式系统软件的安全性和可靠性。这些指南由汽车制造商、零部件供应商和工程咨询公司合作的汽车工业软件可靠性协…

基于STM32的智能农业环境监控系统

目录 引言环境准备智能农业环境监控系统基础代码实现&#xff1a;实现智能农业环境监控系统 4.1 数据采集模块4.2 数据处理与分析4.3 控制系统实现4.4 用户界面与数据可视化应用场景&#xff1a;农业环境管理与优化问题解决方案与优化收尾与总结 1. 引言 智能农业环境监控系…

网络运维管理行业的痛点和难点

网络运维管理是确保企业网络稳定、高效运行的关键环节&#xff0c;然而在实际操作中&#xff0c;该行业面临着诸多痛点和难点。这些挑战不仅影响了运维工作的效率&#xff0c;还可能对企业的正常运营造成潜在威胁。本文将深入探讨网络运维管理行业的痛点和难点&#xff0c;以期…

博客一周年:回首与展望

博客一周年&#xff1a;回首与展望 前言 时光荏苒&#xff0c;转眼间我的博客已经陪伴我走过了整整一年的时光。在这一年里&#xff0c;我见证了博客从无到有的过程&#xff0c;也见证了它逐渐成长的点点滴滴。今天&#xff0c;我想借此机会回顾一下这一年的经历&#xff0c;…