《操作系统 - 清华大学》8 -1:进程的组成

文章目录

  • 1. 进程的组成
  • 2. 进程与程序的联系
  • 3. 进程与程序的区别
  • 4. 进程与程序关系

1. 进程的组成

在这里插入图片描述
进程具体包含哪些东西:

  1. 首先要执行相应的代码,所以执行代码需要放到内存中
  2. 代码执行需要处理数据,数据需要放到内存中
  3. 需要知道现在要执行哪条指令,需要一个相应的记录,用程序计数器表示,程序计数器存着下一条要执行指令在什么地方
  4. 同时在处理过程中会用到大量 CPU 寄存器,寄存器会在动态变化
  5. 还有会用到很多计算机提供的资源,包含内存资源,文件系统,网络等等一系列资源

总之,进程在执行过程中包含了正在运行的程序的所有状态信息,状态信息是比较抽象的概念。

2. 进程与程序的联系

在这里插入图片描述
进程不等于程序,进程是动态执行过程,而程序是静态代码。

  • 程序和进程到底什么样关系?

    程序是产生进程的基础,因为进程执行的所有功能其实在程序中有具体的描述,进程执行功能受制于程序代码,代码已经限制了进程到底实现什么样的功能,所以说程序是产生进程的基础。

    另一方面,程序的每次执行构成不同进程,其实可以看到程序只有一份,它放在硬盘中,但可以多次执行这个程序,多次执行程序得到结果不一定是一样的,因为数据可以不一样,当这个程序在运行过程中,它在内存中处理的数据是不一样,那有可能导致它产生行为不一样,这也意味着一个程序多份执行的时候,由于有可能处理的数据不一样,它获得的资源不一样,那么最后得到效果也是不一样,所以说程序的每一次执行,构成不同的进程,而不是同一个进程。

不管怎么说,进程的执行过程是程序功能的体现,虽然可能输入不一样,导致输出不一样,但整体的功能体现是一样。

通过多次执行,一个程序可以应对多个进程,通过调用关系一个进程也可以包含多个程序,因为有可能多个程序合在一起来完成一个更大的功能体现,可以看到进程和程序之间是一种比较复杂的多对多的映射关系。

3. 进程与程序的区别

在这里插入图片描述
进程是动态的体现,而程序是静态的代码,程序是有序代码的集合,进程是程序的执行,所以说进程实际上是程序的具体体现。进程在执行过程中需要注意有核心态和用户态度区分,核心态在操作系统中运行,但是写代码时候并没写操作系统代码,那为什么有核心态呢?写代码都是运行在用户态,那为什么有核心态存在?其实进程在执行中需要去完成特定功能,功能只有操作系统才能提供,比如说要读文件,读写文件的过程涉及到跟具体硬盘打交道,那这过程全是操作系统来完成,所以说进程只需给操作系统发出请求,操作系统代表进程在内核中执行,这时候说进程处于核心态,因为它在内核中执行。

进程是暂时的,而程序是永久的。执行一个程序,以进程形式在内存中运行,占用 CPU 运行,整个过程有开始到结束的变化过程,过程结束之后进程就结束了。但程序不一样,程序保存在硬盘中,只要硬盘不坏,程序可以长久地保存。

在具体组成方面也有不一样的地方,虽然说进程用到程序的代码段、数据段等数据结构,但进程执行中有其它一些变化,处理数据的时候,数据在变,而这一点在程序的组成中是不存在的,比如它处理输入数据,最后产生输出数据,以及为了管理这个进程,操作系统所建立进程控制块等等,这些信息在程序中是没有的。所以应该说进程包含了程序部分,还包含一些新的部分。

4. 进程与程序关系

在这里插入图片描述

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

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

相关文章

【Java】String类API

创建字符串 字符串字面量"Hello"高效,常量池复用常见、简单的字符串创建 new 关键字new String("Hello")每次创建新对象,性能开销较高显式创建新对象 字符数组new String(char[])转换字符数组字符数组转字符串 StringBuilder/St…

数据结构初阶---二叉树---堆

一、树 1.树的概念 树是一种非线性的数据结构,由n(n≥0)个有限结点组成的一个有层次关系的集合。形状类似一棵倒挂的树,根朝上,分支向下。 根结点没有前驱结点,可以有n(n≥0)个后继结点。 其余结点被分为M个互不相交的集合&am…

CocosCreator对配置文件加密

一、加密 1.首先假设你已经将Excel表格数据导出为了json数据 2.然后可以通关nodejs对其进行xor加密 const fs require(fs);// 读取配置文件 const path "hero_info.json"; const data fs.readFileSync(path, utf-8); const jsonObject JSON.parse(data);// XO…

学习 Dockerfile 常用指令

学习 Dockerfile 常用指令 在构建 Docker 镜像时,Dockerfile 文件是一份至关重要的配置文件,它定义了构建镜像的所有步骤。通过在 Dockerfile 中使用不同的指令(命令),我们可以控制镜像的构建过程、设置环境、指定执行…

D95【python 接口自动化学习】- pytest进阶之fixture用法

day95 pytest的fixture详解(二) 学习日期:20241210 学习目标:pytest基础用法 -- pytest的fixture详解(二) 学习笔记: fixture(autouseTrue) func的autouse是TRUE时,所有函数方法…

C语言 字符串输入输出函数、scanf(“%[^\n]“,)可输入空格 、fgets删除换行符

