操作系统高频面试知识总结 part1

操作系统

  • 1.什么是操作系统?
  • 2.并发与并行?
  • 3.同步与异步?
  • 4.阻塞和非阻塞?
  • 5.什么是进程?
  • 6.什么是线程?
  • 7.进程与线程的区别?
  • 8.进程地址空间?
  • 9.进程常见状态?
  • 10.进程间通信?
  • 11.线程间通信?
  • 12.线程切换需要保存哪些上下文?

1.什么是操作系统?

负责管理和协调计算机硬件资源,为应用程序提供环境和服务的组件。
包括:资源管理、进程管理、文件管理、用户界面、错误检测和恢复。

2.并发与并行?

并发(Concurency)是指系统能够处理多个任务的能力,这并不意味着这些任务一定会同时进行。并发的任务可能会交错进行,因此并发可以在单核CPU上实现。这是因为CPU可以通过时间片轮转或其他任务切换策略,在各个任务之间快速切换,给人以它们在同时进行的错觉。一个简单的例子就是我们的操作系统,它可以在运行大量应用程序(如我们的浏览器,文档编辑器,音乐播放器等)同时,保持系统稳定和响应,尽管实际上,那些进程并不总是“同时“运行。

并行(Paralelism)则是指系统同时执行多个任务的能力。并行显然需要硬件的支持,如多核多处理器。在这种情况下,多个任务确实可以在同一时间内进行。例如,现代的多核CPU可以让我们在看电影的同时进行视频编码,每一个任务在不同的处理器核心上执行,这就是并行。

整体而言,如果你有两个线程在单核心的CPU上,那么可能会通过交错执行达到并发。如果你的电脑有多个核心或处理器,你就可以在多个核心或处理器上同时执行多个线程达到并行

3.同步与异步?

它们主要涉及到程序的运行方式和时间管理。
1.同步(Synchronous)操作是在一个操作完成之前,不进行下一个操作。这是一种阻塞调用,也就是说,进行某项操作的过程中,不得不停下来等待,直到这个操作完成。例如,当你在核对大批量的数据时,你需要等待所有数据都加载完毕才能继续进行下一项操作,这就是同步。

2.异步(Asynchronous)操作是不需要立刻得到结果,即使未完成也可进行其它操作。这是一种非阻塞调用,也就是说,还没得到结果,就继续做别的事情,不会因为单一操作的等待而阻塞,例如,你去网上订一张火车票,由干网站照名器繁忙,订票需要-些时间,但是你不会就一直盯着屏幕等,而是可以一边浏览新闻或者查看其他信息一边等待订票结果,这就是异步操作。

4.阻塞和非阻塞?

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

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

5.什么是进程?

正在执行的程序实例,拥有独立的内存空间和系统资源,每个进程都有自己的指令序列、数据和执行环境。
进程创建是通过操作系统调度和管理,当程序被执行,操作系统系统会为其创建一个独立的进程。其主要特征包括:
独立性:内存空间和系统资源是独立的;
执行状态:运行、就绪、阻塞等不同状态,根据进程调度算法决定执行顺序;
上下文切换:操作系统需要在不同的进程直接进行切换,进程可以通过上下文切换保存和恢复执行环境;
通信与同步:可以通过进程间通信实现信息交互和共享,可以通过同步机制实现协调与合作。

6.什么是线程?

线程是进程的一部分,是进程的一个执行单元,线程更轻量级。可以在同一个进程中并发执行。线程共享进程的内存和系统资源,每个线程有独立的程序计数器和栈空间,但是可以访问共享的数据和全局变量。

线程的主要特征包括:
并发执行: 多个线程可以在不同的处理器或核心上同时执行,从而实现并发性。
共享内存: 线程之间共享同一个进程的地址空间,可以互相访问和修改共享数据。
轻量级: 相对于进程来说,线程的创建、销毁和切换开销较小,执行效率更高。
协作与通信:线程之间可以通过共享内存进行通信和协作,也可以使用同步机制控制线程的执行顺序。

7.进程与线程的区别?

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

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

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

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

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

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

进程独立的执行实体,拥有独立的内存空间和系统资源。而线程进程内的执行单元,共享进程的内存空间和系统资源。线程的切换和通信开销较小,并发性更高。选择使用进程还是线程,取决于具体的应用需求。

8.进程地址空间?

