最近春招很多人都在找工作,我给学弟学妹学妹进行了一些基础知识上的辅导和面试技巧上的一些交流,觉得自己也还有一些知识的盲区,需要再重新温习温习一下相关的知识。作为记录,我将一些面试中同学们反馈给我的问题以及一些有可能会问到的问题进行总结,以供大家参考。
01. 请叙述一下并行和并发两个概念的区别?
并行(parallellism)和并发(concurrency)是:
- 解释一:并行是指两个或者多个事件在同一时刻发生;而并发是指两个或多个事件在同一时间间隔发生。
- 解释二:并行是在不同实体上的多个事件,并发是在同一实体上的多个事件。
- 解释三:在一台处理器上“同时”处理多个任务,在多台处理器上同时处理多个任务。如hadoop分布式集群
所以并发编程的目标是充分的利用处理器的每一个核,以达到最高的处理性能。
02. 什么是进程?什么是线程?
- 进程是一个可并发执行的,具有独立功能的程序关于某个数据集合的一次执行过程,也是操作系统进行资源分配和调度的独立单位。进程是资源分配的基本单位。
- 线程也称为轻量级进程(LWP),是程序执行流量的最小单位,它是进程的一个实体,是系统独立调度和分派处理机的基本单位。线程是操作系统调度的最小单位。
03. 进程和线程的区别?从调度、并发性、拥有资源和系统开销四个方面来比较
- 调度。在引入线程的操作系统中,把线程作为调度和分派CPU的基本单位,把进程作为资源分配的基本单位,显著提高了并发程度。由于系统调度的基本单位是线程,所以每个进程至少创建一个线程,否则无法被调度。
- 并发性。多线程可以提高服务的质量,在一个线程阻塞时,还有其他线程提供服务。
- 拥有资源。进程是拥有资源的独立单位,线程自己不拥有系统资源,而是共享进程的资源(包括代码段、数据段即系统资源等)。
- 系统开销。进程切换的开销远远大于线程切换的开销,进程的切换需要保存很多现场,但线程只需要保存和设置少量的寄存器内容,不涉及存储器管理方面的操作。
04. 进程的特征?
- 动态性:进程是动态产生和动态消亡的,有其生存周期。
- 并发性:一个进程可以与其他进程一起向前推进。
- 独立性:一个进程是一个相对完整的调度单位。
- 异步性:每个进程都已相对独立、不可预知的速度向前推进。
- 结构性:为了控制和管理进程,系统为每个进程设立一个进程控制块(PCB)。
05. 进程有几种状态?
- 创建状态:进程在创建时需要申请一个空白PCB,向其中填写控制和管理进程的信息,完成资源分配。如果创建工作无法完成,比如资源无法满足,就无法被调度运行,把此时进程所处状态称为创建状态
- 就绪状态:进程已经准备好,已分配到所需资源,只要分配到CPU就能够立即运行
- 执行状态:进程处于就绪状态被调度后,进程进入执行状态
- 阻塞状态:正在执行的进程由于某些事件(I/O请求,申请缓存区失败)而暂时无法运行,进程受到阻塞。在满足请求时进入就绪状态等待系统调用
- 终止状态:进程结束,或出现错误,或被系统终止,进入终止状态。无法再执行
06. 为什么会提出线程这个概念?进程的缺点是什么?
- 进程切换开销大
- 进程通信代价大
- 进程之间并发性粒度粗,并发度不高
- 不适合并行计算和分布式并行计算的要求
- 不适合客户-服务器(C/S)计算的要求
- 操作系统中引入进程的目的是为了使多个程序并发执行,改善资源的利用率以提高系统的吞吐量。
07. 线程的分类
- 用户级线程 – ULT(User Level Thread),优点是线程切换不需要系统状态的转换,每个进程可以使用专门的调度算法来调度线程,不需要依赖操作系统底层的内核。缺点是父进程阻塞会导致线程全都阻塞,不能真正的并行。Java的线程就是一种用户级的线程。
- 内核级线程 – KLT(Kernel Level Threal),优点是同一个进程内多个线程可以并行执行,缺点是线程状态转换时内核态的任务,通常很慢。
- 混合式线程 – 上两种的结合,有良好的效果。
08. 进程控制块的作用?它是如何描述进程动态性质的?
操作系统组织PCB的方式有索引式(数组)、链式(链表)。Linux系统是采用链式方式来组织PCB的,对于不同的状态建立起一个进程队列。在系统中可能有很多个进程处于相同的状态,这些进程构成一个进程队列,比如由于不同的阻塞原因而阻塞的进程。
(1) PCB是系统感知进程存在的唯一标志,是进程动态特性的集中反映,和进程一一对应,操作系统通过管理PCB来管理进程。
(2) PCB中保存了进程的所有信息,将这些信息可以分为几大类:
- 1、进程标识信息。比如进程ID、所属用户ID、所属组ID、父进程ID等。
- 2、进程控制信息。比如进程调度信息、进程通信机制等。
- 3、进程资源信息。比如打开的文件、进程地址空间等。
- 4、cpu状态信息。用来进程被中断时保护现场。
09. 操作系统的四大特性
操作系统的四大特征:并发、共享、虚拟、异步。
- 并发。在一段时间内,运行多个程序,执行多个任务。从宏观上来说的。操作系统中引入进程的目的就是为了使程序能并发执行。
- 共享。资源共享,即系统中的资源可供多个并发执行的进程共同使用。
- 虚拟。把物理上的一台设备变成逻辑上的多台设备。虚拟,可以理解为是用户感觉上的。
- 异步。在多道程序环境下,允许多个程序并发执行。但由于资源有限,进程的执行不是一贯到底,而是走走停停,已不可预知的速度向前推进,这就是进程的异步性。
10. 进程调度的方式
- 非抢占式方式:优点是简单、易实现,系统开销小。缺点是不太灵活,难以满足紧迫任务必须立即执行的要求。实时系统不宜采用这种调度方式。
- 抢占式方式:优先权更高的进程优先执行。
11. 进程调度的算法
- 先来先服务算法
- 最短优先算法
- 优先级算法:优先级高的先执行。可以采用剥夺或非剥夺,剥夺方式更能反映优先的特点,但是会造成无穷阻塞和饥饿现象。
- 轮转算法:基本思想是系统把所有就绪进程按先来先服务的原则排成一个队列,且规定一个较小的时间单元,称为时间量或时间片,按时间片把CPU轮流分配给进入就绪队列的第一个进程使用,当进程的时间片使用完后,产生一个时钟中断,剥夺该进程的执行,将它送到就绪队列的队尾,等待下次调度。轮转算法专门为分时系统设计。
- 多级队列调度算法:根据不同的进程,分配到不同的队列中,实行不同的调度算法。一般按照优先级分成多个队列,高优先级的任务先做。
- 多级反馈队列调度算法:按优先级分配队列,但是优先级越高分配的时间片越小,如果没做完,自动移动到下一级队列继续做。
- 实时调度算法:在限定的响应时间内提供所需水平的服务。
12. 哪种权限许可用户进入一个文件系统的目录?
Read,Execute,Write,Access Controll,注意可执行权限
很重要。