考研系列-操作系统:第二章、进程与线程
思维导图
一、进程与线程相关概念
1.进程的组成
程序:是静态的,就是存放在磁盘的可执行文件,是一系列指令的集合
进程:动态的,是程序的一次执行过程。同一个程序执行多次会对应多个进程。
程序段、相关数据段和PCB三部分构成进程实体,也叫进程映像。
PCB是进程存在的唯一标志!!!
这里区分一下:进程映像(进程实体)是静态的,进程是动态的,进程时间上讲是由每时每刻的进程映像构成的。
2.进程的特征
3.进程的状态和状态转换
重要!!!区分主动、被动行为
4.进程的组织
(1)链接方式(大多数操作系统使用的方式)
(2)索引方式
5.进程控制-用原语来实现
创建、终止、阻塞+唤醒、切换
6.进程通信(三种高级方式)
进程间通信(IPC,inter process communication):两个进程之间产生数据交换
(1)共享存储
申请一块共享内存区,多个进程都可以对这个内存区访问
(2)消息传递
直接通信方式:点名道姓的消息传递
间接通信方式:以“信箱”作为中间实体进行消息传递
(3)管道通信
管道本质上是一种文件,注意管道方式是半双工通信,某一时段只能实现单向传输
只要管道非空,读进程就可以从管道读数据,只要管道不满,写进程就可以向管道写数据。
生产者-消费者方式进行通信
数据在管道内是先进先出的,本质上是一个循环队列。
管道机制必须提供三方面的协调能力:互斥、同步、确定对方的存在
7.线程和多线程模型
线程的实现方式:用户级线程、内核级线程
用户级线程和内核级线程并无本质区别,只是执行的特权级不一样,用户级线程进入内核后就变成了内核级线程
https://zhuanlan.zhihu.com/p/585490229
很多语言提供了强大的线程库,可以实现线程的创建、销毁、调度等功能
组合级线程:结合上面两个优点,详细结构见下面多线程模型的多对多模型
多线程模型
多对一模型:所有线程对应一个内核级线程,一个内核级线程只能分配在一个处理器上,所以这样的结构在多核处理器上不能实现多处理器并发执行程序。
一个进程可能对应多个内核级线程,只有所有的内核级线程运行的代码逻辑都阻塞时,进程才会阻塞
目前使用的三种主要线程库:POSIX Pthreads、Windows API、Java。
2022大纲新增考点↓
8.线程的状态与转换
9.线程的组织与控制
控制就是让线程在状态之间来回切换
第二遍又做错了!!!
资源调度和分派是指的处理器资源!!!
代码和赋值变量在正文段,未赋值和实参传递值在栈段 动态分配在堆区
这个记住就行
针对唤醒是指使用wakeup原语:将阻塞态进程转化为就绪态
这个注意!!!子进程和父进程都有独立的地址空间,不能同时对同一个临界资源使用,比如打印机
父进程和子进程有自己独立的地址空间,可以并发执行
主程序调用子程序只能是串行执行
还要考虑创建、终止原语!!不能只考虑唤醒和阻塞原语
先来先执行的策略X,时间片轮转调度算法
10.习题总结
(一)选择题
阻塞态是等待I/O操作的结果,等完成I/O操作后变为就绪态
某进程退出临界区,进程完成临界资源的使用,由阻塞态要唤醒变为就绪态
临界资源:
(二)简答题
1.进程和程序之间可以形成一对一、一对多、多对一、多对多的关系,请分别举例说明在什么情况下会形成这样的关系?
注意一对多并不是指的多线程,多线程是对于一个程序内多个线程执行多个任务来说的。
2.父进程创建子进程和主程序调用主程序有何不同?
3.为何进程之间的通信必须借助于操作系统内核功能?简单说明进程通信的几种主要方式?
4.什么是多线程?多线程与多任务有什么区别?
二、处理机调度
1.调度的基本概念
处理机调度是指对处理机进行分配,即从就绪队列中按照一定的算法(公平、高效的原则)选择一个进程并将处理机分配给它运行,以实现进程的并发执行。
处理机调度是多道程序操作系统的基础,是操作系统设计的核心问题
2.调度的三个层次
增加挂起态的目的是:为了降低主存的负担,将部分进程调出内存
3.调度算法评价指标
(1)CPU利用率
(2)系统吞吐量
(3)周转时间
(4)等待时间
(5)响应时间
4.进程调度的的实现
内核临界区和普通临界区的比较:
处理机切换的情况:被迫和主动引出进程调度的方式
进程切换
5.两种线程调度
(1)用户级线程调度
由于内核并不知道线程的存在,所以内核还是和以前一样,选择一个进程,并给予时间控制。由进程中的调度程序决定哪个线程运行。
(2)内核级线程调度
内核选择一个特定的线程运行,通常不用考虑线程属于哪个进程。对被选择的线程赋予一个时间片,如果超过了时间片,就会强制挂起该线程。
用户级线程调度在进程中完成,花费时间少,内核级线程调度需要完整的上下文切换,在内核中完成,所以花费时间多。
6.调度算法
先来先服务FCFS
短作业优先(包括非抢占式和抢占式)
高响应比优先(HRRN)
时间片轮转调度算法(属于抢占式算法)
优先级调度算法
非抢占式:
抢占式:
多级反馈队列调度算法
多级队列调度算法
7.习题总结
进程切换往往在调度完成后立刻发生,它要求保存原进程当前断点的现场信息,恢复被调度进程的现场信息。现场切换时,操作系统内核将原进程的现场信息推入当前进程的内核堆栈来保存,并更新堆栈指针。内核完成从新进程的内核栈中装入新进程的现场信息、更新当前运行进程的空间指针、重设PC寄存器等相关工作后,开始运行新的进程。
调度和切换的区别:调度是指决定资源分配给哪个进程的行为,是一种决策;而切换是指实际分配的行为,是执行行为。一般来说先有的资源调度,然后有的进程切换。
(一).选择题
第二遍又做错了!!
(二).简答题
1.为什么多级反馈队列调度算法能较好地满足各类用户的需要?
这里注意:两道作业系统就是说只能有两个作业同时存在内存中,其他的暂时放在外存里,等待某一个调入CPU执行完成后,使用某一规则(算法)将一个作业调入内存,然后这两个作业再按照进程调度算法安排哪个被调入CPU执行。
这里注意,到达时间的不同,被插入序列的位置不同,这个地方有坑,做题要注意