进程的地址空间是指操作系统为每个进程分配的虚拟内存空间,用于存储进程的代码、数据和堆栈等信息。进程的地址空间通常分为以下几个部分:
1.代码段(Text Segment): 也称为程序段,用于存放进程的可执行代码。该部分通常是只读的,包含了程序的指令集,如函数循环、条件语句等。

2.数据段(Data Segment):用于存储全局变量、静态变量和常量等数据。数据段可以分为初始化的数据段(Initialized DataSegment)和未初始化的数据段(Uninitialized Data segment)。

  • 初始化的数据段包含了已经初始化的全局变量和静态变量等数据,存储在静态存储区,通常是可读写的。
  • 未初始化的数据段,也称为BSS段(Block Started by Symbol),包含了未初始化的全局变量和静态变量等数据,存储在静态存储区,通常是可读写但初始值为0

3.堆(Heap): 堆是动态分配的内存空间,用于存储动态分配的数据。堆空间通常由程序员通过动态内存分配函数(如malloc() new)进行管理,用于存储动态数组、链表等动态数据结构。堆的大小和生命周期由程序员显式控制,需要在不再使用时手动释放。

4.栈(Stack):栈用于存储函数调用时相关的信息,如局部变量、函数参数、返回地址等。栈的生命周期与函数的调用和返回有关,每当调用一个函数时,在栈上会创建一个新的栈帧用于保存函数的信息,当函数返回时,栈帧会被销毁

9.进程常见状态?

1.运行状态(Running): 正在CPU上执行指令的进程处于运行状态
2.等待状态(Waiting): 也称作阻塞状态。当进程需要某些资源以继续运行(例如,等待用户输入或等待文件读取)时,它将转入等待状态。直到所需资源可用时,才会被重新放入可运行队列。
3.就绪状态(Ready): 当进程已经准备好在CPU上运行,但由于其他进程正在CPU上运行,而暂时无法运行,此时就处于就绪状态。就绪状态的进程会被放在队列中等待CPU资源
4.创建状态(New): 当进程刚被创建但还未被调度到运行时,它处于创建状态。
5.终止状态(Terminated): 一个进程完成了它的全部工作,或者被其他进程杀死,或者出现异常终止时,它就处于终止状态。此时,操作系统将回收进程占用的资源并销毁该进程。

10.进程间通信?

进程间通信(inter Process Communication,IPC)是一个进程与另一个进程传输和分享数据的机制。
主要有以下几种方式:
1.管道(Pipe): 管道是最早的进程间通信机制,数据可以在亲缘关系进程间单向流动。管道的优点是简单易用,但缺点是数据只能在有亲缘关系的进程之间传输,并且是无格式的字节流,需要进程自行解析。

2.消息队列(Message Queue): 消息队列是一种先进先出的队列结构,允许进程将消息发送到队列,并允许其他进程根据消息的优先级从队列中读取。优点是可以在无关进程间传输数据,支持数据的优先级设定。缺点是数据读写需要系统调用,消耗相对较高,复杂消息可能需要额外处理逻辑。

3.共享内存(Shared Memory): 共享内存允许多个进程访问同一块内存空间,是最快的IPC方式。优点是无需系统调用,直接读写内存,效率较高。缺点是需要手动解决进程间的同步问题,开发难度相对较高。

4.信号(Signal):信号是一种简单的进程间通信方式,用来通知接收进程有某事件发生。它的优点是简单,可以异步地通知事件。缺点是信息量有限,只能传递一个数量,不能携带更复杂的信息。

5.套接字(ocket):套接字可以在不同机器上的进程间通信。它的优点是可以进行跨机器的通信,通用性强。缺点是开发相对复杂,数据读写需要系统调用,效率较低。

6.信号量(Semaphore):信号量常用于多个进程间的同步和互斥问题。

11.线程间通信?

线程间的通信方式通常利用同一个进程下线程所共享的资源来实现。主要有以下几种方式
1.锁机制(Locks): 当多个线程需要访问共享资源时,可以使用锁机制来避免并发问题。一个线程在访问资源时可以“锁定"该资源,阻止其他线程的访问,直到该线程释放锁。锁机制简单而直接,但必须小心处理,否则可能导致死锁。

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

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

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

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

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

