个人操作系统面试八股

139 阅读5分钟

操作系统

请简述什么是进程

运行中的程序(注不一定是运行态),包括执行代码、状态、数据、所需的资源。

PCB中有哪些信息
    进程标识符
    进程状态
    进程计数器
    寄存器集合(通用、段)
    内存管理信息(内存区域、内存映射,页表、段表)
    IO状态(打开的文件、设备请求队列)
    CPU统计信息(时间)
    优先级
    调度策略

请简述为什么操作系统需要进程

  • 资源分配
  • 资源利用率

请简述阻塞、非阻塞、同步、异步

阻塞、非阻塞:程序在等待调用结果时的状态 同步、异步:消息通信的机制

五状态模型

请简述为什么进程会发生阻塞

一个进程会进入阻塞状态的情况有很多,比如等待 I/O 操作、等待某个进程的信号或等待资源等。 当一个进程需要等待一些操作完成或获得某些资源时,它就会进入阻塞状态。

请简述进程和线程的区别

基本单位、资源管理、并发性(切换成本->并发执行效率)、独立性、通信

请简述操作系统的内核态

  • 进入内核空间
  • 执行操作系统内核代码
  • 访问内存所有数据

请简述进程什么时候会进入内核态

中断、异常、系统调用

什么是IO密集型任务

计算密集型与IO密集型区别
    多线程对两者的影响

协程是什么?为什么需要协程?

用户级线程,没有进行上下文切换

调度、切换、管理更加轻量

内核无法感知协程的存在

多协程可以发挥多核CPU的优势吗?为什么?

不能,内核无法感知协程存在。

可运用在多IO的场景,比如高并发网络IO的接入

请简述什么是局部性原理?

CPU访问存储器时,无论是存取指令还是存取数据,所访问的存储单元都趋于聚集在一个较小的连续区域中

存储器可以分为寄存器、主存、辅存?它们各解决了什么问题?

分离冷热数据,降低热点数据服务负载

请简述什么是虚拟内存

把程序使用内存划分,将部分暂时不使用的内存放置在辅存(局部性原理)

逻辑地址空间、物理地址空间
缺页中断
页面置换(高速缓存、主存)

大型游戏有几十G,在8G内存的计算机是怎么运行起来的?

虚拟内存

请简述操作系统中的缺页中断

页式存储管理
    将进程的逻辑空间等分成若干多大小的页面
    把物理内存空间分成与页面大小相同的物理块
    以页为单位把进程空间装进物理内存中
    缺点:如果一段连续的逻辑分布在多个页面,会影响性能
页表
    进程逻辑空间与物理空间的映射
    512B~8K, linux: 4K
段式存储管理
    将进程的逻辑空间划分成若干段(非等分)
    段的长度由连续逻辑的长度决定
段页式存储管理
    段号+段内页号+页内地址

LRU算法、LFU算法

略,见编程八股

请简述死锁的必要条件

  • 互斥
  • 不可剥夺
  • 请求与保持
  • 循环等待

相关问题

银行家算法

请简述什么是死锁,为什么会产生死锁

相互等待

竞争资源,调度顺序不当

同步问题三大经典案例

生产者-消费者问题

读者-写者问题

读者-写者问题的哪些系统有涉及
    mysql版本设计
    redis缓存一致性

哲学家进餐问题

临界资源:缓冲区、读/写数据、筷子

请简述乐观锁/悲观锁/可重入锁

请简述轻量锁/重量锁/公平锁/非公平锁

偏向锁:同一个线程执行临界资源会自动获取资源

轻量级锁:没有获得资源的线程自旋等待锁释放

重量级锁:没有获得资源的线程阻塞等待唤醒

公平锁:都放入等待队列,对每个线程完全公平

非公平锁:插队自旋,获取锁失败后再进入等待队列排队

请简述互斥锁和自旋锁的区别

实现原理不同

互斥锁:阻塞

自旋锁:不会让出CPU,处于忙等

线程间有哪些同步的方式

  • 互斥锁
  • 自旋锁
  • 读写锁
  • 条件变量(等待,唤醒)

进程间有哪些同步方式

管道

消息队列

共享内存

信号

套接字

为什么进程间通信和线程间通信不同
    因为进程是资源分配的基本单位,每个进程的资源不是共享的
管道与消息队列区别
    管道仅文本,消息队列可以对数据序列化反序列化
共享内存
    速度最快申请同一块物理地址空间,但是未提供同步机制

请简述无锁数据结构的原理

无锁队列:队尾插入,利用CAS

CAS是什么?请简述对CAS的理解

ABA问题是什么?如何解决?

你了解业界哪些分布式锁实现方式

redis: setnx key value, del key

zookeeper: 创建数据节点(znode), 注:如果是临时节点,客户端与集群断开连接会自动释放

mysql: 同一个KEY只有一个节点能插入成功

事务、表级锁、行级锁