名词解释

简答题整理

操作系统的四大特性

  • 并发
  • 共享:虚拟内存、假脱机
  • 虚拟
  • 异步:进程的运行具有异步性

死锁怎么产生,如何解除?

死锁的产生

  • 互斥
  • 非抢占
  • 占有等待
  • 循环等待

死锁预防

  • 互斥:我们可以采用乐观锁来解决问题,如使用cas(compare and swap)技术
  • 非抢占:如果得不到其他资源,就释放已占有的资源,但是会产生饥饿的问题,可能会出现多次释放重新运行后依旧产生死锁,可以给重试部分添加随即延迟时间达到目的。
  • 请求:一次性分配所有资源
  • 保持:如果有一个资源分配不到,就不分配其他资源
  • 循环等待:对资源进行编号,顺序发放

死锁避免

  • 银行家算法
    当进程首次申请资源,测试进程对资源的最大需求量,如果现存资源可以除满足最大需求则分配,否则推迟分配。
    所谓银行家算法,是指在资源分配之前就要看清楚,资源分配之后会不会导致系统死锁。
  • 安全序列
  • 系统安全状态

死锁解除

  • 资源剥夺:将产生死锁的进程挂起
  • 撤销进程:随机干掉一个内鬼x(按照优先级√
  • 进程回退

为啥要有线程

先摆道理

  • 线程是cpu调度的基本单位,进程是资源分配的基本单位
  • 一个进程可以拥有多个线程

再说好处

  • 进程通信有三种方式:管道、消息队列、共享内存,好用吗?不好用!
  • 线程依附于进程,不用线程之间可以共享同一个进程的资源,对于同步而言实现更加简单,因此其并发与调度更加简单

那线程如何保证安全呢

  • 线程之间并不是所有内存都共享,有类似于锁机制对自己的私有数据进行保护
  • 线程和进程一样,都具有cpu亲和性,一般情况下不喜欢切换核,因此多线程能更好的实现并发

同步异步与阻塞非阻塞

  • 同步异步更多的关注消息传递方式和通信机制
    所谓同步,就是在发出一个调用时,在没有得到结果之前,该调用就不返回。但是一旦调用返回,就得到返回值了。
    换句话说,就是由调用者主动等待这个调用的结果。
    而异步则是相反,调用在发出之后,这个调用就直接返回了,所以没有返回结果。换句话说,当一个异步过程调用发出后,调用者不会立刻得到结果。而是在调用发出后,被调用者通过状态、通知来通知调用者,或通过回调函数处理这个调用。
    典型的异步编程模型比如Node.js
  • 阻塞非阻塞描述的是等待消息或调用返回结果的状态问题
    阻塞调用是指调用结果返回之前,当前线程会被挂起。调用线程只有在得到结果之后才会返回。
    非阻塞调用指在不能立刻得到结果之前,该调用不会阻塞当前线程。

SPOOLING技术

利用高速设备,将低速设备模拟为高速的共享设备,逻辑上可以提供多个虚拟设备

组成

  • 输入、输出井
    磁盘上开辟的两大存储区。输入井是模拟脱机输入时的磁盘,用于收容输入设备输入的数据;输出井是模拟脱机输出时的磁盘,用于收容用户程序的输出数据。
  • 输入、输出缓存区
    主存中开辟的两个缓冲区。输入缓冲区用于暂存由输入设备送来的数据,以后再传送到输入井;输出缓冲区用于暂存从输出井送来的数据,以后再传送给输出设备。
  • 输入进程和输出进程
    输入进程模拟脱机输入时的外围控制机,将用户要求的数据从输入设备,通过输入缓冲区送到输入井。当CPU需要数据时,直接从输入井读入主存;输出进程模拟脱机输出时的外围控制机,把用户要求输出的数据,先从主存送到输出井,待输出设备空闲时,再将输出井中的数据,经过输出缓冲区送到输出设备上。
  • 打印队列
    由若干张请求打印表所形成的队列,系统为每个请求打印的进程建立一张请求打印表。

    优势

  • 提高了IO速度,io操作时添加了输出井与输入井,避免了操作低速io设备的速度不匹配问题
  • 将独占设备可以共享成为共享设备,spooling实际上并没有为任何进程实体分配设备,只是在输入井和输出并为进程分配一个存储区和建立一张io请求列表
  • 实现了虚拟设备功能,宏观上由多个进程在同时使用一台独占设备,但对于每个进程而言,他们认为自己独占了一台设备

RAID技术

RAID0

将几块硬盘摞在一起统一管理,增大存储空间。RAID 0最简单的实现方式就是将N块硬盘(最好容量相同)串联在一起形成一个大的硬盘组,在写入数据时,数据会被分为一定大小的多个区块,依次写入到磁盘中(如图所示)。RAID 0的最大优点是可以成倍提高磁盘的存储容量,如三块1TB的硬盘组成的RAID 0其容量为3TB。其缺点是一旦其中任何一个硬盘出现故障,整个磁盘阵列都将无法使用,可靠性仅为单个硬盘的1/N。

RAID1

一块硬盘用来写,另一块硬盘用来做备份
RAID 1被称为磁盘镜像模式,原理在一个硬盘上写入数据时会在闲置硬盘上也同时写入,生成镜像文件,在不影响性能的情况下尽可能保证可靠性,只要磁盘阵列中任何一块硬盘出现问题,都可以有另一块镜像硬盘可以使用,具备很好的冗余能力。虽然这样对数据保存会比较安全,但成本也会增加,硬盘利用率仅为50%。另外,一旦这个磁盘阵列出现故障,那么整个阵列的可靠性也相对不再可靠,必须及时更换硬盘。因此RAID 1主要用在保存关键性数据的场合。

RAID10

RAID1和RAID0的混合版,
即在磁盘镜像中建立带区集。这种配置方式综合了带区集和镜像的优势,所以被称为RAID 0+1。把RAID 0和RAID 1技术结合起来,数据除分步在多个盘上外,每个盘都有物理镜像盘,提供全冗余能力。RAID 0+1的特点使得其至少要有4个硬盘。

RAID5

RAID 5是一种分布式的独立磁盘阵列,被设计为一种存储性能、数据安全和存储成本兼顾的存储解决方案,也可以理解为是RAID 0和RAID 1的折中方案。
假定有abcd四块磁盘,abc用于存文件,d用于存储校验位,下一个文件快abd用于存文件,c用于存储校验位,把风险分摊到每个磁盘上,这样即使损坏一块也可以读取数据,但是依然要及时更换。
RAID 5不对数据进行备份,而是把数据和对应的奇偶校验信息存储在组成磁盘阵列的各个磁盘上,并且奇偶校验信息和与其相对应的信息存放在不同的硬盘上。当一个硬盘损坏时,系统可以根据在另一块硬盘上存放的该损坏数据相对应的奇偶校验信息来恢复数据。RAID 5只允许同时损坏一个硬盘,所以如果一个硬盘出现故障后RAID 5还能够正常读取数据,但应及时更换损坏的硬盘,否则再出现另外的硬盘损坏则整个磁盘阵列将会崩溃。

进程

官话

进程是一个具有一定独立功能的程序在一个数据集合上运行的过程,他是系统进行资源分配的基本单位,也是参与调度的独立单元

进程和程序的区别

进程是一个动态的概念,程序是一个静态的概念。
程序是指令的有序集合,本身并没有运行的含义,进程是程序在处理机上的一次执行过程,具有生命周期,动态的被创建,执行,调度,结束

特性

  • 并发性
  • 独立性
  • 结构性
    进程由程序、数据集合和描述程序运行过程的pcb组成
  • 制约性
    想要完成一定的通信功能,调度功能

cache、寄存器和缓存的区别

cache

cache是高速缓存,位于cpu和主存之间的容量小存储快的存储器。运用局部性的原理,可以减少cpu工作过程中的等待时间,提高系统性能。Cache又分为一级Cache(L1 Cache)和二级Cache(L2 Cache),L1 Cache集成在CPU内部,L2 Cache早期一般是焊在主板上,现在也都集成在CPU内部,常见的容量有256KB或512KB L2 Cache。

寄存器

寄存器是中央处理器内的组成部份。寄存器是有限存贮容量的高速存贮部件,它们可用来暂存指令、数据和位址。在中央处理器的控制部件中,包含的寄存器有指令寄存器(IR)和程序计数器(PC)。在中央处理器的算术及逻辑部件中,包含的寄存器有累加器(ACC)。

缓存

往往出现在主存中,用于存储速度不同步的设备;减少进程通信代价;方便虚拟、并行。