【操作系统概念】 第3章:进程

文章目录

  • 0.前言
  • 3.1进程概念
    • 3.1.1 进程
    • 3.1.2 进程状态
    • 3.1.3 进程控制块(PCB)
  • 3.2、进程调度
    • 3.2.1 调度队列
    • 3.2.2 调度程序
    • 3.2.3 上下文切换
  • 3.3 进程操作
    • 3.3.1 进程创建
    • 3.3.2 进程终止
  • 3.4 进程间通信

0.前言

早期的计算机一次只能执行一个程序。这种程序完全控制系统,并且访问所有系统资源。
相比之下,现代计算机系统允许加载多个程序到内存,以便并发执行。
这种改进要求:对各种程序提供更严的控制和更好的划分。
这些需求导致了**进程(process)**概念的产生,即进程为执行程序。进程是现代分时操作系统的工作单元。

3.1进程概念

3.1.1 进程

进程包含了程序代码和当前活动(其中当前活动通过程序计数器和处理器寄存器的内容表示)两个部分,进程是执行中的程序。具体有:

  • 文本段(代码段)
  • 数据段(全局变量)
  • 栈(stack)(包含临时数据、函数参数、返回地址、局部变量)
  • 堆(heap)(进程运行期间动态分配的内存)
  • 程序计数器

注意: 程序本身不是进程,是被动实体,进程是活动实体(其中当前活动通过程序计数器和处理器寄存器的内容表示).两个进程可以与同一程序联系,虽然文本段相同。但是数据段、堆栈段不同。

3.1.2 进程状态

进程有5种状态,包括:

  • New(新的):进程正在创建
  • Running(运行):指令正在执行
  • Waiting(等待):进程等待发生某个实践
  • Ready(就绪):进程等待分配处理器
  • Terminated(终止):进程已经执行完毕
    在这里插入图片描述

注意:一次只有一个进程能在一个处理器上运行(Running态),但在处理器上运行的时候,其他进程可以进行IO操作(想一下DMC模式)

3.1.3 进程控制块(PCB)

每一个进程都需要分配一定的信息,这些信息的仓库就叫做PCB,PCB有以下功能:

系统利用PCB 控制管理 进程
PCB是进程存在的唯一标志
操作系统通过PCB感知进程的存在

PCB中包含以下内容(信息)图3-3
进程状态(如下图3-4所述)
程序计数器:表示进程要执行的下个指令的地址
CPU寄存器:与程序计数器一起,在出现中断时状态信息需要保存,使进程能够正确执行
CPU调度信息:包括优先级、调度队列的指针等(见第五章)
内存管理信息:(见第八章)
记账信息:包括CPU时间、实际使用时间、时间界限、记账数据、作业和进程数量等
IO状态信息:分配给进程的IO设备列表,打开的文件列表等
在这里插入图片描述

3.2、进程调度

目的:使CPU的利用率最大化,需要优化进程调度的方法
进程调度程序选择一个进程到CPU上执行(一个CPU一个时间段只能执行一个程序,其余程序需要等待CPU空闲重新调度)

3.2.1 调度队列

  1. 作业(Job)队列:包含了系统中所有的进程
  2. 就绪(Ready)队列:包含了系统中,驻留在内存中就绪的,准备运行的进程
    该队列通常用链表实现,头结点指向第一个和最后一个PCB块的指针,每个PCB块包括指向下一个PCB的指针域
  3. 设备(Device)队列:包含了等待特定IO设备的进程列表,进程可能会有IO请求,请求时可能IO设备在处理其他请求,所以该进程需要等待。
    讨论进程调度的常用方法是队列图
    在这里插入图片描述
    其中包括了就绪队列和设备队列(可能有多个设备队列)
    在这里插入图片描述

3.2.2 调度程序

通常对于批处理系统,进程更多的是被提交、放到大容量存储设备的缓冲池中,保存在那里以便之后执行,在这之后,需要通过调度程序来选择缓冲池中的进程装入内存,并执行
进程选择由相应的调度程序执行,有两类调度程序:
长期调度程序(long-term schedule) / 作业调度程序(job schedule):负责从缓冲池中选择进程,装入内存以便执行
短期调度程序(short-term schedule) / CPU调度程序(CPU schedule):从执行的进程中选择进程,并为之分配CPU

