操作系统面试真题总结(五)

news2024/9/21 16:50:07

文章收录在网站:http://hardyfish.top/

文章收录在网站:http://hardyfish.top/

文章收录在网站:http://hardyfish.top/

文章收录在网站:http://hardyfish.top/

在这里插入图片描述

线程切换要保存哪些上下文?

当发生线程切换时,操作系统需要保存当前线程的上下文,以便在下次线程被再次调度执行时得以恢复。

上下文主要包括以下内容:

寄存器值:

  • 这包括了通用寄存器,程序计数器(存放当前线程正在执行的指令地址)
    • 程序状态字(存放执行指令的结果的状态,如零,负,溢出等)等。

堆栈指针:

  • 每个线程有自己的函数调用栈,堆栈指针标识了当前线程在自己的栈空间中的位置。
    • 回到这个线程时,它可以恢复到正确的函数调用位置。

程序计数器:

  • 这个值标识了线程执行到哪里。
    • 当线程切换回来时,它将从这个位置继续执行。

内核栈指针:

  • 每个线程有一个内核栈,存放在内核中的数据,这个指针标识当前线程在内核内存中的位置。

线程状态:

  • 这包括了线程的优先级,信号掩码,错误码等。

虚拟内存信息:

  • 这通常包括有关线程内存管理的信息,比如页表等。

当线程切换发生时,操作系统会保存当前线程的上述上下文,加载目标线程的上下文

  • 然后将控制权转交给目标线程,这样目标线程就能接着上次的运行状态继续执行了。

值得注意的是,线程切换是有性能开销的,因为涉及到保存和加载上下文的操作

  • 所以过于频繁的线程切换可能会影响性能。

线程间的通信方式有哪些?各自有哪些优缺点?

线程间的通信方式通常利用同一个进程下线程所共享的资源来实现。

主要有以下几种方式:

锁机制(Locks):

  • 当多个线程需要访问共享资源时,可以使用锁机制来避免并发问题。
    • 一个线程在访问资源时可以锁定该资源,阻止其他线程的访问,直到该线程释放锁。
      • 锁机制简单而直接,但必须小心处理,否则可能导致死锁。

信号量(Semaphores):

  • 信号量是一个更为高级的同步机制,可以控制多个线程对共享资源的访问。
    • 信号量有一个计数器和一个等待队列组成,计数器表示可用的资源数目。
      • 优点是可以控制资源的同时访问数,缺点是使用不当也可能导致死锁。

条件变量(Condition Variables):

  • 条件变量是另一种同步机制,允许一个线程等待某个条件满足。
    • 当条件满足时,可以通知一个或多个正在等待的线程。条件变量通常与互斥锁一起使用。
      • 优点是能够实现更复杂的同步,如按顺序访问等。
      • 缺点是使用不当可能导致死锁或饥饿现象。

事件驱动(Event-driven):

  • 在事件驱动的模型中,线程之间通过等待和触发事件来进行通信。
  • 这种方式不仅适用于线程间的通信,也可以用于进程或异步输入/输出等的通信。
    • 优点是适应性强,可以应对多种不同的通信需求。
    • 缺点是需要编程模型支持,且在设计和实现上可能较为复杂。

线程本地存储(Thread-Local Storage,TLS):

  • 有些变量是线程不安全的,例如静态变量,全局变量等
    • 这些变量如果在多线程环境下共享,可能会造成不可预料的结果。
    • 为了解决这个问题,我们可以为每个线程提供一份该变量的副本,这就是线程本地存储。
      • 此方案的优点是能避免资源竞争,缺点是会增加内存的使用。

进程与线程有什么区别?

它们有以下几个主要区别:

资源占用:

  • 进程:每个进程拥有独立的内存空间和系统资源,如文件描述符、打开的文件等。
    • 进程间的通信需要使用进程间通信(IPC)机制。
  • 线程:多个线程共享同一个进程的内存空间和系统资源,线程之间可以通过共享内存进行通信。

调度和切换:

  • 进程:进程是独立的执行实体,操作系统以进程为单位进行调度,进程的切换开销相对较大。
  • 线程:线程是进程的一部分,线程的调度和切换开销较小,因为它们共享进程的上下文。

并发性和并行性:

  • 进程:多个进程可以并发执行,每个进程都有自己的地址空间,可以在多个处理器或核心上并行执行。
  • 线程:多个线程可以在同一个进程内并发执行,共享进程的地址空间,可以在同一个处理器或核心上并行执行。

用户态与内核态:

  • 进程:进程切换涉及到用户态到内核态的切换,需要较高的权限和开销。
  • 线程:线程切换只涉及用户态的切换,开销较小。

创建和销毁:

  • 进程:创建和销毁进程的开销较大,包括分配独立的内存空间、初始化数据结构等。
  • 线程:创建和销毁线程的开销相对较小,线程依赖于进程的内存和资源完成创建过程。

