后端面试(二)操作系统

操作系统相关:

1、进程和线程的概念和区别:

进程(Process) 是计算机中的程序关于某数据集合上的一次运行活动,是系统进行资源分配和调度的基本单位,是操作系统结构的基础。 在当代面向线程设计的计算机结构中,进程是线程的容器。程序是指令、数据及其组织形式的描述,进程是程序的实体。

线程(thread) 是操作系统能够进行运算调度的最小单位。它被包含在进程之中,是进程中的实际运作单位。一条线程指的是进程中一个单一顺序的控制流,一个进程中可以并发多个线程,每条线程并行执行不同的任务。

根本区别:进程是操作系统资源分配的基本单位,而线程是处理器任务调度和执行的基本单位;

区别:每个进程都有独立的代码和数据空间(进程上下文),程序之间的切换会有较大的开销;线程可以看做轻量级的进程,同一类线程共享代码和数据空间,每个线程都有自己独立的运行栈和程序计数器(PC),线程之间切换的开销小。

2、进程上下文是什么:

上下文指的是一种环境,对于进程上下文而言,指的就是进程执行时的环境,是一个进程在执行的时候,CPU的所有寄存器中的值、进程的状态以及堆栈上的内容,当内核需要切换到另一个进程时,它 需要保存当前进程的所有状态,即保存当前进程的进程上下文,以便再次执行该进程时,能够恢复切换时的状态,继续执行。

相对来说,线程的上下文切换的时间开销要小于进程的时间开销,而且线程共享了进程的上下文环境。

通过了解上下文,我们可以得到进程和线程新的理解:进程切换时需要CPU去切换进程上下文以保存现在进程的状态,而在每个进程内部线程的切换,由于共享了进程的上下文环境,所以线程的上下文切换消耗更少。由此得到总结:进程和线程都是一个时间段的描述,是CPU工作时间段的描述,只是粒度大小不同

3、内核态和用户态,系统调用:

内核态和用户态(或者说是用户空间和内核):内核从本质上看是一种软件——控制计算机的硬件资源,并提供上层应用程序运行的环境。用户态即上层应用程序的活动空间,应用程序的执行必须依托于内核提供的资源,包括CPU资源、存储资源、I/O资源等。为了使上层应用能够访问到这些资源,内核必须为上层应用提供访问的接口:即系统调用。简单来说:上层应用的实现就是基于很多不同功能的系统实现来完成的。

4、进程之间的通信方式:

**进程间通信(IPC,InterProcess Communication)**是指在不同进程之间传播或交换信息。

IPC的通信方式:

  1. 管道(pipe):分为无名管道,高级管道和有名管道,半双工通信,数据只能单向流动,无名管道只能在具有亲缘关系的进程之间使用,有名管道则没有要求,高级管道则是把一个进程当作一个新进程在当前进程中启动,则它算是当前进程的子进程;
  2. 消息队列通信( message queue ):消息队列是由消息的链表,存放在内核中并由消息队列标识符标识。消息队列克服了信号传递信息少、管道只能承载无格式字节流以及缓冲区大小受限等缺点。
  3. 信号量( semophore ) : 信号量是一个计数器,可以用来控制多个进程对共享资源的访问。它常作为一种锁机制,防止某进程正在访问共享资源时,其他进程也访问该资源。因此,主要作为进程间以及同一进程内不同线程之间的同步手段。
  4. 共享内存( shared memory ) :共享内存就是映射一段能被其他进程所访问的内存,这段共享内存由一个进程创建,但多个进程都可以访问。共享内存是最快的 IPC 方式,它是针对其他进程间通信方式运行效率低而专门设计的。它往往与其他通信机制,如信号两,配合使用,来实现进程间的同步和通信。
  5. 套接字( socket ) : 套接口也是一种进程间通信机制,与其他通信机制不同的是,它可用于不同机器间的进程通信
5、线程之间的通信方式:

线程之间本来就共享内存,所以可以通过synchronized和volitile轮询来通信,或者使用管道进行通信;

