进程与线程(进程)

进程:

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

PID:当进程被创建时,操作系统会为该进程分配一个唯一的、不重复的“身份证号”

组成:

PCB(进程控制块):

【给操作系统用的】

  • 基本的进程描述信息,可以让操作系统区分各个进程:记录PID、进程所属用户(UID)
  • 可用于实现操作系统对资源的管理:记录进程分配了哪些资源(如:分配了多少内存、正在使用哪些I/O设备、正在使用哪些文件)
  • 可用于实现操作系统对进程的控制、调度:记录进程的运行情况(如:CPU使用时间、磁盘使用情况、网络流量使用情况等)

程序段:程序的代码(指令序列)

【给进程自己用的】

数据段: 运行过程中产生的各种数据(如:程序中定义的变量)

【给进程自己用的】


特征:

动态性:【是进程最进程最基本的特征】进程是程序的一次执行过程,是动态地产生、变化和消亡地

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

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

异步性:各进程按各自独立地、不可预知的速度向前推进,操作系统要提供“进程同步机制”来解决异步问题

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


状态:

创建态: 进程正在被创建时,它的状态时“创建态”,在这个阶段操作系统会为进程分配资源、初始化PCB

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

运行态:如果一个进程此时在CPU上运行,那么这个进程就会处于“运行态”

阻塞态:

  • 在进程运行的过程中,可能会请求等待某个事件的发生(如等待某种系统资源的分配,或者等待其他进程的相应)

  • 在这个时间发生之前,进程无法继续往下执行,此时操作系统会让这个进程下的CPU,并让它进入“阻塞态”。

  • 当CPU空闲时,又会选择另一个“就绪态”进程上CPU运行

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

状态的转换:

 注意:不能由阻塞态直接转换为运行状态,也不能由就绪态直接转换为阻塞态(因为进入阻塞态是进程主动请求的,必然需要进程在运行时才能发出这种请求)

组织: 

连接方式

执行指针:

  • 指向当前处于运行态(执行态的进程)
  • PCB2
  • 单CPU计算机中,同一时刻只会有一个进程处于运行状态

就绪队列指针:

  • 只想当前处于就绪态的进程
  • PCB5->PCB1->PCB4
  • 通常会把优先级高的进程放在队头

等待打印的阻塞队列:

  • PCB3->PCB7

等待磁盘的阻塞队列:

  • 很多操作系统还会根据阻塞原因不同,再分为多个阻塞队列
  • PCB6

索引方式:


进程控制

主要功能:对系统中的所有进程实施有效的管理,它具有创新进程、撤销已有进程、实现进程状态转换等功能

原语:是一种特殊的程序,它的执行具有原子性。也就是说,这段程序的运行必须一气呵成,不可中断

进程的创建:

创建原语:

  • 申请空白PCB
  • 为新进程分配所需资源
  • 初始化PCB
  • 将PCB插入就绪队列

引起进程创建的事件:

  • 用户登录:分时系统中,用户登陆成功,系统会为其建立一个新的进程
  • 作业调度:多批道处理系统中,由新的作业放入内存时,会为其建立一个新的进程
  • 提供服务:用户向操作系统提出某些请求时,会创建一个进程处理该请求
  • 应用请求:由用户进程主动请求创建一个子进程

进程的终止:

撤销原语:【就绪态/阻塞态/运行态->终止态->无】

  • 从PCB集合中找到终止进程的PCB
  • 若进程正在运行,立即剥夺CPU,将CPU分配给其他进程
  • 终止其所有进程(进程间的关系是树状结构)
  • 将该进程拥有的所有资源鬼皇给父进程或操作系统
  • 删除PCB

引起进程终止的事件:

  • 正常结束(自己请求终止如:exit系统调用)
  • 异常结束(整数除以0、非法使用特权指令,然后被操作系统强行杀掉)
  • 外界干预(Ctrl+Alt+Delete,用户选择杀掉进程)

进程的阻塞和唤醒:

进程的阻塞:

阻塞原语:(运行态->阻塞态)
  • 找到阻塞的进程对应的PCB
  • 保护进程运行现场,将PCB状态信息设置为“阻塞态”,暂时停止进程运行
  • 将PCB插入相应事件的等待队列
引起进程阻塞的事件:
  • 需要等待系统分配某种资源
  • 需要等待相互合作的其他进程完成工作

进程的唤醒:

唤醒原语:(阻塞态->就绪态)
  • 在等待队列中找到PCB
  • 将PCB从等待队列移除,设置进程为就绪态
  • 将PCB插入就绪队列,等待被调度
引起进程唤醒的事件
  • 等待事件的发生

进程的切换:

切换原语:(运行态->就绪态 / 就绪态->运行态)
  • 将运行环境信息存入PCB
  • PCB移入相应队列
  • 选择另一个进程执行,并更新其PCB
  • 根据PCB恢复新进程所需的运行环境
引起进程切换的事件:
  • 当前进程时间片到
  • 有更高优先级的进程到达
  • 当前进程主动阻塞
  • 当前进程终止

解决办法:在进程切换时先在PCB中保存这个进程的运行环境(保存一些必要的寄存器信息)

注意:另一个进程在运行过程中也会使用各个寄存器


进程通信

进程间通信(IPC):是指两个进程之间产生数据交互

进程通信需要操作系统支持:进程时分配系统资源的单位(包括内存地址空间),因此各进程拥有的内存地址空间相互独立。因此一个进程不能直接访问另一个进程的地址空间

共享存储:

基于存储区的共享:
  • 为了避免出错,各个进程对共享空间的访问时互斥的

  • 操作系统在内存中划出一块共享存储区,数据的形式,存放位置都由通信进程控制,而不是操作系统。
  • 这种共享方式速度很快
  • 是一种高级的通信方式

基于数据结构的共享:
  • 比如共享空间只能放一个长度为10的数组
  • 这种共享方式速度慢、限制多
  • 是一种低级的通信方式

消息传递:

概念:进程间的数据交换以格式化的消息为单位。进程通过操作系统提供的“发送消息、接受消息”两个原语进行数据交换

消息头:包括发送进程ID、接受进程ID、消息长度等格式化的信息
直接通信:消息发送进程要指明接受进程的ID(点名道姓的消息传递)
间接通信:通过“信箱”间接地通信。因此又称为“信箱通信方式”(信箱通信方式)

管道通信:

  • 管道只能采用半双工通信,某一段时间内只能实现单向的传输。如果要实现双同时通信,则需要设置两个管道 
  • 各进程要互斥地访问管道(由操作系统实现)
  • 当管道写满时,写进程将阻塞,知道读进程将管道数据中的数据取走,即可唤醒进程
  • 当管道读空时,读进程将阻塞,知道写进程往管道中写入数据,即可唤醒读进程
  • 管道中的数据一旦被读出,就彻底消失。因此当多个进程读同一个管道时,可能会错乱。解决方案有①一个管道允许多个写进程,一个读进程  ②允许有多个写进程,多个读进程,但系统会让各个读进程轮流从管带中读取数据(Linux的方案)

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

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

相关文章

芋道源码的Springboot 项目打包,配置和依赖包分开

Springboot 项目,把依赖包和开发的应用都打在一个jar 里很简单,但有个问题是,修改点东西就要再次全量更新。 这里介绍如何用assembly 来实现不打依赖包。 1、 在主模块中,需要引入 assembly.xml配置: src/main/asse…

我这次没有蹭Oracle发布热度的原因

这次没有去蹭热度,原因有几个。 主观 确实是生病了,身体不舒服,那几个卷王在卷公众号的时候,我在床上卷成一团。 不和这几个打了鸡血的人比了。我卷了一点和他们不一样的。我节日期间看到我初中同班同学发的微博。 对这个就是我…

大学生上班族必备!九个线上兼职秘籍,让你远离失业风险

互联网时代,兼职新风尚:这些靠谱兼职让你轻松增收 随着互联网技术的飞速发展,兼职工作已成为许多人增加收入、提升自我能力的新选择。本文将为您揭秘一些适合大学生和上班族的靠谱兼职工作,助您轻松找到适合自己的兼职机会。 一…

docker系列8:容器卷挂载(上)

目录 传送门 从安装redis说起 什么是容器卷挂载 操作系统的挂载 日志文件一般是"首恶元凶" 挂载命令 容器卷挂载 卷挂载命令 启动时挂载 查看挂载卷信息 容器卷管理 查看卷列表 创建容器卷 具名挂载与匿名挂载 具名挂载 传送门 docker系列1&#xff…

C++ : list类及其模拟实现

目录 一、list的介绍和使用 list的介绍 list的使用 1.list的构造 构造函数 2.list iterator 的使用 3.list capacity 4.list element access 5.list modifiers 6.list的迭代器失效 二、list的模拟实现 要点 list类模拟实现部分接口全部代码展示 一、list的介绍和使…

Docker:centos7安装docker

官网:https://www.docker.com/官网 文档地址 - 确认centos7及其以上的版本 查看当前系统版本 cat /etc/redhat-release- 卸载旧版本 依照官网执行 - yum安装gcc相关 yum -y install gccyum -y install gcc-c- 安装需要的软件包 yum install -y yum-utils- 设置s…

深入学习Linux内核页框回收

