操作系统知识点复习总结

秋招不易猫猫叹气

0.操作系统

基本特征

1.并发:并发是指宏观上在一段时间内能同时运行多个程序,而并行则指同一时刻能运行多个指令。
2.共享:共享是指系统中的资源可以被多个并发进程共同使用。有两种共享方式:互斥共享和同时共享。
3.虚拟:虚拟技术把一个物理实体转换为多个逻辑实体。
4.异步:异步指进程不是一次性执行完毕,而是走走停停,以不可知的速度向前推进。

如何理解分布式锁?

分布式锁,是控制分布式系统之间同步访问共享资源的一种方式。在分布式系统中,常常需要协调他们的动作。如果不同的系统或是同一个系统的不同主机之间共享了一个或一组资源,那么访问这些资源的时候,往往需要互斥来防止彼此干扰来保证一致性,在这种情况下,便需要使用到分布式锁。

什么是堆和栈?说一下堆栈都存储哪些数据?

栈区(stack)— 由编译器自动分配释放 ,存放函数的参数值,局部变量的值等。其操作方式类似于数据结构中的栈。
堆区(heap) — 一般由程序员分配释放, 若程序员不释放,程序结束时可能由OS回收 。

1.进程

定义

多道程序环境下允许多个程序并发执行,进程就是为了更好的描述和控制程序的并发执行,实现操作系统的并发性和共享性。
进程就是进程实体的运行过程,是系统进行资源分配和调度的独立单位。
也可以理解为进程是程序的一次执行。

结构

1.进程控制块PCB:进程实体的一部分,进程存在的唯一标识,包括进程描述信息、控制和管理信息、资源分配清单和处理机相关信息。
2.程序段:被进程调度程序调度到CPU执行的程序代码块
3.数据段:进程对应的程序加工处理的原始数据,也可以是程序执行时产生的中间或最终结果。

特征

1.动态性:进程是一次程序的执行,具有一定生命周期,是动态的产生变化和消亡的。动态性是进程最基本的特征。
2.并发性:多个进程同时存在于内存中,能在一段时间内同时运行。
3.独立性:进程实体是一个能独立运行、独立获得自由和独立接受调度的基本单位。
4.异步性:进程按不可预知的速度向前推进

进程状态和转换

1.运行态 进程正在处理机上运行
2.就绪态 进程以及处于准备运行的状态,获得了除处理机外的一切资源
3.阻塞态 进程正在等待某一时间而暂停运行,如等待某资源可用或等待输入输出流
4.创建态 进程正在被创建,尚未转到就绪态
5.结束态 进程正从系统中消失,可能正常结束或因其他原因中断退出
操作系统知识点复习总结_第1张图片
就绪->运行:处于就绪状态的进程被调度后,获得处理机资源(分派处理机时间片)
运行->就绪:处于运行态的进程在时间片用完后,不得不让出处理机。在可剥夺的操作系统中,当有更
高优先级的进程就绪时,调度程序将正在执行的进程转为就绪态,让更高优先级的进程执行。
运行->阻塞:进程请求某一资源的使用和分配或等待某事件的发生(如IO完成),进程以系统调用的形
式请求操作系统提供服务。
阻塞->就绪:进程等待的事件到来时,如IO结束或中断结束时,中断处理程序必须把相应进程的状态由
阻塞转为就绪态。

进程控制:对系统中所有进程实施有效管理,有创建新进程、撤销已有进程、实现进程状态转换等。

PCB:进程控制块,记录了操作系统所需的,用于描述进程当前情况以及管理进程运行的全部信息,是操作系统中最重要的记录型数据结构。

进程创建:
过程:
1.为新进程分配一个唯一的进程标识号,并申请一个空白PCB。
2.为进程分配资源,为新进程的程序和数据分配内存空间,若资源不足会创建失败从而进入阻塞状态。
3.初始化PCB,包括标志信息,处理机状态信息,进程优先级等。
4.若进程就绪队列未满,就将新进程插入就绪队列等待被调度。

进程终止:
正常结束,表示进程任务已经完成并准备退出运行。异常结束,表示进程在运行时发生了某种异常,使
程序无法继续运行,例如非法指令,IO故障等。外界干预,指进程因为外界请求而终止,例如操作系统
干预或父进程请求终止等。
过程:
1.根据被终止进程的标识符,检索PCB,读出该进程的状态
2.若处于执行状态,终止执行,将处理机资源分配给其他进程
3.若进程还有子进程,应该将所有子进程终止。
4.将该进程所有资源归还给父进程或操作系统
5.将PCB从所在队列删除。

