操作系统新版面试题

操作系统常见面试题 (JavaGuide版本)

什么是操作系统?

  • 操作系统管理计算机的硬件与软件,是计算机的基石
  • 操作系统的存在屏蔽了硬件层的复杂性
  • 操作系统也是一款软件程序,主要功能为管理计算机的资源

操作系统主要有哪些功能?

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

用户态和系统态?

  • 用户态:用户运行的进程可以访问用户所拥有的数据
  • 系统态:该状态运行的进程可以访问计算机所有资源,不受限制

用户态和内核态是如何切换的?

  • 系统调用:当我们以用户态运行进程时,想要访问计算机核心资源,就要通过系统调用方式向操作系统提出服务请求,由操作系统代为完成
  • 中断:外部设备发出中断信号,CPU转而执行中断处理程序,若之前执行的状态是用户态,就会发生用户态和内核态的转换
  • 异常:发生异常后,当前处理进程要转去内核态处理异常,就会发生用户态到内核态的转换

系统调用的过程了解吗?

  1. 用户态进程发起系统调用,发生中断
  2. 跳转到中断处理程序,开始系统调用
  3. 系统调用完成后,主动触发中断,切换回用户态工作

并发和并行有什么区别?

  • 并发:一段时间内,多个任务都会处理,但在某一时间刻时,只有一个任务在执行
  • 并行:同一时刻,有多个任务在执行

进程和线程的区别?

  • 调度:一个进程包含多个线程,进程是资源管理的基本单位,线程是程序执行的基本单位
  • 拥有资源:进程是资源管理的基本单位,进程下的线程共享该系统资源
  • 切换:进程切换慢,系统开销大,线程切换慢,系统开销小

进程与线程的切换流程?

进程切换分两步:

  • 切换页表以使用新的地址空间,一旦去切换上下文,处理器中所有已经缓存的内存地址一瞬间都作废了。

  • 切换内核栈和硬件上下文。

对于linux来说,线程和进程的最大区别就在于地址空间,对于线程切换,第1步是不需要做的,第2步是进程和线程切换都要做的。

因为每个进程都有自己的虚拟地址空间,而线程是共享所在进程的虚拟地址空间的,因此同一个进程中的线程进行线程切换时不涉及虚拟地址空间的转换

为什么虚拟地址空间切换会比较耗时?

当进程切换后页表也要进行切换,页表切换后TLB就失效了,Cache失效导致命中率降低,那么虚拟地址转换为物理地址就会变慢,表现出来的就是程序运行会变慢,而线程切换则不会导致TLB失效,因为线程无需切换地址空间,因此我们通常说线程切换要比较进程切换块,原因就在这里。

进程都有自己的虚拟地址空间,把虚拟地址转换为物理地址需要查找页表,页表查找是一个很慢的过程,因此通常使用Cache来缓存常用的地址映射,这样可以加速页表查找,这个Cache就是TLB(translation Lookaside Buffer,TLB本质上就是一个Cache,是用来加速页表查找的)。

进程间通信方式有哪些?

  • 管道:管道这种通讯方式有两种限制,一是半双工的通信,数据只能单向流动,二是只能在具有亲缘关系的进程间使用。进程的亲缘关系通常是指父子进程关系。

    管道可以分为两类:匿名管道和命名管道。匿名管道是单向的,只能在有亲缘关系的进程间通信;命名管道以磁盘文件的方式存在,可以实现本机任意两个进程通信。

  • 信号 : 信号是一种比较复杂的通信方式,信号可以在任何时候发给某一进程,而无需知道该进程的状态。

  • 信号量:信号量是一个计数器,可以用来控制多个进程对共享资源的访问。它常作为一种锁机制,防止某进程正在访问共享资源时,其他进程也访问该资源。

  • 消息队列:消息队列是消息的链接表,包括Posix消息队列和System V消息队列。有足够权限的进程可以向队列中添加消息,被赋予读权限的进程则可以读走队列中的消息。消息队列克服了信号承载信息量少,管道只能承载无格式字节流以及缓冲区大小受限等缺点。

  • 共享内存:共享内存就是映射一段能被其他进程所访问的内存,这段共享内存由一个进程创建,但多个进程都可以访问。

  • Socket:与其他通信机制不同的是,它可用于不同机器间的进程通信。

优缺点

  • 管道:速度慢,容量有限;
  • Socket:任何进程间都能通讯,但速度慢;
  • 消息队列:容量受到系统限制,且要注意第一次读的时候,要考虑上一次没有读完数据的问题;
  • 信号量:不能传递复杂消息,只能用来同步;
  • 共享内存区:能够很容易控制容量,速度快,但要保持同步,比如一个进程在写的时候,另一个进程要注意读写的问题,相当于线程中的线程安全问题。

线程/进程间的同步的方式

