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

news2024/11/17 17:28:31

文章目录

  • 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.coloradmin.cn/o/1492580.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

c++复习

基础 内存分区 栈: 存放函数的局部变量、函数参数、返回地址等,由编译器自动分配和释放。 堆: 动态申请的内存空间,就是由 malloc 分配的内存块,由程序员控制它的分配和释放,如果程序执行结束还没有释放…

09. C语言内嵌汇编代码

C语言函数内可以自定义一段汇编代码,在GCC编译器中使用 asm 或 __asm__ 关键词定义一段汇编代码,并可选添加volatile关键字,表示不要让编译器优化这段汇编代码。 内嵌汇编代码格式如下: __asm__ ("汇编代码":输出描述…

Linux中给复杂命令起别名

目录 1 前言 2 操作步骤 2.1 打开.bashrc 2.2 编辑.bashrc-添加别名 2.3 使别名生效 1 前言 在linux中有些指令会比较长,为了便捷的使用它们,我们就可以采取起别名的方式,具体操作如下。 2 操作步骤 2.1 打开.bashrc 输入如下指令&a…

SAP PP学习笔记 - 豆知识08 - 如何修改价格

正常的品目修改用MM02。 新建一个品目之后,啥都没干,现在想修改一下价格,发现MM02 修改不了了。 1,MR21 这里注意 转记日付 要和会计期间一致。 比如我这里的会计期间是 2024/03 有关会计期间,可以参照如下文章&am…

【C++】类和对象之初始化列表与static成员

个人主页 : zxctscl 文章封面来自:艺术家–贤海林 如有转载请先通知 文章目录 1. 前言2. 再谈构造函数2.1 构造函数体赋值2.2 初始化列表2.3 explicit关键字 3. static成员3.1 概念3.2 特性 1. 前言 在前面的博客中已经分享有关构造函数 【C】构造函数和…

DHCP自动获取IP地址实验(华为)

思科设备参考&#xff1a;DHCP自动获取IP地址实验&#xff08;思科&#xff09; 一&#xff0c;实验目的 路由器搭载DHCP&#xff0c;让PC通过DHCP自动获取IP地址 二&#xff0c;不划分vlan--全局地址池 实验拓扑 配置命令 Router <Huawei>system-view [Huawei]ip po…

JRebel and XRebel 插件在IDEA中的安装、激活和使用

1、JRebel安装 1、打开idea->setting->plugins->Marketplace 2、搜索插件JRebel and XRebel&#xff0c;点击安装&#xff0c;然后重启idea 如果左侧出现JRebel & XRebel代表已安装 3.离线安装JRebel 根据自己安装的idea版本进行下载电影的jrebel https://plugi…

表达式求值(中序遍历,)

题目描述&#xff1a; 分析&#xff1a; 此题是acwing的一个模板例题&#xff0c;利用中缀遍历解决&#xff0c;即可。 思路&#xff1a; 首先我们先了解一下什么是树的中序遍历&#xff1f; 中序遍历是 二叉树遍历 的一种&#xff0c;也叫做 中根遍历 、中序周游。 在二叉树中…

重头戏:盒子模型(box-model)

盒子模型(box-model): CSS处理网页时,他认为每一个标签都包含在一个不可见的盒子里面,如果我们将所有的标签都想象成盒子,那么我们对网页的布局就相当于是拜访盒子,我们只需要将相应的盒子摆放在网页中相应的位置就可以完成布局 盒子模型: 一个盒子我们往往会分成: 内容区(…

无法启动报,To install it, you can run: npm install --save @/components/iFrame/index

运行的过程中后台报错 npm install --save /components/iFrame/index&#xff0c;以为是安装三方依赖错误&#xff0c;经过多次重装node_modules依然没有用。 没办法&#xff0c;只能在项目中搜索 components/iFrame/index这个文件。。突然醒悟。。。 有时候&#xff0c;犯迷…

I.MX6ULL_Linux_驱动篇(54)linux 块设备驱动

前面我们都是在学习字符设备驱动&#xff0c;本章我们来学习一下块设备驱动框架&#xff0c;块设备驱动是Linux 三大驱动类型之一。块设备驱动要远比字符设备驱动复杂得多&#xff0c;不同类型的存储设备又对应不同的驱动子系统&#xff0c;本章我们重点学习一下块设备相关驱动…

CSS块元素,CSS的伪类和伪元素

学习建议 在你开始入手学习前&#xff0c;有一些小的建议。根据我自己学习的经验发现&#xff0c;这些建议在现在乃至我以后的岗位生涯里都是有很大帮助的。还有就是开始学习前&#xff0c;建议可以先花几天时间&#xff0c;查找一些如何入门的文章&#xff0c;通过对许多文章…

linux系统Jenkins工具配置webhook自动部署

Jenkins工具webhook自动部署 webhook自动部署webhook的意义操作流程jenkins页面操作gitlab页面操作 webhook自动部署 webhook的意义 自动化部署&#xff1a;Webhook 可以在代码提交、合并请求或其他特定事件发生时自动触发 Jenkins 构建和部署任务&#xff0c;从而实现自动化…

CSS的标准文档流,web设计与开发

CSS篇 让一个元素水平垂直居中&#xff0c;到底有多少种方案&#xff1f;浮动布局的优点&#xff0c;缺点&#xff1f;清除浮动的方式&#xff1f;使用display:inline-block会产生的问题&#xff1f;解决方法&#xff1f;布局题&#xff1a;div垂直居中&#xff0c;左右10px&a…

如何关闭远程桌面连接

远程桌面连接是一种方便的技术&#xff0c;可以让用户通过网络远程访问其他计算机的桌面界面。有时候我们可能需要关闭这个连接。本文将向你介绍如何关闭远程桌面连接。 关闭远程桌面连接的步骤 要关闭远程桌面连接&#xff0c;按照以下步骤操作&#xff1a; 打开远程桌面连接…

机器学习-面经(part6、集成学习)

10 集成学习 定义:通过结合多个学习器(例如同种算法但是参数不同,或者不同算法),一般会获得比任意单个学习器都要好的性能,尤其是在这些学习器都是"弱学习器"的时候提升效果会很明显。 10.1 Boosting(提升法) 可以用于回归和分类 问题,它每一…

关于出国留学和考研比较----以本人双非跨考计算机为例

文章目录 中心论点国内就业现状勿让旧认知害了自己那出国留学真的一无是处了吗?1. 藤校仍旧是具有极高价值2. 时间成本低3. 研究生一定比单纯的本科找工作强!4. 很多人说出国读博好,可以无脑入,真是这样吗? 中心论点 如果在选择出国留学还是国内考研的最终核心诉求都是有更好…

Luajit 2023移动版本编译 v2.1.ROLLING

文章顶部有编好的 2.1.ROLLING 2023/08/21版本源码 Android 64 和 iOS 64 luajit 目前最新的源码tag版本为 v2.1.ROLLING on Aug 21, 2023应该是修正了很多bug, 我是出现下面问题才编的. cocos2dx-lua 游戏 黑屏 并报错: [LUA ERROR] bad light userdata pointer 编…

CSS盒模型居中方法,web小程序开发工具

面试知识点 主要内容包括html&#xff0c;css&#xff0c;前端基础&#xff0c;前端核心&#xff0c;前端进阶&#xff0c;移动端开发&#xff0c;计算机基础&#xff0c;算法与数据结构&#xff0c;设计模式&#xff0c;项目等等。 html 1.浏览器页面有哪三层构成&#xff0c…

在Vue中搭建Three.js环境(超详细、保姆级),创建场景、相机、渲染器《一》

目录 Three.js简介创建vue项目引入Three.js实际操作环节文件目录创建初始化场景、相机 Three.js简介 Three.js 是一款基于 WebGL的 JavaScript 3D 库&#xff0c;它封装了 WebGL API&#xff0c;为开发者提供了简单易用的 API 来在 Web 浏览器中展示 3D 图形。Three.js 提供了…