进程是独立的执行实体,拥有独立的内存空间和系统资源

而线程是进程内的执行单元,共享进程的内存空间和系统资源。

  • 线程的切换和通信开销较小,并发性更高。
  • 选择使用进程还是线程,取决于具体的应用需求。

什么是协程吗?和线程有什么区别?

协程(Coroutine)是一种用户级别的轻量级线程。

  • 它们的调度完全由用户控制,而不是由操作系统内核控制。
    • 与线程不同,协程的上下文切换极其快速且成本低,主要因为它所需保存和恢复的状态较少。

对于协程和线程的比较,以下四个方面:

切换开销:

  • 线程由系统内核控制,切换开销大

    协程由程序员在用户空间控制,切换开销小。

调度:

  • 线程是抢占式调度,需要操作系统来进行线程的调度切换
  • 协程是非抢占式的,由协程自身决定何时进行切换,这也是其使用复杂性的来源之一。

数据共享和同步:

  • 线程并发编程需要考虑锁等同步机制的问题
    • 而协程在同一时间只有一个运行,它对共享资源的访问不需要加锁
      • 只需要确保在协程切换的时候保存好共享资源的状态即可。

应用场景:

  • 线程适合CPU密集型任务
  • 协程适合IO密集型任务。

阻塞和非阻塞有什么区别?

阻塞是指任务在等待某个操作完成时,暂停自己的执行,并等待操作完成后再继续执行。

  • 在阻塞状态下,任务会一直等待,直到所需的资源或结果就绪。
  • 在此期间,任务不能执行其他操作。
    • 例如,当一个线程调用阻塞式IO操作时,它会被挂起,直到IO操作完成后才能继续执行。

非阻塞是指任务在等待某个操作完成时,不会暂停自己的执行,而是立即返回,继续执行其他任务。

  • 非阻塞的任务会周期性地查询所需资源或结果的状态,判断是否就绪,从而决定是否继续执行。
    • 例如,在进行非阻塞式IO操作时,任务会立即返回,并周期性地检查IO操作的状态,直到IO完成后再处理结果。

简单来说,阻塞是等待结果时暂停自己的执行

  • 非阻塞是等待结果时继续执行其他任务。

在实际应用中,阻塞和非阻塞可以用在不同的场景中。

阻塞适用于需要确保结果完整性和依赖顺序的情况,而非阻塞适用于需要提高并发性和响应性的情况。

  • 选择适合的阻塞和非阻塞方式可以提高程序的效率和性能。

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

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

相关文章

8、Django Admin后台中添加Logo

在项目settings.py文件 # 导入os,并且修改DIRS内容如下所示 import os TEMPLATES [{BACKEND: django.template.backends.django.DjangoTemplates,DIRS: [os.path.join(BASE_DIR, templates/)],APP_DIRS: True,OPTIONS: {context_processors: [django.template.con…

Mudo03 vscode配置相应的文件的搜索路径,库文件的搜索路径以及想要的链接库

使用muduo库,需要链接libmuduo_base.so、libmuduo_net.so 、libpthread.so VScode上如何配置相应的头文件的搜索路径?库文件的搜索路径? 文件的搜索路径: -I:头文件搜索路径 -L:库文件搜索路径 -Imuduo_ne…

docker安装nginx1.27.0

关于拉取不到镜像问题可以到这篇文章进行镜像配置 一、docker拉取nginx1.27.0镜像 docker pull nginx:1.27.0二、创建映射容器的文件目录 mkdir -p -m 777 /mydata/nginx/conf/conf.d mkdir -p -m 777 /mydata/nginx/log mkdir -p -m 777 /mydata/nginx/html 三、创建文件de…

IDEA下载及安装教程(24年7月更新)

IDEA全称IntelliJ IDEA,是由JetBrains公司开发的用于Java编程设计的软件,是一款高效的IDE工具,也是许多Java开发者喜爱的开发工具,具有全行代码补全功能和兼容性与可拓展性,同时也具有较高的使用度与知名度。今天&…

物业|基于SprinBoot+vue的物业管理系统(源码+数据库+文档)

物业管理系统 基于SprinBootvue的物业管理系统 一、前言 二、系统设计 三、系统功能设计 系统登录实现 后台模块实现 管理员模块实现 物业管理模块实现 业主模块实现 维修员模块实现 四、数据库设计 五、核心代码 六、论文参考 七、最新计算机毕设选题推荐 八、…

【数学建模国赛思路预约】2024高教社杯全国大学生数学建模竞赛助攻——思路、可运行代码、成品参考

