面试操作系统八股文五问五答第二期

面试操作系统八股文五问五答第二期

作者:程序员小白条,个人博客

相信看了本文后,对你的面试是有一定帮助的!

⭐点赞⭐收藏⭐不迷路!⭐

1.怎么解决死锁?

1、预防死锁:通过设置一些限制条件,去破坏产生死锁的必要条件(四个条件)

2、避免死锁:在资源分配过程中,使用某种方法避免系统进入不安全的状态,从而避免发生死锁(银行家算法)

3、检测死锁:允许死锁的发生,但是通过系统的检测之后,采取一些措施,将死锁清除掉

4、解除死锁:该方法与检测死锁配合使用

2.JMM内存模型?

Java 内存模型(JMM) 抽象了线程和主内存之间的关系,就比如说线程之间的共享变量必须存储在主内存中。

在 JDK1.2 之前,Java 的内存模型实现总是从 主存 (即共享内存)读取变量,是不需要进行特别的注意的。而在当前的 Java 内存模型下,线程可以把变量保存 本地内存 (比如机器的寄存器)中,而不是直接在主存中进行读写。这就可能造成一个线程在主存中修改了一个变量的值,而另外一个线程还继续使用它在寄存器中的变量值的拷贝,造成数据的不一致。

什么是主内存?什么是本地内存?

●主内存:所有线程创建的实例对象都存放在主内存中,不管该实例对象是成员变量,还是局部变量,类信息、常量、静态变量都是放在主内存中。为了获取更好的运行速度,虚拟机及硬件系统可能会让工作内存优先存储于寄存器和高速缓存中。

●本地内存:每个线程都有一个私有的本地内存,本地内存存储了该线程以读 / 写共享变量的副本。每个线程只能操作自己本地内存中的变量,无法直接访问其他线程的本地内存。如果线程间需要通信,必须通过主内存来进行。本地内存是 JMM 抽象出来的一个概念,并不真实存在,它涵盖了缓存、写缓冲区、寄存器以及其他的硬件和编译器优化。

3.CPU和内存之间的三级缓存有了解吗

为什么要弄一个 CPU 高速缓存呢? 类比我们开发网站后台系统使用的缓存(比如 Redis)是为了解决程序处理速度和访问常规关系型数据库速度不对等的问题。 CPU 缓存则是为了解决 CPU 处理速度和内存处理速度不对等的问题。

我们甚至可以把 内存看作外存的高速缓存,程序运行的时候我们把外存的数据复制到内存,由于内存的处理速度远远高于外存,这样提高了处理速度。

总结:CPU Cache 缓存的是内存数据用于解决 CPU 处理速度和内存不匹配的问题,内存缓存的是硬盘数据用于解决硬盘访问速度过慢的问题。

现代的 CPU Cache 通常分为三层,分别叫 L1,L2,L3 Cache。有些 CPU 可能还有 L4 Cache,这里不做讨论,并不常见

CPU Cache 的工作方式: 先复制一份数据到 CPU Cache 中,当 CPU 需要用到的时候就可以直接从 CPU Cache 中读取数据,当运算完成后,再将运算得到的数据写回 Main Memory 中。但是,这样存在 内存缓存不一致性的问题 !比如我执行一个 i++ 操作的话,如果两个线程同时执行的话,假设两个线程从 CPU Cache 中读取的 i=1,两个线程做了 i++ 运算完之后再写回 Main Memory 之后 i=2,而正确结果应该是 i=3。

CPU 为了解决内存缓存不一致性问题可以通过制定缓存一致协议(比如 MESI 协议open in new window)或者其他手段来解决。 这个缓存一致性协议指的是在 CPU 高速缓存与主内存交互的时候需要遵守的原则和规范。不同的 CPU 中,使用的缓存一致性协议通常也会有所不同。

我们的程序运行在操作系统之上,操作系统屏蔽了底层硬件的操作细节,将各种硬件资源虚拟化。于是,操作系统也就同样需要解决内存缓存不一致性问题。

操作系统通过 内存模型(Memory Model) 定义一系列规范来解决这个问题。无论是 Windows 系统,还是 Linux 系统,它们都有特定的内存模型。

4.多核CPU下,三级缓存对于每个内核来说是共享的吗?那你知道它的数据存储以及指令存储的方式有了解过吗

1.L1缓存:

L1缓存是每个核心(内核)私有的,不与其他核心共享。

通常包括L1数据缓存和L1指令缓存,分别用于数据和指令的快速存取。

2.L2缓存:

L2缓存有时也是每个核心私有的,特别是在一些多核架构中。

