进程、线程、协程与虚拟线程(进程相关)

进程、线程、协程与虚拟线程

这一次我们从头,从最大的先开始说,我们从进程开始,因为内容比较多,所以我们分为几个不同的文章来介绍。先从进程,再从线程,最后介绍协程与虚拟线程。

简介

我们以一张操作系统的发展历程开始,引入对进程与线程等内容的切入。看完这张图之后,我们也会阐述一下其中与操作系统资源的关系。同时也是为后续的介绍做一些基本元素的介绍
请添加图片描述
操作系统的演进历程不仅是计算机科技进步的缩影,更是进程和线程概念演化的舞台

在早期的简单批处理系统中,作业一次性装入内存运行,那时的作业可以看作是一个单一的进程。

随着技术的发展,多道程序系统出现了,它允许将多个作业装入内存,它们可以轮流使用 CPU 资源,这里面的每一个作业也可以理解为是一个独立的进程。

继续发展,操作系统引入了分时机制,让多个用户可以同时使用计算机,每个用户所运行的程序都是一个进程,它们共享CPU时间。这大大提高了系统的响应时间和资源利用效率。

但是,进程作为资源分配和调度的基本单位,在执行效率和资源消耗上有其局限性,这促使了线程的诞生。线程是进程中的实际运算单位,一个进程可以包含多个线程,它们共享进程的资源,但拥有各自的执行序列。这就意味着,在一个文本编辑器进程中,一个线程可以负责文字的输入,另一个线程可以同时进行拼写检查。

如今的现代操作系统中,进程与线程的关系更加微妙和紧密。进程为线程提供了一个虚拟的、独立的运行环境,而线程则使得进程内部的并行成为可能。在这种模型下,我们能够实现更高效的并发执行,让资源的管理和调度更加灵活。

正是基于这样的发展背景,我们可以深入探讨进程资源管理、线程同步与通信机制等诸多话题,它们构成了操作系统这门学科的核心内容,也是现代计算机高效运转的基石。在接下来的内容中,将详细解析进程资源的概念、线程的特性以及它们如何在现代操作系统中协同工作,来完成日益复杂的计算任务。

题外

什么是系统调用

所谓系统调用,是指用户在程序中调用操作系统所提供的一些自功能,系统调用可是为特殊的公公子程序。系统中的各种共享资源都由操作系统统一掌握,因此在用户程序中国呢,凡是与资源有关的操作(如存储分配、进行 I/O 传输及管理文件等),都必须通过系统调用方式向操作系统提出服务请求,并由操作系统代为完成。通常,一个操作系统提供的系统调用命令有十几条甚至上百条。大致分为一下几类:

  • 设别管理。完成设备的请求或释放,以及设备启动等功能。
  • 文件管理。完成文件的读、写、创建及删除等功能。
  • 进程控制。完成进程的创建、撤销、阻塞及唤醒等功能。
  • 进程通信。完成进程之间的消息传递或信号传递扽功能。
  • 内存管理。完成内存的分配、回收以及获取作业占用内存去大小及始址等功能。

下图是关于系统调用以及内核态与用户态相关的图
请添加图片描述

进程是什么

进程的概念

在多道程序环境下,允许多个程序并发执行,此时他们将失去封闭性,并具有间断性及不可再现性的特征。为此引入进程的概念,以便更好的描述和控制程序的并发执行,实现操作系统的并发性和共享性(最基本的两个特性。)

为了使参与并发执行的每个程序(含数据)都能独立地运行,必须为之配置一个专门的结构,称为进程控制块(Process Control Block,PCB)
系统利用 PCB 来描述进程的基本情况和运行状态,进而控制和管理进程。相应地,由程序段相关数据段PCB 三部分构成了进程
(又称进程映像)。
所谓创建进程,实质上是创建进程实体中的PCB。而撤销进程,实质上进程的 PCB。值得注意的是,进程映像是静态的,进程则是动态的。

注意:PCB是进程存在的唯一标志!
从不同的角度,进程可以有不同的定义,比较典型的定义有:
1)进程是程序的一次执行过程。
2)进程是一个程序及其数据在处理机上顺序执行时所发生的活活动
3)进程是具有独立功能的程序在一个数据集合上运行的过程它是系统进行资源分配度的一个独立单位。

进程的特征

进程是由多道程序的并发执行而引出的,它和程序是两个截然不同的概念。进程的基本特征是对比单个程序的顺序执行提出的,也是对进程管理提出的基本要求。

