1 简述什么是进程?
进程是系统进行资源分配和调度的基本单位,进程本质上是运行中的程序是动态的,需要将进程运行的当前状态,所需资源等信息保存到进程控制块中,操作系统为了管理进程设计的数据结构叫进程控制块,里面存的字段可以分成进程标识符、处理机状态、进程调度信息、进程控制信息。
2 进程状态模型 —简述阻塞、非阻塞、同步、异步—简述为什么发送阻塞?
五状态模型:创建、就绪、终止、阻塞。运行
就绪状态:其他资源都准备好了,只差CPU资源的状态,只要在获得CPU使用权就可以随时被调度执行。
创建状态:创建进程是拥有PCB(进程控制块)但其他资源没有就绪为创建状态
先分配PCB(进程控制块)然后插入就绪队列。操作系统提供fork函数接口创建进程
终止状态:进程结束有系统清理或者归还PCB的状态为终止状态。
阻塞状态:进程因为某种原因(其他设备没有就绪包括磁盘、网卡等)无法继续执行而放弃cpu的使用权,把cpu资源让给其他进程。
进程从就绪状态进行进程调度,分配cpu资源,然后到运行状态,当时间片用完之后进入就绪状态,而在运行状态时因为某些资源没有就绪比如IO请求包括网络IO、磁盘IO、都可能从运行状态切换到阻塞状态,当IO请求完成了进程从阻塞状态切换就绪状态。
阻塞、非阻塞、同步、异步。
阻塞状态(同步):阻塞的话典型的就是IO过程,从调用到返回会经历一段时间。因为比如外围设备包括磁盘。网卡等,在读写数据没有CPU快,所以通常读取数据的时候会经历一段时间,这段时间就是属于阻塞状态。在调用结果返回之前,当前进程会被挂起,只有得到结果才会返回。
同步:进程因为在这段时间并没有干其他事情,而是同步的等待数据返回
非阻塞状态(异步):并没有一直等待数据的返回,而是其他的工作,等到比如IO完成了会通知已经完成,进程再去返回IO任务去读取数据。
异步:进程在IO之后没有进行同步等待,去干其他事情,并且等待IO这个过程准备好之后进行通知,进程接收到通知ready之后再切换回去读取数据。当一个异步的调用发出之后,调用并不会得到结果而是,被调用者通过状态或者通知,来通知进程获取结果。
总结:同步异步抢到消息通讯机制,阻塞非阻塞抢到进程在等待调用结果的状态。
3 PBC是什么?(进程控制块)
PCB是进程控制块。
PCB是进程的唯一标识,操作系统调度进程时就是根据每个进程PCB中的信息进行调度的,当决定执行 某个进程后,会根据该进程PCB中保存的信息去恢复上次执行的现场,当分配到的CPU时间片用完 后,需要将当前状态保存到PCB中,以便下次恢复。
PCB组织方式:通过链表的方式组织成一个个队列,拥有相同状态的进程组成一个队列。比如就绪进程就会组成就绪队列、因为某些事件而阻塞的进程组成阻塞队列。也可以将相同状态的PCB按照其他策略排成多个链表
PCB包含进程的属性和状态信息:
-
进程标识符(进程ID)
-
CPU状态信息(寄存器、PC)
-
进程调度信息(进程状态、进程优先级、进程已等待时间等)
-
进程控制信息(页表地址)
4 线程——介绍进程、线程、协程
线程:
线程是任务调度和执行的基本单位。CPU上真正运行的是线程,但线程本身几乎不拥有资源,线程自己只拥有一点运行时必不可少的资源,如PC、寄存器和栈,但线程可以和同一进程下的其他线程共享进程资源。
进程:
进程是系统进行资源分配和调度的基本单位,
进程本质上是“运行中的程序”,单纯的程序只是保存在磁盘中的一段代码,是静态的,而进程是运行中的代码,是动态的,除了需要保存这段代码外,还需要将进程运行的当前状态,所需资源等信息保存到进程控制块中,操作系统为了管理进程设计的数据结构叫进程控制块,里面存的字段可以分成进程标识符、处理机状态(进程当前运行到什么时候什么状态的一些信息)、进程调度信息、进程控制信息。所以进程由3部分组成:程序段、数据段和进程控制块。
**协程:**比线程更加轻量级,协程不被操作系统内核所管理,完全是用户态的
5 进程与线程区别
-
一个进程包含多个线程,一个线程只能属于一个进程
-
创建和销毁线程的速度快,因为创建线程不需要单独分配资源了。
-
线程间切换的速度较快,只需要保存和恢复寄存器内容即可,而进程切换就需要保存当前CPU状态到PCB中,然后 将下一个进程的状态进行恢复。
-
由于线程间共享进程的内存和文件,所以线程间通信不需要其他复杂的机制,也不需要涉及内核,既简便又快速
-
进程的健壮性更强,一个线程挂掉会导致整个进程挂掉,但一个进程挂掉不会导致其他进程挂掉。
-
进程是系统进行资源分配和调度的基本单位,线程是任务调度和执行的基本单位。
6 进程和线程的切换流程
进程切换流程:进程之间的虚拟地址空间是不同的,所以要先切换页表,清空快表缓存。切换内核栈和硬件上下文
进程上下文:当一个进程在执行时,CPU的所有寄存器中的值、进程的状态以及堆栈中的内容被称为该进程的上下文
线程切换流程:线程之间共享进程的虚拟地址空间,所以线程切换不需要切换页表 直接切换内核栈和硬件上下文即可
7 并发和并行的区别?
并发和并行在一个时间段内的表现都是多个进程得到了运行。
-
并发在任意一个时刻下,只有一个进程在运行;
-
并行在任意一个时刻下,有多个进程在同时运行。
8 进程调度策略
非抢占式:进程获得CPU资源后,一直运行直到进程结束或阻塞才释放CPU使用权。
-
优点:简单、上下文切换开销小
-
缺点:紧急任务不能马上执行、后到的短进程需要等待长进程完成,导致短进程周转时间变长
抢占式:操作系统可以在进程执行时剥夺CPU,分配给其他进程使用。典型的有:优先级原则、短进程优先原则、时间片原则
进程调度算法:
-
短作业优先:抢占式、难以准确预测进程执行时间
-
优先级调度 - 最常用:抢占式、分为静态优先级和动态优先级,动态优先级系统开销较大,静态优先级是在进程创建时就决定的
-
时间片轮转 - 分时系统 :抢占式、为每个执行进程设置时间片,时间片用完则交出CPU
-
先进先出算法 - FIFO:非抢占式、容易造成短进程等待时间变长
-
最高响应比优先:非抢占式、对短进程有利,长进程由于等待时间变长会提高响应比,不至于让长进程饿死
-
前后台调度 :前台执行分时程序,用时间片轮转调度;后台执行批处理程序,用FIFO调度。只有当前台没有程序 时,CPU才交给后台使用。
-
多级反馈队列轮转算法:将就绪队列分成多个优先级不同的队列。刚创建和进程 和 因IO未用完时间片的进程排在最高优先级队列,2-3个时间片还未执行完的进程放入 较低优先级队列,只有优先级更高的队列为空时才会调度当前队列。
9 僵尸进程 孤儿进程 守护进程
-
孤儿进程:子进程的父进程退出,子进程被ID号为1的inti进程收养,作为子进程的父进程.然后init进程会执行wait或waitpid操作,去释放孤儿进程的资源. 危害