有的系统,如分时系统,加入了中期调度程序(medium-term schedule),其核心思想是能将进程从内存(或CPU竞争中)移出,从而降低多道程序设计的难度,之后,进程可被重新调入内存,并从中断处执行。通过中期调度程序,进程可换出,并在之后换入,这种方案称为交换
在这里插入图片描述
各类进程调度的特点:

  • 长期调度程序执行的不频繁(进程创建期间可能间隔数分钟)
  • 短期调度程序执行的非常频繁(毫秒级),因此需要程序执行的速度非常快
  • 长期调度程序控制多道程序(multiprogramming)设计的程度,在稳定情况下,创建进程的速度应该等于进程离开系统的平均速度

进程的类型:

  • IO为主(就是操作主要是IO传输)
  • CPU为主(就是操作主要是各种运算)

3.2.3 上下文切换

中断使CPU从当前任务改变为运行内核子程序。当发生一次中断的时候,系统需要保存当前程序的上下文,在恢复程序时需要恢复程序的上下文。
将CPU切换到另一个进程需要保存当前程序的状态并恢复另一个程序的状态,这个任务叫做上下文切换
进程的上下文也就是进程的PCB,上文提到过它的组成。

上下文切换的类型:
状态保存(state save): 保存当前CPU的状态(不论是内核模式还是用户模式)
状态恢复(state restore): 重新开始之前保存的状态
上下文切换是额外开销,切换时系统不能做其他任何有用的工作。其消耗的时间为几毫秒,具体的时间消耗和硬件支持密切相关。
有的操作系统提供了多组寄存器集合,上下文切换只需要简单改变当前寄存器组的指针。

3.3 进程操作

绝大多数系统内的进程能够并发执行,并动态的创建和删除,因此操作系统应该提供一种机制来创建 / 终止进程(即进程操作)

3.3.1 进程创建

进程树:进程在执行过程中,能够继续创建进程(系统调用),创建进程的进程为父进程,被创建的进程是子进程,以此类推,形成了进程树
一般系统都有一个根进程,负责创建其他所有的进程,这样一个系统的进程树只有一棵

进程是需要一定的资源的(CPU时间,内存,文件,IO设备),在一个进程创建子进程的时候,在父进程和子进程之间需要分配 / 共享资源,有以下几种情况:

  • 从操作系统哪里获取资源
  • 从父进程中获取资源(限制子进程只能从父进程中获取资源能防止创建过多的进程导致系统超载)

在进程创建时,该进程会得到:

  • 各种物理和逻辑资源
  • 父进程传递来的初始化数据或输入
  • 通常子进程会返回给父进程自身的标识符(系统中唯一标识进程身份的id)

在进程执行时,有以下几种情况:

  • 父进程和子进程并发执行
  • 父进程等待,直到子进程执行完毕

创建的新进程的地址空间有两种可能:

  • 子进程是父进程的复制品(有相同的程序和数据)
  • 子进程内装入另一个新程序
    关于fork()和exec():

fork命令创建一个新的进程

  • exec命令在fork命令后执行,用于将新的程序装入进程的内存空间

3.3.2 进程终止

进程终止的时间:

  • 执行完最后语句,并使用系统调用exit()请求操作系统删除自身。
  • 一个进程通过适当的系统调用终止另一个进程(通常这个进程需要是被终止进程的父进程,并且这需要知道被终止进程的标识符)

父进程终止子进程的原因一般有:

  • 子进程使用的资源超过了父进程分配的资源
  • 分配给子进程的任务不再需要
  • 父进程退出,在这种情况下,操作系统不允许子进程继续.有些系统如果一个进程终止,那么它所有的子进程都终止。这叫做级联终止。通常有操作系统进行

