fisherss

CS-LogN思维导图:记录专业基础 面试题
开源地址:https://github.com/FISHers6/CS-LogN

本章节 操作系统面试题导图如下:

操作系统面试题

操作系统引论

面试题1:什么是操作系统

  • 控制和管理整个计算机系统的硬件和软件资源
  • 为用户和上层软件,提供易用接口和环境的程序
  • 是最基础的系统软件

面试题2:什么是系统调⽤

  • 系统调用是:操作系统对应用程序提供的服务调用请求接口

  • 引用目的

    • 应用程序通过系统调用请求获得操作系统内核的服务,保证系统稳定性和安全性(用户非法操作)

进程管理

面试题1:进程和线程的区别

  • 调度单位

    • 线程是独立调度单位,进程拥有资源的基本单位
  • 资源

    • 进程都是拥有资源的基本单位,线程不拥有系统资源(少) 但可以访问共享其隶属进程的系统资源
  • 并发粒度

    • 引入线程后并发度提升,吞吐量提升
  • 系统开销

    • 1.进程创建开销 2.进程切换开销 3.进程间通信开销
  • 地址空间

    • 进程地址空间独立、线程共享同一进程资源的地址空间
  • 通信方面

    • 进程间通信:需要同步和互斥手段保证数据一致
    • 线程间通信:可直接读写同一进程数据段(全局变量)

面试题2:进程有哪⼏种状态,状态如何转换

  • 5/3种状态

    • 运行态

      • 进程在CPU上运行;单处理机最多1个运行态
    • 就绪态

      • 进程获得了除CPU外的一切资源,存入就绪队列
    • 阻塞态

      • 进程等待某一事件(等待资源)而暂停运行 如等IO
    • *创建态

      • 进程正被创建,尚未转到就绪态(详见进程控制)
    • *结束态

      • 进程正常结束或其他原因中断运行,先置结束态
  • 状态转换

    • 就绪态->运行态

      • 处于就绪态被调度,获得处理机资源(时间片)
    • 运行态->就绪态

      • 1.时间片用完,调度程序让进程换态(非主动)
        2.或者被可剥夺系统中被优先级高的进程抢占
    • 运行态->阻塞态

      • 1.进程请求某一资源(如外设)的使用和分配
        2.或者等待某一事件(如等待I/O执行中(阻塞))
    • 阻塞态->就绪态

      • 1.进程等待事件的发生(得到资源),如另一个进程的I/O操作结束,释放IO资源,这个进程得到IO资源 2.或中断结束 中断处理程序来改变相应进程状态

面试题3:进程间有哪些通信⽅式

  • 进程通信的概念

    • 目的和概念

      • 进程之间信息交换
    • 引入原因

      • 各进程拥有独立的内存地址空间,为了保证安全,一个进程不能直接访问其它进程的地址空间
  • 通信方式

    • 1.共享存储

      • 设置一块可直接访问的内存共享空间,读写交换信息互斥访问共享空间,读/写操作使用p/v
    • 2.消息传递

      • 进程间数据交换以格式化的消息为单位,系统提供“发送/接受原语”,如:消息队列、信箱
    • 3.管道通信

      • 设置一个特殊的共享文件(管道),缓冲区,半双工

面试题4:线程间有哪些同步的⽅式

  • 同步的概念

    • 由并发性带来异步性问题,进/线程间需协调工作先后次序、传递信息(合作)所产生的直接制约关系,避免资源访问冲突
  • 同步的方式

    • 互斥量(Mutex)

      • synchronized 关键词 和 各种 Lock
    • 信号量(Semphares)

      • 设置资源允许的数量,同⼀时刻多个线程可以访问同⼀资源
    • 管程/事件(Event) :Wait/Notify

      • 通过通知操作的⽅式来保持多线程同步

面试题5:进程的调度算法有哪些

  • 先来先服务FCFS

    • 按照作业/进程的先后顺序服务,但短作业需要等待前面的长作业执行完,对短作业不利
  • 短作业优先SJF

    • 改进FCFS,让最短的作业/进程先得到服务,追求最少的平均等待时间(平均化整体考虑)
  • 高响应比优先

    • 响应比综合考虑进程的“等待时间” 和 “要求服务的时间”
  • 时间片轮转调度算法(RR)

    • 按时间片轮流服务进程,使用时钟中断来通知CPU,时间片已用完了可以去调度下一个进程
  • 优先级调度算法

    • 静态优先级、动态优先级(动态调整)调度
  • 多级反馈队列调度算法

    • 多种调度算法的折中权衡,最优

面试题6:说说进程/线程安全

  • 多线程执行时不会出现数据不一致或者数据污染
  • 线程安全问题都是由多个线程访问临界资源(全局变量及静态变量)引起的,可以使用同步、互斥的方法保证线程安全

面试题7:什么是死锁,死锁的条件,如何解决死锁

  • 什么是死锁

    • 多个进程因竞争资源而等待对方手里的资源,互相等待,都无法向前推进
  • 死锁的条件

    • 1.互斥
    • 2.不可剥夺
    • 3.请求和保持
    • 4.循环等待链
  • 如何解决死锁

    • 预防死锁

      • 破坏死锁的四大条件之一
    • 避免死锁

      • 安全序列来检测死锁、银行家算法
    • 死锁的检测及解除

      • 资源请求分配图、死锁定理;(资源剥夺、进程回滚等)

内存管理

