操作系统进程有若干个状态,若一个进程_进程和线程的概念

操作系统进程有若干个状态,若一个进程_进程和线程的概念第二章进程管理-进程、线程进程的概念进程是进程实体的运行过程,是系统进行资源分配和调度的一个独立单位。(线程是调度的基本单位)程序:是静态的,是一个存放在磁盘里的可执行文件,是一系列指令的集合进程:是动态的,是程序的一次执行过程

大家好,又见面了,我是你们的朋友全栈君。如果您正在找激活码,请点击查看最新教程,关注关注公众号 “全栈程序员社区” 获取激活教程,可能之前旧版本教程已经失效.最新Idea2022.1教程亲测有效,一键激活。

Jetbrains全系列IDE使用 1年只要46元 售后保障 童叟无欺

本文已收录至 Github(MD-Notes),若博客中图片打不开,可以来我的 Github 仓库,包含了完整图文https://github.com/HanquanHq/MD-Notes,涵盖了互联网大厂面试必问的知识点,讲解透彻,长期更新中,欢迎一起学习探讨 ~ 另外:
面试必会系列专栏https://blog.csdn.net/sinat_42483341/category_10300357.html
操作系统系列专栏https://blog.csdn.net/sinat_42483341/category_10519484.html


第二章 进程管理 – 进程、线程


进程的概念

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

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

进程:是动态的,是程序的一次执行过程

例如,同时挂三个QQ号,会对应三个QQ进程,它们的PCB、数据段各不相同,但程序段的内容都是相同的(都是运行着相同的QQ程序)

进程的创建

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

PCB

进程相关的信息都被保存在一个数据结构PCB (Process Control Block)中,即进程控制块

操作系统需要对各个并发运行的进程进行管理,但凡管理时所需要的信息,都会被放在PCB中

在这里插入图片描述

程序是如何运行的?

一个进程实体(进程映像)由 PCB、程序段、数据段 组成。

进程是动态的,进程实体(进程映像,类似于快照的概念)是静态的。

进程实体反应了进程在某一时刻的状态(如:x++后,x=2)

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

进程的特征

在这里插入图片描述

进程的5种状态

创建态

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

就绪态

当进程创建完成后,进入“就绪态”,处于就绪态的进程已经具备运行条件,但由于没有空闲CPU,就暂时不能运行。当CPU空闲时,操作系统就会选择一个就绪进程,让它上处理机运行

运行态

如果一个进程此时在CPU上运行,那么这个进程处于“运行态”,CPU会执行该进程对应的程序(执行指令序列)

阻塞态

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

终止态

一个进程可以执行 exit 系统调用,请求操作系统终止该进程。此时该进程会进入“终止态”,操作系统会让该进程下CPU,并回收内存空间等资源,最后还要回收该进程的PCB。当终止进程的工作完成之后,这个进程就彻底消失了。

进程状态的转换

进程PCB中,会有一个变量state 来表示进程的当前状态。如:1表示创建态、2表示就绪态、3表示运行态…

为了对同一个状态下的各个进程进行统一的管理,操作系统会将各个进程的PCB组织起来。

在这里插入图片描述

进程的组织方式

大多数操作系统采用链接方式。

在这里插入图片描述

进程控制

进程控制的过程要一气呵成,不可以被打断,用原语来实现。

例如,“将PCB的state设为1” “将PCB从阻塞队列放入就绪队列” 这两个步骤,不能被打断

如何实现原语的原子性?

原语的执行具有原子性,即执行过程只能一气呵成,期间不允许被中断。

可以用“关中断指令”和“开中断指令”这两个特权指令实现原子性。

在这里插入图片描述

正常情况下,CPU每执行完一条指令,都会例行检查是否有中断信号需要处理,如果有,则暂停运行当前这段程序,转而执行相应的中断处理程序。

而 CPU 执行了关中断指令之后,就不再例行检查中断信号,直到执行开中断指令之后才会恢复检查。

这样,关中断、开中断之间的这些指令序列就是不可被中断的,这就实现了“原子性”

进程控制相关的原语

理解即可,不需要记忆

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

进程通信

顾名思义,进程通信就是指进程之间的信息交换。

进程是分配系统资源的单位(包括内存地址空间),因此各进程拥有的内存地址空间相互独立。

为了保证安全,一个进程不能直接访问另一个进程的地址空间。但是进程之间的信息交换又是必须实现的。为了保证进程间的安全通信,操作系统提供了一些方法。

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

  • 基于存储区的共享:在内存中画出一块共享存储区,数据的形式、存放位置都由进程控制,而不是操作系统。相比之下,这种共享方式速度更快,是一种高级通信方式。

2、管道通信

“管道”是指用于连接读写进程的一个共享文件,又名pipe文件。其实就是在内存中开辟一个大小固定的缓冲区

操作系统进程有若干个状态,若一个进程_进程和线程的概念

  1. 管道只能采用半双工通信,某一时间段内只能实现单向的传输。如果要实现双向同时通信,则需要设置
    两个管道。
  2. 各进程要互斥地访问管道。
  3. 数据以字符流的形式写入管道,当管道写满时,写进程的 write() 系统调用将被阻塞,等待读进程将数据
    取走。当读进程将数据全部取走后,管道变空,此时读进程的 read() 系统调用将被阻塞。
  4. 如果没写满,就不允许读。如果没读空,就不允许写。
  5. 数据一旦被读出,就从管道中被抛弃,这就意味着读进程最多只能有一个,否则可能会有读错数据的情
    况。
3、消息传递

进程间的数据交换以格式化的消息(Message)为单位。进程通过操作系统提供的“发送消息/接收消息”两个原语进行数据交换。