当发生线程切换时,操作系统需要保存当前线程的"上下文",以便在下次线程被再次调度执行时得以恢复。上下文主要包括以下内容,
1.寄存器值:这包括了通用寄存器,程序计数器(存放当前线程正在执行的指令地址),程序状态字(存放执行指令的结果的状态,如零,负,溢出等)等。

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

3.程序计数器:这个值标识了线程执行到哪里。当线程切换回来时,它将从这个位置继续执行。

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

5.线程状态:这包括了线程的优先级,信号码,错误码等。

干是,当线程切换发生时,操作系统会保存当前线程的上述上下文,加载目标线程的上下文,然后将控制权转交给目标线程,这样目标线程就能接着上次的运行状态继续执行了。

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

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

相关文章

Google人才选拔的独特视角

Google人才选拔的独特视角 独特的人才选拔标准 Google作为全球最大的搜索引擎公司,拥有无数优秀的人才。他们的选拔标准与众不同,有着自己独特的人才观。 重视多元化的背景 Google相信人才的多元化背景能够给公司带来不同的思考角度和创新思维。他们…

【总结】在嵌入式设备上可以离线运行的LLM--Llama

文章目录 Llama 简介运用另一种:MLC-LLM 一个令人沮丧的结论在资源受限的嵌入式设备上无法运行LLM(大语言模型)。 一丝曙光:tinyLlama-1.1b(10亿参数,需要至少2.98GB的RAM) Llama 简介 LLaMA…

Java language programming:作品评分系统

题目: 全国中小学生Scratch作品大赛拉开了序幕。每个参赛选手可以通过网络直接上传作品。本次比赛人人可做评委。每个网络评委可以通过网络对每一件作品进行打分。其自动去掉一个最高分和一个最低分,求出平均分。 输入格式: 输入数据包括两行: 第一行为…

电商技术揭秘四:电商平台的物流管理系统

文章目录 引言一、物流管理系统的功能与架构1.1 物流管理系统在电商平台中的作用概述保障订单的及时配送优化库存管理控制运营成本提升客户服务水平支持数据驱动的决策应对市场变化 1.2 订单处理功能分析自动化处理流程订单分配与履行错误检测与处理机制实时订单状态更新订单数…

ZKP价值链路的垂直整合

1. ZKP proof生命周期 从ZKP(zero-knowledge proof)生命周期,先看围绕ZKP的价值链路形成: 1)User intent用户意图:以某用户意图为起点,如想要在某zk-rollup上swap某token、证明其身份、执行某…

【从零开始】自建高质量免费ip代理池(截止2024.4.1最新版)

文章目录 前言基础常识代理服务器状态码端口号 常见免费ip代理池网站实现思路代码实现main.pyutils.pydemo.py 结果如下 前言 为了防止ip被封后还能爬取网页,最常见的方法就是自己构建一个ip代理池。 本来用的是下面这个开源项目ip代理池, github开源项…

二维数字滤波器设计

Rafael C. Gonzalez “Digital Image Processing”的错误 按理说这本书的第三作者Steven是数字信号处理出身,他本人又对信号处理非常熟悉,不能理解为什么这本书的频域滤波器一章几乎没有对的地方。 对于巴特沃斯等模拟滤波器,利用全通带减去…

关于Qt的安装与版本更换

VS 2022 Qt 5.14.2配置记录_vs2022安装什么版本qt-CSDN博客

GPT 模型解析:ChatGPT 如何在语言处理领域引领潮流?

人工智能时代来临 我们正处于AI的iPhone时刻。——黄仁勋(英伟达CEO) ChatGPT 好得有点可怕了,我们距离危险的强人工智能不远了。——马斯克(Tesla/SpaceX/Twitter CEO) 以上的内容说明我们现在正处于一个技术大翻牌的…

就业班 第二阶段 2401--3.29 day9 shell之正则+数组

九、shell 编程-数组 普通数组:只能用整数作为数组的索引 关联数组:可以使用字符串作为数组的索引 数组定义 普通数组定义: [rootnewrain shell]# books( linux shell awk sed ) 引用: [rootnewrain shell]# echo ${books[0]} linux [rootnewrain shell]# echo ${books[1]…

大唐杯历届省赛押题训练(6)

