二、进程管理(一)进程与线程

2023-11-08

目录

1.1 进程的概念

1.1.1 进程的作用和组织

1.1.2 进程的状态与转换

1.1.3 进程控制

1.1.4 进程的通信

1.2 线程的概念

1.2.1线程的概念

1.2.2用户级线程和内核级线程

1.2.3多线程模型 


1.1 进程的概念

1.1.1 进程的作用和组织

在多道程序环境下,允许多个程序并发执行。传统的程序本身是一组指令的集合,是一个静态的概念。引入进程(Process)的概念来描述多个程序并发执行的动态过程。

  • 进程是进程实体的运行过程,是系统进行资源分配和调度的一个独立单位。注:存在内核级线程的系统,内核级线程是调度的基本单位。

进程实体(进程映像) 就是进程动态执行过程的一个静态切片,能够准确描述程序此刻的运行状态。它包括PCB、程序段、相关数据段。

PCB(Process Control Block,进程控制块)主要包括以下四种信息,是进程存在的唯一标志

  • 进程描述信息:进程标识符(PID)、用户标识符(UID)。
  • 进程控制和管理信息:进程当前状态、进程优先级、代码运行入口地址、程序的外存地址、进入内存时间、处理机占用时间、信号量使用。
  • 资源分配清单:代码段指针、数据段指针、堆栈段指针、文件描述符、键盘、鼠标。
  • 处理机相关信息(上下文):通用寄存器值、地址寄存器值、控制寄存器值、标志寄存器值、状态字。

程序段就是能被进程调度程序调度到CPU执行的程序代码段。注:程序可以被多个进程共享,即多个进程可以运行同一个程序,如登入不同的QQ号。 

数据段一个进程的数据段,可以是进程对应的程序加工处理的原始数据,也可以是程序执行时产生的中间或最终结果。

补充 :

  • 优先级分静态和动态两种,动态优先级是根据运行情况而随时调整的。

进程实体也可以分为:

  • PCB
  • 共享正文段,又可分为代码区二进制代码全局区常量(字符串常量和全局常量)、全局变量、静态变量。
  • 数据堆段:动态分配的存储区。
  • 数据栈段 :存放临时使用的变量、局部常量。注:写代码时不要返回局部变量,栈区数据在函数执行完自动释放。 

 1.1.2 进程的状态与转换

  • 创建态:进程正在被创建,操作系统为进程分配资源、初始化PCB。
  • 就绪态:其他条件()CPU(×)
  • 运行态:占有CPU,并在CPU上运行。
  • 阻塞态(等待态):因等待某一事件而暂时不能运行。
  • 结束态:进程正在从系统中撤销,操作系统会回收进程拥有的资源、撤销PCB 

  • 不可能所有进程全处于就绪态,因为CPU空闲时会选择一个就绪态进程变为运行态。当然所有进程处于阻塞态是可能的。
  • 程序的封闭性是指进程执行的结果只取决于进程本身,不受外界影响。而并行执行的进程是异步的,这会导致不同执行速度下程序的执行结果是不同的,即失去封闭性。
  • 进程之间有可能具有相关性,也可能是相互独立的。注:独立性与进程之间相互独立不同,进程的独立性是指进程是接收调度和分配系统资源的独立单位且有独立运行的能力。
  • 同一个系统的进程(或线程)可以由系统调用的方法被不同的进程(或线程)多次使用。如:系统动态DLL库中的系统线程被不同的进程所调用。

1.1.3 进程控制

进程控制的主要功能是对系统中的所有进程实施有效的管理,它具有创建新进程、撤销已有进程、实现进程状态转换等功能。在操作系统中,一般把进程控制用的程序段称为原语

进程的创建 

创建原语:申请空白PCB为新进程分配所需资源初始化PCB→将PCB插入就绪队列。

引起进程创建的条件:

  1. 用户登录。分时系统中,用户登录成功,系统会为其建立一个新的进程。
  2. 作业调度。多道批处理系统中,有新的作业放入内存时,会为其建立一个新的进程。
  3. 提供服务。用户向操作系统提出某些请求时,会新建一个进程处理该请求。
  4. 应用请求。由用户进程主动请求创建一个子进程。注:创建者称为父进程,被创建的进程称为子进程。子进程可以继承父进程拥有的资源。子进程撤销时归还资源给父进程,父进程撤销时它的所有子进程撤销。

