1.请简述什么是进程?
操作系统——多道程序设计——实现了对计算机硬件资源的管理和抽象
多道程序设计:
- 如何隔离不同程序需要使用的计算机资源?
- 操作系统如何进行不同程度的调度?
- 操作系统如何提升计算机资源的利用率与复用率?
提出进程:
- 进程是系统进行资源分配和调度的基本单位
- 进程作为程序独立运行的载体保障程序正常执行
- 进程的存在使得操作系统资源的利用率大幅提升
2.请简述为什么操作系统需要进程?
操作系统是对计算机硬件资源的管理和抽象
多道程序设计存在的问题,由进程来解决
3.进程和线程有什么区别?
线程的提出是为了提高系统内程序并发执行的程度
- 线程是操作系统进行运行调度的最小单位
- 包含在进程中,是进程中实际运行工作的单位
- 一个进程可以并发多个线程,每个线程执行不同的任务
- 进程的线程共享进程的资源
4.请简述操作系统进程的相关调度算法
- 先来先服务调度算法
- 优先级调度算法
- 时间片轮转调度算法
- 短进程优先调度算法
- 最短剩余时间优先调度算法
- 最高响应比优先调度算法
- 多级反馈队列调度算法
5.请简述对操作系统内核态的理解
为了屏蔽用户对计算机可能造成的影响,操作系统设计为内核态和用户态
内核态:
- 内核空间:存放的是内核代码和数据
- 进程执行操作系统内核的代码
- CPU可以访问内存所有数据,包括外围设备
用户态:
- 用户空间:存放的是用户程序的代码和数据
- 进程在执行用户自己的代码(非系统调用之类的函数)
- CPU只可以访问有限的内存,不允许访问外设
6.进程在什么时候会进入内核态?请举例说明
用户态——>内核态的三种情况
系统调用:从硬盘读取数据,从网卡里面读写数据(用户主动)
异常中断:发生不可预知的错误,只能由操作系统去处理(异常情况)
外围设备中断:外围设备主动发出中断信号
7.请简述什么是IO密集型任务
- 频繁读写网络、磁盘等任务都属于IO密集型任务
- 完成一项任务的时间取决于IO设备的速度
- CPU利用率低、大部分时间在等待外围设备完成
复制粘贴、下载工具、web应用、视频解码、AI计算
8.服务部署时对于服务器资源,应该注意什么?
9.协程是什么?为什么需要协程?
- 比线程更小的粒度
- 运行效率更高
- 可以支持更高的并发
- 协程的本质是用户级线程
- 由用户自行调度,内核无法干涉
- 协作运行,相互让步
协程是用户态来进行调度的,调度、切换、管理更加轻量
内核无法感知协程的存在
可以减少上下文切换的成本
无法发挥CPU的多核优势
协程主要运用在多IO的场景
10.多协程可以发挥CPU的多核优势吗?为什么?
不能,没有办法被内核感知的
11.请简述对阻塞、非阻塞、同步、异步等概念的理解
阻塞状态:进程要调用外围设备,发出call后一直等待,等到结果return后进行设备调用,这个等待的过程是阻塞状态
非阻塞状态:进程要读取1G的数据,发出call后,立刻返回return告诉它还没准备好,进程就去做其他事情,等到准备好后,通知进程ready,进程再读取数据,这个过程没有等待,所以是非阻塞状态
同步和异步强调的是消息通信机制
阻塞和非阻塞强调的是程序在等待调用结果时的状态
12.请简述进程为什么会发生阻塞?
进程因为某种原因如:其他设备未就绪而无法继续执行
从而放弃CPU的状态称为阻塞状态