考试-呼叫建立流程 一、单选题 1下面关于T-ADS被叫域选择下面说法正确的是( )1分/1分 A、被叫域选择是由MME发起的信令过程 B、T-ADS,过程是AS向3合1融合数据库查询T-ADS信息的过程 C、被叫域选择由主叫UE发起的域选择过程 D、主要是解决主叫驻留在那个网络的问题 提…

Avalonia笔记5-数据绑定

学习笔记&#xff1a; 1. 使用{Binding}标记拓展在XAML中进行绑定。通过绑定&#xff0c;所有数据上下文的变化都将自动更新到控件上。 <TextBlock Text"{Binding Name}"/> 2. 绑定模式 可以通过指定{Binding}的Mode来修改绑定的行为: OneWay 源的变化自动…

篮球竞赛预约平台的设计与实现|Springboot+ Mysql+Java+ B/S结构(可运行源码+数据库+设计文档)篮球馆,篮球赛,竞赛项目,赛事预约

本项目包含可运行源码数据库LW&#xff0c;文末可获取本项目的所有资料。 推荐阅读300套最新项目持续更新中..... 最新ssmjava项目文档视频演示可运行源码分享 最新jspjava项目文档视频演示可运行源码分享 最新Spring Boot项目文档视频演示可运行源码分享 2024年56套包含ja…

苍穹外卖06(HttpClient,微信小程序开发,微信登录流程,获取授权码从微信平台获取用户信息)

目录 一、HttpClient 1. 介绍 2. 入门案例 1 导入依赖(已有) 2 GET方式请求 2 POST方式请求 二、微信小程序开发 1. 介绍 2. 准备工作 1 注册小程序获取AppID 注册小程序 完善小程序信息 2 下载并安装开发者工具 3 设置小程序开发者工具(必做) 3. 入门案例 1 小…

Screeps Arena 游戏基础教程

一. 游戏内教程汉化1. 循环和导入&#xff08;Loop and Import&#xff09;2. 简单移动&#xff08;Simple move&#xff09;3. 首次攻击&#xff08;First Attack&#xff09;4. 爬虫的身体部分&#xff08;Creeps Bodies&#xff09;5. 存储和转移 &#xff08;Store and Tra…

通过提交容器的方式修改ubuntu镜像的apt源

通过提交容器的方式修改ubuntu镜像的apt源 步骤总结 问题&#xff0c;每次创建容器之后&#xff0c;都要在容器内手动更改镜像源。 不如&#xff0c;干脆修改镜像的apt源&#xff0c;一次到位。 步骤 先创建一个容器&#xff0c;到容器内执行变更命令。 D:/sandbox> dock…

江苏开放大学2024年春《中外设计史 060709》第二次测试参考答案

答案&#xff1a;更多答案&#xff0c;请关注【电大搜题】微信公众号 答案&#xff1a;更多答案&#xff0c;请关注【电大搜题】微信公众号 答案&#xff1a;更多答案&#xff0c;请关注【电大搜题】微信公众号 单选题 1美国现代建筑家赖特&#xff0c;提倡“有机建筑”的设…

Yarn 的安装和使用

在前端开发中&#xff0c;包管理工具是必不可少的利器&#xff0c;而 Yarn 就是其中一个备受欢迎的选择。本文将介绍如何安装和使用 Yarn&#xff0c;并解决可能遇到的一些常见问题&#xff0c;让你更高效地管理项目依赖。 什么是 Yarn&#xff1f; Yarn 是由 Facebook、Goo…

算法学习——LeetCode力扣图论篇1(797. 所有可能的路径、200. 岛屿数量、695. 岛屿的最大面积)

算法学习——LeetCode力扣图论篇1 797. 所有可能的路径 797. 所有可能的路径 - 力扣&#xff08;LeetCode&#xff09; 描述 给你一个有 n 个节点的 有向无环图&#xff08;DAG&#xff09;&#xff0c;请你找出所有从节点 0 到节点 n-1 的路径并输出&#xff08;不要求按特…

【单】Unity _RPG项目中的问题

&#x1f468;‍&#x1f4bb;个人主页&#xff1a;元宇宙-秩沅 &#x1f468;‍&#x1f4bb; hallo 欢迎 点赞&#x1f44d; 收藏⭐ 留言&#x1f4dd; 加关注✅! &#x1f468;‍&#x1f4bb; 本文由 秩沅 原创 &#x1f468;‍&#x1f4bb; 收录于专栏&#xff1a; ⭐…