进程阻塞:
1.找到将要被阻塞的进程的PCB
2.如果是运行态,保护现场转为阻塞态,停止运行
3.把PCB插入相应事件的等待队列

进程唤醒:
1.在该事件的等待队列中找到进程对应的PCB
2.将其从等待队列中移除,设置状态为就绪态
3.将PCB插入就绪队列,等待调度程序调度

进程切换:
1.保存处理机上下文,包括程序计数器和其他寄存器
2.更新PCB信息
3.把进程的PCB移入相应的队列
4.选择另一个进程执行并更新其PCB
5.更新内存管理的数据结构
6.恢复处理机上下文

进程通信:
1.共享存储器系统:在通信的进程之间存在一块可以直接访问的共享空间,共享存储分为两种:低级的共享基于数据结构,高级的共享基于存储区。操作系统只负责为通信进程提供可共享的存储空间和同步互斥工具,数据交换由用户自己安排读写指令完成。
2.消息传递: 进程间的数据交换以 格式化 的消息为单位,进程提供系统提供的发送消息和接收消息两个源于进行数据交换,消息传递分为:直接通信方式:把消息挂在接收进程的消息缓存队列上,间接通信方式:发送进程把消息发送到某个中间实体,中间实体一般称作信箱,相应的通信系统称为电子邮件系统。
3.管道通信:消息传递的一种特殊方式,管道就是连接一个读进程和一个写进程来实现他们通信的一个共享文件。管道可以理解为共享存储的优化和发展,管道通信中存储空间优化为缓冲区,缓冲区只允许一边写入另一边读出,当一个进程对管道执行读写操作时,另一个进程必须等待,当写进程到一定数量便去睡眠等待,直到读进程取走数据后将它唤醒,当读进程空时,也应睡眠等待,直到写进程写入管道才唤醒,因此管道通信时半双工通信。

处理机调度层次:
1.高级调度:作业调度
2.低级调度:进程调度
3.中级调度:内存调度

进程的调度算法

进程调度方式:
1.非抢占式
2.抢占式

调度算法:
1.先来先服务FCFS
2.短作业优先SJF
3.最短剩余时间优先 remaining time next(SRTN):按估计剩余时间最短的顺序进行调度。
4.轮转法
5.优先级调度算法(静态优先级、动态优先级)
6.多级反馈队列调度算法:
设置多个就绪队列,每个队列采用FCFS算法,队列优先级依次降低,进程在时间片内未完成就调到第二个队列,以此类推,按队列优先级进行调度。

孤儿进程与僵尸进程

孤儿进程:一个父进程退出,而它的一个或多个子进程还在运行,那么那些子进程将成为孤儿进程。孤儿进程将被 init 进程(进程号为1)所收养,并由 init 进程对它们完成状态收集工作。

僵尸进程:一个进程使用 fork 创建子进程,如果子进程退出,而父进程并没有调用 wait 或 waitpid 获取子进程的状态信息,那么子进程的进程描述符仍然保存在系统中。这种进程称之为僵尸进程。

2.线程

引入线程的目的
1.为了多道程序更好的并发执行,提高资源利用率和吞吐量
2.减少程序在并发执行时的时空开销,提高操作系统的并发性能

概念

线程就是一种轻量级的进程,是一个基本的CPU执行单位,也是执行流的最小单元,由线程ID、程序计数器、寄存器集合和堆栈组成。线程是进程中的一个实体,是操作系统独立调度和分配的基本单位,线程自己不拥有系统资源,只拥有一点在运行中必不可少的资源,但它与同一进程下的其他线程共享进程进程的全部资源。

进程与线程的区别

1.调度:
进程是拥有资源的基本单位,而线程是独立调度的基本单位。同一进程中,线程的切换不会引起进程的切换,在不同进程中,线程的切换会引起进程切换
2.拥有资源:
进程都是拥有资源的基本单位,而线程不拥有系统资源,只有一点运行中必不可少的资源。如果线程也是拥有资源的单位,那么切换线程就需要较大的时空开销,它的引入就没有意义。
3.系统开销:
创建和撤销进程涉及资源的分配和回收,开销远大于线程。进程的切换也需要涉及CPU环境的保存和新调度到进程CPU环境的设置,但线程切换只需要保存和设置少量的寄存器容量,开销很小。
4.地址空间:
进程地址空间相互独立,同一进程中各个线程共享进程资源,进程内的线程对其他进程不可见。
5.通信:
进程间通信需要同步和互斥的手段来保证数据一致性,而线程可以直接读写进程数据库来通信。

