62-63-64 - 进程互斥锁Mutex的初步实现

news2024/11/25 23:36:24

---- 整理自狄泰软件唐佐林老师课程

文章目录

  • 1. 问题
  • 2. 系统调用重设计
    • 2.1 互斥锁系统调用功能设计
    • 2.2 整体调用流程
    • 2.3 编程实验:互斥锁模块的创建
    • 2.4 思考
  • 3. 在内核态实现互斥锁功能的考虑
    • 3.1 互斥锁内核数据结构及接口实现
      • 3.1.1 创建互斥锁
      • 3.1.2 销毁互斥锁
      • 3.1.3 进入临界区
      • 3.1.4 退出临界区
    • 3.2 编程实验:互斥锁的内核实现
    • 3.3 思考
    • 3.4 问题
    • 3.5 再论任务状态
    • 3.6 互斥锁与任务调度
      • 3.6.1 互斥锁与任务调度一
      • 3.6.2 互斥锁与任务调度二
      • 3.6.3 互斥锁与任务调度三
    • 3.7 编程实验:互斥锁与任务调度
    • 3.8 思考

1. 问题

  • Mutex相关的函数接口处于用户态还是内核态?
    • 处于 内核态
  • 为什么?
    • Mutex操作可能导致任务状态的转换(执行态==>阻塞态),其功能只能由内核实现。
    • 所以,必须在用户态使用内核中的功能。==> 通过 系统调用

在这里插入图片描述

2. 系统调用重设计

在这里插入图片描述

2.1 互斥锁系统调用功能设计

void SysCallHandler(uint type, 	// 中断功能号
					uint cmd,   // 子功能号
					uint param1, 
					uint param2);

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

2.2 整体调用流程

在这里插入图片描述

  • D.T.OS架构图

在这里插入图片描述

2.3 编程实验:互斥锁模块的创建

【参看链接】:62-63-64 - 进程互斥锁的初步实现 / 62

在这里插入图片描述
在这里插入图片描述

2.4 思考

  • 在内核中实现互斥锁的功能是必要的吗?

3. 在内核态实现互斥锁功能的考虑

  • 进入内核态之后所有任务均 暂停执行
  • 直观的决定当前任务是否能进入临界区(True or False)
    • Mutex空闲状态 ==> True:返回用户态,当前任务继续执行
    • Mutex占用状态 ==> False:当前任务进入阻塞状态,调度下一个任务执行
  • 内核拥有最高特权级,能够决定任务的生死

3.1 互斥锁内核数据结构及接口实现

设计思想:通过内核链表管理Mutex变量,只有链表中的Mutex变量才能完成任务间的互斥

在这里插入图片描述

3.1.1 创建互斥锁

在这里插入图片描述

3.1.2 销毁互斥锁

在这里插入图片描述

3.1.3 进入临界区

在这里插入图片描述

3.1.4 退出临界区

在这里插入图片描述

3.2 编程实验:互斥锁的内核实现

【参看链接】:62-63-64 - 进程互斥锁Mutex的初步实现 / 63

在这里插入图片描述

3.3 思考

  • 在当前实现下,阻塞的多个任务重新进入执行态,会发生什么?

3.4 问题

  • 内核中如何实现任务的阻塞?

3.5 再论任务状态

在这里插入图片描述

由互斥锁触发的内核操作:

  • 当任务获取锁失败时:
    • 将当前任务移入等待队列(进入阻塞态)
    • 调度下一个任务执行
  • 当互斥锁被标记为空闲时:
    • 将等待队列中的任务移入就绪队列(脱离阻塞态)

3.6 互斥锁与任务调度

MtxSchedule:

  1. 调度当前任务进入等待队列
  2. 将等待队列中的任务调度进就绪队列

3.6.1 互斥锁与任务调度一

在这里插入图片描述

3.6.2 互斥锁与任务调度二

在这里插入图片描述

3.6.3 互斥锁与任务调度三

在这里插入图片描述

3.7 编程实验:互斥锁与任务调度

【参看链接】:62-63-64 - 进程互斥锁Mutex的初步实现 / 64

在这里插入图片描述在这里插入图片描述

3.8 思考

  • 目前互斥锁的设计实现上,有需要改进优化的地方吗?

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

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

相关文章

Java 字符串String 在堆,栈,常量池中

一、Java程序的运行会涉及以下的内存区域: 寄存器:JVM内部虚拟寄存器,存取速度非常快,程序不可控制。 栈:存放基本类型的数据和对象的引用,但对象本身不存放在栈中,而是存放在堆中。 堆:存放n…

全同态加密:FHEW

参考资料: Micciancio D, Peikert C. Trapdoors for Lattices: Simpler, Tighter, Faster, Smaller[C]//Eurocrypt. 2012, 7237: 700-718.Alperin-Sheriff J, Peikert C. Faster bootstrapping with polynomial error[C]//Advances in Cryptology–CRYPTO 2014: 34…

css盒模型详解

一、引言 盒模型是网页开发中的一个基本概念,它描述了网页元素的外观和大小。盒模型由内容区域、内边距、边框和外边距四个部分组成,这些部分的大小和位置都可以通过CSS进行控制。在本文中,我们将介绍盒模型的概念和作用,并提出本…

一、SpringMVC概述

1.什么是SpringMVC 基于MVC开发模式的框架,用来优化控制器.它是Spring家族的一员.它也具备IOC和AOP. 什么是MVC?   一种开发模式,模型视图控制器的简称.所有的web应用都是基于MVC开发.   M:模型层,包含实体类,业务逻辑层,数据访问层   V:视图层,html,javaScript,vue等都…

MySQL安装和配置

下载官网下载mysql解压版本:配置环境变量下载完成后直接解压到需要放的文件夹,根据文件夹来配置环境变量;新建系统变量,变量名自取,值是MySQL的目录编辑path环境变量,加上MySQL的bin目录 %MYSQL_HOME%\bin配…

【python】序列(列表、元组)、字典、集合的初步认识

一、序列 序列类型(sequence):一组有序的数据集,特点是数据之间存在先后关系,通过序号访问 序列包含以下三种类型: 1.字符串(str)不可修改 2.列表(list)可修改 3.元组(t…

基于java的高校辅导员工作管理系统

摘 要网络技术的快速发展给各行各业带来了很大的突破,也给各行各业提供了一种新的管理模块,对于高校辅导员工作管理将是又一个传统管理到智能化信息管理的改革,设计高校辅导员工作管理系统的目的就是借助计算机让复杂的班级信息、学籍信息等管…

如何使用JSR 303 进行后台数据校验?

文章目录一、JSR 3031、什么是 JSR 303?2、为什么使用 JSR 303?3、JSR 303 常见操作?二、使用 JSR 303 相关注解处理逻辑1、JSR 303 注解处理逻辑1.1 使用步骤1.2 实际应用2 、JSR 303 分组校验2.1 为什么使用 分组校验?2.2 使用步…

软件设计师教程(八)计算机系统知识-软件工程基础知识

软件设计师教程 软件设计师教程(一)计算机系统知识-计算机系统基础知识 软件设计师教程(二)计算机系统知识-计算机体系结构 软件设计师教程(三)计算机系统知识-计算机体系结构 软件设计师教程(…

【C++】list迭代器的深度剖析及模拟实现(感受类封装,类和对象的思想)

早点睡兄弟,别一天到晚就熬夜。 文章目录一、通过list迭代器来感受类和对象以及类封装的思想1.迭代器的特征和本质是什么?(两大特征:类的内嵌类型,行为像指针。本质:内置类型定义的变量或自定义类型实例化…

Linux命令·less

less 工具也是对文件或其它输出进行分页显示的工具,应该说是linux正统查看文件内容的工具,功能极其强大。less 的用法比起 more 更加的有弹性。在 more 的时候,我们并没有办法向前面翻, 只能往后面看,但若使用了 less …

Java Stream 如何提高遍历集合效率?

目录什么是 Stream?Stream 如何优化遍历?Stream 源码实现内部实现Stream 并行处理什么是 Stream? Stream 的聚合操作与数据库 SQL 的聚合操作 sorted、filter、map 等类似。我们在应用层就可以高效地实现类似数据库 SQL 的聚合操作了&#x…

Spring MVC 详解(连接、获取参数、返回数据)

在之前我们先简单那谈谈Spring、SpringBoot以及Spring MVC框架之间有什么关系?首先Spring是一个框架,SpringBoot脚手架是为了快速开发Spring框架而创造的技术。可以理解为SpringBoot又在Spring上面包了一层壳子,是基于Spring的,是…

xxl-job调度中心、执行器源码详解

文章目录简介调度中心一.程序启动初始化1.初始化入口类2.初始化I18n3.初始化快慢调度线程池4.初始化处理执行器注册或移除线程池更新执行器最新在线的守护线程5.初始化监控任务调度失败或执行失败的守护线程6.初始化处理执行器回调线程池监控任务执行结果丢失的守护线程7.初始化…

创建虚拟机、添加镜像以及配置虚拟机

一、创建虚拟机 1、点击 “创建新的虚拟机” 2.选择“自定义配置” 到后面可以选择硬件的类型 3.默认值就行 4.选择 “稍后安装操作系统” 5.操作系统选择 “Linux”,版本结合镜像自行选择 6. 虚拟机的名称自行定义, 就是上述显示出来的名称。 虚拟机…

Mybatis使用手册

Myabtis 官网文档 官网网站&#xff1a;https://mybatis.org/mybatis-3/zh/index.html 搭建环境 项目结构 引入依赖 创建Maven项目&#xff0c;pom依赖文件中加入mybatis和jdbc驱动依赖。 <dependency><groupId>org.mybatis</groupId><artifactId>…

CSS渐进增强方案

首先需要明确一点&#xff0c;以往浏览器对css的支持是不同的&#xff0c;不同浏览器的样式可能会存在差异&#xff0c;对待这种差异问题&#xff0c;需要写几套不同的css来兼容&#xff08;边框、圆角、颜色等&#xff09;&#xff0c;这样是非常麻烦的&#xff0c;浏览器css显…

Go项目(订单微服务)

文章目录简介handlerUTweb支付服务Notify小结简介 这部分开始梳理订单微服务的关键点这里仿京东&#xff0c;订单结算在购物车进行&#xff0c;所以用户的操作是加入商品到购物车&#xff0c;进入购物车付款从页面分析需求 点击添加到购物车&#xff0c;删除车中商品&#xff…

JAVA环境配置多环境(全,细,简单)

下载java包&#xff1a;https://www.oracle.com/java/technologies/downloads &#xff08;8版本稳定&#xff09; 直接无脑安装java程序 &#xff08;包括jdk-开发与jre-运行&#xff09; 接下来是java环境配置&#xff1a; 创建系统变量 &#xff08;用户变量也可以&#…

近红外吸收荧光染料IR-808,IR-808 NH2,IR-808 amine,发射808nm 性质分享

中文名称&#xff1a;IR-808 氨基英文名称&#xff1a;IR-808 NH2&#xff0c;IR-808 amine&#xff0c;IR-808-NH2规格标准&#xff1a;10mg&#xff0c;25mg&#xff0c;50mgCAS&#xff1a;N/A产品描述&#xff1a;IR-808&#xff0c;发射808nm&#xff0c;酯溶性染料修饰氨…