进程的终止

撤销原语:从PCB集合中找到终止进程的PCB→若进程正在运行,立刻将CPU给就绪态进程→终止其所有子进程→将该进程的资源归还给父进程或OS→删除PCB

引起进程终止的事件:

  1. 正常结束表示进程的任务已完成并准备退出运行。
  2. 异常结束如存储器越界、保护错、非法指令、特权指令错、运行超时、算术运算错、I/O故障等。
  3. 外界干预。操作员或操作系统干预、父进程请求或父进程终止

进程的阻塞

阻塞原语(Block):找到要阻塞的进程对应的PCB→保护进程运行现场,将PCB状态信息设置为“阻塞态”,暂时停止进程运行。→将PCB插入对应事件的等待(阻塞)队列。

引起进程阻塞的事件:

  1. 需要等待系统分配某种资源。
  2. 需要等待相互合作的其他进程完成工作。

进程的唤醒

唤醒原语(Wakeup):从事件等待队列中找到PCB→将PCB从等待队列移除,设置进程为就绪态→将PCB插入就绪队列,等待被调度。

引起进程唤醒的事件引进进程阻塞的事件已解决。

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

进程的切换 

切换原语:将运行态进程的运行环境信息存入其PCB并移入就绪队列→选择优先级最高的就绪态进程执行,并更新其PCB准备新进程所需的运行环境。注:切换原语可以完成运行态→就绪态和就绪态→运行态。

引起进程切换的事件:

  1. 当前进程时间片到。
  2. 有更高优先级的进程到达。
  3. 当前进程主动阻塞。
  4. 当前进程终止。

1.1.4 进程的通信

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

进程通信(Inter-Process Communication,IPC)是指进程之间的信息交换。PV操作是低级通信方式,高级通信方式是指以较高的效率传输大量数据的通信方式。高级通信方法主要有以下三类。 

一、共享存储

 

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

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

二、消息传递

进程间的数据交换以格式化的消息(Message)为单位。

直接通信方式

发送进程直接把消息发送给接收进程,并将它挂在接收进程的消息缓冲队列上,接收进程从信息缓冲队列中取得消息。

 间接通信方式

发送进程把消息发送到某个中间实体,接收进程从中间实体取得消息。这种中间实体一般称为信箱。该通信方式广泛应用于计算机网络中。

两个通信原语:发送原语和接收原语。

三、管道通信

  • 设置一个特殊的的共享文件(管道),其实就是一个内存缓冲区,只允许一边写入、另一边读入。
  • 一个管道只能实现半双工通信
  • 实现双向同时通信要建立两个管道。
  • 各进程要互斥访问管道(由OS负责实现互斥)
  • 管道写满时,写进程阻塞。管道读空时,读进程阻塞。

1.2 线程的概念

1.2.1线程的概念

线程(Thread)是一种“轻量级进程”。引入线程可以减小程序在并发执行时所付出的时空开销(一个进程内部若有多个线程,线程的切换只需要很少的时空开销)。

引入线程后,线程就是系统独立调度和分派的基本单位,线程自己不拥有系统资源,只拥有一点在运行中必不可少的资源,但它可与同属一个进程的其他线程共享进程所拥有的全部资源。

进程是系统进行资源分配的独立单位。

 

1.2.2用户级线程和内核级线程

用户级线程由应用程序通过线程库实现,所有的线程管理工作和线程切换都由应用程序负责(包括线程切换)。

在用户看来,是有多个线程。但是在操作系统内核看来,并意识不到线程的存在。用户级线程就是只能在用户视角看到的线程。

优点用户级线程切换在用户态即可完成,不需要切换到核心态,线程管理的系统开销小,效率高。

缺点当一个用户级线程被阻塞后,整个进程都会被阻塞,降低并发度。多个线程依旧不可在多核处理机上并行运行。

内核级线程的调度、切换等管理工作由操作系统内核完成,因此内核级线程的切换必须在核心态下才能完成。

操作系统会为每个内核级线程建立相应的线程控制块(TCB),通过TCB对线程进行管理。内核级线程就是从OS视角能看到的线程。

优点当一个线程被阻塞后,别的线程还可以继续执行,并发能力强多个线程可在多核处理机上并行执行。

缺点:一个用户进程会占用多个内核级线程,线程切换由操作系统内核完成,需要切换到管态,因此线程管理成本高。

1.2.3多线程模型

