操作系统面试题

操作系统

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

操作系统功能

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

用户态和内核态

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

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

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

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

  • 系统调用
  • 中断
  • 异常

进程间通信的方式

  • 匿名管道

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

  • 有名管道

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

  • 信号

  • 消息队列

  • 信号量

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

  • 共享内存

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

  • 套接字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)
  • 时钟页面置换算法 :逐出的页面是最近未使用的

提高文件系统性能的方式

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

常见的磁盘调度算法

  • 先来先服务算法

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

    • 能最小化寻道时间

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

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

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

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

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

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

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

相关文章

zookeeper实操课程Acl 访问权限控制,命令行测试

本系列是zookeeper相关的实操课程,课程测试环环相扣,请按照顺序阅读测试来学习zookeeper。阅读本文之前,请先阅读----​​​​​​zookeeper 单机伪集群搭建简单记录(实操课程系列)。 阅读本文之前,请先阅读…

【linux防火墙】iptables的四表五链以及实操应用

目录 一、防火墙的基本认识 浅提一下iptables 二、防火墙的分类 三、netfilter中的五个勾子函数和报文流向 四、netfilter/iptables的简介 五、iptables的原理讲解和四表五链 内核中数据包传输的过程: 六、iptables iptables的语法: 七、实操 七…

西工大网络空间安全学院计算机系统基础实验一(9, 10, 11, 12, 13)

还是那句话,专心做好你自己的,老老实实把基础打好,不要被其他人带跑节奏,不要跟他打,跟着这系列博客,稳扎稳打一步一步来。即使你VMware workstation没下载好,即使你Ubuntu虚拟机没配好&#xf…

lxd提权

lxd/lxc提权 漏洞介绍 lxd是一个root进程,它可以负责执行任意用户的lxd,unix套接字写入访问操作。而且在一些情况下,lxd不会调用它的用户权限进行检查和匹配 原理可以理解为用用户创建一个容器,再用容器挂载宿主机磁盘&#xf…

伪集群配置

编辑core-site 配置core-site 配置hdfs-site 将以下的文件配置进去 启动一下hadoop产生tmp文件 产生这个叫namenode的文件并格式化 回到~目录 再配置以下信息 配置以下信息 重启文件 再重新格式化配置namenode 再启动一下,然后jps看看,出现这样就…

vscode非常好用的扩展插件

1、Code Spell Checker: 帮助我们检查单词是否拼写错误,检查规则遵循驼峰拼写法。 2、Color Highlight:高亮显示颜色值 3、Svg Preview: 实时预览svg图片(修改width、height、fill等值来实时查看效果) 4、…

可变参数列表

demo 2:求任意多个数据中的最大值(至少一个),要求不能使用数组 因为目前参数个数不确定,那么函数编写的时候,参数个数也无法确定,换句话说,函数也就没法编写 不过,C提供了满足该场景的解决方案&…

《golang设计模式》第三部分·行为型模式-09-策略模式(Strategy)

文章目录 1. 概述1.1 作用1.1 角色1.2 类图 2. 代码示例2.1 设计2.2 代码2.3 类图 1. 概述 1.1 作用 策略(Strategy)是用于封装一组算法中单个算法的对象,这些策略可以相互替换,使得单个算法的变化不影响使用它的客户端。 1.1 …

掌握Flask:从入门到精通指南

掌握Flask:从入门到精通指南 Flask 是一个轻量级的 Python Web 应用程序框架,具有简单易学、灵活性高等特点,适合用于快速开发 Web 应用程序。本文将全面介绍 Flask 框架的各个方面,包括基本概念、路由、模板渲染、表单处理、数据…

LoadRunner自动化测试工具的应用

目录 第一部分:Loadrunner的简介 1.1 安装注意事项 1.2 协议的选择或者 VUSER 类型的选取 1.3 LR 的基本原理 1.4 测试脚本录制/分配所遵循的几个原则 第二部分:录制脚本 2.1 录制脚本前需要理解的几个基本概念 2.1.1 事务(Transaction) 2.1.2 集合点(Rendezvous) 2.1…

智能手表上的音频(四):语音通话

上篇讲了智能手表上音频文件播放。本篇开始讲语音通话。同音频播放一样有两种case:内置codec和BT。先看这两种case下audio data path,分别如下图: 内置codec下的语音通话audio data path 蓝牙下的语音通话audio data path 从上面两张图可以看…

Unity C++交互

一、设置Dll输出。 两种方式: 第一:直接创建动态链接库工程第二:创建的是可执行程序,在visual studio,右键项目->属性(由exe改成dll) 二、生成Dll 根据选项Release或Debug,运行完上面的生成解决方案后…