线程同步:多线程同时访问同一资源时,所产生问题的解决方案

  • 临界区:通过对多线程的串行化来访问同一资源,保证某一时刻只有一个线程访问公共资源
  • 互斥量:为协调访问一个公共资源而设计的,只有拥有互斥对象的线程才具有访问资源的权限
  • 信号量:为控制一个具有有限数量用户资源而设计。允许多个线程同时访问该资源,信号量=1时为互斥量
  • 事件:通知线程某一操作发生了,从而启动后继任务的开始

线程的分类?

  • 用户线程:不依赖操作系统核心
  • 内核线程:依赖操作系统核心

什么是临界区,如何解决冲突?

每个进程访问临界资源的那段程序成为临界区,一次仅允许一个进程使用的资源叫临界资源

解决冲突方法:

  • 一次仅允许一个进程使用,当该临界资源被访问时,其他进程必须等待临界资源被释放
  • 进入临界区的进程要在有限时间内退出
  • 如果进程访问不了临界资源,应该让出cpu,避免"忙等"现象产生

什么是死锁?死锁产生的条件?

什么是死锁

两个或两个以上的进程占有资源的同时又请求其他进程释放的资源,形成无限期的相互等待

死锁产生的四个必要条件:(有一个条件不成立,则不会产生死锁)

  • 互斥条件:一个资源一次只能被一个进程使用
  • 请求与保持条件:一个进程因请求资源而阻塞时,对已获得资源保持不放
  • 不剥夺条件:进程获得的资源,在未完全使用完之前,不能强行剥夺
  • 循环等待条件:若干进程之间形成一种头尾相接的环形等待资源关系

如何处理死锁问题

  • 死锁预防
    • 破除四个必要条件的其中之一
    • 破除资源互斥条件
    • 破除请求与保持条件:实现资源预分配策略,进程在运行前,一次性获得请求的全部资源
    • 破除不剥夺条件:允许进程在运行时可以抢夺其他进程的资源
    • 破除循环等待条件:实现资源的有序分配,要先获得小编号资源才能申请大编号的资源
  • 死锁避免
    • 通过动态检测资源分配的情况(银行家算法)确保系统处于安全状态再进行分配资源
  • 死锁检测
    • 操作系统会周期性地执行死锁检测算法(通过资源分配图)来检测死锁是否发生,从而进行后续操作
  • 死锁解除
    • 常用方法是终止线程和资源抢占
  • 鸵鸟策略
    • 解除死锁代价高昂,当发生死锁不会对用户造成很大影响时,一般选择忽略

进程调度策略有哪几种?

  • 先来先服务
  • 短作业优先
  • 时间片轮转调度算法
  • 多级反馈队列算法:如短进程优先的调度算法,仅照顾了短进程而忽略了长进程 。多级反馈队列调度算法既能使高优先级的作业得到响应又能使短作业(进程)迅速完成。,因而它是目前被公认的一种较好的进程调度算法
  • 优先级调度算法

进程有哪些状态?

  • 创建
  • 就绪
  • 运行
  • 阻塞
  • 终止

状态转换流程

在这里插入图片描述

什么是分页?

把内存空间划分成相同大小且固定的块,作为主存的基本单位。因为程序数据存储在不同的页面中,而页面又离散的分布在内存中,需要通过一个页表记录映射关系,以实现从页号到物理块号的映射

访问分页系统中的内存数据需要两次的内存访问:

  • 第一次,从内存访问页表,从中找到物理地址
  • 第二次,根据物理地址,再次访问内存找到所需的数据

什么是分段?

分页是为了提高内存利用率,而分段是为了满足程序员在编写代码的时候的一些逻辑需求(比如数据共享,数据保护,动态链接等)。

分段内存管理当中,地址是二维的,一维是段号,二维是段内地址;其中每个段的长度是不一样的,而且每个段内部都是从0开始编址的。由于分段管理中,每个段内部是连续内存分配,但是段和段之间是离散分配的,因此也存在一个逻辑地址到物理地址的映射关系,相应的就是段表机制。

内存管理的方式

  • 连续分配管理方式
    • 块式管理
  • 非连续分配管理
    • 页式管理
    • 段式管理
    • 页是物理单位,段是逻辑单位。分页可以有效提高内存利用率,分段可以更好满足用户需求。
  • 段页式管理
    • 结合页式管理优点和段式管理优点,简单来说段页式管理机制就是把主存先分成若干段,每个段又分成若干页,也就是说 段页式管理机制 中段与段之间以及段的内部的都是离散的。

分页机制和分段机制的共同点和区别

  • 共同点
    • 提高内存利用效率,减少碎片
    • 都是离散分布存储
  • 区别
    • 页的大小是固定的,由操作系统决定;而段的大小不是固定,取决于当前运行的程序
    • 分页仅仅是为了满足内存管理的需求,而段时逻辑单位,能够更好地满足用户的需要

快表