2024年全国大学生数学建模大赛马上就要开始了,大家有没有准备好呢,今年将会和之前一样,将会在比赛赛中时期为大家提供比赛各题的相关解题思路、可运行代码参考以及成品论文。 一、分享计划 1、 赛中分享内容包括(2023国赛为例&am…

Windows cmd 输入 Python 弹出应用商城

文章目录 1 使用场景1.1 打开 "运行" 窗口1.2 输入 Python,弹出 Windows 应用商城 2 解决办法2.1 打开 "管理应用执行别名"2.2 取消勾选2.3 验证 1 使用场景 1.1 打开 “运行” 窗口 快捷键:Win r,并输入 cmd 1.2 输入…

Dubbo学习圣经:从入门到精通 Dubbo3.0 + SpringCloud Alibaba 微服务基础框架

尼恩说在前面 在40岁老架构师 尼恩的读者交流群(50)中,最近有小伙伴拿到了一线互联网企业如得物、阿里、滴滴、极兔、有赞、希音、百度、网易、美团的面试资格,并且拿了很多大厂offer。 其中 SpringCloud 工业级底座 ,是大家的面试核心&…

Qt:玩转QPainter后转之时钟(步骤详细、包含源码)

前言 简单了解了QPainter之后当然是要找两个例子练练手啦。 正文 先看效果图 在绘制之前我们要先构思好自己要绘制的对象可以分成几部分,比如我要绘制时钟的话,我可以分成:外边框(圆环或者圆),圆形背景,刻度&…

ES中对于时间聚合的一些总结

最近在通过es统计数据时,遇到了一个问题:在进行时间范围查询后,再对时间进行聚合,此时聚合的结果会受时区影响,也就是说结果的时间戳会被转换成对应时区的时间,并且时间戳也会变成这个时间的时间戳&#xf…

若楠带你初识OpenCV(1)-- 视频、图片基础处理,颜色获取

文章目录 OpenCV一、核心功能二、初识OpenCV1. 安装OpenCV2. 读取图片3. 读取灰度图4. 图片保存5. 视频文件读取6. 区域截取7. 提取RGB通道颜色8. 合并颜色通道 总结 OpenCV OpenCV(Open Source Computer Vision Library)是一个开源的计算机视觉和机器学…

SQL【2】稍稍进阶

目录 首先,怎么安装,环境怎么调。 alter——改变(此段Al) 创建于删除数据库、表格 上一节进阶 预设值default​编辑 关于插入顺序 有条件的删除DELETE FROM 表 WHERE 条件 多种语句组合查看 查看排序​编辑 LIMIT 2只取前…

输煤皮带智能巡检机器人技术方案及应用分析

输煤皮带是电厂和工业企业物料输送系统的重要组成部分。由于皮带系统通常覆盖面积大、环境复杂,传统的人工巡检方式存在效率低、危险性高等问题。为此,智能巡检机器人被引入输煤皮带系统,旨在实现无人化、智能化的巡检作业,提升系…

如何禁用USB存储设备|禁用USB储存和连接手机的方法有哪些?深度解析,四招搞定!

在企业网络安全管理中,禁用USB存储设备和限制手机连接至关重要。这不仅可以防止数据泄露,还能阻止恶意软件通过外部设备入侵。 本文将为你推荐四种行之有效的方法,帮助你全面禁用USB存储设备和连接手机的功能,让企业数据安全更有…

google浏览器禁止http自动转https

在Chrome的地址栏中输入 chrome://flags,搜索“HTTPS Upgrades”并将其设置为“Disabled”。这将禁用Chrome自动将HTTP升级到HTTPS的功能。

分享5款在不同场景提供支持的软件

​ 本文将介绍几款实用的软件工具,涵盖了从文件管理到系统优化,以及跨平台操作等多个领域。 1. 静态分析工具——Cerbero Suite Advanced ​ Cerbero Suite Advanced是一款功能强大的静态分析工具,专为逆向工程和数字取证设计。它支持多种文…

迪杰斯特拉算法——求最短路径

朴素版本(时间复杂度O(n^2)): 迪杰斯特拉算法采用的是一种贪心的策略。 用一个 dist 数组保存源点到其余各个节点的距离,dist[i] 表示源点到节点 i 的距离。初始时,dist 数组的各个元素为无…

Nginx 部署前端 Vue 项目实战指南

一、环境准备 1. 安装 Nginx 首先,需要在服务器上安装 Nginx。Nginx 是一款轻量级、高性能的 HTTP 和反向代理服务器。安装方式因操作系统而异。 Linux 系统(以 Ubuntu 为例): sudo apt-get update sudo apt-get install nginxWi…

MacOS下WKWebView设置背景透明问题

业务场景需要设置WKWebView的背景内容透明,查询到一般有两种方法: [self.webView setValue: NO forKey: "drawsBackground"]; [self.webView setValue:[NSNumber numberWithBool: YES] forKey:"drawsTransparentBackground"]; 这…

ZBrush入门使用介绍——13、Dynamesh

大家好,我是阿赵。   继续介绍ZBrush的用法。这次介绍一个可以给模型重新布线和生成形状的工具,叫做Dynamesh。 1、 重新布线 在使用Move笔刷的时候,经常会遇到一个问题 当用Move笔刷把模型拖拽出一个形状的时候,被拖出来的部…