操作系统面试知识大盘点

本文详细阐述了操作系统面试中的核心知识点,包括进程管理、死锁、内存管理和进程通信。重点讲解了进程与线程的区别、调度算法、信号量与管程在进程同步中的应用,以及虚拟内存和页面置换策略。此外,还提到了系统调用的概念和类型,为面试准备提供全面指导。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

前言

这篇文章南国根据自己的理解 写一篇在互联网公司面试中操作系统常问的知识点。本篇博客许多内容都是在前人的基础上进行的总结和概括,所以这篇博客 南国还是那他归纳为转载。干货很多,马上到~

1.基本概念

1.1 并行和并发

这个概念在之前的博客中,我也讲过多次了。之类再做个简单的概述。
并发是指宏观上在一段时间内能同时运行多个程序(按时间片交叉运行),而并行则指同一时刻能运行多个指令。

并行需要硬件支持,如多流水线、多核处理器或者分布式计算系统。
操作系统通过引入进程和线程,使得程序能够并发运行。

1.2 共享

共享是指系统中的资源可以被多个并发进程共同使用。

有两种共享方式:互斥共享和同时共享

互斥共享的资源称为临界资源,例如打印机等,在同一时间只允许一个进程访问,需要用同步机制来实现对临界资源的访问。

1.3 虚拟

虚拟技术把一个物理实体转换为多个逻辑实体。

主要有两种虚拟技术:时分复用技术和空分复用技术。

多个进程能在同一个处理器上并发执行使用了时分复用技术,让每个进程轮流占有处理器,每次只执行一小个时间片并快速切换。

虚拟内存使用了空分复用技术,它将物理内存抽象为地址空间,每个进程都有各自的地址空间。地址空间的页被映射到物理内存,地址空间的页并不需要全部在物理内存中,当使用到一个没有在物理内存的页时,执行页面置换算法,将该页置换到内存中。

1.4 异步

异步指进程不是一次性执行完毕,而是走走停停,以不可知的速度向前推进。

2.操作系统的基本功能

  • 进程管理(有些书里面也将他说为处理机管理)
    进程控制、进程同步、进程通信、死锁处理、处理机调度等。

  • 内存管理
    内存分配、地址映射、内存保护与共享、虚拟内存等。

  • 文件管理
    文件存储空间的管理、目录管理、文件读写管理和保护等。

  • 设备管理
    完成用户的 I/O 请求,方便用户使用各种设备,并提高设备的利用率。
    主要包括缓冲管理、设备分配、设备处理、虛拟设备等。

后面的内容大多会围绕这几个方面进行展开论述。

3.进程管理

3.1 进程和线程

进程是资源分配的基本单位

进程的组成部分有:
①程序。作用:描述进程要完成的功能。
②数据集合。作用:程序在执行时所需要的数据和工作区。
③程序控制块。作用:包含进程的描述信息和控制信息。它是进程存在的唯一标志。

进程控制块 (Process Control Block, PCB) 描述进程的基本信息和运行状态,所谓的创建进程和撤销进程,都是指对 PCB 的操作。

线程是独立调度的基本单位。一个进程中可以有多个线程,它们共享进程资源。

例如:QQ 和浏览器是两个进程,浏览器进程里面有很多线程,例如 HTTP 请求线程、事件响应线程、渲染线程等等,线程的并发执行使得在浏览器中点击一个新链接从而发起 HTTP 请求时,浏览器还可以响应用户的其它事件。

3.2进程和线程的区别(重要!!)

  • 拥有资源
    进程是资源分配的基本单位,但是线程不拥有资源,线程可以访问隶属进程的资源。
  • 调度
    线程是独立调度的基本单位,在同一进程中,线程的切换不会引起进程切换,从一个进程中的线程切换到另一个进程中的线程时,会引起进程切换。
  • 并发
    不仅进程之间可以并发执行,多个线程之间也可以并发执行,提高吞吐量。
  • 系统开销
    线程切换开销小于进程。这点很好理解,由于创建或撤销进程时,系统都要为之分配或回收资源,如内存空间、I/O 设备等,所付出的开销远大于创建或撤销线程时的开销。类似地,在进行进程切换时,涉及当前执行进程 CPU 环境的保存及新调度进程 CPU 环境的设置,而线程切换时只需保存和设置少量寄存器内容,开销很小。
  • 通信方面
    线程间可以通过直接读写同一进程中的数据进行通信,但是进程通信需要借助 IPC。
  • 健壮性
    多进程程序健壮性高于多线程程序。进程有独立的地址空间,一个进程崩溃后,在保护模式下不会对其它进程产生影响,而线程没有单独的地址空间,一个线程死掉就等于它在的整个进程死掉,所以多进程的程序要比多线程的程序健壮;

(2022-03 更新)
除了进程和线程,在C++中经常会提到协程。
协程是一种用户态的轻量级线程,可将其视为微线程,协程的调度完全由用户控制。协程拥有自己的寄存器上下文和栈。协程调度切换时,将寄存器上下文和栈保存到其他地方,在切回来的时候,恢复先前保存的寄存器上下文和栈,直接操作栈则基本没有内核切换的开销,可以不加锁的访问全局变量,所以上下文的切换非常快。
协程与线程主要区别是它将不再被内核调度,而是交给了程序自己而线程是将自己交给内核调度。
一个线程可以包含一个或多个协程,协程拥有自己的寄存器上下文和栈,协程调度切换时,将寄存器上下文和栈保存起来,在切换回来时恢复先前保运的寄存上下文和栈。
协程的优势如下:
节省内存,每个线程需要分配一段栈内存,以及内核里的一些资源
节省分配线程的开销(创建和销毁线程要各做一次 syscall)
节省大量线程切换带来的开销
与 NIO 配合实现非阻塞的编程,提高系统的吞吐

可参考:https://www.nowcoder.com/discuss/600292?type=1

3.3 进程的状态

在这里插入图片描述

3.4进程调度算法

不同环境的调度算法目标不同,因此需要针对不同环境来讨论调度算法。

1. 批处理系统

批处理系统没有太多的用户操作,在该系统中,调度算法目标是保证吞吐量和周转时间(从提交到终止的时间)。

1.1 先来先服务 first-come first-serverd(FCFS)
按照请求的顺序进行调度。
有利于长作业,但不利于短作业,因为短作业必须一直等待前面的长作业执行完毕才能执行,而长作业又需要执行很长时间,造成了短作业等待时间过长。

1.2 短作业优先 shortest job first(SJF)
按估计运行时间最短的顺序进行调度。
长作业有可能会饿死,处于一直等待短作业执行完毕的状态。因为如果一直有短作业到来,那么长作业永远得不到调度。

1.3 最短剩余时间优先 shortest remaining time next(SRTN)
按估计剩余时间最短的顺序进行调度。</

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值