操作系统面试题

操作系统

操作系统是管理计算机硬件和软件资源的程序,是系统软件

操作系统功能

  • 进程和线程管理
  • 存储管理
  • 文件管理
  • 设备管理
  • 网络管理
  • 安全管理

用户态和内核态

  • 用户态运行的进程可以直接读取用户程序的数据,权限较低
  • 内核态运行的进程几乎可以访问计算机的任何资源,拥有非常高的权限

用户态转为内核态需要向操作系统发起系统调用请求,操作系统接收到进程的系统调用请求后,就会从用户态切换为内核态,执行相应的系统调用,并将结果返回给进程,最后从内核态切换为用户态,进入内核态需要付出较大的开销(需要进行一系列的上下文切换和权限检查)

同时具有用户态和内核态主要是为了保证计算机系统的安全性、稳定性和性能

用户态–>内核态的三种方式

  • 系统调用
  • 中断
  • 异常

进程间通信的方式

  • 匿名管道

    用于父子进程或兄弟进程之间的通信

  • 有名管道

    以磁盘的文件的方式存在,实现本机任意两个进程间的通信。遵循先进先出

  • 信号

  • 消息队列

  • 信号量

    是一个计数器,用于多线程对共享数据的访问

  • 共享内存

    使得多个进程可以访问同一块内存空间,需要依赖某种同步操作,如互斥锁和信号量等。

  • 套接字socket

    用于客户端和服务器之间的通信

进程的调度算法

  • 先来先服务(FCFS)

    从就绪队列里选择最先进入队列的进程为之分配资源

  • 短作业优先(SJF)

    从就绪队列里选择一个估计运行时间最短的进程为之分配资源

  • 时间片轮转(RR)

    每个进程被分配一个时间段,称为它的时间片,即允许运行的时间

  • 多级反馈队列(MFQ)

    根据先来先服务原则给就绪队列排序,为就绪队列赋予不同的优先级数,不同的时间片,按照优先级抢占CPU,既能使高优先级的作业得到响应又能使短作业(进程)迅速完成。

  • 优先级调度

​ 每个进程分配优先级,优先级高的进程先运行,具有相同优先级的进程以 FCFS 方式执行

死锁

多个进程在运行过程中,由于竞争资源或彼此通信而造成的阻塞现象

死锁的四个必要条件
  • 互斥
  • 占有并等待
  • 非抢占
  • 循环等待
预防死锁
  • 静态分配策略

    破坏占有并等待条件,一个进程在执行前就获得到它所需要的的全部资源

  • 层次分配策略

    破坏循环等待条件,将资源分为不同等级的层次,进程在申请高层次的资源时必须先申请低层次的资源,在释放低层次的资源时必须先释放高层次的资源,在申请同一层资源中的另一资源时需要释放已得到的该层资源

避免死锁

银行家算法:

当一个进程申请使用资源的时候,银行家算法通过先 试探 分配给该进程资源,然后通过安全性算法判断分配后的系统是否处于安全状态,若不安全则试探分配作废,让该进程继续等待。

检测死锁
解除死锁
  • 立即结束所有进程,重启操作系统
  • 撤销涉及死锁的所有进程,解除死锁后继续运行
  • 逐个撤销设计死锁的进程,回收期资源直至死锁解除
  • 抢占资源

虚拟内存

虚拟内存逻辑上存在,作为进程访问主存的物理桥梁并简化内存管理

虚拟内存作用
  • 隔离进程

    进程通过自己私有的虚拟内存访问主存,一个进程中的代码无法改变其他进程或操作系统使用的物理内存。

  • 提升物理内存利用率

    操作系统只需要将进程当前正在使用的部分数据或指令载入主存。

  • 简化内存管理

  • 多个进程共享物理内存

  • 提高内存使用安全性

地址翻译/地址转换:操作系统通过CPU中的MMU(内存管理单元)将虚拟地址转换为物理地址

分段机制

连续的物理内存、每段大小不等

分段机制下的虚拟地址的组成:

  • 段号
  • 段内偏移量

具体的地址翻译过程如下:

  1. MMU 首先解析得到虚拟地址中的段号;
  2. 通过段号去该应用程序的段表中取出对应的段信息(找到对应的段表项);
  3. 从段信息中取出该段的起始地址(物理地址)加上虚拟地址中的段内偏移量得到最终的物理地址。
分页机制

连续等长的的物理页

分页机制下的虚拟地址的组成

  • 页号
  • 页内偏移量 :物理页的起始地址+页内偏移量=物理内存地址