字符串输入函数: scanf("%s",数组名) gets(数组名) fgets() --- 文件流输入函数 函数原型: int scanf( const char *format, ...…

深度学习camp-第J4周:ResNet与DenseNet结合探索

🍨 本文为🔗365天深度学习训练营 中的学习记录博客🍖 原作者:K同学啊 本周任务: 探索ResNet和DenseNet的结合可能性本周任务较难,我们在chatGPT的帮助下完成 一、网络的构建 设计一种结合 ResNet 和 Den…

「iOS」通过CoreLocation Framework深入了解MVC架构

「iOS」通过CoreLocation Framework重新了解多界面传值以及MVC架构 文章目录 「iOS」通过CoreLocation Framework重新了解多界面传值以及MVC架构前言CoreLocation了解根据需求建模设计属性方法设计协议传值Block传值KVONotification通知方式 总结参考文章 前言 在这个学期的前…

Debezium系列之:使用Debezium采集oceanbase数据库

Debezium系列之:使用Debezium采集oceanbase数据库 一、oceanbase数据库二、安装OceanBase三、安装oblogproxy四、基于Docker的简单采集案例五、生产实际应用案例Debezium 是一个开源的分布式平台,用于监控数据库变化和捕捉数据变动事件,并以事件流的形式导出到各种消费者。D…

线程sleep的时候会释放锁吗

来看一段代码&#xff1a; void task1(mutex &m) {cout << "thread 1 init..." << endl;{std::unique_lock<mutex> lock(m);cout << "thread 1 getLock" << endl;sleep(5);}cout << "thread 1 freeLock&quo…

wordpress建站--如何用Let‘s Encrypt给网站添加免费ssl证书,支持https访问

本文首发网站&#xff1a;https://www.click234.com 默认情况下我们的网站是http访问&#xff0c;为了增加访问安全性&#xff0c;我们需要添加ssl证书&#xff0c;支持采用https方式访问&#xff0c;今天我们来看下怎么创建免费的ssl证书--Lets Encrypt 使用 Certbot 自动化工…

青少年编程与数学 02-004 Go语言Web编程 02课题、依赖管理

青少年编程与数学 02-004 Go语言Web编程 02课题、依赖管理 课题摘要:一、项目结构各目录说明&#xff1a; 二、依赖项三、依赖管理任务四、依赖管理步骤1. 初始化Go Modules项目2. 添加依赖3. 指定依赖版本4. 更新依赖5. 清理未使用的依赖6. 离线工作7. 模块隔离8. 可重现构建 …

Debezium OracleConnection 分析

Debezium OracleConnection 分析 目录 1. 概述2. 核心功能3. 实现分析4. 使用场景5. 示例分析6. 最佳实践7. 总结1. 概述 OracleConnection 是 Debezium Oracle 连接器中的数据库连接管理组件,主要负责: 数据库连接的建立和管理事务控制查询执行元数据操作LogMiner 会话管理…

【每日一练 基础题】[蓝桥杯 2022 省 A] 求和

[蓝桥杯 2022 省 A] 求和 暴力破解会超时,用因式分解的平方差公式 a2 2abb2(a)2 a-2abb2(a-b)2 输出整数((a1a2a3…an)-a1-a2-a3-…-an)/2 import java.util.Scanner;public class Main {public static void main(String[] args) {Scanner scanner new Scanner(System.in);l…

ArrayList源码分析、扩容机制面试题,数组和List的相互转换,ArrayList与LinkedList的区别

目录 1.java集合框架体系 2. 前置知识-数组 2.1 数组 2.1.1 定义&#xff1a; 2.1.2 数组如何获取其他元素的地址值&#xff1f;&#xff08;寻址公式&#xff09; 2.1.3 为什么数组索引从0开始呢&#xff1f;从1开始不行吗&#xff1f; 3. ArrayList 3.1 ArrayList和和…

【C++】- 掌握STL List类:带你探索双向链表的魅力

文章目录 前言&#xff1a;一.list的介绍及使用1. list的介绍2. list的使用2.1 list的构造2.2 list iterator的使用2.3 list capacity2.4 list element access2.5 list modifiers2.6 list的迭代器失效 二.list的模拟实现1. list的节点2. list的成员变量3.list迭代器相关问题3.1…

Docker--Docker Container(容器) 之容器实战

对docker容器的前两篇文章 Docker–Docker Container(容器) 之 操作实例 Docker–Docker Container(容器&#xff09; Mysql容器化安装 我们可以先在Docker Hub上查看对应的Mysql镜像,拉取对应的镜像&#xff1a; 拉取mysql5.7版本的镜像&#xff1a; docker pull mysql:5.7…

ModuleNotFoundError: No module named ‘torchvision.transforms.functional_tensor‘

问题&#xff1a; 运行代码时&#xff0c;报错&#xff1a; … File “/home/xzy/anaconda3/envs/groundinggpt/lib/python3.10/site-packages/pytorchvideo/transforms/augmix.py”, line 6, in from pytorchvideo.transforms.augmentations import ( File “/home/xzy/anac…

【汇编语言】内中断(二) —— 安装自己的中断处理程序:你也能控制0号中断

文章目录 前言1. 编程处理0号中断1.1 效果演示1.2 分析所要编写的中断处理程序1.2.1 引发中断1.2.2 中断处理程序1.2.3 中断处理程序do0应该存放的位置1.2.4 中断向量表的修改1.2.5 总结 1.3 程序框架1.4 注意事项1.5 从CPU的角度看中断处理程序1.6 一些问题的思考与解答 2. 安…

华为OD E卷(100分)23-连续字母长度

前言 工作了十几年&#xff0c;从普通的研发工程师一路成长为研发经理、研发总监。临近40岁&#xff0c;本想辞职后换一个相对稳定的工作环境一直干到老, 没想到离职后三个多月了还没找到工作&#xff0c;愁肠百结。为了让自己有点事情做&#xff0c;也算提高一下自己的编程能力…