进程终止后:
进程会返回状态值**(通常为整数)到父进程**
所有进程资源会被操作系统释放
如果父进程终止,那么其所有子进程会以init进程作为父进程。因此,子进程仍然有一个父进程来收集状态和执行统计

3.4 进程间通信

并发执行的进程有两类,一类是 独立进程,不能影响其他进程并且不被其他进程影响。
另一类是协作进程,能影响其他进程或被其他进程影响

允许进程协作的优点:

  • 信息共享
  • 提高运算速度
  • 模块化
  • 方便
    因此协作进程需要一种进程间通信机制(IPC)来允许进程相互交换数据与信息。有共享内存和信息传递两种类型:
    在这里插入图片描述
    共享内存系统
    比消息传递更快
    只在建立共享内存区时需要系统调用
    消息传递:
    不需要避免冲突
    通常需要系统调用实现,需要更多的内核介入的时间消耗

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mfbz.cn/a/432324.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

Nginx 可视化管理软件 Nginx Proxy Manager

一、简介 Nginx Proxy Manager 是一款开源的 Nginx 可视化管理界面,基于 Nginx 具有漂亮干净的 Web UI 界面。他允许用户通过浏览器界面轻松地管理和监控 Nginx 服务器,可以获得受信任的 SSL 证书,并通过单独的配置、自定义和入侵保护来管理…

备战蓝桥杯---动态规划的一些思想2

话不多说,直接看题: 1.换根DP: 我们肯定不能对每一个根节点暴力求,我们不妨先求f[1],我们发现当他的儿子作为根节点时深度和为f[1](n-cnt[i])-cnt[i](cnt[i]表示以i为根的节点数),这样子两遍DFS…

CSS的三种定位,web前端开发入门学习

正文 js逻辑判断 1)请写出下面的答案? 内存泄漏 1)哪些操作会造成内存泄漏? 2)js内存泄漏的解决方式 dom 1)dom是哪种基本的数据结构? 2)dom操作的常用api有哪些? 3)dom节点的attribute和property有何区别? 4)dom结构操作/ …

相机类型的分辨率长宽、靶面尺寸大小、像元大小汇总

镜头的靶面尺寸大于等于相机靶面尺寸。 相机的芯片长这样,绿色反光部分(我的手忽略): 基本所有像素的相机的靶面大小都可以在这个表格里面找到。 镜头的靶面尺寸在镜头外表上可以找到,选型很重要!

Mysql80服务无法启动请输入Net helpMsg3534以获得更多的帮助

起因&情景: 朋友正在操作数据库,然后电脑突然死机,再重启电脑后启动数据库服务报: 然后朋友尝试各种操作都没有办法正常启动, 一、网上解决方案:(先别操作) 1 删掉&#xff1a…

吴恩达deeplearning.ai:机器学习的开发过程与优化方法

以下内容有任何不理解可以翻看我之前的博客哦:吴恩达deeplearning.ai专栏 我想在接下来分析下开发机器学习系统的过程,这样当你自己动手时,能够做出更加正确的判断。 机器学习开发的迭代 Iterative loop of ML development 决定模型架构 第…

惯性导航 | 测量方程中的噪声模型与离散时间噪声模型