面试题1:操作系统的内存管理主要是做什么

  • 1.内存空间的分配与回收

    • 操作系统完成主存储器空间的分配,无需程序员操作,提高编程效率
  • 2.内存空间的扩充

    • 利用虚拟存储技术或自动覆盖技术,从逻辑上扩充内存
  • 3.地址转换

    • 程序的完整周期:编译、链接、装入,装入时将逻辑地址转换为物理地址
  • 4.存储保护

    • 内存分配前,1.需要保护操作系统不受用户进程的影响 2.保护用户进程不受其它用户进程的影响 3.防止地址越界

面试题2:操作系统的内存管理机制了解吗?内存管理有哪⼏种⽅式?

  • 连续分配方式

    • 1.单一连续分配

      • 内存分为系统区(供操作系统)和用户区(供用户)
    • 2.固定分区分配

      • 将用户内存空间划分为若干固定大小的区域,每个分区只装入一道作业
    • 3.动态分区分配

      • 在进程装入内存时,根据进程的大小动态地建立分区
  • 离散分配方式

    • 1.基本分页存储管理
    • 2.基本分段存储管理
    • 3.段页式存储管理
  • 内部碎片与外部碎片

    • 内部碎片

      • 固定分区分配中,一块分区只放一个进程,当这块分区有剩余容量时存在空间浪费
      • 如:分页、段页式存储、固定分区
    • 外部碎片

      • 动态分区分配中,随着进程的换入/换出分区外的存储空间会变成越来越多的碎片
      • 如:分段

面试题5:分⻚机制和分段机制的共同点和区别,段页式各需要几次访存

  • 相同点

    • 都属于内存离散存储分配方式,都是为了改进连续内存分配而提⾼内存利⽤率
  • 区别

    • ⻚的⼤⼩是固定的,由操作系统决定;⽽段的⼤⼩不固定,取决于我们当前运⾏的程序
    • 分⻚仅仅是为了满⾜操作系统内存管理的需求,⽽段是逻辑信息的单位,在程序中可以体现为代码段,数据段,能够更好满⾜⽤户的需要。
    • 分页2次、分段2次、段页式3次访存

面试题3:快表是什么

  • 引入目的和概念

    • 快表,又称联想寄存器(TLB, translation lookaside buffer )是一种访问速度比内存快很多的高速缓存,用来存放最近访问的页表项的副本,可以加速地址变换的速度(基本地址变换机构要访存2次)

面试题6:什么是局部性原理

  • 局部性原理

    • 时间局部性

      • 指令近期多次执行,数据近期多次访问;如循环语句
    • 空间局部性

      • 存储单元附近的也可能访问,如连续的存储单元数组
    • 每访问一个逻辑地址,都要查询内存中的页表,可能连续多次查同一表项

  • 应用

    • 快表、cache、虚拟存储器

面试题4:为什么要用多级页表

  • 引入目的

    • 单级页表存在的问题:

      • 页表必须连续存放,因此当页表很大时,需要占用很多个连续的页框。
      • 没有必要让整个页表常驻内存,因为进程在一段时间内可能只需要访问某几个特定的页面
    • 建立多级页表的目的在于建立索引,以便不用浪费主存空间去存储无用的页表项,也不用盲目顺序式查找页表项

  • 两级页表方案逻辑地址结构

    • 一级页号、二级页号、页内偏移量

面试题7:虚拟内存管理如何实现,为什么引入虚拟内存

  • 传统存储管理方式的缺点特征

    • 一次性

      • 作业必须一次性全部装入内存后,才能开始运行

        • 1.作业很大而不能全部装入内存,无法运行
        • 2.大量作业要求运行时,内存不足以容纳所有作业,只能使少量作业线运行,导致多道程序度的并发度下降
    • 驻留性

      • 一旦作业被装入内存,就会一直驻留在内存中,直至作业运行结束;而程序运行只需要一部分数据,浪费了宝贵的内存资源
  • 虚拟内存的定义

    • 基于局部性原理,在程序装入时,可以将程序中很快会用到的部分装入内存,暂时用不到的部分留在外存,就可以让程序开始执行
  • 虚拟内存的特征

    • 多次性

      • 无需在作业运行时一次性全部装入内存,而是允许被分成多次调入内存
    • 对换性

      • 在作业运行时无需一直常驻内存,而是允许在作业运行过程中,将作业换入、换出
    • 虚拟性

      • 从逻辑上扩充了内存的容量,使用户看到的内存容量,远大于实际的容量
  • 虚拟内存技术的实现
    (离散分配的内存管理)

    • 请求分页存储管理
    • 请求分段存储管理
    • 请求段页式存储管理

面试题8:虚拟内存管理的⻚⾯置换算法有哪些

  • 最佳置换算法OPT
  • 先进先出置换算法FIFO
  • 最近最久未使用置换算法LRU
  • 时钟置换算法CLOCK(最近未用NRU)

面试题9:32位系统运行大于4G的程序,如何寻址(考察虚拟内存,虚拟地址空间)

  • 使用虚拟内存,基于局部性原理,在程序装入时,可以将程序中很快会用到的部分装入内存,暂时用不到的部分留在外存,就可以让程序开始执行

  • 逻辑地址将经过MMU内存管理单元转换为物理地址

    • 转换过程:查询页表,命中就计算出物理地址
      不命中就出发缺页中断,让os分配地址空间

面试题10:内存中进程驻留集如何选定

  • 驻留集指请求分页存储管理中给进程分配的内存块集合
  • 可以根据工作集(在某段时间间隔里,进程实际访问页面的集合)来设置驻留集大小

相关文章: