进程与线程(进程)

进程:

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

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的方案)

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

使用AIGC生成软件类图表

文章目录 如何使用 AI 生成软件类图表什么是 MermaidMermaid 的图片如何保存?mermaid.liveDraw.io Mermaid可以画什么图?流程图时序图 / 序列图类图状态图甘特图实体关系图 / ER图 如何使用 AI 生成软件类图表 ChatGPT 大语言模型不能直接生成各类图表。…

W801学习笔记二十:宋词学习应用

前三章完成了唐诗的应用,本章将实现宋词的学习应用。 宋词与唐诗的区别不大,马上开始。 1、我们需要参考前面唐诗的方式,把宋词文本下载下来,并进行格式整理。 W801学习笔记十七:古诗学习应用——上 2、在菜单中添加…

电脑上的视频在电视上播放

视频右键->播放到设备->客厅电视 海信电视测试成功

BI不等同数据分析,别搞错了!

✅作者简介:《数据运营:数据分析模型撬动新零售实战》作者、《数据实践之美》作者、数据科技公司创始人、多次参加国家级大数据行业标准研讨及制定、高端企培合作讲师。 🌸公众号:风姑娘的数字视角,免费分享数据应用相…

【Transformer系列(1)】self-attention自注意力

一、self-attention流程 自注意力机制和注意力机制的区别在于,注意力机制中的Q(查询向量),K(键向量),V(值向量)是同源的,而一般的注意力机制,Q和…

谈谈Tcpserver开启多线程并发处理遇到的问题!

最近在学习最基础的socket网络编程,在Tcpserver开启多线程并发处理时遇到了一些问题! 说明 在linux以及Windows的共享文件夹进行编写的,所以代码中有的部分使用 #ifdef WIN64 ... #else ... #endif 进入正题!!&…

50个前端实战项目之04:隐藏的搜索小组件

大家好,我是宝哥。 今天讲50个前端实战项目之04:隐藏的搜索小组件。 源码下载地址 https://github.com/bradtraversy/50projects50days/tree/master/hidden-search 前端实战项目系列正在更新:04/50 01:可展开卡片02:进…

C语言中的goto语句

goto label; C 语言中的 goto 语句允许把控制无条件转移到同一函数内的被标记的语句。 #include <stdio.h> int main(){goto first;printf("我是你好\n");first:printf("nihao\n");second:printf("This is 2\n");return 0; } 使用goto会…

西门子1200脉冲轴【PTO】

原理图&#xff1a; PTO (Pulse Train Output) 脉冲串输出 PLC的电压是DC24v的&#xff0c;所以驱动器的信号电压是否支持&#xff0c;以免烧坏。 台达A2&#xff1a; //L型机&#xff1a; //&#xff08;方向&#xff1a;3524v&#xff0c;393.3v&#xff0c;37-GN…

力扣 647. 回文子串

题目来源&#xff1a;https://leetcode.cn/problems/palindromic-substrings/description/ C题解1&#xff1a;暴力解法。不断地移动窗口&#xff0c;判断是不是回文串。 class Solution { public:int countSubstrings(string s) {int len s.size();int res 0;for(int i 0;…

【JAVA项目】基于个人需求和地域特色的【外卖推荐系统】

技术简介&#xff1a;采用B/S架构、ssm 框架、Java技术、MySQL等技术实现。 系统简介&#xff1a;统权限按管理员&#xff0c;商家和用户这三类涉及用户划分。(a) 管理员&#xff1b;管理员使用本系统涉到的功能主要有&#xff1a;首页&#xff0c;个人中心&#xff0c;用户管理…

GDPU unity游戏开发 碰撞器与触发器

砰砰叫&#xff0c;谁动了她的奶酪让你的小鹿乱撞了。基于此&#xff0c;亦即碰撞与触发的过程。 碰撞器与触发器的区别 通俗点讲&#xff0c;碰撞器检测碰撞&#xff0c;触发器检测触发&#xff0c;讲了跟没讲似的。碰撞器是用来检测碰撞事件的&#xff0c;在unity中&#xff…

JavaWeb请求响应概述

目录 一、请求响应流程-简述 二、深入探究 三、DispatcherServlet 四、请求响应流程-详细分析 一、请求响应流程-简述 web应用部署在tomcat服务器中&#xff0c;前端与后端通过http协议进行数据的请求和响应。前端通过http协议向后端发送数据请求&#xff0c;就可以访问到部…

Golang日志管理:使用log/slog实现高级功能和性能优化

Golang日志管理&#xff1a;使用log/slog实现高级功能和性能优化 简介基础使用初始化和配置日志级别 高级技巧自定义日志格式器条件日志处理 实战案例场景一&#xff1a;API请求日志记录场景二&#xff1a;错误跟踪和用户通知 性能优化优化日志记录的性能异步日志处理选择合适的…

算法设计与分析——期末1h

目录 第一章 算法的定义 算法的三要素 算法的基本性质 算法的时间复杂度数量级&#xff1a; 第二章 兔子繁殖问题&#xff08;递推法&#xff09; 猴子吃桃问题&#xff08;递推法&#xff09; 穿越沙漠问题&#xff08;递推法&#xff08;倒推&#xff09;&#xff09; 百钱百…

C++进阶----多态

1.多态的概念 1.1 概念 多态的概念&#xff1a;通俗来说&#xff0c;就是多种形态&#xff0c;具体点就是去完成某个行为&#xff0c;当不同类型的对象去完成时会 产生出不同的状态。 举个例子&#xff1a;比如有一个基类Animal&#xff0c;它有两个子类Dog和Cat。每个…

SpringCloud知识点梳理

1. Spring Cloud 综述 1.1 Spring Cloud 是什么 [百度百科]Spring Cloud是⼀系列框架的有序集合。它利⽤Spring Boot的开发便利性巧妙地简化了分布式系统基础设施的开发,如服务发现注册、配置中⼼、消息总线、负载均衡、断路器、数据监控等,都可以⽤ Spring Boot的开发⻛格…

eNSP-动态路由(ospf协议)

一、拓扑结构搭建 二、主机配置 pc1 pc2 三、路由器配置 1.AR2配置 <Huawei>sys #进入系统视图 [Huawei]int g0/0/0 #进入接口 [Huawei-GigabitEthernet0/0/0]ip address 192.168.0.2 24 #设置ip地址 [Huawei-GigabitEthernet0/0/0]q #返回上一级 [Huawei]int g0/0/1 …

长期找 AI 专家,邀请参加线上聊天直播

诚邀 AI 专家参加线上聊天&#xff0c;成为嘉宾。 分享前沿观点、探讨科技和生活 除节假日外&#xff0c;每周举办在线聊天直播 根据话题和自愿形式结合&#xff0c;每期 2~3 位嘉宾 成为嘉宾&#xff0c;见下&#xff1a;

== 和 equals()区别,equals()重写问题

对于引用类型&#xff1a;比较的是两个引用是否相同&#xff08;所指的是否为同一个对象&#xff09;&#xff0c;注&#xff1a;如果两个引用所指的对象内容一样&#xff0c;但是不是同一个对象&#xff08;hashcode不一样&#xff09;&#xff0c;依然返回false&#xff0c;随…