线程的实现方式

1.用户级线程:有关线程管理的所有工作都由应用程序完成,内核意识不到线程的存在。
2.内核级线程:线程管理的所有工作都由内核完成,应用程序没有进行线程管理的代码,只有一个到内核级线程的编程接口。

线程通信

1.synchronized同步:
这种方式,本质上就是 “共享内存” 式的通信。多个线程需要访问同一个共享变量,谁拿到了锁(获得了访问权限),谁就可以执行。

2.while轮询的方式:
在这种方式下,ThreadA 不断地改变条件,ThreadB 不停地通过 while 语句检测这个条件 (list.size()==5) 是否成立 ,从而实现了线程间的通信。但是这种方式会浪费 CPU 资源。之所以说它浪费资源,是因为 JVM 调度器将 CPU 交给 ThreadB 执行时,它没做啥 “有用” 的工作,只是在不断地测试某个条件是否成立。就类似于现实生活中,某个人一直看着手机屏幕是否有电话来了,而不是:在干别的事情,当有电话来时,响铃通知TA电话来了。

3.wait/notify机制:
当条件未满足时,ThreadA 调用 wait() 放弃 CPU,并进入阻塞状态。(不像 while 轮询那样占用 CPU)
当条件满足时,ThreadB 调用 notify() 通知线程 A,所谓通知线程 A,就是唤醒线程 A,并让它进入可运行状态。

4.管道通信:
java.io.PipedInputStream 和 java.io.PipedOutputStream进行通信

3.死锁

概念

就是指多个进程因为互相竞争资源而陷入的一种僵局,如果没有外力作用,这些进程都无法继续向前推进。

死锁原因

1.不可抢占性资源数量的不足
2.竞争可消耗资源引起死锁
3.进程推进顺序不当引起死锁(进程推进顺序非法)
4.信号量使用不当,彼此等待对方消息。

死锁产生的必要条件

1.互斥条件:进程对资源的占用具有排他性控制,如果进程请求的资源已被占用,请求就会被阻塞。
2.不可剥夺条件:当一个资源没有被使用完成前是不能被其他进程强行获取的,只有占用它的进程主动释放才可以
3.请求和保持条件:一个进程已经占有了某个资源,又要请求其他资源,而该资源被其他进程占用,请求被阻塞,但进程也不会释放自己已经占用的资源。
4.循环等待条件:存在一个进程资源的循环等待链,链中每个进程已经占有的资源同时是其他进程请求的资源。

死锁预防

1.破坏互斥条件:系统中所有资源都允许共享,但有的资源不能同时访问。不太现实。
2.破坏不可剥夺条件:允许剥夺其他进程已经占用的资源,可能会造成前段工作的失效,如果频繁发送就会增加系统开销,严重降低系统吞吐量。
3.破坏请求和保持条件:采用预先资源分配法,一次性分配进程所需的所有资源,缺点就是会严重浪费系统资源。
4.破坏循环等待条件:采用顺序资源分配法,缺点是会造成编程不便。

死锁避免

1.系统安全状态,不安全的系统可能会造成死锁,安全的系统不会造成死锁,如果资源分配没有进入不安全系统状态,就给进程分配资源。
2.银行家算法:把操作系统视为银行家,操作系统管理的资源视为资金,进程向操作系统申请资源相当
于贷款。采用预先资源分配策略,主要的数据结构是可利用的资源向量,分配矩阵,需求矩阵,最大需
求矩阵。

死锁解除

1.资源剥夺法:挂起某些死锁进程并剥夺其资源
2.撤销进程法:撤销一个甚至全部死锁进程并剥夺其资源
3.进程回退法:让一个或多个进程回退到不至于造成死锁的状态。

4.内存管理

页面置换算法

1.最佳Optimal
所选择的被换出的页面将是最长时间内不再被访问,通常可以保证获得最低的缺页率。

2.最久未使用LRU, Least Recently Used
虽然无法知道将来要使用的页面情况,但是可以知道过去使用页面的情况。LRU 将最近最久未使用的页面换出。

3.最近未使用NRU, Not Recently Used
每个页面都有两个状态位:R 与 M,当页面被访问时设置页面的 R=1,当页面被修改时设置 M=1。其中 R 位会定时被清零。可以将页面分成以下四类:
R=0,M=0
R=0,M=1
R=1,M=0
R=1,M=1
当发生缺页中断时,NRU 算法随机地从类编号最小的非空类中挑选一个页面将它换出。

4.先进先出FIFO, First In First Out

你可能感兴趣的:(操作系统,面试,java)