在一些多核架构中,L2缓存可能部分共享,这意味着一组核心(例如,两个核心共享一个L2缓存)。

L2缓存通常包括数据和指令缓存。

3.L3缓存:

L3缓存通常是在多核CPU上的共享缓存层,用于在所有核心之间共享数据。

这意味着多个核心可以访问同一个L3缓存,以提供更大的缓存容量和更好的数据共享。

L3缓存通常更大,但速度相对较慢,用于存储和共享较大量的数据。

●数据存储和指令存储的方式通常是硬件设计的一部分,不同的CPU架构可能有不同的实现方式。然而,一般来说,这些缓存存储数据和指令的方式与它们的缓存行(cache lines)相关,缓存行是缓存中的最小数据单元。缓存行通常以块的方式加载到缓存中,这有助于提高数据局部性(data locality),从而加速数据访问。

5.CPU指令重排序的好处?

●提高并行性:现代处理器通常具有多个功能单元,可以执行多个指令,指令重排序可以使处理器更好地利用这些功能单元,从而提高并行性和整体性能。

●减少空闲周期:指令重排序可以减少处理器在等待某些操作完成时的空闲周期。例如,如果某个指令需要等待内存数据加载,处理器可以在等待时执行其他无依赖的指令,从而减少了空闲时间。

●提高分支预测准确性:指令重排序可以改善分支预测的准确性。处理器可以在分支预测错误时丢弃已经被重排序的指令,从而减少性能下降。

●提高内存层次的利用:指令重排序可以更好地利用处理器的高速缓存。通过重新排列指令以最大限度地减少缓存未命中,可以提高内存层次结构的效率。

●降低数据冒险的影响:数据冒险是一种因为数据相关性而导致指令无法立即执行的情况。指令重排序可以通过提前执行无数据相关性的指令来减轻数据冒险的影响。

●提高指令级并行性:指令重排序有助于充分利用指令级并行性,即处理器可以同时执行多条指令,而不必等待前一条指令的完成。

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

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

相关文章

JAVA面试题8

1.Java中的线程是什么? 它有什么作用? 答案:线程是程序执行流的最小单位,用于实现多任务并发执行。Java中的线程可以实现并发编程,提高程序的性能和响应性。 2.什么是Java中的同步(Synchronization&#x…

超静音的两相步进电机驱动芯片GC6609,GC6610的性能分析

两相步进电机驱动芯片GC6609,GC6610它们是一款超静音的两相步进电机驱动芯片,内置最大 256 细分的步进驱动模式, 超静音,低振动。芯片可以工作在 4~36V 的宽工作电压范围内,平均工作电流可以达到 2A和2.5A &#xff0c…

大数据机器学习算法项目——基于Django/协同过滤算法的房源可视化分析推荐系统的设计与实现

大数据机器学习算法项目——基于Django/协同过滤算法的房源可视化分析推荐系统的设计与实现 技术栈:大数据爬虫/机器学习学习算法/数据分析与挖掘/大数据可视化/Django框架/Mysql数据库 本项目基于 Django框架开发的房屋可视化分析推荐系统。这个系统结合了大数据…

STM32-01-认识单片机

文章目录 一、单片机简介二、Cortex-M系列介绍三、初识STM32四、STM32原理图设计五、搭建开发环境六、STM32初体验七、MDK5使用技巧 一、单片机简介 单片机是什么? 单片机:Single-Chip Microcomputer,单片微型计算机,是一种集成电…

python获得曲线峰值的个数

import numpy as np from scipy.signal import find_peaks import matplotlib.pyplot as plt# 生成示例数据 x np.linspace(0, 10, 100) y np.sin(x)# 查找峰值 peaks, _ find_peaks(y)# 绘制曲线和峰值点 plt.plot(x, y) plt.plot(x[peaks], y[peaks], ro)# 显示峰值个数 n…

Golang channle(管道)基本介绍、快速入门

channel(管道)-基本介绍 为什么需要channel?前面使用全局变量加锁同步来解决goroutine的通讯,但不完美 1)主线程在等待所有goroutine全部完成的时间很难确定,我们这里设置10秒,仅仅是估算。 2)如果主线程休眠时间长了&#xff0c…

【计算机网络】HTTP响应报文Cookie原理

目录 HTTP响应报文格式 一. 状态行 状态码与状态码描述 二. 响应头 Cookie原理 一. 前因 二. Cookie的状态管理 结束语 HTTP响应报文格式 HTTP响应报文分为四部分 状态行:包含三部分:协议版本,状态码,状态码描述响应头&a…

如何选择LED天幕屏的型号

随着LED屏幕技术的不断成熟,其应用范围也日益扩大,从传统的墙面固定安装,到落地式、租赁移动式,再到LED互动地砖屏和安装在天花板上的LED天幕屏等,安装方式多种多样。那么,在面对如此多元化的选择时&#x…

PHP基础 - 类型比较

在 PHP 中,作为一种弱类型语言,它提供了松散比较和严格比较两种方式来比较变量的值和类型。 松散比较: 使用两个等号(==)进行比较,只会比较变量的值,而不会考虑它们的数据类型。例如: $a = 5; // 整数 $b = 5; // 字符串if ($a == $b) {echo "相等"; // 输…

C/C++ 编程规范总结

目录 前言 一、编程规范的作用 二、规范的三种形式 三、规范的内容 1. 基本原则 原则1-1 原则1-2 原则1-3 原则1-4 原则1-5 原则1-6 原则1-7 2. 布局 规则2-1-1 规则2-1-2 规则2-1-3 规则2-1-4 规则2-1-5 规则2-1-6 规则2-2-1 规则2-2-2 规则2-2-3 建议2…

简单聊聊使用lombok 的争议

大家好,我是G探险者。 项目里,因为我使用了Lombok插件,然后代码走查的时候被领导点名了。 我心想,这么好用的插件,为啥不推广呢,整天写那些烦人的setter,getter方法就不嫌烦么? 领导…

AidLux:手机/平板上的Linux环境与AI开发利器

AidLux是一个基于ARM架构的跨生态(鸿蒙/AndroidLinux)一站式智能物联网(AIoT)应用开发和部署平台,正受到越来越多开发者和用户的青睐。既可以作为手机/平板上的一个Linux环境使用,也可以作为AI开发利器以发…

Python Django Suit:构建现代化的Django后台管理

概要 Django Suit是一款为Django后台管理提供现代、优雅界面的第三方应用,它致力于提升Django开发者的管理体验。本文将深入介绍Django Suit的安装、配置和高级功能,提供详实的示例代码,帮助大家更好地使用和定制Django后台管理界面。 安装与…

无法解除Word文档限制编辑?上干货

方法一:新建一个文档-点击“插入”-点击“对象”-点击选择中的倒三角-然后选择“文件中的文字”-找到相应文档即可 具体操作界面如下图这个方法会导致格式出现稍稍微的变化 方法二:将受编辑的文件另存为 文件类型一定要选择*.xml 另存好之后是这样的 打…

智能优化算法应用:基于法医调查算法无线传感器网络(WSN)覆盖优化 - 附代码

智能优化算法应用:基于法医调查算法无线传感器网络(WSN)覆盖优化 - 附代码 文章目录 智能优化算法应用:基于法医调查算法无线传感器网络(WSN)覆盖优化 - 附代码1.无线传感网络节点模型2.覆盖数学模型及分析3.法医调查算法4.实验参数设定5.算法结果6.参考…

力扣labuladong一刷day34天

力扣labuladong一刷day34天 文章目录 力扣labuladong一刷day34天一、230. 二叉搜索树中第K小的元素二、538. 把二叉搜索树转换为累加树 一、230. 二叉搜索树中第K小的元素 题目链接:https://leetcode.cn/problems/kth-smallest-element-in-a-bst/?utm_sourceLCUS&…

[C++] STL_priority_queue(优先级队列) 的使用及底层的模拟实现,容器适配器,deque的原理介绍

文章目录 1、priority_queue1.1 priority_queue的介绍和使用1.2 priority_queue的使用模拟实现: 2、容器适配器2.1 什么是适配器2.2 STL标准库中stack和queue的底层结构 3、deque3.1 deque的原理介绍3.2 deque的缺陷 4、为什么选择deque作为stack和queue的底层默认容…

docker配置连接harbor私有仓库

一、前言 以下分为两种情况说明docker对harbor私有仓库的访问配置,一种是harbor使用自建证书配置https,一种是使用公有证书配置https 二、docker配置 harbor使用自建证书的情况 使用自建证书对harbor进行https配置,docker会将该仓库识别成不…

SDXL使用animateDiff和hotshot-xl进行文生视频

截至2023.12.8号,目前市面上有两款适用于SDXL的文生视频开源工具,分别是AnimateDiff和hotshot-xl。 一、工具下载链接 (1)AnimateDiff的webui版本的git链接: GitHub - continue-revolution/sd-webui-animatediff: A…

pytest测试框架介绍(2)

继续进步一点点,温故而知新 一、requests 介绍 1、requests 的官方文档:https://docs.python-requests.org/en/latest/ 2、安装requests:pip install requests 二、requests请求 1、请求方法:post,get&#xff0c…