目录 算法 1.选择目标页 2.PFRA设计 3.反向映射 3.1.匿名页的反向映射 3.2.try_to_unmap_anon()函数 3.3.try_to_unmap_one()函数 映射页的反向映射 优先搜索树 try_to_unmap_file()函数 PFRA实现 最近最少使用(LRU)链表 在LRU链表之间移动页 mark_page_accessed(…

Android使用kts发布aar到JitPack仓库

Android使用kts发布aar到JitPack 之前做过sdk开发,需要将仓库上传到maven、JitPack或JCenter,但是JCenter已停止维护,本文是讲解上传到JitPack的方式,使用KTS语法,记录使用过程中遇到的一些坑.相信Groovy的方式是大家经常使用的,…

Java基于Spring Boot框架的课程管理系统(附源码,说明文档)

博主介绍:✌IT徐师兄、7年大厂程序员经历。全网粉丝15W、csdn博客专家、掘金/华为云//InfoQ等平台优质作者、专注于Java技术领域和毕业项目实战✌ 🍅文末获取源码联系🍅 👇🏻 精彩专栏推荐订阅👇&#x1f3…

基于Springboot的校园疫情防控系统(有报告)。Javaee项目,springboot项目。

演示视频: 基于Springboot的校园疫情防控系统(有报告)。Javaee项目,springboot项目。 项目介绍: 采用M(model)V(view)C(controller)三层体系结构…

C# WCF服务(由于内部错误,服务器无法处理该请求。)

由于内部错误&#xff0c;服务器无法处理该请求。有关该错误的详细信息&#xff0c;请打开服务器上的 IncludeExceptionDetailInFaults (从 ServiceBehaviorAttribute 或从 <serviceDebug> 配置行为)以便将异常信息发送回客户端&#xff0c;或打开对每个 Microsoft .NET …

从零开始:Django项目的创建与配置指南

title: 从零开始&#xff1a;Django项目的创建与配置指南 date: 2024/5/2 18:29:33 updated: 2024/5/2 18:29:33 categories: 后端开发 tags: DjangoWebDevPythonORMSecurityDeploymentOptimization Django简介&#xff1a; Django是一个开源的高级Python Web框架&#xff…

C语言之整形提升和算术转换

目录 前言 一、整形提升 二、算术转换 总结 前言 本文主要介绍C语言中的整形提升和算术转换的概念和意义&#xff0c;以及例题帮助理解&#xff0c;了解之后&#xff0c;我们就能知道在C语言中&#xff0c;字符型变量如何计算以及如果变量的类型、字节大小不一致的情况下&am…

golang学习笔记(内存模型和分配机制)

操作系统的存储管理 虚拟内存管理 虚拟内存是一种内存管理技术&#xff0c;它允许操作系统为每个进程提供一个比实际物理内存更大的地址空间。这个地址空间被称为虚拟地址空间&#xff0c;而实际的物理内存则被称为物理地址空间。使用虚拟内存有以下几点好处&#xff1a; 内…

git 第一次安装设置用户名密码

git config --global user.name ljq git config --global user.email 15137659164qq.com创建公钥命令 输入后一直回车 ssh-keygen -t rsa下面这样代表成功 这里是公钥的 信息输入gitee 中 输入下面命令看是否和本机绑定成功 ssh -T gitgitee.com如何是这样&#xff0c;恭喜…

基于51单片机PWM控制直流电机—数码管显示

基于51单片机PWM控制直流电机 &#xff08;仿真&#xff0b;程序&#xff0b;设计报告&#xff09; 功能介绍 具体功能&#xff1a; 1.L298驱动直流电机&#xff1b; 2.数码管显示转动方向和PWM占空比&#xff08;0-100%&#xff09;&#xff1b; 3.按键控制PWM占空比来加/…

20232803 2023-2024-2 《网络攻防实践》实践八报告

目录 1. 实践内容2. 实践过程2.1 动手实践任务一2.2 动手实践任务二&#xff1a;分析Crackme程序2.2.1 crackme1.exe2.2.2 crackme2.exe 2.3 分析实践任务一2.4 分析实践任务二 3. 学习中遇到的问题及解决4. 学习感悟、思考等 1. 实践内容 动手实践任务一&#xff1a;对提供的r…

R语言实战——中国职工平均工资的变化分析——相关与回归分析

链接: R语言学习—1—将数据框中某一列数据改成行名 R语言学习—2—安德鲁斯曲线分析时间序列数据 R语言学习—3—基本操作 R语言学习—4—数据矩阵及R表示 R语言的学习—5—多元数据直观表示 R语言学习—6—多元相关与回归分析 1、源数据 各行业平均工资变化 各地区平均工资…

list 的模拟实现

目录 1. list 的实现框架 2. push_back 3. 迭代器 4. constructor 4.1. default 4.2. fill 4.3. range 4.4. initializer list 5. insert 6. erase 7. clear 和 destructor 8. copy constructor 9. operator 10. const_iterator 10.1. 普通人的处理方案 10.2. …

数据库复习1

1.试述数据、数据库、数据库管理系统、数据库系统的概念 1.数据(Data): 数据是关于事物的符号表示或描述。它可以是任何事实、观察或者测量的结果&#xff0c;如数字、字符、声音、图像等。数据在没有上下文的情况下可能没有明确的意义。 2.数据库(Database): 数据库是一个持…