面试题:操作系统

什么是操作系统?

  • 本质是一个运行在计算机上的软件程序,管理计算机硬件与软件资源的程序
  • 屏蔽硬件的复杂性,提供接口使用计算机硬件
  • OS内核是核心部分,负责内存管理、硬件设备管理、文件系统管理、应用程序管理等

什么是系统调用

  • 用户态:用户态运行的进程或可以直接读取用户程序的数据
  • 系统态:简答理解为系统态运行的进程几乎可以访问计算机的任何资源,不受限制
  • 我们的程序基本都在用户态运行,当需要使用OS提供的系统态下的功能时,通过系统调用去使用
  • 调用功能有:
  1. 设备管理,完成设备启动、请求、释放
  2. 文件管理,目录及文件的读、写、创建、删除
  3. 进程控制:进程的创建、撤销、阻塞、唤醒
  4. 进程通信:实现进程之间的消息传递
  5. 内存管理:内存的分配、回收

进程的状态

  • 创建状态:尚未创建或者正在创建
  • 就绪状态:准备所有的了,就等CPU
  • 运行状态:正在运行
  • 阻塞状态:等待资源中
  • 结束状态:运行结束或中断

进程通信方式

  • 管道/匿名管道:管道是半双工的,当需要通信时建立两个管道;父子进程、兄弟进程之间的通信;本质上是一个特殊的文件,只存在内存中;从管道末尾写入,管道头读取
  • 有名管道:匿名管道没有名字,只能用于有亲属关系的进程通信;有名管道以文件形式存在,并且有一个路径名与其相关;管道的名字(路径名)存在文件系统中,内容存在内存中;严格遵守FIFO
  • 信号Signal:Linux中进程通信机制,信号可以发送给任意一个进程
  • 消息队列:消息链表,存放在内存中,遵守FIFO,消息队列属于内核管理(存于内核内存),只有重启内核才会真正删除
  • 信号量Semaphores:信号量是一个计数器,用于多进程对共享数据的访问
  • 共享内存:多个进程可以访问同一块内存空间,例如互斥锁和信号量等
  • 套接字Sockets:用于客户端和服务器之间的网络进程通信

线程同步方式

  • 互斥量(Mutex):采取互斥对象机制,只有拥有互斥对象才能访问共享资源,比如Synchironized和Lock
  • 信号量:信号量,允许多个线程同时访问同一资源,但是又数量限制
  • 事件:wait、notify,使用通知方式,Condition类

进程调度算法

  • FCFS先来先服务算法,公平
  • SJF短作业优先算法,照顾短作业,忽略长作业
  • RR时间片轮转调度算法
  • 优先级调度算法,分为抢占式和非抢占式,优先级有静态和动态之分
  1. 非抢占式:处理机一旦分配给优先级最高的进程后,那么就一直执行直至完毕
  2. 抢占式:处理机执行过程中,如果出现优先级更高的进程,那么执行优先级更好的进程
  • 多级反馈队列
  1. 设置多个就绪队列,每个队列赋予不同优先级,时间片也不一样,优先级高则时间片小
  2. 每个队列都采用FCFS算法,如果某个线程在分配的时间片没有执行完毕,那么转到下一个优先级的对尾排队等候执行
  3. 按照队列优先级执行,一定先执行高优先级的任务

内存管理

  • 内存管理分为连续分配管理和非连续分配管理
  • 连续分配管理是指一个用户程序分到连续的内存空间,比如块式管理
  • 非连续分配管理允许一个用户程序使用不相邻离散的内存空间,比如页式管理、段式管理和段页式管理
  • 块式管理:将内存分为几块,块的大小可以静态设置也可以动态调整,每个程序占一块,容易造成块碎片
  • 页式管理:将程序内存分为大小相等的页,页比较小,一个程序可以占多个页,提高内存利用率,减少碎片,可以存在二级、多级页表;每页连续
  • 段式管理:可以将作业(程序)按照不同功能分段,每个段大小可以不一样,按照每个程序段来决定段大小,相对于页式管理,段式管理中的每一个段都有实际功能意义;每段连续
  • 段页式管理:简单来说,先将用户程序分成若干个段,然后每个段中分为若干页

快表和多级页表

  • 快表:提高了虚拟地址到物理地址的转换速度;增设一个具有并行查询能力的特殊高速缓存器(快表),用来存放当前访问的页表项;
  • 如果查询的时候能再页表项找到,那么Ok;
  • 如果找不到,再去内存中找,找到了记得放到快表中
  • 多级页表:避免将全部页表放在内存中占用过多空间,特别是不需要的表项,查询时,一级级往下查

分页机制和分段机制的异同点

  • 分页和分段机制都是为了提高内存利用率,减少内存碎片;段和页都是离散存储,但是内部都是连续的
  • 页的大小固定,段的不固定
  • 分页仅是满足管理内存的需要,段式逻辑单位(体现为代码段、数据段等满足用户需要)

页面置换算法

  • OPT页面置换算法(最佳页面置换算法,Optmal):选择淘汰的页面是以后永远不使用的,或者以后长时间不用的,但是现在还没有实现
  • FIFO先进先出置换算法:总是淘汰最先进入内存的页面
  • LRU最近最久未使用页面置换算法:每个页面赋予一个访问字段,用来记录每次被访问的时间,当淘汰页面时,选择最早被访问的页面
  • LFU最少使用页面置换算法,选择被使用次数最少的页面作为淘汰页

逻辑地址和物理地址

  • 逻辑地址是编程语言上使用的地址,由操作系统决定
  • 物理地址是真正的内存地址

CPU寻址是什么?

  • CPU使用的是虚拟寻址方式,需要将虚拟地址转换为物理地址
  • 完成虚拟地址转换为物理地址的硬件是CPU总一个叫做内存管理单元(MMU)的硬件

为什么需要虚拟地址空间?

  • 如果没有虚拟内存空间,那么所有操作都直接访问物理内存
  • 直接访问物理内存,容易造成操作系统崩溃
  • 直接访问物理内存,运行多个程序比较困难,使用虚拟地址可以隔离开每个程序,不至于发生冲突
  • 提升内存使用效率,使用虚拟地址,一个程序可以使用不相邻的内存,且逻辑上可以增大内存区域(将超过内存的数据暂时存到硬盘)

什么是虚拟内存

  • 虚拟内存内存管理的一种技术,定义连续的虚拟地址空间,并将内存扩展到硬盘空间
  • 为每个进程提供一个私有的地址空间,让进程觉得自己独占内存并且使用的是连续的内存,能有效的管理内存

局部性原理

  • 时间局部性:程序中某条指令一旦执行,不久后可能还要执行;某个数据被访问后,不久后可能还要被访问(因为程序中存在大量循环)
  • 空间局部性:一旦访问了某个存储单元,那么不久后其附近的存储单元也将被访问,即一段时间内访问的地址可能在一定范围内(存在大量链表、数组)
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值