6、进程的调度算法:
  1. **先来先服务调度算法(FCFS):**当每个进程就绪后,它加入就绪队列。当前正运行的进程停止执行,选择在就绪队列中存在时间最长的进程运行。算法简单但效率低;
  2. **时间片轮转调度算法:**主要适用于分时系统。在这种算法中,系统将所有就绪进程按到达时间的先后次序排成一个队列,进程调度程序总是选择就绪队列中第一个进程执行,即先来先服务的原则,但仅能运行一个时间片,如100ms。在使用完一个时间片后,即使进程并未完成其运行,它也必须释放出(被剥夺)处理机给下一个就绪的进程,而被剥夺的进程返回到就绪队列的末尾重新排队,等候再次运行。
  3. **短进程优先算法:**短进程优先(SPF)调度算法,是从就绪队列中选择一个估计运行时间最短的进程,将处理机分配给它,使之立即执行,直到完成或发生某事件而阻塞时,才释放处理机。
  4. 最短剩余时间是针对最短进程优先增加了抢占机制的版本。在这种情况下,进程调度总是选择预期剩余时间最短的进程。当一个进程加入到就绪队列时,他可能比当前运行的进程具有更短的剩余时间,因此只要新进程就绪,调度程序就能可能抢占当前正在运行的进程。
  5. **高响应比优先调度算法:**根据比率:R=(w+s)/s (R为响应比,w为等待处理的时间,s为预计的服务时间),当前进程完成或被阻塞时,选择R值最大的就绪进程,它说明了进程的年龄。
  6. **优先级调度算法:**优先级调度算法每次从就绪队列中选择优先级最高的进程,将处理机分配给它,使之投入运行。
  7. 多级反馈队列调度算法:
    1. 应设置多个就绪队列,并为各个队列赋予不同的优先级,第1级队列的优先级最高,第2级队列次之,其余队列的优先级逐次降低。
    2. 赋予各个队列中进程执行时间片的大小也各不相同,在优先级越高的队列中,每个进程的运行时间片就越小。例如,第2级队列的时间片要比第1级队列的时间片长一倍, ……第i+1级队列的时间片要比第i级队列的时间片长一倍。
    3. 当一个新进程进入内存后,首先将它放入第1级队列的末尾,按FCFS原则排队等待调度。当轮到该进程执行时,如它能在该时间片内完成,便可准备撤离系统;如果它在一个时间片结束时尚未完成,调度程序便将该进程转入第2级队列的末尾,再同样地按FCFS 原则等待调度执行;如果它在第2级队列中运行一个时间片后仍未完成,再以同样的方法放入第3级队列……如此下去,当一个长进程从第1级队列依次降到第 n 级队列后,在第 n 级队列中便釆用时间片轮转的方式运行。
    4. 仅当第1级队列为空时,调度程序才调度第2级队列中的进程运行;仅当第1 ~ (i-1)级队列均为空时,才会调度第i级队列中的进程运行。如果处理机正在执行第i级队列中的某进程时,又有新进程进入优先级较高的队列(第 1 ~ (i-1)中的任何一个队列),则此时新进程将抢占正在运行进程的处理机,即由调度程序把正在运行的进程放回到第i级队列的末尾,把处理机分配给新到的更高优先级的进程。
7、线程的生命周期:

img

8、协程是什么:

**协程,英文Coroutines,是一种比线程更加轻量级的存在。**正如一个进程可以拥有多个线程一样,一个线程也可以拥有多个协程。

最重要的是,协程不是被操作系统内核所管理,而完全是由程序所控制(也就是在用户态执行)。

这样带来的好处就是性能得到了很大的提升,不会像线程切换那样消耗资源。

9、虚拟内存:

管理,而完全是由程序所控制(也就是在用户态执行)。

这样带来的好处就是性能得到了很大的提升,不会像线程切换那样消耗资源。

9、虚拟内存:

虚拟内存技术的实现是建立在应用程序可以分段,并且具有在任何时候正在使用的信息总是所有存储信息的一小部分的局部特性基础之上的,它是通过辅存空间模拟RAM来实现的一种使机器的作业地址空间大于实际内存的技术。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值