操作系统(1) (进程属性/内存映像/进程状态/PCB/上下文切换)

news2024/12/29 16:15:10

目录

1. 进程及其实现

2. 没有进程概念之前的系统

3. 进程的属性

4. 进程的内存映像

5. 进程状态及其转换

6. 进程描述与操作控制结构

操作控制结构: 操作系统使用数据结构来记录进程和系统资源的状态:

进程控制块(PCB): 是操作系统用来管理进程的关键数据结构,包含了进程标识信息、状态信息和控制信息,是操作系统实现多任务处理的核心。

7. 进程管理

8. 上下文切换

上下文切换的步骤:

9. 系统调用(System Call)


1. 进程及其实现

  • **进程(Process)**是一个正在运行的程序实例,具有自己的内存空间、资源和执行状态。它是操作系统资源管理的基本单位。
  • 与**程序(Program)**不同,程序是存储在磁盘上的静态代码,而进程是程序在运行时的动态实体,包括可执行代码、输入、输出以及分配的资源。

2. 没有进程概念之前的系统

  • 串行处理(Serial Processing):
    • 没有操作系统的早期计算机通过物理开关或穿孔卡输入程序,并由人工调度。程序顺序执行,缺乏自动化和内存保护。
  • 批处理(Batch Processing):
    • 将一组作业收集在一起按顺序执行。早期的批处理系统使用**作业控制语言(JCL)**来指定作业的执行指令。整个系统在任何时候只能运行一个程序,不存在多任务并发。

3. 进程的属性

  • 进程属性: 包括程序代码、输入数据、输出结果以及进程控制结构(如进程控制块PCB)。
  • 示例: 一个未运行的程序(如磁盘上的notepad.exe)只是一个静态实体;当用户打开它时,操作系统将它加载到内存,分配资源,形成一个活跃的进程,可以与系统进行交互。

4. 进程的内存映像

  • 运行中的进程在内存中占用特定空间,由以下几个主要段组成:
    • 文本段(Text Segment): 存储程序的可执行代码,是只读的。
    • 数据段(Data Segment): 存储全局变量、常量和静态变量。
    • 堆段(Heap Segment): 用于动态内存分配,存储通过malloc或new分配的内存。
    • 栈段(Stack Segment): 用于管理函数调用、局部变量、参数和返回地址。