有些系统同时支持用户级线程和内核线程,由于用户级线程和内核级线程的连接方式的不同,从而形成了下面三种不同的多线程模型。

  • 多对一模型线程的调度和管理在用户空间完成,仅当用户线程需要访问内核时,才将其映射到一个内核级线程上,但是每次只允许一个线程进行映射。
  • 一对一模型并发能力强,但线程管理成本高。
  • 多对多模型:将n个用户线程映射到m个内核级线程上,要求n≥m。克服了多对一模型并发度不高的缺点和一对一模型用户进程占用太多内核级线程而开销太大的缺点。

 补充:

  • 整个系统只有一个键盘,而且键盘输入速度较慢,完全可以使用一个线程来处理整个系统的键盘输入。
  • 进程中的线程共享进程内的全部资源,但进程中某线程的栈指针对其他线程是透明的,不能与其他线程共享。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

二、进程管理(一)进程与线程 的相关文章

  • 【2022最新Java面试宝典】—— Java集合面试题(52道含答案)

    目录 一 集合容器概述 1 什么是集合 2 集合的特点 3 集合和数组的区别 4 使用集合框架的好处 5 常用的集合类有哪些 6 List Set Map三者的区别 7 集合框架底层数据结构 8 哪些集合类是线程安全的 9 Java集合的快
  • H.265的参考帧管理

    原文地址 https blog csdn net VioletHan7 article details 81384424 文章目录 HM参考帧管理分析 1 参考帧管理的基本知识 2 HEVC参考帧集技术 RPS 3 RPS预测 4 HM中的
  • js中对象数组根据对象id去重

    js中对象数组根据对象id去重 可以使用 Array filter 方法结合 Array findIndex 方法来去重 具体实现如下 const arr id 1 name apple id 2 name banana id 1 name
  • python 图像处理(5):图像的批量处理

    有些时候 我们不仅要对一张图片进行处理 可能还会对一批图片处理 这时候 我们可以通过循环来执行处理 也可以调用程序自带的图片集合来处理 图片集合函数为 skimage io ImageCollection load pattern load
  • 最新C51单片机毕业设计选题推荐

    文章目录 1前言 2 STM32 毕设课题 3 如何选题 3 1 不要给自己挖坑 3 2 难度把控 3 3 如何命名题目 1前言 更新单片机嵌入式选题后 不少学弟学妹催学长更新STM32和C51选题系列 感谢大家的认可 来啦 以下是学长亲手