具体的地址翻译过程如下:

  1. MMU解析得到虚拟地址中的虚拟页号
  2. 通过虚拟页号去虚拟程序的页表中找出对应的物理页号(找到页表项)
  3. 用物理页号对应的起始地址加上虚拟地址中的页内偏移量得到物理内存地址
TLB转址旁路缓存

属于MMU(内存管理单元)内部的单元,本质上是一块高速缓存。

使用了TLB的翻译流程:

  1. 用虚拟内存的页号作为key去TLB中查询
  2. 若查到了对应的物理页,就不用去查页表了(TLB命中)
  3. 若查不到对应的物理页,需要去查物理内存中页表,同时将页表中的该映射表项添加到TLB中(TLB未命中)
  4. TLB填满后,又要登记新页,就按照一定的淘汰策略淘汰掉快表中的一页。

常见页面置换算法

  • 先进先出页面置换算法(FIFO)
  • 最近最久未使用页面置换算法(LRU)
  • 最少使用页面置换算法(LFU)
  • 时钟页面置换算法 :逐出的页面是最近未使用的

提高文件系统性能的方式

  • 优化硬件
  • 选择合适的文件系统类型
  • 运用缓存
  • 避免磁盘过度使用
  • 对磁盘进行合适的分区

常见的磁盘调度算法

  • 先来先服务算法

    • 未考虑磁头移动路径和方向,平均寻道时间较长
    • 容易出现饥饿问题,后面的磁盘请求要很长时间才得到服务
  • 最短寻道时间优先算法

    • 能最小化寻道时间

    • 易出现饥饿问题:远离磁头的请求长时间得不到服务

  • 扫描算法(电梯算法):如果磁头从一个方向刚扫描完,请求才到的话。这个请求就需要等到磁头从相反方向过来之后才能得到处理。

  • 循环扫描算法 :只往一个方向扫描,并且只按照一个方向扫描,直到到达磁盘边界,然后回到磁盘起点,重新开始循环。

  • 边扫描边观察算法:边扫描边观察这个方向还有没有磁盘请求,没有就可以立刻调转磁头方向

  • 均衡循环扫描算法:磁头移动的方向上已经没有磁道访问请求了,就可以立即让磁头返回,并且磁头只需要返回到有磁道访问请求的位置即可。

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

qt5.15播放音频示例(4种方法)

文章目录 Qt播放音频方法一 QMediaPlayer方法二 QSound方法三 QSoundEffect方法四 QAudioOutput问题1 播放无声问题2 QAudioOutput播放嗡嗡声的问题参考Qt播放音频 在linux系统中,可以通过aplay进行简单的播放音频,如 aplay /opt/Audio/test.wav在图形界面,也可以封装apla…

码云配置遇到秘钥不正确

你这个就是秘钥没有和git绑定, 需要 git config --global user.name "你的用户名随便写" git config --global user.email "你的邮箱"

uniapp + electron 打包项目

参考文献 1、控制台安装electron和electron打包工具electron-packager npm install electron -g npm install electron-packager -g2、manifest.json修改 运行的基础路径修改为:./ 不然打包出来会出现白屏,读取不到,因为打包出来的h5默认加…

如何使用Python的Open3D开源库进行三维数据处理

