ucore—11至14讲:进程与线程

2024-02-07 02:18
文章标签 线程 进程 14 ucore

本文主要是介绍ucore—11至14讲:进程与线程,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

文章目录

  • 第十一讲:进程和线程
    • 11.1 进程的概念
    • 11.2 进程控制块
    • 11.3 进程状态
    • 11.4 三状态进程模型
    • 11.5 挂起进程模型(重要)
    • 11.6 线程概念
    • 11.7 线程实现之—用户线程实现(重要)
    • 11.8 线程实现之—内核线程实现
    • 11.9 线程实现之—轻量级进程(混合实现)
  • 第十二讲:进程控制
    • 12.1 进程切换
    • 12.2 进程创建
    • 12.3 进程加载
    • 12.4 进程等待与退出
    • 12.5 其他进程控制的系统调用
  • 第十三讲(实验4):内核线程管理
  • 第十四讲(实验5):用户进程管理

第十一讲:进程和线程

11.1 进程的概念

  • 进程概念
    在这里插入图片描述
  • 内存中的进程
    在这里插入图片描述
  • 进程的组成
    这些内容最终构成了进程控制块
    在这里插入图片描述
  • 进程的特点
    动态性:可动态地创建、结束进程
    并发性:进程可以被独立调度并占用处理机运行
    独立性:不同进程的工作互不影响
    制约性:因访问共享数据、资源或进程间同步而产生制约
    => 需要权衡好进程的独立性和制约性
    在这里插入图片描述
  • 进程与程序的关系
    联系
    在这里插入图片描述
    区别
    在这里插入图片描述

11.2 进程控制块

  • pcb基本概念
    在这里插入图片描述
    在这里插入图片描述
  • 进程控制块的内容
    主要包括三方面的信息:
    1.进程标志信息; 2.处理机现场信息; 3.进程控制信息;
    在这里插入图片描述
    进程控制信息主要包括以下内容:
    在这里插入图片描述
  • 进程控制块的组织
    注意就绪和阻塞进程是分开组织的!!!
    在这里插入图片描述

11.3 进程状态

  • 进程生命周期
    创建、执行、等待(阻塞)、抢占、唤醒、结束(此处所说的六个更多地像是五态模型中的六个状态转换,而不是某一段时间所处状态)
    (不同操作系统设定的生命周期不同!) =>更常见的说法:
    三态模型:就绪、执行、阻塞
    五态模型:创建、就绪、执行、阻塞、结束

  • 创建
    创建好后将进程放入就绪队列
    在这里插入图片描述

  • 执行
    如何选择执行的进程? => 涉及到调度算法!
    在这里插入图片描述

  • 等待
    这里的等待就是常说的阻塞
    在这里插入图片描述

  • 抢占
    在这里插入图片描述

  • 唤醒
    在这里插入图片描述

  • 结束
    在这里插入图片描述

  • 进程切换
    在这里插入图片描述

11.4 三状态进程模型

  • 三态模型
    这里其实是五态模型
    在这里插入图片描述

11.5 挂起进程模型(重要)

  • 进程挂起
    为什么需要挂起? => 物理内存不足时,将部分进程从内存换出到外存
    等待挂起:进程在外存并等待某事件的出现
    就绪挂起:进程在外存,并且处于就绪状态.只要进入内存,即可运行
    内存到外存 => 挂起
    外存到内存 => 激活
    在这里插入图片描述
  • 使用队列维护各种状态的进程:状态队列
    在这里插入图片描述
    在这里插入图片描述

11.6 线程概念

  • 为什么需要线程
    …略

  • 线程基本概念
    在这里插入图片描述
    进程是资源分配的基本单位;
    线程是调度的基本单位 => 如何实现以线程为调度的基本单位?让每个线程由自己的栈即可!

  • 进程和线程的关系
    线程=进程 — 共享资源
    在这里插入图片描述
    在这里插入图片描述

  • 线程的优点与缺点
    在这里插入图片描述

11.7 线程实现之—用户线程实现(重要)

  • 线程的三种实现方式
    在这里插入图片描述
  • 用户线程实现
    内核中仍然只有PCB,而没有TCB!操作系统并不感知用户态下有多线程的支持
    在这里插入图片描述
  • 用户线程的特征
    在这里插入图片描述
  • 用户线程的不足
    在这里插入图片描述

11.8 线程实现之—内核线程实现

  • 内核线程实现
    在这里插入图片描述
  • 内核线程的特征
    在这里插入图片描述

11.9 线程实现之—轻量级进程(混合实现)

  • 轻权进程
    solaris有实现轻权进程,不过效果不如预期理想!
    在这里插入图片描述
    仍然不是很懂? => 可参考《深入理解JVM》第12章关于Java线程实现

  • 用户线程与内核线程的对应关系
    通常,一对一是用得较多且理想的
    在这里插入图片描述

第十二讲:进程控制

12.1 进程切换

  • 进程切换基本概念
    在这里插入图片描述
  • 示例
    在这里插入图片描述
  • PCB的组织
    在这里插入图片描述
  • PCB内容
    在这里插入图片描述