在这里插入图片描述

线程

为什么引入线程?

有的进程可能需要“同时”做很多事,而传统的进程只能串行地执行一系列程序。为此,引入了“线程”,来增加并发度。

可以把线程理解为“轻量级进程”。线程是一个基本的CPU执行单元,也是程序执行流的最小单位。引入线程之后,不仅是进程之间可以并发,进程内的各线程之间也可以并发,从而进一步提升了系统的并发度,使得一个进程内也可以并发处理各种任务(如QQ视频、文字聊天、传文件)

引入线程后,进程只作为除CPU之外的系统资源的分配单元(如打印机、内存地址空间等都是分配给进程的)。线程则作为处理机的分配单元。

线程的属性

在这里插入图片描述

线程的实现方式

1、用户级线程

在这里插入图片描述

  1. 用户级线程由应用程序通过线程库实现,所有的线程管理工作都由应用程序负责(包括线程切换)
  2. 用户级线程中,线程切换可以在用户态下即可完成,无需操作系统干预。
  3. 在用户看来是多个线程。但是在操作系统内核看来,并意识不到线程的存在。
  4. 优缺点
  • 优点:用户级线程的切换在用户空间即可完成,不需要切换到核心态,线程管理的系统开销小
  • 缺点:当一个用户级线程被阻塞后,整个进程都会被阻塞,并发度不高。多个线程不可在多核处理机上并行运行。
2、内核级线程

在这里插入图片描述

  1. 内核级线程的管理工作由操作系统内核完成。
  2. 线程调度、切换等工作都由内核负责,因此内核级线程的切换必然需要在核心态下才能完成。
  3. 操作系统会为每个内核级线程建立相应的TCB(Thread Control Block,线程控制块),通过TCB对线程进行管理。“内核级线程”就是“从操作系统内核视角看能看到的线程”
  4. 优缺点
    优点:当一个线程被阻塞后,别的线程还可以继续执行,并发能力强。多线程可在多核处理机上并行执行。
    缺点:一个用户进程会占用多个内核级线程,线程切换由操作系统内核完成,需要切换到核心态,因此线程管理的成本高,开销大。

操作系统只“看得见”内核级线程,因此只有内核级线程才是处理机分配的单位。

3、多线程模型
一对一模型

一个用户级线程映射到一个内核级线程。每个用户进程有与用户级线程同数量的内核级线程。

  • 优点:当一个线程被阻塞后,别的线程还可以继续执行,并发能力强。多线程可在多核处理机上并行执行。
  • 缺点:一个用户进程会占用多个内核级线程,线程切换由操作系统内核完成,需要切换到核心态,因此线程管理的成本高,开销大。
多对一模型

多个用户级线程映射到一个内核级线程。且一个进程只被分配一个内核级线程。

  • 优点:用户级线程的切换在用户空间即可完成,不需要切换到核心态,线程管理的系统开销小,效率高
  • 缺点:当一个用户级线程被阻塞后,整个进程都会被阻塞,并发度不高。多个线程不可在多核处理机上并行运行
多对多模型

n 个用户级线程映射到m 个内核级线程(n >= m)

  • 优点:克服了多对一模型并发度不高的缺点(一个阻塞全体阻塞),又克服了一对一模型中一个用
    户线程库 进程占用太多内核级线程,开销太大的缺点。
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

发布者:全栈程序员-用户IM,转载请注明出处:https://javaforall.cn/197770.html原文链接:https://javaforall.cn

【正版授权,激活自己账号】: Jetbrains全家桶Ide使用,1年售后保障,每天仅需1毛

【官方授权 正版激活】: 官方授权 正版激活 支持Jetbrains家族下所有IDE 使用个人JB账号...

(0)
blank

相关推荐

  • Resnet 18 可跑完整pytroch代码「建议收藏」

    Resnet 18 可跑完整pytroch代码「建议收藏」importtorchimporttorch.nnasnnimporttorch.optimasoptimimporttorchvisionimporttorchvision.transformsastransformsimportargparsefromresnet18importResNet18#定义是否使用GPUdevice=torch…

  • 最小二乘法详细推导过程

    最小二乘法详细推导过程转载自:http://blog.csdn.net/marsjohn/article/details/54911788在数据的统计分析中,数据之间即变量x与Y之间的相关性研究非常重要,通过在直角坐标系中做散点图的方式我们会发现很多统计数据近似一条直线,它们之间或者正相关或者负相关。虽然这些数据是离散的,不是连续的,我们无法得到一个确定的描述这种相关性的函数方程,但既然在直角坐标系中数据分布接近一…

  • 《Pro Android Graphics》读书笔记之第三节

    《Pro Android Graphics》读书笔记之第三节

    2021年12月14日
  • java版微信公众号开发(二):配置token

    java版微信公众号开发(二):配置token

  • SPPNet(2015)

    SPPNet(2015)introductionRCNN首次将卷积操作引入检测领域用于提取特征,然而现有的深度卷积网络需要输入固定尺寸的图片,这个需求可能会导致对于任意scale/size的图片的识别精确度下降。【**深度卷积神经网络由卷积层和全连接层组成,卷积层对于任意大小的图片都可以进行卷积运算提取特征,输出任意大小的特征映射,而全连接层由于本身的性质需要输入固定大小的特征尺度,所以固定尺寸的需求来自于FC层,即使对输入图片进行裁剪、扭曲等变换,调整到统一的size,也会导致原图有不同程度失真、识别精度受到影响**】SP.

  • ExecuteRun「建议收藏」

    ExecuteRun「建议收藏」ExecuteRun

发表回复

您的电子邮箱地址不会被公开。

关注全栈程序员社区公众号