1)动态性。进程是程序的一次执行,它有着创建、活动、暂停、终止等过程,具有一定生命周期,是动态地产生、变化和消亡的。动态性是进程最基本的特征。
2)并发性。指多个进程实体同存于内存中,能在一段时间内同时过运行。引入进程的目是使进程能和其他进程并发执行。并发性是进程的重要特征,也是操作系统的重要特征。
3)独立性。指进程实体是一个能独立运行、独立获得资源和独立接受调度的基本单位。未建立PCB的程序,都不能作为一个独立的单位参与运行。
4)异步性。由于进程的相互制约,使得进程按各自独立的、不可预知的速度向前推进步性会导致执行结果的不可再现性,为此在操作系统中必须配置相应的进程同步机制。

进程的状态与转换

我们的语言不断遇父生变化。通常进程有以下5种状态,前3种是进程的基本状态

1)运行态。进程正在处理机上运行。在单处理机中,每个时刻只有一个进程处于运行状态。
2)就绪态。进程获得了除处理机以外的所有资源,一旦得到处理机,便可立即运行。系统中处于就绪状态的进程可能有多个,通常称之为就绪队列。
3)阻塞态,又称等待态。进程正在等待某一事件而暂停运行,如等待某资源为可用(不包括处理机)或等待输入/输出完成。即使处理机空闲,该进程也不能运行,系统通常将处于阻塞态的进程也排成一个队列,甚至根据阻塞原因的不同,设置多个阻塞队列。
4)创建态,进程正在被创建,尚未转到就绪态。创建进程需要多个步骤:首先申请一个空白PCB,并向PCB中填写用于控制和管理进程的信息;然后为该进程分配运行时所必须的资源:最后把该进程转入就绪态并插入就绪队列。但是,如果进程所需的资源尚不能得到满足,如内存不足,则创建工作尚未完成,进程此时所处的状态称为创建态。
5)终止态: 进程正从系统中消失,可能是进程正常结束或其他原因退出运行。进程需要结束运行时。系统首先将该进程置为终止态,然后进一步等待资源释放和回收等工作。

请添加图片描述
需要注意的是,一个进程从运行态变为阻塞态是主动的行为,从阻塞态变成就绪态是被动行为,需要其他相关进程的协助。

进程控制

进程控制的主要功能是对系统中的所有进程实施有效的管理,它具有创建新进程、撒销已有进程、实现进程状态转换等功能。在操作系统中,一般把进程控制用的程序段称为原语,原语的特点是执行期间不允许中断,它是一个不可分割的基本单位。

进程的创建

允许一个进程创建另一个进程,此时创建者称为父进程,被创建的进程称为子进程。子进程可以继承父进程所拥有的资源,当子进程被撒销时,应将其从父进程那里获得的资源归还给父进程。此外,在撤销父进程时,通常也会同时撒销其所有的子进程。

在操作系统中,终端用户登录系统、作业调度、系统提供服务、用户程序的应用请求等都会引起进程的创建。操作系统创建一个新进程的过程如下(创建原语):

1) 为新进程分配一个唯一的进程标识号,并申请一个空白 PCB(PCB 是有限的)。若PCB申请失败,则创建失败。
2) 为进程分配其运行所需的资源,如内存、文件、I/0 设备和CPU时间等(在PCB中体现),这些资源或从操作系统获得,或仅从其父进程获得。如果资源不足(如内存),则并不是创建失败,而是处于创建态,等待内存资源。
3) 初始化PCB,主要包括初始化标志信息、初始化处理机状态信息和初始化处理机控制信息,以及设置进程的优先级等。
4) 若进程就绪队列能够接纳新进程,则将新进程插入就绪队列,等待被调度运行。

进程的终止

引起进程终止的事件主要有:
1、正常结束。表示进程的任务已完成并准备退出运行
2、异常结束。表示进程在运行时,发生了某种异常事件,使程序无法继续运行,如存储区越界、保护错、非法指令、特权指令错、运行超时、算术运算错、I0故障等。
3、外界干预。指进程应外界的请求而终止运行,如操作员或操作系统干预、父进程请求和父进程终止。操作系统终止进程的过程如下(终止原语):

  • 1)根据被终止进程的标识符,检索出该进程的PCB,从中读出该进程的状态
  • 2)若被终止进程处于运行状态,立即终止该进程的执行,将处理机资源分配给其他进程
  • 3)若该进程还有子孙进程,则应将其所有子孙进程终止。
  • 4)将该进程所拥有的全部资源,或归还给其父进程,或归还给操作系统
  • 5)将该PCB从所在队列(链表)中删除。
进程的阻塞与唤醒

正在执行的进程,由于期待的某些事件未发生,如请求系统资源失败、等待某种操作的完成、新数据尚未到达或无新任务可做等,进程便通过调用阻塞原语(Block),使自己由运行态变为阻塞态。可见,阻塞是进程自身的一种主动行为,也因此只有处于运行态的进程可能将其转为阻塞态。阻塞原语的执行过程如下:

1)找到将要被阻塞进程的标识号对应的PCB。
2)若谈进程为运行志,则保护其现场,将其软态转为阻塞态,停止运行。
当被阻塞进程所期待的事件出现时,如它所期待的10操作已完成或其所期待的数据已到达
3)把该PCB插入相应事件的等待队列,将处理机资源调度给其他就绪进程。

当被阻塞的进程所期待的事件出现时,如期待的 I/O 操作已完成或者期待的数据已到达时。会由有关进程(比如,释放该 I/O 设备的进程,或提供数据的进程)调用唤醒原语,将等待该事件的进程唤醒。唤醒原语的执行过程如下:

1)在该事件的等待队列中找到相应进程的PCB。
2)将其从等待队列中移出,并置其状态为就绪态。
3)把该PCB插入就绪队列,等待调度程序调度。

应当注意,阻塞原语和唤醒原语是一对作用刚好相反的原语,必须成对使用。如果某进程中调用了阻塞原语,则必须在与之合作的或其他相关的进程中安排一条相应的唤醒原语,以便唤醒阻塞进程:否则,阻塞进程将会因不能被唤醒而永久地处于阻塞状态。

进程间通信

1)共享存储。通过可以直接访问的共享空间进行写/读操作来实现进程之间的信息交换。操作时需要使用同步互斥工具(P 操作、V 操作)
2)消息传递。若通信的进程之间不存在可直接访问的共享空间,则使用操作系统提供的消息传递方式实现了进程通信。其中又有直接通信和间接通信两种方式。
3)管道通信。管道通信允许两个进程按照生产者-消费和的方式进行通信。生产者向管道的一段写,消费者从管道的另一端读。注意数据在管道中是先进先出的,若管道空课,则会有阻塞。

这一小节就不过多的做介绍了,相关的内容网上也有很多,如果想看到详细的具体介绍的话,大家可以自己多查查资料。

下一章再跟大家从结合线程的角度进行分析~

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

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

相关文章

ehters.js:provider

ethers.jsV5.4文档 安装ethers npm install ethers5.4.0// 引入 import { ethers } from ethersProviders /** Provider类* Provider类是对以太坊网络连接的抽象,为标准以太坊节点功能提供简洁、一致的接口。 */ const provider new ethers.providers.Web3Provider…

2024年第16届大广赛新命题发布-爱华仕箱包

2024年3月27日,2024年第16届大广赛发布了新的命题,爱华仕箱包命题,自2017年起,爱华仕箱包已连续8年担任全国大学生广告艺术大赛命题单位。 爱华仕现已实现百货、超市、电商、礼品、投标、海外市场6大零售网络的全覆盖&#xff0c…

左值引用、右值引用及移动语义

个人主页:Lei宝啊 愿所有美好如期而遇 左值 概念 可以取到地址的值就是左值,并且一般情况下可以修改(const类型左值不可修改)。 左值举例: //左值 int a 0; const int b 1; int* p &a; 右值 概念 不能…

三相四线智能电表直接接入式接线图

大家好,今天我们要聊的是三相四线智能电表的直接接入式接线方式。别担心,我会用简单易懂的语言来解释这个看似复杂的主题。 首先,我们得知道什么是三相四线电表。在我们的生活中,电力供应通常分为单相和三相。三相电,就…

vue 下载图片/视频到浏览器

方法1:直接在当前页面打开图片或者视频 window.location.href url;//借用a标签实现同样效果 const link document.createElement(a) link.href url // 文件地址 link.click(); 方法2:新开一个窗口打开图片或视频 window.open(url); 方法3&#xf…

分页-PageHelper原理以及实时分页-键集分页

一.PageHelper原理 1.使用 PageHelper 是国内非常优秀的一款开源 mybatis 分页插件,它支持常用的主流数据库,例如 Oracle、Mysql、MariaDB、SQLite、Hsqldb 等。 PageHelper 的安装很简单,只需要在 pom.xml 中加入以下依赖即可&#xff1a…

网络类型及数据链路层协议

目录 一、网络的分类 二、数据链路层协议 1、MA网络以太网协议 2、P2P网络 3、HDLC ---高级数据链路控制协议 HDLC地址借用 三、PPP协议 1、PPP协议的优点 2、PPP数据帧封装结构 3、PPP会话的搭建 4、LCP建立——链路建立阶段 4.1协商阶段 4.2认证阶段 4.3 PAP---密…

深入聊聊企业数字化转型这个事儿

