【操作系统】2、进程与线程

news2024/11/8 15:29:05

【重要考点】
1. 进程与线程
进程与线程的基本概念
进程与线程的状态 转换 ——五态图,七态图
线程的实现: 内核级 用户级
进程与线程的组织和控制
进程间通信IPC: 共享内存、消息传递、管道

2.CPU调度与上下文切换
调度的基本概念
调度的实现
典型调度算法
上下文切换机制

3.同步与互斥
同步与互斥的基本概念
基本实现方法
锁、信号量、条件变量
经典同步问题

4.死锁
死锁的基本概念
形成死锁的四个条件
死锁的 预防,检测 ,避免,解除策略



2.1 进程与线程

在这里插入图片描述

1.进程的概念与特征

概念 :

引入进程的原因:

多道程序环境下,程序并发执行,程序失去封闭性,并具有间断性和不可再现性,进程的引入,更好的描述和控制了程序的并发执行,实现操作系统的
并发性共享性
( 回忆:操作系统四大特性:并发,异步,虚拟,共享。国外教材喜欢从 Concurrency ,Virtualization,persistence 三大特征入手,参考《操作系统导论》一书 )。

进程实体的结构:
一个进程的实体 ,称之为进程映像,它由:PCB ,程序段,数据段三部分构成。
进程实体是静态的,进程是动态的(一次运行、执行)。
进程映像反应了进程的某一时刻的状态。
在这里插入图片描述

[进程某一时刻的进程映像 ——图片来自王道]

进程的创建 实际上就是PCB的创建,进程的撤销,就是撤销进程的PCB。

进程的关键描述:
关于进程的定义,有很多种表述,但是我们记住这么一句话,面试和自己理解,都是最佳的:
进程是进程实体的运行过程,进程是系统进行资源分配调度的独立单位。

这些系统资源,可以是CPU时间片,可以是共享资源,可以是内存空间等等。

特征:

  • 动态性
    进程是程序的一次执行,它有这 创建、活动、暂停 终止等过程,具有生命后期,是动态产生变化和消亡的。进程的动态性是它的最基本特征。

  • 并发性
    多个进程可以同时存在于内存空间,可以对CPU等系统资源进行并发的使用。

  • 独立性
    指进程是一个能独立运行、独立获取资源和独立接受调度的基本单位,PCB是进程存在的唯一标识符,没有创建PCB的程序,都不能作为一个独立单位参与运行

  • 异步性
    由于进程的相互制约,使得各个进程按照各自独立的、不可预知的速度向前推进,异步性会导致程序执行结果的不可再现(每个准确的结果对多个进程来说,都需要一个固定的执行顺序,但是由于多个线程并发争抢资源,这个顺序往往就是由于异步性,导致不可确定)。



2.1.2 进程状态的转换

进程五态图
在这里插入图片描述

  • 运行态:进程在处理机上运行。单处理机中,每一时刻只有一个进程在运行。

  • 就绪态:进程获得了除了 处理机以外的一切所需资源,一旦得到虚拟机,可立刻运行。
    由于系统中 可能有多个进程都处于就绪态,通常将他们排成一个队列,称为——就绪队列。

  • 阻塞态 :又称 等待态。进程正在等待某一事件而暂停运行。注意一点:即使等待到资源、事件,也并不能直接运行,而是转换为就绪态。阻塞的进程因为阻塞的原因,会形成各种阻塞原因的阻塞队列。凡是请求某一设备而未获得满足的,在设备管理中的 DCT表中设备队列的队首指针,就是指向该请求队列的队首PCB。

  • 创建态:进程正在被创建,尚未转为就绪态。
    创建进程需要多个步骤:首先申请一个空白PCB,并向PCB中填入用于控制、管理进程的信息;然后为该进程分哦欸运行所需的必要的资源;最后把该进程转入就绪态,插入就绪队列。但是如果进程所需资源尚不能满足,则创建工作尚未完成,此时进程就是创建态。

  • 终止态
    进程正在从系统中消失,可能是正常结束,也可能是一场退出。进程需要结束运行时,系统先将进程置为终止态,再处理资源释放和回收工作。

【注意点】

进程从运行态 变为 阻塞态 是主动的行为,从 阻塞态 转换为 就绪态 是被动行为。

如何理解上面这句话?

运行态—>阻塞态:
进程请求某一资源(如外设)的使用和分配,或等待某一事件的发生(如IO操作的完成)时,它就从运行态转换为阻塞态。 进程以系统调用的形式请求操作系统提供服务,这是一种特殊的由运行用户态调用操作系统内核过程的形式。

简而言之: 进程 通过 请求 某一设备、资源,系统服务的过程,由于资源尚未准备好,请求未果,只能等待。请求的动作,是主动发生的。

一个问题:
进程A请求打印机,打印机正忙,我们知道进程此时是阻塞态。那么如果进程A请求到了打印机,打印机正在打印A的内容呢?此时进程是什么状态?
此时进程是 阻塞态
这个问题涉及到设备管理,进程A发起打印请求,是通过CPU执行指令的过程中触发对IO设备的请求的,当这个请求被发出,CPU此时会把A的现场保存在PCB中,维持现场。此时A的PCB进入打印机的DCT表的等待队列中,A变为阻塞态。如果设备控制策略是中断式、DMA或通道的,CPU会继续执行其他进程,A进程等待打印机,如果是程序直接控制,则CPU会一直轮询设备控制器的状态寄存器。
当打印机资源就绪,会从控制寄存器中读到cpu对A的打印请求,当打印完成,会触发中断,让CPU保存当前·正在执行的进程,转而去把A进程读入内存,转为就绪态,根据CPU时间片资源或优先级,分配给A进程CPU执行权,让它继续执行。

//TODO 七态在调度篇补充

2.1.3 进程的组成

1.进程控制块 PCB
进程创建时,操作系统为其创建PCB,PCB会常驻内存,任意时刻可以存取。进程结束将其删除。
PCB是进程存在的唯一标志。

2.程序段

3.数据段

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

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

相关文章

39.SpringCloud—配置管理nacos、远程调用Feign、服务网关Gateway

目录 一、SpringCloud。 (1)Nacos配置管理。 (1.1)统一配置管理。 (1.2)配置热更新(自动更新,不需要重启服务)。 (1.3)多环境配置共享。 &a…

【C++篇】初识C++

友情链接:C/C系列系统学习目录 知识点内容正确性以C Primer(中文版第五版)、C Primer Plus(中文版第六版)为标准,同时参考其它各类书籍、优质文章等,总结归纳出个人认为较有逻辑的整体框架&…

E. Tracking Segments - 二分+前缀和

分析&#xff1a; 记录所有区间和给定的每一次的询问&#xff0c;二分询问的最小满足条件&#xff0c;可以通过前缀和来计算区间内有几个1。 代码&#xff1a; #include <bits/stdc.h>#define x first #define y secondusing namespace std;typedef long long ll; type…

​面试官疯了:while(true)和for(;;)哪个性能好?

△Hollis, 一个对Coding有着独特追求的人△ 这是Hollis的第 427 篇原创分享 作者 l Hollis 来源 l Hollis&#xff08;ID&#xff1a;hollischuang&#xff09; while(true)和for(;;)都是做无限循环的代码&#xff0c;他俩有啥区别呢&#xff1f; 我承认这个问题有点无聊&#…

四、Docker镜像

学习参考&#xff1a;尚硅谷Docker实战教程、Docker官网、其他优秀博客(参考过的在文章最后列出) 目录 前言一、Docker镜像1.1 概念1.2 UnionFS&#xff08;联合文件系统&#xff09;1.3 Docker镜像加载原理1.4 重点理解 二、docker commit 命令2.1 是什么&#xff1f;2.2 命令…

走进人工智能|机器学习 解码未来的科技革命

前言: 机器学习的发展为我们提供了更智能、高效和便捷的科技产品和服务&#xff0c;可以改善我们的生活和工作方式。 文章目录 序言背景解码未来的科技革命技术支持应用领域程序员如何学总结 序言 机器学习是一种人工智能领域的技术&#xff0c;它让计算机通过数据自动地学习和…

folium离线地图使用

几点说明&#xff1a; 1. 代码亲测有效&#xff08;效果见文末图&#xff09; 2. 离线使用&#xff0c;需要预先下载png格式的离线地图&#xff0c;这里以OpenStreetMap为例。 3. 离线地图下载工具&#xff1a;Offline Map Maker https://www.allmapsoft.com/omm/ 4. foliu…

赋予女性力量:在 Web3 和元宇宙中释放新的机会

Web3 和元宇宙的出现引发了数字领域的革命&#xff0c;为全世界的用户带来了更多可能性。这一转变的其中一个重要方面是赋予女性权力&#xff0c;因为她们更踊跃参与元宇宙活动&#xff0c;并利用 Web3平台挑战传统边界。 The Sandbox 非常自豪能够开放、具包容性地为 womenint…

Swing如何使用?几个操作示例教会你!

以下是四个使用 Swing 组件创建的示例代码&#xff1a; 示例一&#xff1a;JFrame JFrame 是一个顶级容器&#xff0c;用于创建框架窗口。下面是一个简单的 JFrame 示例&#xff1a; import javax.swing.JFrame;/*** author: Ajie* create: 2023/6/21* Description:* FileNa…

