面试2_操作系统


1、进程管理

1)进程、线程的区别

区别进程线程
根本区别资源管理的基本单位任务执行、调度的基本单位
切换`慢
资源独立内存空间同进程下的线程共享本进程地址空间与资源
开销创建、销毁是开销大比进程小
执行程序入口、程序出口、执行顺序不能独立执行,须在应用程序中
关系一个进程可有多个线程进程的一部分
健壮性健壮相对不健壮

2)进程线程、协程的区别

区别进程、线程协程
机制同步异步
调度抢占式、分时调度非抢占式(同一时间只有一个协程有运行权)
关系进程、线程均可以有多个协程
控制不被内核管理, 完全由程序控制
状态保留上一次调用时的状态
资源线程是被分割的CPU资源协程是组织好的代码流程
线程是协程的资源
协程不直接使用线程
协程直接利用的是执行器关联任意线程或线程池

3)进程、线程的切换流程

  1. 切换页表以使用新的地址空间
  2. 切换内核栈硬件上下文

进程两步都需要,线程只要第二步


4)并发、并行的区别

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

5)进程通信方式

  1. 管道:度慢,容量有限;
  2. 信号:可以在任何时候发给某一进程,而无需知道该进程的状态。
  3. Socket:可用于不同机器间的进程通信。但速度慢
  4. 消息队列:容量受到系统限制,且要注意第一次读的时候,要考虑上一次没有读完数据的问题;
  5. 信号量不能传递复杂消息,只能用来同步;
  6. 共享内存
    • 映射一段能被其他进程所访问的内存,由一个进程创建,但多个进程都可以访问。
    • 常与信号量等通信机制配合使用

6)进程、线程同步方式

  1. 临界区:只能用来同步本进程内的线程
  2. 互斥量只有一个互斥对象,拥有互斥对象的线程才具有访问资源的权限。
  3. 信号量允许多个线程在同一时刻访问同一资源,但是需要限制在同一时刻访问此资源的最大线程数目。
    1. 适用于对 Socket: 套接字 程序中线程的同步
    2. 必须有公共内存不能用于分布式操作系统
    3. 对信号量的操作分散
  4. 事件:用来通知线程有一些事件已发生,从而启动后继任务的开始.

7)线程分类

内核级线程

  1. 依赖内核,创建、撤销和切换都由内核实现。

用户级线程

  1. 不依赖于操作系统核心
  2. 应用进程利用线程库来完成其创建和管理,速度比较快,操作系统内核无法感知用户级线程的存在。

8)进程调度策略

  1. 先来先服务非抢占式的调度算法,按照请求的顺序进行调度。
  2. 短作业优先非抢占式的调度算法,按估计运行时间最短的顺序进行调度。
  3. 最短剩余时间优先
  4. 高响应比优先
  5. 优先级调度
  6. 时间片轮转

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

临界区定义

  1. 每个进程中访问临界资源的那段程序,一次仅允许一个进程使用的资源称为临界资源。

冲突解决办法

  1. 一次仅允许一个进程进入空闲的临界区
  2. 有限时间内退出
  3. 如果进程不能进入自己的临界区,则应让出CPU,避免进程出现“忙等”现象。

10)死锁

  • 死锁:两个或多个进程无限期的阻塞、相互等待的一种状态。

产生的条件

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

如何避免死锁

  1. 一次请求所有资源
  2. 顺序访问
  3. 主动释放锁

如何解决死锁

  1. 抢占资源
  2. 终止(或撤销)进程
    1. 终止所有的死锁进程
    2. 逐个终止进程(采用最优策略来选择一个“代价最小”的进程)

2、内存管理

1)虚拟内存

  1. 使用部分加载的技术
  2. 具有请求调入和置换功能
  3. 在逻辑上对内存容量进行扩充的存储技术
  4. 从而能够加载更多的进程,这部分内存包含了磁盘或者硬盘。

2)逻辑地址、虚拟地址(线性地址)、物理地址

逻辑地址 -> [分段单元] ->线性地址 -> [分页单元] -> 物理地址

  1. 逻辑地址:用来表示指令或是数据的地址。硬件平台段式管理转换前地址

    段标识符: 段内偏移量

  2. 虚拟地址:逻辑地址到物理地址变换之间的中间层。硬件页式内存的转换前地址

    线性地址 = 段基地址 + 段内偏移量
    Linux中:逻辑地址与线性地址是一致的

  3. 物理地址

    物理地址 = 页基地址 + 页偏移量


3)分页

  1. 分页系统:内存数据需要两次内存访问
    1. 从内存中访问页表,从中找到指定的物理块号,加上页内偏移得到实际物理地址;
    2. 根据第一次得到的物理地址访问内存取出数据
  2. 页表来记录映射关系,以实现从页号到物理块号的映射。

4)分段

  1. 满足一些逻辑需求
  2. 地址是二维的,一维是段号,二维是段内地址;
    1. 其中每个段的长度是不一样的
    2. 每个段内部都是从0开始编址的。

5)分页、分段的区别

分页分段
对程序员是透明的需要程序员显式划分每个段。
一维地址空间二维地址空间
页大小不可变可以动态改变
主要用于实现虚拟内存,从而获得更大的地址空间主要是为了使程序和数据可以被划分为逻辑上独立的地址空间,并且有助于共享和保护。

6)交换空间

内存资源不足时,Linux把某些页的内容转移至硬盘上的一块空间上,以释放内存空间
硬盘上的那块空间叫做交换空间(swap space),而这一过程被称为交换(swapping)。
物理内存和交换空间的总容量就是虚拟内存的可用容量。


7)页面替换算法

  1. 先进先出FIFO
  2. 最近最久未使用LRU
  3. 最近最少未使用LFU
  4. 时钟算法CLOCK

8)抖动

在请求分页存储管理中,从主存(DRAM)中刚刚换出(Swap Out)某一页面后(换出到Disk),根据请求马上又换入(Swap In)该页,这种反复换出换入的现象,称为系统颠簸,也叫系统抖动。

原因:分配给进程的存储块数量小于进程所需要的最小值


9)中断、轮询、异常

  1. 面试考点——中断和异常的区别

中断

程序执行过程中,遇到急需处理的事件时,暂时中止CPU上现行程序的运行,转去执行相应的事件处理程序,待处理完成后再返回原程序被中断处或调度其他程序执行的过程

中断是由系统中某事件引起的,该事件与现行指令无关

  • 时钟中断:靠晶振实现,频率恒定。

    • 维持系统时间
    • 促使环境的切换,以保证所有进程共享CPU
    • 利用时钟中断进行记帐
    • 监督系统工作
    • 确定未来的调度优先级
  • 外中断:是指由于外部设备事件所引起的中断,如通常的磁盘中断、打印机中断等;

  • 内中断:就是异常,由CPU本身原因引起

异常

由于执行现行指令所引起的。由于系统调用引起的中断属于异常

在这里插入图片描述

轮询

系统定时对各种设备轮流询问一遍是否有处理要求。有要求的,则加以处理。轮询占据了CPU相当一部分处理时间,是一种效率较低的 方式。

中断、轮询的区别

区别中断轮询
CPU利用率
效率
问题容易遗漏一些问题等待时间长

3、文件管理

1)什么是缓冲区溢出?有什么危害?

  1. 缓冲区溢出是指当计算机向缓冲区填充数据超出缓冲区本身容量溢出数据覆盖在合法数据上

  2. 危害:

    • 程序崩溃,导致拒绝服务
    • 跳转并且执行一段恶意代码
  3. 主要原因:程序中没有仔细检查用户输入


2)磁盘调度算法

  1. FCFS:先进先出
  2. SSTF:最短寻道时间优先。可能会出现饥饿现象
  3. SCAN:扫描算法
  4. C-SCAN:循环扫描算法

4、I/O管理

1)IO多路复用(Linux环境)

用户空间 / 内核空间

  1. 内核空间:最高的1G字节(从虚拟地址0xC0000000到0xFFFFFFFF)。
    1. 可以访问受保护的内存空间
    2. 也有访问底层硬件设备的所有权限。
  2. 用户空间
    1. 较低的3G字节(从虚拟地址0x00000000到0xBFFFFFFF),供各个进程使用,称为用户空间。

进程切换

  1. 定义:挂起正在CPU上运行的进程,并恢复以前挂起的某个进程的执行
  2. 包含的操作
    1. 保存处理机上下文,包括程序计数器和其他寄存器
    2. 更新PCB信息
    3. 把进程的PCB移入相应的队列,如就绪、在某事件阻塞等队列
    4. 选择另一个进程执行,并更新其PCB
    5. 更新内存管理的数据结构
    6. 恢复处理机上下文

进程阻塞

正在执行的进程,由于期待的某些事件未发生,如请求系统资源失败、等待某种操作的完成、新数据尚未到达或无新工作做等,则由系统自动执行阻塞原语(Block),使自己由运行状态变为阻塞状态

文件描述符

索引值,指向内核为每一个进程所维护的该进程打开文件的记录表

缓存I/O

数据会先被拷贝到操作系统 内核的缓冲区 中,然后才会从操作系统内核的缓冲区拷贝到应用程序的地址空间。

IO多路复用:单线程或单进程同时监测若干个文件描述符是否可以执行IO操作的能力。

阻塞IO、非阻塞IO

  1. 阻塞IO:发起一次IO操作后一直等待成功或失败之后才返回,在这期间程序不能做其它的事情。
  2. 非阻塞IO:发起IO时,通过对文件描述符设置 O_NONBLOCK flag来指定该文件描述符的IO操作为非阻塞。

select缺点

select会等待多个I/O事件(比如读就绪,写)的任何一个发生
只要有一个网络事件发生,select线程就会执行
如果没有任何一个事件发生则阻塞。

  1. 单个进程所打开的FD是有限制的,通过FD_SETSIZE 宏定义,大小不可改变(限制为1024)
  2. 每次调用select,都需要把fd集合从用户态拷贝到内核态,在fd很多时开销很大
  3. 对socket扫描时是线性扫描,采用轮询的方法,效率较低(高并发时)

poll缺点

  1. 没有fd的限制,其它基本一样

epoll

  1. epoll只能在linux下工作
  2. 水平触发LT是默认模式边缘触发ET是“高速”模式
    1. LT:只要fd还有数据可读,每次 epoll_wait都会返回它的事件,提醒用户程序去操作
    2. ET:只会提示一次,直到下次再有数据流入之前都不会再提示了,无论fd中是否还有数据可读。所以在ET模式下,read一个fd的时候一定要把buffer读完,或者遇到EAGAIN错误

select、poll、epoll区别

在这里插入图片描述


2)零拷贝

  1. 零拷贝(Zero-copy)及其应用详解
  2. Java中的零拷贝
  • mmap内存映射
    • 采用操作系统中的底层内存映射方式:调用Linux mmap()实现的。
  • sendfile
  • Sendfile With DMA Scatter/Gather Copy
  • splice
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值