随机推荐

  • 智能垃圾分类策略

    背景介绍 随着中国经济的快速发展以及城市化水平的进一步提升 城市生活垃圾产量急剧增加 如何有效治理 垃圾围城 问题 弱化 废弃资源 对环境和人体的危害 成为当今时代的主旋律 基于上述问题 想到是否可以通过智能化垃圾分类机器人 辅助人们进行垃
  • Vue/Vue-Cli/ElementUI报错bug+使用方案合集(持续更新,建议收藏)(23-05-26更新)

    持续更新 建议收藏关注 一 Vue Vue Cli 1 Vue Router路由跳转页面下移问题 问题 通过Vue Router跳转页面时 页面不是从页面顶部显示 解决方法 在src router index js中添加以下代码 解决路由跳
  • EasyExcel导入解析数据为空

    实体 Data AllArgsConstructor NoArgsConstructor public class LayerDTO 环号 private Integer ringNumber 地层名称 private String lay
  • 2021年系统集成项目管理工程师(软考中级)连夜整理考前重点

    第一章 信息化基础知识 发布在文章里的内容没有格式化 可在我的资源中下载 原文word版下载 一 信息与信息化 1 信息论奠基者香农认为 信息就是能够用来消除不确定性的东西 8种状态需要3位比特表示 5位比特则可表示64种状态 信息 物质材
  • HIVE判断题总结

    1 hive将元数据保存在关系数据库中 大大减少了在查询过程中执行语义检查的时间 Hive stores metadata in a relational database greatly reducing semantic checkin
  • 【推荐收藏】1000+ Python第三方库大合集

    awesome python 是 vinta 发起维护的 Python 资源大全 内容包括 Web 框架 网络爬虫 网络内容提取 模板引擎 数据库 数据可视化 图片处理 文本处理 自然语言处理 机器学习 日志 代码分析等 本文内容较多 喜欢
  • Docker搭建Redis主从复制模式

    前言 一 docker相关命令 二 用命令方式搭建 1 创建redis主服务器redis master 成功会输出一段字符 2 创建两个redis从服务器redis slave 1和redis slave 2 3 查看启动的容器 创建后会启
  • 在单页应用中,如何优雅的上报前端性能数据

    最近在做一个较为通用的前端性能监控平台 区别于前端异常监控 前端的性能监控主要需要上报和展示的是前端的性能数据 包括首页渲染时间 每个页面的白屏时间 每个页面所有资源的加载时间以及每一个页面中所以请求的响应时间等等 本文的介绍的是如何设计一
  • 2021-07-11

    如何使用Microsoft Your Phone 很多小伙伴在Win10上想要使用 Microsoft Your Phone 的时候 发现会提示 您所在的地区不可用 解决方法很简单 不需要翻墙 在设置里将 地区 改成国外 美国英国都可以 然
  • jsp中文乱码如何解决_Kali Linux 2020版 中文乱码和中文设置问题解决方案

    kali linux 2020版 虚拟机文件默认为英语状态 好多小伙伴表示英语看的太费劲了或者出现乱码的情况 下面来教大家如何处理 以乱码为例 包含中文设置 方便大家看 以中文演示 注 因为我的新装的kali 当前用户并不是root用户 并
  • Codeforces Round #552 (Div. 3)

    A Restoring Three Numbers time limit per test 1 second memory limit per test 256 megabytes input standard input output s
  • opengl绘制的图形在前面不显示,绕到后面才显示

    具体说一下情况 就是带相机漫游功能的场景中 绘制的多边形物体 从z轴正向看的话 显然没有图像 但是把相机绕到z轴负方向就绘制出了图像 这个问题主要是因为在工程中glEnable GL CULL FACE 造成的 注释掉即可 下面摘抄自网上
  • 如何查看动态代理中$Proxy0.class文件 如何生成

    如图 System getProperties put jdk proxy ProxyGenerator saveGeneratedFiles true
  • Python socket 访问网站发送 HTTP POST请求,从而深刻理解 HTTP 协议

    用最原始的包 socket 居然可以访问网站模拟发送 POST 请求 只要发送的字符串符合 HTTP 协议 这是最大的收获 更进一步的参考 https www jianshu com p f196c74e72dd import socket
  • UE4蓝图(很经典) 间隔1秒就执行一次,间隔循环执行

    首先 我们理解一个东西 这个东西是刷新次数 一般来说就是delta就是 如果你的刷新频率为 那么delta就是1 60 0 016 所以说 每一秒中大概要60次 按刷新频率为60hz来算 这样子看呢 我的电脑就差很多了啦 不过道理都一样子
  • 系统异常重启检测-mcelog

    mcelog 是Linux 系统上用来检查硬件错误 特别是内存和CPU错误的工具 比如服务器隔一段时间莫名的重启一次 而message和syslog又检测不到有价值的信息 通常发生MCE报错的原因有如下 1 内存报错或者ECC问题 2 处理
  • 小程序抛出Unterminated string literal异常的处理

    Unterminated string literal的异常原因是因为JS编程中对var对象赋值时 字符串出现回车导致的 如下图所示 如何解决这个问题 如果不需要回车 那么用 的形式取消掉回车 或者手动退格键删除回车 如果需要回车那么在字符
  • 嗯,我们出了一套做爬虫必备的 JS 逆向课程

    阅读本文大概需要 4 分钟 爬虫是大数据时代不可或缺的数据获取手段 它是综合技术的应用体现 有取就有失 有攻就有防 开发者为了保护数据 不得已想出了很多办法来限制爬虫对数据的获取 WEB 网站的构成使得 JavaScript 成为了开发者阻
  • selenium java自动化测试_《Selenium3 Java 自动化测试实战》--测试环境搭建

    1 测试环境搭建 1 1 安装Java 1 1 1 下载地址 https www java com zh CN download windows 64bit jsp 1 1 2 配置环境变量 1 2 安装 IntelliJ IDEA 1 2
  • 二、进程管理(一)进程与线程

    目录 1 1 进程的概念 1 1 1 进程的作用和组织 1 1 2 进程的状态与转换 1 1 3 进程控制 1 1 4 进程的通信 1 2 线程的概念 1 2 1线程的概念 1 2 2用户级线程和内核级线程 1 2 3多线程模型 1 1 进