当前位置: 首页 > news >正文

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

思维导图

一、进程与线程相关概念

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

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

http://www.xdnf.cn/news/692821.html

相关文章:

  • Java垃圾回收器全面解析:原理、参数、对比与实战调优
  • 用QT写一个车速表
  • 台式电脑CPU天梯图_2025年台式电脑CPU天梯图
  • PortSwigger-03-点击劫持
  • ASP.NET Core OData 实践——Lesson6使用Action(C#)
  • 扩展摩尔投票法:找出出现次数超过 n/3 的元素
  • 《汇编语言》第11章 标志寄存器
  • LiveNVR :实现非国标流转国标流的全方位解决方案
  • 嵌入式自学第三十天(5.28)
  • Python |GIF 解析与构建(4):快速量化压缩256色算法
  • 关于uv 工具的使用总结(uv,conda,pip什么关系)
  • 在 MATLAB 2015a 中如何调用 Python
  • Spring Boot 读取.env文件获取配置
  • 金融全业务场景的系统分层与微服务域架构切分
  • 2025-05-28 Python-List-二分法
  • 实验设计与分析(第6版,Montgomery)第4章随机化区组,拉丁方, 及有关设计4.5节思考题4.26~4.27 R语言解题
  • 【HTML-14】HTML 列表:从基础到高级的完整指南
  • 从SEO到GEO:搜索范式迁移的三大断层
  • 算法分析·回溯法
  • JAX-WS 返回值<return>标签怎么修改
  • 植被监测新范式!Python驱动机器学习反演NDVI/LAI关键技术解析
  • Qwen3大模型本地部署及Python调用指南
  • 数据库管理-第330期 数据库国产化可以顺便做的事情(20250528)
  • SpringBoot使用ffmpeg实现视频压缩
  • 大模型应用开发第五讲:成熟度模型:从ChatGPT(L2)到未来自主Agent(L4)
  • 服务器开机自启动服务
  • css设置动态数值:clamp函数
  • Tailwind CSS 实战,基于 Kooboo 构建 AI 对话框页面(三):实现暗黑模式主题切换
  • kubernate解决 “cni0“ already has an IP address different from 10.244.0.1/24问题
  • FastAPI 依赖注入