说明:本文主要是自己从Github和论坛上查找的资料进行汇总,方便自己梳理知识点
附原文章和资源的地址:https://github.com/huihut/interview#%E8%99%9A%E6%9E%90%E6%9E%84%E5%87%BD%E6%95%B0
https://github.com/Snailclimb/JavaGuide
https://github.com/CyC2018/CS-Notes
https://leetcode-cn.com/circle/discuss/f40g4J/
这些大佬总结的知识点,非常到位。
读者可以收藏链接,去源地址观看!!!
1.什么是操作系统
1.操作系统(Operating System,OS)是管理计算机硬件和软件资源的程序,是计算机的基石
2.操作系统本质上是一个运行在计算机上的软件程序,用于管理计算机硬件和软件资源。
3.操作系统的存在屏蔽了硬件层的复杂性。
4.操作系统的内核(Kernel)是操作系统的核心部分,它负责系统的内存、硬件设备、文件系统、应用程序的管理。
2.操作系统作用之接口
操作系统的功能之一是作为用户与计算机硬件系统之间的接口
分为:命令接口和程序接口。
命令接口:用户可以直接使用
程序接口:用户用过程序间接使用
其中命令接口又分为联机命令接口和脱机命令接口。
联机命令接口:又称为交互式命令接口,适用于分时或实时系统,用户输入一条指令,操作系统就执行一条指令。
脱机命令接口:又称为批处理接口,由一组作业控制命令组成。用户输入一堆指令,操作系统就执行一堆指令且操作系统运行这些命令时,用户不可干预。(类似数据库的原子性)
程序接口:由一组系统调用(广义指令)组成
3.操作系统特征
1.并发
并发:两个或多个事件在同一时间间隔内发生,这些事件在宏观上是同时发生的,在微观上是交替发生的, 操作系统的并发性指系统中同时存在着多个运行的程序。
并行:两个或多个事件在同一时刻发生
2.共享
指系统中的资源可以供内存中多个并发执行的进程共同使用
(1)互斥共享
某个资源在一段时间内只允许一个进程访问
临界资源
(2)同时共享
某个资源在一段时间内允许多个进程访问
分时共享,宏观上的同时,微观上还是交替进行访问
(3)并发性和共享性互为存在条件
3.虚拟
操作系统的虚拟技术科归纳为:
-
时分复用技术:如处理器的分时共享
-
空间复用技术:如虚拟存储器
4.异步
多道程序环境允许多个程序并发执行,但由于资源有限,如cpu只有一个,进程的执行并不是一贯到底的,而是走走停停的,它以不可预知的速度向前推进。
4.系统调用
先了解用户态和系统态
根据进程访问资源的特点,我们可以把进程在系统上的运行分为两个级别
用户态:用户态的进行可以直接访问用户程序的数据
系统态:系统态的进程或程序几乎可以访问计算机的任何资源,不受限制
因此由用户态转向系统态就需要系统调用,就是在用户态的程序需要调用系统态级别的功能。
也就是说在我们运行的用户程序中,凡是与系统态级别的资源有关的操作(如文件管理、进程控制、内存管理等),都必须通过系统调用方式向操作系统提出服务请求,并由操作系统代为完成。
这些系统调用按功能大致可分为如下几类:
-
设备管理。完成设备的请求或释放,以及设备启动等功能。
-
文件管理。完成文件的读、写、创建及删除等功能。
-
进程控制。完成进程的创建、撤销、阻塞及唤醒等功能。
-
进程通信。完成进程之间的消息传递或信号传递等功能。
-
内存管理。完成内存的分配、回收以及获取作业占用内存区大小及地址等功能。
5.进程和线程的区别
6.进程状态
进程状态一般分为5中状态,和线程很像
-
创建状态(new) :进程正在被创建,尚未到就绪状态。
-
就绪状态(ready) :进程已处于准备运行状态,即进程获得了除了处理器之外的一切所需资源,一旦得到处理器资源(处理器分配的时间片)即可运行。
-
运行状态(running) :进程正在处理器上上运行(单核 CPU 下任意时刻只有一个进程处于运行状态)。
-
阻塞状态(waiting) :又称为等待状态,进程正在等待某一事件而暂停运行如等待某资源为可用或等待 IO 操作完成。即使处理器空闲,该进程也不能运行。
-
结束状态(terminated) :进程正在从系统中消失。可能是进程正常结束或其他原因中断退出运行。
7.进程间的通信方式
-
管道(PIPE)
-
有名管道:一种半双工的通信方式,允许无亲缘关系的进程间通信
- 优点:可以实现任意关系的进程间的通信
- 缺点:长期存于系统中,使用不当容易出错 缓冲区有限
-
2.无名管道:一种半双工通信方式,只能在具有亲缘关系的进程间使用(父子进程)
优点:简单方便
缺点:局限于单向通信
只能创建在它的进程以及其有亲缘关系的进程之间
缓存区有限
-
信号量(Semaphore):一个计数器,可以用来控制多个线程对共享资源的访问
优点:可以同步进程
缺点:信号量有限
-
信号(Signal):一种比较复杂的通信方式,用于通知接收进程某个事件已经发生
-
消息队列(Message Queue):是消息的链表,存放在内核中并由消息队列标识符标识
优点:可以实现任意进程间的通信,并通过系统调用函数来实现消息发送个接收之间的同步,无需考虑同步问题,方便。
缺点:信息的复制需要额外消耗CPU的时间,不适宜于信息量大或操作频繁的场合
-
共享内存(Shared Memory):映射一段能被其他进程所访问的内存,这段内存由一个进程创建,但多个进程都可以访问。
优点:无须复制,快捷,信息量大
缺点: 1. 通信是通过将共享空间缓冲区直接附加到进程的虚拟地址空间中来实现的,因此进程间 的读写操作的同步问题
2. 利用内存缓冲区直接交换信息,内存的实体存在于计算机中,只能同一个计算机系统中 的诸多进程共享,不方便网络通信
-
套接字(Socket):可用于不同计算机间的进程通信
优点:1.传输数据为字节级,传输数据可自定义,数据量小效率高
2.传输数据时间短,性能高
3.适合于用户端和服务器端之间的信息实时交互
4.可以加密,数据安全性强
缺点:需对传输的数据进行解析,转化成应用级的数据。
8.线程间的同步方式
线程同步是两个或多个共享关键资源的线程的并发执行。因该同步线程避免关键资源的使用冲突。
线程同步方式由如下四种:
-
锁机制:包括互斥锁(mutex)、读写锁(reader-writer lock)、自旋锁(spin lock)、条件变量(condition)
-
互斥锁(mutex):提供了以排他方式防止数据结构被并发修改的方法。
-
读写锁(reader-writer lock):允许多个线程同时读共享数据,而对写操作互斥。
-
自旋锁(spin lock):循环检测保持者是否已经释放锁。
-
条件变量(condition):可以以原子的方式阻塞进程,直到某个特定条件为真为止。对条件 的测试是在互斥锁的保护下进行的。条件变量始终与互斥锁一起使用。
-
-
信号量机制(Semaphore)
-
无名信号量
-
又名信号量
-
-
信号机制(Signal):类似进程间的信号处理
-
屏障(barrier):屏障允许每个线程等待,直到所有的合作线程都达到某一点,然后从该点继续执行。
9.进程调度算法
为了确定进程执行的顺序以实现CPU的最大利用率,有以下进程调度算法:
先到先服务调度算法(First come first sever, FCFS):从就绪队列中选择一个最先进入该队列的进程为之分配资源,使它立即执行并一直执行到完成或发生某事件而被阻塞放弃占用 CPU 时再重新调度。
短作业优先(Shortest Job First, SJF):从就绪队列中选出一个估计运行时间最短的进程为之分配资源,使它立即执行并一直执行到完成或发生某事件而被阻塞放弃占用 CPU 时再重新调度。
高响应比优先(Highest Response Ratio Next, HRRN):在每次调度时先计算各个作业/进程的响应比((等待时间+要求服务时间)/要求服务时间),选择响应比最高的进程为其服务。
时间片轮转(Round Robin, RR):时间片轮转调度是一种最古老,最简单,最公平且使用最广的算法,又称 RR(Round robin)调度。每个进程被分配一个时间段,称作它的时间片,即该进程允许运行的时间。
优先级调度算法:为每个流程分配优先级,首先执行具有最高优先级的进程,依此类推。具有相同优先级的进程以 FCFS 方式执行。可以根据内存要求,时间要求或任何其他资源要求来确定优先级。
多级反馈队列调度算法:前面介绍的几种进程调度的算法都有一定的局限性。如短进程优先的调度算法,仅照顾了短进程而忽略了长进程 。多级反馈队列调度算法既能使高优先级的作业得到响应又能使短作业(进程)迅速完成。,因而它是目前被公认的一种较好的进程调度算法,UNIX 操作系统采取的便是这种调度算法。
10.什么是死锁
多个进程可以竞争有限数量的资源。当一个进程申请资源时,如果这时没有可用资源,那么这个进程进入等待状态。有时,如果所申请的资源被其他等待进程占有,那么该等待进程有可能再也无法改变状态。这种情况成为死锁。
11.产生死锁的四个条件
如果系统中四个条件同时成立,就能引起死锁
-
互斥:资源必须处于非共享模式,即一次只有一个进程可以使用。如果另一进程申请该资源,那么必须等待直到该资源被释放为止。
-
占有并等待:一个进程至少应该占有一个资源,并等待另一资源,而该资源被其他进程所占有。
-
非抢占:资源不能被抢占。只能在持有资源的进程完成任务后,该资源才会被释放。
-
循环等待:有一组等待进程
{P0, P1,..., Pn}
,P0
等待的资源被P1
占有,P1
等待的资源被P2
占有,......,Pn-1
等待的资源被Pn
占有,Pn
等待的资源被P0
占有。