简介 在本文中,我提供了一个关于如何使用Python的Open3D库(一个用于3D数据处理的开源库)来探索、处理和可视化3D模型的快速演练。 使用Open3D可视化的3D模型(链接https://sketchfab.com/3d-models/tesla-model-s-plaid-9de8855fa…

HarmonyOS入门开发(三) 持久化存储Preferences

接入鸿蒙几天以来,发现各种和Android不一样的地方,今天来看一下Preferences存储 在Android中比如有ShardPreferences、Mmkv这些持久化存储方式,开发起来很方便,读取速度也很快,在鸿蒙里面也提供了对应的持久化存储方案…

为什么修改IP和隐藏IP地址?修改IP地址带来哪些好处?

随着互联网的普及,越来越多的人开始依赖网络进行日常生活和工作。然而,在上网过程中,我们的IP地址是暴露无遗的,这就有可能导致一些安全问题。因此,修改IP和隐藏IP地址的需求应运而生。那么,为什么要修改IP…

Vue.js 组件生命周期

Vue.js 组件生命周期 生命周期函数(钩子)就是给我们提供了一些特定的时刻,让我们可以在这个周期段内加入自己的代码,做一些需要的事情; 生命周期钩子中的this指向是VM 或 组件实例对象 在JS 中,函数的执行上下文&#…

主播岗位面试

一、自我介绍 在面试的开始阶段,你需要准备一个简洁而有力的自我介绍。这个自我介绍应该包括你的姓名、教育背景、工作经验以及你为何对这个主播职位感兴趣。这个自我介绍应该控制在1-2分钟之内,避免冗长的表述。 二、主播经历和特点 在这个环节&…

Docker的基本概念和优势,以及实际应用场景

目录 概要 基本概念 容器 (Container) 什么是容器 容器与虚拟机的区别 镜像 (Image) Dockerfile 仓库 (Repository) 容器编排 (Orchestration) Docker Compose Docker Daemon 和 Docker Client 网络 (Network) 数据卷 (Volume) 主要优势 提高移植性和可移植性 提…

elementui中添加开关控制

<template><!-- 图层管理 --><div class"home-wrapper"><div class"table-list"><div class"list"><el-table :data"tableData" height"100%" style"width: 100%;" border>&…

nginx 改变您的HTTP服务器的缺省banner

可通过HTTP获取远端WWW服务信息【原理扫描】 低风险 建议您采取以下措施以降低威胁&#xff1a;* 改变您的HTTP服务器的缺省banner。 80 系统扫描漏洞修复 已nginx-1.22.1为例 1、修改源码文件 #进入之前安装nginx的源码目录 cd /usr/local/src/nginx-1.22.1/#需要修改的…

性能优化之FPS

如果每秒钟有60帧&#xff0c;那么每一帧的时间就是总时间&#xff08;1秒&#xff09;除以总帧数&#xff08;60帧&#xff09;&#xff1a; 所以&#xff1a;每帧时间1000 毫秒/60 帧≈16.67 毫秒 因此&#xff0c;如果每秒有60帧&#xff0c;那么每一帧大约需要16.67毫秒来…

Trie字典树

文章目录 什么是 T r i e Trie Trie 树一般条件 AcWing 835. Trie字符串统计CODE解释一下 i n s e r t ( ) insert() insert() 函数 i d x idx idx 的意义 什么是 T r i e Trie Trie 树 一种树结构&#xff0c;用来存储字符串&#xff0c;能够查询某字符串是否存在 由一个统…

国内如何访问github

1 购买一台美国硅谷的服务器 https://account.aliyun.com/login/login.htm?oauth_callbackhttps%3A%2F%2Fecs-buy.aliyun.com%2Fecs%3Fspm%3D5176.8789780.J_4267641240.2.721e45b559Ww1z%26accounttraceid%3Def6b6cc734bc49f896017a234071bfd9bctf 记得配置公网的ip&#xf…

MySQL进阶知识:SQL性能优化

目录 SQL性能分析 SQL执行频率 慢查询日志 profile详情 explain执行计划 索引的使用 最左前缀法则 范围查询 索引列运算 字符串加引号 模糊查询 or连接的条件 数据分布影响 SQL提示 覆盖索引 前缀索引 索引设计原则 SQL优化 insert优化 主键优化 页分裂 …

Agent举例与应用

什么是Agent OpenAI 应用研究主管 Lilian Weng 在一篇长文中提出了 Agent LLM&#xff08;大型语言模型&#xff09;记忆规划技能工具使用这一概念&#xff0c;并详细解释了Agent的每个模块的功能。她对Agent未来的应用前景充满信心&#xff0c;但也表明到挑战无处不在。 现…

yolov5利用yaml文件生成模型

一、yolov5的yaml文件构成 yaml文件如下图 不论是backbone还是head&#xff0c;每一行都由一个列表组成&#xff0c;列表里面有四个元素&#xff0c;另外&#xff0c;还有两个参数depth和width。在搭建模型的时候&#xff0c;会利用每一行的信息生成一个模块&#xff0c;并按照…

QT QGraphicsItem 图元覆盖导致鼠标点击事件不能传递到被覆盖图元

一、概述 在日常开发中&#xff0c;遇到这样一个问题&#xff0c;线图元和引脚图元重叠&#xff0c;导致点击引脚图元&#xff0c;没有进入引脚图元的鼠标点击事件中。 二、产生原因 如果您的 QGraphicsItem 上有一个图元覆盖了它&#xff0c;可能会导致鼠标事件无法正常触发…

跟国外客户沟通用词不同,效果可能也不同

每次和客户商量好所需要的商品的细节后&#xff0c;到了开支付链接的阶段&#xff0c;我都会习惯的说&#xff1a;shall we open the payment link for you now? 其实这句话是站在我们销售的立场上来说的&#xff0c;或者说是直接从汉语翻译成英语的句式。 但是最近我却突然想…

内存占用高排查

一、定位内存占用高的进程 top指令是最常见的检测系统运行状态的指令&#xff0c;但是因为展示界面和实时刷新的限制&#xff0c;则通过top指令不一定能够发现占用的内存很高的进程。因此&#xff0c;我们使用ps aux指令检索当前系统下的所有运行的进程。 • 下述指令查看系统…