为了提高虚拟地址到物理地址的转换速度,操作系统在 页表方案 基础之上引入了 快表 来加速虚拟地址到物理地址的转换。是一个缓存器,缓存了部分页表的内容,有了快表,可以得到物理地址,进行一次访存拿到数据

使用快表后的地址转换流程

  • 根据虚拟地址的页号查找快表
  • 如果该页在快表中,直接得到物理地址
  • 如果该页不在快表中,就访问内存中的页表,再从页表中得到物理地址,同时将页表中的该映射表项添加到快表中;
  • 当快表填满后,又要登记新页时,就按照一定的淘汰策略淘汰掉快表中的一个页。

多级页表

避免把全部页表长时间留在内存中,占用过多空间,特别是那些根本就不需要的页表就不需要保留在内存中。

逻辑地址和物理地址

逻辑地址由操作系统决定,与程序进行打交道。而物理地址是内存单元真正的地址

CPU 寻址了解吗?为什么需要虚拟地址空间?

  • 现代处理器使用的是一种称为 虚拟寻址(Virtual Addressing) 的寻址方式。使用虚拟寻址,CPU 需要将虚拟地址翻译成物理地址,这样才能访问到真实的物理内存。 实际上完成虚拟地址转换为物理地址转换的硬件是 CPU 中含有一个被称为 内存管理单元(Memory Management Unit, MMU) 的硬件。
  • **如果直接把物理地址暴露出来的话会带来严重问题,比如可能对操作系统造成伤害以及给同时运行多个程序造成困难。**并且不同进程的虚拟地址互相隔离,这样一个进程的代码无法修改另一个进程使用的物理内存

虚拟内存

很多时候我们使用了很多占内存的软件,这些软件占用的内存可能已经远远超出了我们电脑本身具有的物理内存。为什么可以这样呢? 正是因为 虚拟内存 的存在,通过 虚拟内存 可以让程序可以拥有超过系统物理内存大小的可用内存空间。另外,虚拟内存为每个进程提供了一个一致的、私有的地址空间,它让每个进程产生了一种自己在独享主存的错觉(每个进程拥有一片连续完整的内存空间)

虚拟内存 使得应用程序认为它拥有连续的可用的内存(一个连续完整的地址空间),而实际上,它通常是被分隔成多个物理内存碎片,还有部分暂时存储在外部磁盘存储器上,在需要时进行数据交换。与没有使用虚拟内存技术的系统相比,使用这种技术的系统使得大型程序的编写变得更容易,对真正的物理内存(例如 RAM)的使用也更有效率。

摆脱了物理内存的束缚,让程序产生可以独占内存的错觉,而实际是核心部分在内存运行,还有一部分在外存中,需要用时再向外存拉取到内存

局部性原理

  • 时间局部性:指如果程序中的某条指令一旦执行,则不久之后该指令可能再次被执行;如果某数据被访问,则不久之后该数据可能再次被访问。
  • 空间局部性:一旦程序访问了某个存储单元,则不久之后,其附近的存储单元也将被访问。

虚拟内存的技术实现

  • 请求分页存储管理 :建立在分页管理之上。请求分页是目前最常用的一种实现虚拟存储器的方法。请求分页存储管理系统中,在作业开始运行之前,仅装入当前要执行的部分段即可运行。假如在作业运行的过程中发现要访问的页面不在内存,则由处理器通知操作系统按照对应的页面置换算法将相应的页面调入到主存,同时操作系统也可以将暂时不用的页面置换到外存中。
  • 请求分段存储管理 :建立在分段存储管理之上。请求分段储存管理方式就如同请求分页储存管理方式一样,在作业开始运行之前,仅装入当前要执行的部分段即可运行;在执行过程中,可使用请求调入中断动态装入要访问但又不在内存的程序段;当内存空间已满,而又需要装入新的段时,根据置换功能适当调出某个段,以便腾出空间而装入新的段。
  • 请求段页式存储管理

请求分页管理和分页管理的区别

**根本区别是运行程序前是否需要把所需的全部地址空间加到内存中,**分页管理需要把所有地址空间加到内存中,而请求分页管理是按需要从外存调入空间地址到内存

页面置换算法

在进行实现虚拟内存时,地址映射过程中,若在页面中发现所要访问的页面不在内存中,则发生缺页中断 。

当发生缺页中断时,如果当前内存中并没有空闲的页面,操作系统就必须在内存选择一个页面将其移出内存,以便为即将调入的页面让出空间。用来选择淘汰哪一页的规则叫做页面置换算法,我们可以把页面置换算法看成是淘汰页面的规则。

常见页面算法

  • OPT 页面置换算法(最佳页面置换算法)(无法实现)
  • FIFO(First In First Out) 页面置换算法(先进先出页面置换算法) :
  • LRU (Least Recently Used)页面置换算法(最近最久未使用页面置换算法)
  • LFU (Least Frequently Used)页面置换算法(最少使用页面置换算法)
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值