操作系统杂项(八)

目录

一、简述互斥锁的机制,互斥锁与读写的区别

1、互斥锁机制

2、互斥锁和读写锁

二、简述信号量及其作用

1、概念

2、原理

3、作用

三、简述进程、线程的中断切换过程

1、进程上下文切换

2、线程上下文切换

四、简述自旋锁和互斥锁的使用场景

1、互斥锁

2、自旋锁

五、简述线程的状态及其切换方式

1、创建状态

2、就绪状态

3、运行状态

4、阻塞状态

5、终止状态

六、简述多线程和单线程的区别,多线程编程、多线程加锁注意事项

1、区别

2、多线程编程注意事项

3、多线程加锁注意事项


一、简述互斥锁的机制,互斥锁与读写的区别

1、互斥锁机制

        mutex,用于保证在任何时刻,都只能有一个线程访问该对象。当获取锁操作失败时,线程会进入睡眠,等待锁释放时被唤醒。

2、互斥锁和读写锁

        (1)读写锁区分读者和写者,而互斥锁不区分;

        (2)互斥锁同一时间只允许一个线程访问该对象,无论读写;读写锁同一时间内只允许一个写者,但是允许多个读者同时读对象。

        互斥锁其实就是一个bool变量,为true时表示锁可获取,为false时表示已上锁。这里说的是互斥锁,其实是泛指linux中所有的锁机制。

        我们采用互斥锁保护临界区,从而防止竞争条件。也就是说,一个线程在进入临界区时应得到锁,在退出临界区时释放锁。函数acquire()获取锁,而函数release()释放锁。如下所示:

do{获得锁关键区释放区剩余区
}while(true);

        每个互斥锁有一个布尔变量avaliable,它的值表示锁是否可用。如果锁是可用的,那么调用acquire()会成功,并且锁不再可用。当一个线程试图获取不可用的锁时,它会阻塞,直到锁被释放。按如下定义acquire():

acquire(){while (!avaliable);/*busy wait*/available = false;
}

        按如下定义release():

release(){avaliable = true;
}

二、简述信号量及其作用

1、概念

        信号量本质上是一个计数器,用于多进程对共享数据对象的读取,它主要是用来保护共享资源(信号量也属于临界资源),使得资源在一个时刻只有一个进程独享。

2、原理

        由于信号量只能进行两种操作等待和发送信号,即P(sv)和V(sv),具体的行为如下:

        (1)P(sv)操作:如果sv的值大于零,就给它减1;如果它的值为零,就挂起该进程的执行(信号量的值为正,进程获得该资源的使用权,进程将信号量减1,表示它使用了一个资源单位)。

        (2)V(sv)操作:如果有其他进程因等待sv而被挂起,就让它恢复运行,如果没有进程因等待sv而挂起,就给它加1(若此时信号量的值为0,则进程进入挂起状态,直到信号量的值大于0,若进程被唤醒则返回至第一步)。

3、作用

        用于多进程对共享数据对象的读取,它主要是用来保护共享资源(信号量也属于临界资源),使得资源在一个时刻只有一个进程独享。

三、简述进程、线程的中断切换过程

        上下文切换指的是内核(操作系统的核心)在CPU上对进程或者线程进行切换。

1、进程上下文切换

        (1)保护被中断进程的处理器现场信息;

        (2)修改被中断进程的进程控制块有关信息,如进程状态等;

        (3)把被中断进程的进程控制块加入有关队列;

        (4)选择下一个占有处理器运行的进程;

        (5)根据被选中进程设置操作系统用到的地址转换和存储保护信息。

        切换页目录以使用新的地址空间。切换内核栈和硬件上下文(包括分配的内存,数据段,堆栈段等)

        (6)根据被选中进程恢复处理器现场。

2、线程上下文切换

        (1)保护被中断线程的处理器现场信息;

        (2)修改被中断线程的线程控制块有关信息,如线程状态等;

        (3)把被中断线程的线程控制块加入有关队列;

        (4)选择下一个占有处理器运行的线程;

        (5)根据被选中线程设置操作系统用到的存储保护信息。

        切换内核栈和硬件上下文(切换堆栈以及各寄存器)

        (6)根据被选中线程恢复处理器现场。

四、简述自旋锁和互斥锁的使用场景

1、互斥锁

        用于临界区持锁时间比较长的操作,比如下面这些情况可以考虑:

        (1)临界区有IO操作;

        (2)临界区代码复杂或者循环量大;

        (3)临界区竞争非常激烈;

        (4)单核处理器。

2、自旋锁

        主要用在临界区持锁时间非常短且CPU资源不紧张的情况下。

五、简述线程的状态及其切换方式

        类似进程,共有五种状态:新建就绪运行阻塞终止

        转换方式如下:

1、创建状态

        一个应用程序从系统上启动,首先进入创建状态,获取系统资源。

2、就绪状态

        在创建状态完成之后,线程已经准备好,处于就绪状态,但是还未获得处理器资源,无法运行。

3、运行状态

        获取处理器资源,被系统调度,当具有时间片时开始进入运行状态。如果线程的时间片用完了就进入就绪状态。

4、阻塞状态

        在运行状态期间,如果进行了阻塞操作,如耗时的I/O操作,此时线程暂时无法操作就进入到了阻塞状态,在这些操作完成后进入就绪状态,等待再次获取处理器资源,被系统调度,当具有时间片时就进入运行状态。

5、终止状态

        线程结束或者被系统终止,进入终止状态。

相互转换如图所示:

六、简述多线程和单线程的区别,多线程编程、多线程加锁注意事项

1、区别

        (1)多线程从属于一个进程,单线程也从属于一个进程;一个线程挂掉都会导致从属的进程挂掉;

        (2)一个进程里有多个线程,可以并发执行多个任务;一个进程里只有一个线程,就只能执行一个任务;

        (3)多线程并发执行多任务,需要切换内核栈与硬件上下文,有切换的开销;单线程不需要切换,没有切换开销;

        (4)多线程并发执行多任务,需要考虑同步的问题;单线程不需要考虑同步的问题。

2、多线程编程注意事项

        多线程编程需要考虑同步的问题。线程间的同步方式包括互斥锁信号量条件变量读写锁

3、多线程加锁注意事项

        主要需要注意死锁的问题。破坏死锁的必要条件从而避免死锁。

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

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

相关文章

宝塔单ip,新建多站点

报错如上: 那么如何新建多站点呢 先随便写个名字上去,然后再重新绑定别的端口… 这个时候访问99端口即可 。 如果是有域名,则不需要这样做 、直接80端口也可以多站点

数据缺失补全方法综述

数据缺失补全方法综述 摘要1. 引言2. 数据缺失的类型3. 数据缺失补全方法3.1 简单插补方法3.1.1 均值插补3.1.2 中位数插补3.1.3 众数插补3.1.4 前向填充和后向填充3.1.5 线性插值3.1.6 多重插补 3.2 基于模型的插补方法3.2.1 线性回归插补3.2.2 加权回归插补3.2.3 主成分分析&…

STM32智能工业监控系统教程

目录 引言环境准备智能工业监控系统基础代码实现:实现智能工业监控系统 4.1 数据采集模块 4.2 数据处理与控制模块 4.3 通信与网络系统实现 4.4 用户界面与数据可视化应用场景:工业监控与优化问题解决方案与优化收尾与总结 1. 引言 智能工业监控系统通…

Navicat premium最新【16/17 版本】安装下载教程,图文步骤详解(超简单,一步到位,免费下载领取)

文章目录 软件介绍软件下载安装步骤激活步骤 软件介绍 Navicat是一款快速、可靠且功能全面的数据库管理工具,专为简化数据库的管理及降低系统管理成本而设计。以下是对Navicat的详细介绍: 一、产品概述 开发目的:Navicat旨在通过其直观和设计…

HTML前端面试题之<iframe>标签

面试题:iframe 标签的作用是什么?有哪些优缺点 ? 讲真,刷这道面试题之前我根本没有接触过iframe,网课没讲过,项目实战没用过,但却在面试题里出现了!好吧,我只能说:前端路漫漫&…

构建基于Spring Boot的SaaS应用

引言 在设计和实现SaaS系统时,安全性是至关重要的考虑因素。一个全面的安全策略不仅能保护系统免受恶意攻击,还能确保用户数据的机密性、完整性和可用性。本文将探讨在SaaS架构中实现数据加密、敏感信息保护以及应用安全的最佳实践和技术方案&#xff0…

如何恢复最近删除的文件?5种简单方法!

数据丢失在我们的工作生活中经常发生。当你决定清理硬盘或U盘时,你会删除一些文件夹或文件。如果你通过右键单击删除文件,则可以很容易从回收站恢复已删除的文件。但是,如果你按Shift Delete键、清空回收站或删除大于8998MB的大文件夹&#…

C++ | Leetcode C++题解之第278题第一个错误的版本

题目&#xff1a; 题解&#xff1a; class Solution { public:int firstBadVersion(int n) {int left 1, right n;while (left < right) { // 循环直至区间左右端点相同int mid left (right - left) / 2; // 防止计算时溢出if (isBadVersion(mid)) {right mid; // 答案…

element 结合 {} 实现自适应布局

通过el-row el-col 实现 例如 :xl“{ 1: 24, 2: 12, 3: 8, 4: 6 }[tableData.length] || 6” length 1 2 3 4 、代码数量为 1 2 3 4 >4 时不同卡片数量时尺寸的配置

MySQL4.索引及视图

1.建库 create database mydb15_indexstu; use mydb15_indexstu;2.建表 2.1 student表学&#xff08;sno&#xff09;号为主键&#xff0c;姓名&#xff08;sname&#xff09;不能重名&#xff0c;性别&#xff08;ssex&#xff09;仅能输入男或女&#xff0c;默认所在系别&a…

linux下usb抓包:wireshark+usbmon

step1. 加载usbmon模块 sudo mount -t debugfs none /sys/kernel/debug #这一步一般不用做&#xff0c;debugfs默认都是挂载的 sudo modprobe usbmon #如果这个命令找不到usbmon&#xff0c;那手动从/lib/modules中insmod sudo apt-get install wireshark 若加载成功&…

告别繁琐地推!Xinstall如何一键优化你的App地推方案

在这个移动应用遍地开花的时代&#xff0c;App地推活动早已成为各大厂商获取新用户、提升品牌曝光度的重要手段。然而&#xff0c;传统地推方案中的种种弊端&#xff0c;如填写地推码/邀请码的繁琐、渠道打包的工作量繁重、人工登记上报的不准确等&#xff0c;无一不在拖慢地推…

纯电SUV又一个卷王,比亚迪都没它狠

文 | AUTO芯球 作者 | 雷慢 太狠了&#xff0c;就在刚刚&#xff0c; 我劝阻了一个高中同学暂时不要买宋PLUS纯电版&#xff0c; 因为又一个新能源卷王出现了&#xff0c; 在卷价格上&#xff0c;宋PLUS都没它狠。 不信你们看&#xff0c;埃安V第二代刚发布&#xff0c; …

如何快速抓取小红书帖子评论?两大实战Python技巧揭秘

摘要&#xff1a; 本文将深入探讨两种高效的Python方法&#xff0c;助您迅速获取小红书文章下方的所有评论&#xff0c;提升市场分析与用户洞察力。通过实战示例与详细解析&#xff0c;让您轻松掌握数据抓取技巧&#xff0c;为您的内容营销策略提供有力支持。 如何快速抓取小…

可见性::

目录 定义&#xff1a; 解决方法&#xff1a; ①使用synchronized实现缓存和内存的同步 修改一&#xff1a; 加入语句&#xff1a; 代码&#xff1a; 修改2&#xff1a; 在代码块中加入&#xff1a; 代码&#xff1a; 执行结果&#xff1a; 原因&#xff1a; ②使用…

java通过poi解析word入门

文章目录 介绍一、了解word docx文档的结构二、引入POI的依赖三、解析Word文档常用API加载Word文档获取文档整体结构获取文档中的段落获取文档中的表格获取文档中的脚注 四、解析Word中的段落示例五、读取Word文档并遍历图片六、解析Word中的图片示例 介绍 Apache POI 是一个处…

基于高光谱图像的压缩感知网络

压缩感知算法原理 压缩感知&#xff08;Compressed Sensing, CS&#xff09;是一种信号处理技术&#xff0c;它允许在远低于Nyquist采样率的情况下对信号进行有效采样和重建。压缩感知理论的核心思想是利用信号的稀疏性&#xff0c;通过少量的线性测量重建出原始信号。以下是压…

oncoPredict:根据细胞系筛选数据预测体内或癌症患者药物反应和生物标志物

在14年的时候&#xff0c;oncoPredict函数的开发团队在Genome Biology上发了一篇文章。 这篇文章的核心目的是阐释了使用治疗前基线肿瘤基因表达数据去预测患者化疗反应。开发团队发现使用细胞系去预测临床样本的药物反应是可行的。 鉴于之前的理论&#xff0c;该研究团队首先…

Marin说PCB之----我的创作纪念日

今天早上打开手机无意间看到了CSDN给我发来的私信&#xff0c;不知不觉中已经是512天了&#xff0c;下面小编我就给诸位道友们分享我和CSDN的那些年。 机缘 有一天小编我正在回去的路上&#xff0c;突然从天上落下一本书&#xff0c;叫信号完整性与电源完整性分析&#xff1a; …

Vue的安装配置

1.安装node js Node.js — 在任何地方运行 JavaScript (nodejs.org) 2.测试nodejs是否安装成功 node -v npm -v3.通过npm 安装 vue npm install -g vue/cli4.测试vue是否安装成功 vue --version5.打开PyCharm&#xff0c;创建项目&#xff1a;flask-web vue create flask…