惯性导航 | 测量方程中的噪声模型与离散时间噪声模型 IMU测量方程中的噪声模型IMU的离散时间噪声模型 IMU测量方程中的噪声模型 在大多数系统中,IMU的噪声由两部分组成:测量噪声(Measurement Nosie)与零偏(Bias&#…

【Numpy】给数组增加一个维度

【Numpy】给数组增加一个维度 🌈 个人主页:高斯小哥 🔥 高质量专栏:Matplotlib之旅:零基础精通数据可视化、Python基础【高质量合集】、PyTorch零基础入门教程👈 希望得到您的订阅和支持~ 💡 创…

【Mining Data】收集数据(使用 Python 挖掘 Twitter 数据)

@[TOC](【Mining Data】收集数据(使用 Python 挖掘 Twitter 数据)) 具体步骤 第一步是注册您的应用程序。特别是,您需要将浏览器指向 http://apps.twitter.com,登录 Twitter(如果您尚未登录)并注册新应用程序。您现在可以为您的应用程序选择名称和描述(例如“Mining Demo”…

第九篇:– 过程发现(Process Discovery)是如何赋能数字化市场营销全过程?- 我为什么要翻译介绍美国人工智能科技巨头IAB公司

IAB平台,使命和功能 IAB成立于1996年,总部位于纽约市。 作为美国的人工智能科技巨头社会媒体和营销专业平台公司,互动广告局(IAB- the Interactive Advertising Bureau)自1996年成立以来,先后为700多家媒体…

MySql、Navicat 软件安装 + Navicat简单操作(建数据库,表)

一、MySql、Navicat 软件安装 及正常使用 MySql下载+安装: 检查安装情况: 配置环境变量: 搞定了!!! 可以登陆试哈哈哈 连接navicat 开始创建数据库 二、 商品种类表 - commoditytype int …

【排序算法】深入理解归并排序算法:从原理到实现

目录 1. 引言 2. 归并排序算法原理 3. 归并排序的时间复杂度分析 4. 归并排序的应用场景 5. 归并排序的优缺点分析 5.1 优点: 5.2 缺点: 6. Java、JavaScript 和 Python 实现归并排序算法 6.1 Java 实现: 6.2 JavaScript 实现&…

Mybatis-Plus——04,自动填充时间(新注解)

自动填充(新注解) 一、数据库添加两个字段二、实体类字段属性上增加注解三、编写填充器四、查看结果4.1 插入结果4.2 修改结果 五、同步修改5.1实体类属性改成 INSERT_UPDATE5.2 在填充器的方法这里加上 updateTime5.3 查看结果————————创作不易…

三色标记过程

可达性分析 GC过程中需要对对象图遍历做可达性分析。使用了三色标记法进行分析。 什么三色? 白色:尚未访问过。 黑色:本对象已访问过,而且本对象 引用到 的其他对象 也全部访问过了。 灰色:本对象已访问过&#xff0…

【HarmonyOS】Dev Eco Studio4.0开发工具下载SDK10

目录 点击创建项目 选择空项目(OpenHarmony),点击Next 此时SDK为10 点击 configure OpenHarmony SDK 创建一个新目录文件存放SDK,不要跟之前的SDK文件目录重合,点击Next 点击Next 勾选Accept,点…

板级PDN(电源分配网络)设计要点综述

目录 目标阻抗去耦方法 确定目标阻抗 确定目标频点 VRM 去耦电容 安装电感 平面电容 总结 去耦电容 PCB叠层设计 扩展阅读 目标阻抗去耦方法 确定PCB去耦方案的策略是使用频域目标阻抗法,通过层间电容和分立电容器组合的使用,保证电源轨阻抗在…

20240305-2-海量数据处理常用技术概述

海量数据处理常用技术概述 如今互联网产生的数据量已经达到PB级别,如何在数据量不断增大的情况下,依然保证快速的检索或者更新数据,是我们面临的问题。 所谓海量数据处理,是指基于海量数据的存储、处理和操作等。因为数据量太大无…

重量的定义、质量和重量之间的区别

一、简述 物体的重量取决于该物体所在空间点的引力场。重量是一种力,因此它是一个矢量,这意味着它有方向和大小。通过自由体图来表示物体重量产生的力通常很方便。 重量总是从物体的质心向下作用到地球中心。(如果你在不同的天体上&#xff0…

html实体字符,看完这篇彻底明白了

二.技术基础知识 基础知识一直都是重点考察的内容,包含有HTML(5)、CSS(3)、JavaScript到 戳这里领取完整开源项目:【一线大厂前端面试题解析核心总结学习笔记Web真实项目实战最新讲解视频】 Vue&#xff0…

C++对象模型剖析(六)一一Data语义学(三)

Data 语义学(三) “继承” 与 Data member 上期的这个继承的模块我们还剩下一个虚拟继承(virtual inheritance)没有讲,现在我们就来看看吧。 虚拟继承(Virtual Inheritance) 虚拟继承本质就是…