【操作系统概念】 第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.hqwc.cn/news/513713.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

安泰ATA-P1005压电叠堆放大器在纳米定位台驱动中的应用

纳米定位台是一种高精度的微纳米级定位设备,主要用于微纳米加工、显微镜下的样品定位、纳米精度的测量和调试等领域。内置高性能压电陶瓷,运动范围可达500μm,具有体积小、无摩擦、响应速度快、高精度位移等特点,ATA-P1005压电叠堆…

stm32学习笔记:I2C通信外设原理(未完)

软件实现和硬件实现 串口通信为异步时序,用软件实现很麻烦,基本上用硬件实现 而I2C协议通信为同步时序,软件实现简单且灵活,硬件实现比较麻烦,故软件比较常用 但I2C硬件实现功能比较大,执行效率高&#xff…

【Proteus仿真】【Arduino单片机】坐姿矫正提醒器设计

文章目录 一、功能简介二、软件设计三、实验现象联系作者 一、功能简介 本项目使用Proteus8仿真Arduino单片机控制器,使用LCD1602液晶显示模块、HC-SR04超声波模块、蜂鸣器、按键、人体红外传感器等。 主要功能: 系统运行后,LCD1602显示超声…

Linux运维:在线/离线安装Telnet客户端和Telnet服务

Linux运维:在线/离线安装Telnet客户端和Telnet服务 前言1.1 在线安装Telnet1.2 离线安装Telnet1.3 Telnet服务有关的命令 💖The Begin💖点点关注,收藏不迷路💖 前言 Telnet是一种用于远程登录到其他计算机的协议&…

未来已来!AI大模型引领科技革命

未来已来!AI大模型正以惊人的速度引领着科技革命。随着科技的发展,人工智能在各个领域展现出了非凡的能力和潜力,大模型更是成为了科技领域的明星。从自然语言处理到图像识别,从智能推荐到语音识别,大模型的应用正在改…

Nuxt2升级Nuxt3指南(一):升级准备

一、项目环境说明 升级前:Node: 14.19.1; Nuxt:2.12.2;Vue:2.6.11;Element-UI:2.4.11 升级后: Node: 18.14.0 ; Nuxt: 3.10.3;Vue:3.4.19;Element-Plus&#…

分布式数字身份:通往Web3.0世界的个人钥匙

数字化时代,个人身份已不再仅仅局限于传统形式,分布式数字身份(Decentralized Identity,简称DID)正崭露头角,它允许个人通过数字签名等加密技术,完全掌握和控制自己的身份信息。研究报告显示&am…

Polar 写shell

Polar 写shell 直接给了源码 还是没啥好说的&#xff0c;考点是die()死亡函数绕过之不同变量 **绕过原理&#xff1a; **通过base64解密或rot13解密使"<?php exit();"变为乱码&#xff0c;而传入的$content为base64编码&#xff0c;解码后为正常shell语句。通过…

智慧城市中的数字孪生:构建城市管理的未来框架

目录 一、引言 二、数字孪生技术概述 三、数字孪生技术在智慧城市中的应用 1、实时监测与预警 2、模拟与优化 3、智能化决策 4、协同与共享 四、数字孪生技术构建城市管理的未来框架的价值 1、提高管理效率 2、优化资源配置 3、提升公共服务水平 4、增强应对突发事…

K8s集群调度,亲和性,污点,容忍,排障

目录 1.调度约束 调度过程 指定调度节点 查看详细事件 获取标签帮助 修改成 nodeSelector 调度方式 2.亲和性 节点亲和性 Pod 亲和性 键值运算关系 硬策略 软策略 Pod亲和性与反亲和性 创建一个标签为 appmyapp01 的 Pod 使用 Pod 亲和性调度&#xff0c;创建多…

32单片机基础:TIM输入捕获

指定的电平跳变&#xff0c;就是上升沿或者下降沿&#xff0c;可以通过程序设置 PWMI模式&#xff0c;就是PWM的输入模式&#xff0c;是专门为测量PWM频率和占空比设计的&#xff0c; 可配合主从触发模式 这两个功能结合起来&#xff0c;测量频率占空比就是硬件全自动运行的…

分类算法入门:以鸢尾花数据集为例

近两年人工智能技术蓬勃发展&#xff0c;OpenAI连续放出ChatGPT、Sora等“王炸”产品&#xff0c;大模型、AIGC等技术带来了革命性的提升&#xff0c;很多人认为人工智能将引领第四次工业革命。国内各大互联网公司也是重点投资布局&#xff0c;从个人角度来说要尽快跟上时代的潮…