5. 进程状态及其转换

  • 进程的状态包括:新建(New就绪(Ready运行(Running等待(Waiting)和终止(Terminated
  • 状态转换: 进程在执行过程中会根据不同的事件(如 I/O 完成、系统调用、中断等)在这些状态之间进行转换。例如,从“就绪”到“运行”是由调度程序分配 CPU 导致的,从“运行”到“等待”是因为等待 I/O 操作。
  • 操作系统使用状态转换图来管理和调度多任务环境中的进程。

  • 进程在执行过程中会在不同的状态之间进行转换。常见的转换包括:

    • New → Ready(新建到就绪):
      当一个进程被创建后,操作系统将它加入到就绪队列,等待执行。这是进程从“新建”状态进入“就绪”状态的转换。
    • Ready → Running(就绪到运行):
      当调度程序选择某个就绪进程并将其分配到CPU上时,进程进入“运行”状态,开始执行指令。
    • Running → Waiting(运行到等待):
      如果进程需要等待某个事件(如等待I/O操作完成或进行系统调用),它会从“运行”状态切换到“等待”状态。此时,CPU将被释放给其他就绪进程。
    • Waiting → Ready(等待到就绪):
      当等待的事件(如I/O操作)完成时,进程会从“等待”状态转换到“就绪”状态,准备再次被调度执行。
    • Running → Ready(运行到就绪):
      进程被抢占(preempted)时发生,例如当一个定时器中断触发,操作系统决定暂停当前进程,将CPU分配给其他更高优先级的进程。此时,进程从“运行”状态返回到“就绪”状态,等待下一次被调度。
    • Running → Terminated(运行到终止):
      当进程完成任务或遇到异常时,会从“运行”状态进入“终止”状态。此时,操作系统会进行资源回收和清理。

6. 进程描述与操作控制结构

  • 操作控制结构: 操作系统使用数据结构来记录进程和系统资源的状态:

    • 进程表(Process Tables): 是一组**进程控制块(PCB)**的集合,记录每个进程的详细信息。
    • 内存表、I/O 表、文件表: 跟踪系统内存、输入/输出设备和文件的状态。
  • 进程控制块(PCB): 是操作系统用来管理进程的关键数据结构,包含了进程标识信息、状态信息和控制信息,是操作系统实现多任务处理的核心。

  • PCB包含的三类属性:
    1. 进程标识信息(Process Identification):
      • 进程IDPID): 系统为每个进程分配的唯一标识符,用于区分不同的进程。
      • 用户IDUID): 表示拥有该进程的用户,有助于确定进程的权限和操作范围。
      • 父进程IDPPID): 指示创建该进程的父进程,用于管理进程间的关系和层次结构。
    2. 进程状态信息(Process State Information):
      • 进程状态: 当前进程的状态,如就绪、运行、等待、阻塞或终止。
      • 程序计数器(PC): 保存进程下一条将要执行的指令的地址,

便于在上下文切换后继续执行。

  • CPU寄存器: 包括累加器、索引寄存器、堆栈指针和通用寄存器的当前值,

用于保存进程暂停时的执行状态,以便在切换回来时恢复。

  1. 进程控制信息(Process Control Information):
    • 调度信息(Scheduling Information): 包括优先级、调度队列指针和其他调度算法

所需的信息(如轮转调度、优先级调度)。

  • 内存管理信息(Memory Management Information): 包括进程的内存分配信息,

例如:

  • 基址寄存器和限长寄存器: 定义进程可使用的地址空间范围。
  • 页表(Page Tables): 如果系统使用虚拟内存,则用页表映射逻辑地址到物理地址。
  • 段表(Segment Tables): 在分段内存系统中,定义进程的各个内存段。
  • I/O状态信息: 包含进程打开的文件列表、分配的I/O设备以及指向I/O缓冲区的指针。
  • 计费信息(Accounting Information): 跟踪进程的资源使用情况,如CPU时间、内存占用、I/O操作,用于性能评估和系统计费。
  • 进程权限(Process Privileges): 定义进程的权限,例如可以访问哪些系统资源,允许执行哪些操作(如读取文件、访问I/O设备)。
  • 信号和标志(Signals and Flags): 表示进程收到的信号或标志,如中断信号、终止信号或系统警报。

7. 进程管理

  • 操作系统在进程管理中的职责:
    • 管理 PCB:创建、维护和更新每个进程的状态、资源和执行信息。
    • 进程的创建与终止:根据需要创建新进程,或在执行完成后终止进程。
    • 进程切换:在不同进程之间切换,以实现多任务处理。
    • 提供用于进程管理的系统调用:包括fork()、exec()、wait()和exit()等。

8. 上下文切换

  • 上下文切换(Context Switching): 是操作系统在多个进程之间共享 CPU 的机制。涉及保存当前进程状态(如程序计数器、寄存器)到 PCB 中,然后加载另一个进程的状态,实现多任务处理。

上下文切换的步骤:

  • 图中显示了两个进程:进程 P₀进程 P₁,以及操作系统在两者之间进行上下文切换的过程。
  • 执行状态(executing): 竖线上的黑色部分表示当前进程正在运行,CPU 正在执行该进程的指令。
  • 空闲状态(idle): 竖线上的白色部分表示当前进程处于空闲状态(idle),等待 CPU 资源。
  • 触发上下文切换(interrupt or system call):
    • 上下文切换通常由中断(如定时器中断)或系统调用(如 I/O 请求)触发。当触发事件发生时,当前正在执行的进程(如 P₀)会被中断,操作系统开始进行上下文切换。
  • 保存当前进程状态(save state into PCB₀):
    • 操作系统保存当前进程(P₀)的状态,包括程序计数器(Program Counter)和 CPU 寄存器的值。这个状态信息会被存储到进程的**进程控制块(PCB₀)**中,以便稍后可以恢复该进程的执行。
  • 更新 PCB 状态:
    • 当前进程的 PCB 状态更新为 "ready"(就绪),并被移动到相应的队列中(如就绪队列或阻塞队列)。
  • 运行调度程序(Run scheduler, select new process):
    • 操作系统中的调度程序运行,选择下一个要执行的进程(如 P₁)。
  • 加载新进程状态(reload state from PCB₁):
    • 操作系统从新选中的进程(P₁)的 PCB 中恢复其状态,将其程序计数器和寄存器等信息重新加载到 CPU 中。
  • 更新 PCB 和内存结构:
    • 新进程的 PCB 状态被更新为 "running"(运行中),并更新相关的内存结构,以便新进程在下一个时间片内正常执行。
  • 恢复进程(restore process):
    • 新进程(P₁)开始执行,进入运行状态。
  • 触发条件: 上下文切换通常由中断或系统调用触发,如 I/O 请求、定时器中断等。

9. 系统调用(System Call

  • 系统调用是用户程序与操作系统交互的接口,用户通过系统调用请求操作系统提供的服务(如进程管理、文件操作、内存分配等)。
  • 本节介绍了用于进程管理的关键系统调用:
    • fork()创建一个新的子进程,子进程是当前进程的副本。
    • exec()用于替换当前进程的内存映像,执行一个新的程序。
    • exit()用于进程正常退出。
    • wait()父进程使用它等待子进程完成。

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

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

相关文章

libmodbus编程应用(超详细源码讲解)

目录 前言 libmodbus开发库 1.功能概要 2.源码获取 3.libmodbus与应用程序的关系 libmodbus源代码解析 1.核心函数 2.框架分析与数据结构 3.情景分析 (1)初始化 (2)主设备发送请求 (3)主/从设备…

【Adobe PR】Adobe Premiere Pro 快捷键介绍

Adobe Premiere Pro (简称PR) 是一款广泛使用的视频编辑软件,熟练掌握其快捷键可以显著提高编辑效率。下面是整理的一些常用的Adobe Premiere Pro快捷键,适用于Windows和Mac操作系统。对于Mac用户,除非特别指出,通常可以将Ctrl键替…

视频画面变糊是平台在做手脚吗?

人气视频博主“影视飓风”一条新发布的视频被全网下架,这两日更是引起轩然大波,不仅频上热门,甚至还有不少数码与视频同行为其抱不平。那么影视飓风到底发布了一条什么视频?又为何会惨被全网下架呢? 10月8日&#xff0…

Android Studio Ladybug使用经典主题UI

背景 Android Studio Ladybug | 2024.2.1 默认使用new ui,但是已经找不到之前经典主题了。 通过插件方式设置经典主题 打开设置。Plugins。 在Marketplace中搜索:Classic UI 下面的截图是我已经安装完成的。 插件安装完成了,重启as即可。…

闭着眼学机器学习——K近邻分类

引言: 在正文开始之前,首先给大家介绍一个不错的人工智能学习教程:https://www.captainbed.cn/bbs。其中包含了机器学习、深度学习、强化学习等系列教程,感兴趣的读者可以自行查阅。 1. 算法介绍 K近邻(K-Nearest Neighbors, KNN…

ScriptableObject基本使用

使用方法 自定义类继承ScriptableObject 可以在类内部增加数据或者数据类,一般用于配置 注意事项 给继承ScriptableObject的类增加CreateAssetMenu特性。 CreateAssetMenu一般默认三个参数 第一个参数是父目录 第二个参数是父目录的子选项 第三个参数是可以…

虚幻闪烁灯光材质

创建一个材质 材质域改成光照函数 , Time让材质动起来 参数B用来控制速度 , Sine 让灯光闪烁 , Frac 增加了闪烁细节 把材质放到灯光材质上 效果还是挺不错的! 可以用于一些恐怖游戏~

FileZilla的简单使用

FileZilla的下载与安装以及简单使用(有图解超简单)-CSDN博客 参考这篇文章。 我在Window下安装了客户端,在虚拟机下启动Ubuntu,启用了Ubuntu的FTP服务。 按照该文章的流程进行下去,成功的把客户端上的文件上传到了F…

STM32学习--6-1 定时器定时中断

定时器电路图 第一步:RCC开启时钟,基本上每个代码都是第一步 第二步:选择时基单元的时钟源(内部时钟) 第三步:配置时基单元,包括预分频器、自动重装器、计数模式等,通过结构体配置…

Dockerfile(Jenkins)

1.创建⼀个jenkins的Dockerfile mkdir tomcat cd tomcat 2、上传需要的安装包 apache-tomcat-8.5.47.tar.gz jdk-8u211-linux-x64.tar.gz jenkins.war 3、编写Dockerfile vim Dockerfile # This my first jenkins Dockerfile # Version 1.0 FROM centos:7 MAINTAINER l…

Echarts+vue3+高德渲染地图

Echartsvue3高德渲染地图 一&#xff1a;安装 npm install echarts二&#xff1a;渲染地图 1. html <template><div class"content"><div ref"myChartsRef" id"map" style"width: 100%;height: 560px;" ></d…

JAVA自动化测试TestNG框架

1.TestNG简介 JAVA自动化测试最重要的基石。官网&#xff1a;https://testng.org 使用注解来管理我们的测试用例。 发现测试用例 执行测试用例 判断测试用例 生成测试报告 2.创建Maven工程 2.1创建一个maven工程 2.2设置maven信息 2.3设置JDK信息 2.4引入testng依赖 <dep…

Linux下Docker方式Jenkins安装和配置

一、下载&安装 Jenkins官方Docker仓库地址&#xff1a;https://hub.docker.com/r/jenkins/jenkins 从官网上可以看到&#xff0c;当前最新的稳定版本是 jenkins/jenkins:lts-jdk17。建议下在新的&#xff0c;后面依赖下不来 所以&#xff0c;我们这里&#xff0c;执行doc…

达梦数据库性能优化

1、SQL执行计划 拿到一条SQL的时候&#xff0c;首先要下达梦手册中提出的有效SQL规范&#xff0c;及是否命中了特殊OR子句的不规范&#xff0c;是否用了复杂的正则表达式&#xff0c;避免重复很高的索引&#xff0c;UINON ALL 是否可以替换UNION操作等,某些场景INSTR函数导致的…

FunASR离线文件转写服务开发指南-debian-10.13

FunASR离线文件转写服务开发指南-debian-10.13 服务器环境 debian10.13 64位 第一步 配置静态网卡 auto eth0 iface eth0 inet static address 192.168.1.100 netmask 255.255.255.0 gateway 192.168.1.1 dns-nameservers 8.8.8.8 8.8.4.4/etc/init.d/networking restart第…

C++面试速通宝典——25

473. HTTP如何减少重定向请求 重定向请求&#xff1a; ‌‌‌‌  服务器上的一个资源可能由于迁移、维护等原因从url1移至url2后&#xff0c;而客户端不知情&#xff0c;他还是继续请求url1&#xff0c;这时服务器不能粗暴地返回错误&#xff0c;而是通过302响应码和Locati…

甲方安全和乙方安全的区别

信息安全工作&#xff0c;总会被人分成甲方和乙方&#xff0c;甲乙方原本只是商务层面需方和供方的代称&#xff0c;在安全领域&#xff0c;成了做公司内部安全和为客户提供安全的区别。 通常意义上&#xff0c;什么是甲方安全人员呢&#xff1f;就是在非安全业务的公司从事信…

ROS2 通信三大件之动作 -- Action

通信最后一个&#xff0c;也是不太容易理解的方式action&#xff0c;复杂且重要 1、创建action数据结构 创建工作空间和模块就不多说了 在模块 src/action_moudle/action/Counter.action 下创建文件 Counter.action int32 target # Goal: 目标 --- int32 current_value…

[Python学习日记-45] Python 中模块的介绍与导入

[Python学习日记-45] Python 中模块的介绍与导入 简介 模块的概念与好处 模块的分类 模块导入和调用 自定义模块 模块的查找路径 简介 在前面的学习当中偶尔我们会看到 import ... 一个什么东西的&#xff0c;或者 from ... import ...&#xff0c;那时候并没有进行介绍&…

react+ts+vite 别名一直爆红问题

已经配置如下代码安装了types/node import path from "path"; // https://vitejs.dev/config/ export default defineConfig({plugins: [react()],server: {proxy: {"/api": {target: "http://localhost:3000",changeOrigin: true,rewrite: (pa…