12.2 进程创建

  • 创建进程
    在这里插入图片描述

  • 通过系统调用创建子进程示例
    在这里插入图片描述

  • fork()的地址空间复制
    在这里插入图片描述

  • 程序加载和执行
    通过exec加载子进程中将要执行的程序
    在这里插入图片描述
    子进程中程序加载的变化过程
    调用fotrk()后子进程与父进程除pid外基本完全一样
    在这里插入图片描述
    子进程加载新的程序 => 子进程地址空间中的内容发生变换(可参考csapp)
    在这里插入图片描述

  • ucore中fork()的实现
    …略(见代码)

  • 关于fork()的开销问题
    在这里插入图片描述
    Linux使用上述的写时复制,可参考csapp 9.8节

12.3 进程加载

  • exec系统调用进行加载
    这里的加载其实类似于bios加载booloader、bootloader加载系统内核,都需要将程序加载到内存,然后将控制交给加载进来的程序起始处…
    在这里插入图片描述
  • ucore中exec的实现
    …略(见代码)

12.4 进程等待与退出

  • 父进程等待子进程
    在这里插入图片描述
  • 进程退出
    在这里插入图片描述
  • ucore中wait与exit函数的实现
    …略(见代码)

12.5 其他进程控制的系统调用

  • 其他系统调用
    在这里插入图片描述
  • 进程控制vs进程状态
    在这里插入图片描述

第十三讲(实验4):内核线程管理

略…(详见实验指导书与代码)

第十四讲(实验5):用户进程管理

略…(详见实验指导书与代码)

这篇关于ucore—11至14讲:进程与线程的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/686243

相关文章

Spring Boot 中正确地在异步线程中使用 HttpServletRequest的方法

《SpringBoot中正确地在异步线程中使用HttpServletRequest的方法》文章讨论了在SpringBoot中如何在异步线程中正确使用HttpServletRequest的问题,... 目录前言一、问题的来源:为什么异步线程中无法访问 HttpServletRequest?1. 请求上下文与线

在 Spring Boot 中使用异步线程时的 HttpServletRequest 复用问题记录

《在SpringBoot中使用异步线程时的HttpServletRequest复用问题记录》文章讨论了在SpringBoot中使用异步线程时,由于HttpServletRequest复用导致... 目录一、问题描述:异步线程操作导致请求复用时 Cookie 解析失败1. 场景背景2. 问题根源二、问题详细分

Python中多线程和多进程的基本用法详解

《Python中多线程和多进程的基本用法详解》这篇文章介绍了Python中多线程和多进程的相关知识,包括并发编程的优势,多线程和多进程的概念、适用场景、示例代码,线程池和进程池的使用,以及如何选择合适... 目录引言一、并发编程的主要优势二、python的多线程(Threading)1. 什么是多线程?2.

Java多线程父线程向子线程传值问题及解决

《Java多线程父线程向子线程传值问题及解决》文章总结了5种解决父子之间数据传递困扰的解决方案,包括ThreadLocal+TaskDecorator、UserUtils、CustomTaskDeco... 目录1 背景2 ThreadLocal+TaskDecorator3 RequestContextH

java父子线程之间实现共享传递数据

《java父子线程之间实现共享传递数据》本文介绍了Java中父子线程间共享传递数据的几种方法,包括ThreadLocal变量、并发集合和内存队列或消息队列,并提醒注意并发安全问题... 目录通过 ThreadLocal 变量共享数据通过并发集合共享数据通过内存队列或消息队列共享数据注意并发安全问题总结在 J

linux进程D状态的解决思路分享

《linux进程D状态的解决思路分享》在Linux系统中,进程在内核模式下等待I/O完成时会进入不间断睡眠状态(D状态),这种状态下,进程无法通过普通方式被杀死,本文通过实验模拟了这种状态,并分析了如... 目录1. 问题描述2. 问题分析3. 实验模拟3.1 使用losetup创建一个卷作为pv的磁盘3.

异步线程traceId如何实现传递

《异步线程traceId如何实现传递》文章介绍了如何在异步请求中传递traceId,通过重写ThreadPoolTaskExecutor的方法和实现TaskDecorator接口来增强线程池,确保异步... 目录前言重写ThreadPoolTaskExecutor中方法线程池增强总结前言在日常问题排查中,

Linux环境变量&&进程地址空间详解

《Linux环境变量&&进程地址空间详解》本文介绍了Linux环境变量、命令行参数、进程地址空间以及Linux内核进程调度队列的相关知识,环境变量是系统运行环境的参数,命令行参数用于传递给程序的参数,... 目录一、初步认识环境变量1.1常见的环境变量1.2环境变量的基本概念二、命令行参数2.1通过命令编程

Linux之进程状态&&进程优先级详解

《Linux之进程状态&&进程优先级详解》文章介绍了操作系统中进程的状态,包括运行状态、阻塞状态和挂起状态,并详细解释了Linux下进程的具体状态及其管理,此外,文章还讨论了进程的优先级、查看和修改进... 目录一、操作系统的进程状态1.1运行状态1.2阻塞状态1.3挂起二、linux下具体的状态三、进程的

python多进程实现数据共享的示例代码

《python多进程实现数据共享的示例代码》本文介绍了Python中多进程实现数据共享的方法,包括使用multiprocessing模块和manager模块这两种方法,具有一定的参考价值,感兴趣的可以... 目录背景进程、进程创建进程间通信 进程间共享数据共享list实践背景 安卓ui自动化框架,使用的是