OpenStack(1)-创建实例

目录 一、上传镜像 1.1 新建目录 1.2 上传至glance 1.3 查看镜像 二、新建实例 2.1 获取秘钥 2.2 新建实例 2.3 新建实例admin-vm 2.4 获取实例VNC的url 2.5 nova常用命令 一、上传镜像 1.1 新建目录 上传名为cirros-0.3.4-x86_64-disk.img的Linux测试镜像&#xf…

JdbcTemplate 数据访问工具

文章目录 前言JdbcTemplate 数据访问工具1. 概述2. 主要功能3. 示例 前言 如果您觉得有用的话&#xff0c;记得给博主点个赞&#xff0c;评论&#xff0c;收藏一键三连啊&#xff0c;写作不易啊^ _ ^。   而且听说点赞的人每天的运气都不会太差&#xff0c;实在白嫖的话&…

新时代的黑科技:就凭这个,还真就非JNPF低代码不可了

随着技术的不断进步&#xff0c;现代企业对软件开发的需求越来越迫切&#xff0c;传统的软件开发方式已无法满足快速迭代和创新的需求。在这种情况下&#xff0c;低代码开发平台应运而生。低代码开发平台通过提供可视化的开发工具和预构建的组件&#xff0c;大大加快了应用程序…

Docker的安装部署以及配置的操作流程(图文)

Docker的安装以及配置流程&#xff08;图文&#xff09; Docker一、配置域名解析二、CentOS Docker 安装1. 查询已安装的docker2. 安装必要的一些系统工具3. 添加软件源&#xff08;阿里云&#xff09;信息4. 更新并安装Docker-CE5. 查看docker 的版本6. 关闭运行的防火墙7. 开…

CMake 工程实践指南专栏介绍

CMake 工程实践指南专栏介绍 大家好,我是 eg,欢迎来到我的 CMake 工程实践指南专栏。本专栏会保持一周一更的节奏,带大家从一个 CMake 小白蜕变成 CMake 熟练使用者。 1. 我与 CMake 的故事 在正式内容开始之前,我想谈谈我和 CMake 的故事。我读书的时候是压根儿不知道 …

造手机、“+ AI”,掉队的蔚来瞎折腾?

对标豪华品牌BBA&#xff0c;自建换电站&#xff0c;蔚来汽车曾凭借先发优势&#xff0c;一度成为造车新势力的领头羊&#xff0c;但最近两个月&#xff0c;蔚来的单月交付量仅有6000多台&#xff0c;渐露掉队之相。 主业低迷&#xff0c;蔚来传出新消息。两天前&#xff0c;工…

c++lambda函数笔记

1、labmda函数用途&#xff1a; 用于简短功能函数的定义&#xff0c;并传递到std算法中。 2、一般函数与lambda函数比较示例 3、如何定义lambda 如下为lambda通用定义式子&#xff1a; [capture] (params) opt->ret{body;}; capture——捕获列表&#xff0c;[]为不捕获变量…

JAVA线程池submit详解 ,execute和submit提交任务的区别

文章目录 前言submit方法定义Future是什么execute、submit方法区别是什么submit主干流程逻辑newTaskFor做了什么FutureTasknewTaskFor(Runnable runnable, T value)的实现FutureTask(Callable<V> callable)的实现execute(ftask) FutureTask是如何实现线程池执行可获取返回…

java多线程简明笔记(5)线程礼让 yield

关键字&#xff1a;yield 官方文档就不说了&#xff0c;简单理解&#xff0c;礼让 线程礼让 yield正在执行的线程暂停&#xff0c;不阻塞 示例代码&#xff1a; public class ThreadTest7 implements Runnable{public static void main(String[] args) {ThreadTest7 tnew Th…

在线广告业务流程

一、业务流程 1、注册/登录 广告主登录系统&#xff0c;进行基本的鉴权&#xff0c;角色分配&#xff0c;账户管理。同时为营销参与者包括产品、运营、销售等提供登录、附身功能。 2、代理开户 & 订单合同管理 代理商可代理广告主开户&#xff0c;客户同样统一维护在用户…

帮你解锁 Android 性能优化五大误区和两大疑点!

近年来&#xff0c;社区充斥着关于 Android 性能优化的各种误区&#xff0c;本文本着误区终结者的精神&#xff0c;使用具体的性能检测工具&#xff0c;结合真实案例仔细分析这些情况&#xff0c;并对比它们的测试结果&#xff0c;也会聚焦 Android 开发者平时在编码过程的实际…