考研系列-操作系统:第二章、进程与线程

思维导图

一、进程与线程相关概念

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执行。

这里注意,到达时间的不同,被插入序列的位置不同,**这个地方有坑,**做题要注意

相关推荐
喧星Aries16 小时前
进程调度的时机,切换与过程方式(操作系统OS)
java·服务器·前端·操作系统·进程调度
OpenAnolis小助手2 天前
Anolis OS 23 架构支持家族新成员:Anolis OS 23.3 版本及 RISC-V 预览版发布
开源·操作系统·龙蜥社区·risc-v·anolis os·龙蜥操作系统
阿维的博客日记2 天前
字节二面:进程,线程,协程区别
线程·进程·协程
沐森2 天前
桌面右键功能开发
前端框架·操作系统
望获linux3 天前
【Linux基础知识系列】第四十三篇 - 基础正则表达式与 grep/sed
linux·运维·服务器·开发语言·前端·操作系统·嵌入式软件
泊浮目3 天前
未来数据库硬件-计算篇
数据库·云计算·操作系统
Brookty3 天前
【操作系统】进程(二)内存管理、通信
java·linux·服务器·网络·学习·java-ee·操作系统
阑梦清川5 天前
linux操作系统课程学习02
操作系统
阑梦清川5 天前
linux操作系统课程学习01
操作系统
想躺平的咸鱼干5 天前
Volatile解决指令重排和单例模式
java·开发语言·单例模式·线程·并发编程