01 什么是数字化? 聊数字化,就不得不聊聊信息化、智能化。佛性的说:信息化是数字化的前世,智能化是数字化的来生!我习惯用一个结构化的图形来表示事物之间的关系,信息化、数字化、智能化的关系如下&#…

尤大大正式官宣推出VitePress 1.0

VitePress 在现代Web开发领域,构建快速、响应式的文档网站是开发者经常面临的任务之一。VitePress应运而生,它结合了Vue.js和Vite的强大功能,为开发者提供了一个简单易用的静态站点生成器。Vue.js作为一种流行的前端框架,以其简洁…

网络安全:Kali Linux 进行SQL注入与XSS漏洞利用

目录 一、实验 1.环境 2.Kali Linux 进行SQL注入 3.Kali Linux 进行XSS漏洞利用 二、问题 1.XSS分类 2.如何修改beef-xss的密码 3.beef-xss 服务如何管理 4.运行beef报错 5.beef 命令的颜色有哪些区别 6.owasp-top-10 有哪些变化 一、实验 1.环境 (1&a…

30---SDRAM电路设计

视频链接 SDRAM电路设计01_哔哩哔哩_bilibili SDRAM电路设计 1、SDRAM简介 SDRAM:Synchronous Dynamic Random Access Memory,同步动态随机存储器。 同步是指其时钟频率和CPU前端总线的系统时钟相同,并且内部命令的发送与数据的传输都以…

如何避免SQL注入攻击?

🐓序言 当涉及到数据库操作时,防止SQL注入攻击至关重要。SQL注入是一种常见的网络安全威胁,攻击者通过在用户输入中插入恶意的SQL代码,从而可以执行未经授权的数据库操作。 🐓避免方式 使用参数化查询 使用参数化查询…

【漏洞复现】用友U8 login2.RegisterServlet接口处存在SQL注入漏洞

免责声明:文章来源互联网收集整理,请勿利用文章内的相关技术从事非法测试,由于传播、利用此文所提供的信息或者工具而造成的任何直接或者间接的后果及损失,均由使用者本人负责,所产生的一切不良后果与文章作者无关。该…

MyBatis3源码深度解析(二十五)级联映射与关联查询(二)级联映射的实现原理

文章目录 前言10.2 MyBatis级联映射的实现原理10.2.1 ResultMap详解10.2.2 ResultMap解析过程10.2.3 级联映射的实现原理10.2.3.1 handleRowValuesForSimpleResultMap()10.2.3.2 handleRowValuesForNestedResultMap() 前言 上一节【MyBatis3源码深度解析(二十四)级联映射与关联…

为什么Solana在区块链生态系统中脱颖而出

当我们在不断发展的区块链技术世界中航行时,认识到平台不仅要跟上创新的步伐,还要突破可能的界限,这一点至关重要。#Solana 已成为领先的竞争者,这就是为什么这个高性能区块链的未来看起来很光明。 🌟 可扩展性和速度&…

单臂路由和三层交换机

目录 一.单臂路由 1.单臂路由的工作原理 2.单臂路由的配置 2.1画出拓扑图 2.2配置PC 2.3配置交换机 2.4配置路由器 2.5测试 二.三层交换机 1.三层交换机的概述 2.三层交换机的配置 2.1画出拓扑图 2.2配置PC 2.3配置二层交换机 2.4配置三层交换机 2.5测试 3.拓展 三.总结 一.…

Trello国内替代工具有哪些?分享5款

盘点5款类似Trello的本地部署项目管理工具:1.PingCode;2.Worktile;3.Teambition;4.redmine;5.TAIga.io。 Trello是一款杰出的协作与工作管理应用,专为追踪团队项目、凸显当前活动任务、分配责任人&#xff…

web全栈架构师第16期教程

教程介绍 互联网时代已进入后半场,行业环境发生了显著变化。互联网人,尤其是技术人员,如何在加速更迭的技术浪潮中持续充电,提升自身价值,是当下必须面对的挑战。课程涉及了现下前端实际开发时所需要的各块内容&#…

编程语言|C语言——C语言基本数据类型

前言 针对不同的数据,采取不同的存储方式和进行不同的处理。随着处理对象的复杂化,数据类型也要变得更丰富。数据类型的丰富程度直接反映了程序设计语言处理数据的能力。 C语言很重要的一个特点是它的数据类型十分丰富。因此,C语言程序数据处…

求解vue3警告

Invalid prop: type check failed for prop “activeType”. Expected TheTypedFn, got Number with value 0. 警告 复现问题 从demo.vue跳转到after-sale/index.vue页面 //demo.vue <div v-for"(obj, index) in list" :key"index" style"margi…