“探索计算机世界:进程的基本概念与功能“

在这里插入图片描述

文章目录

  • 前言
  • 什么是进程
  • 如何描述进程
  • 进程的属性
    • 1. 进程标识符
    • 2. 内存指针
    • 3. 文件描述符表
    • 4. 进程的状态
    • 5. 优先级
    • 6. 上下文
    • 7. 记账信息
  • 内存分配
  • 并行和并发

前言

作为程序员,理解计算机的组成以及计算机是怎样运行的是很重要的,因为只有了解计算机我们才能更好地通过代码来运用计算机的特性。今天我将为大家分享计算机的核心之一:进程。
在这里插入图片描述

什么是进程

进程是计算机系统中正在运行的程序的实例。在操作系统中,进程是一个独立的执行单位,它拥有自己的内存空间、程序代码和运行状态。一个进程可以包括一个或多个线程,每个线程执行不同的任务,但它们共享进程的资源和上下文。

每个应用程序运行于现代操作系统之上时,操作系统会提供一种抽象,好像系统上只有这个程序在运行,所有的硬件资源都被这个程序在使用。这种假象是通过抽象了一个进程的概念来完成的,进程可以说是计算机科学中最重要和最成功的概念之一。

进程是操作系统对一个正在运行的程序的一种抽象,换言之,可以把进程看做程序的一次运行过程;同时,在操作系统内部,进程又是操作系统进行资源分配的基本单位。

如何描述进程

在计算机中使用结构体(C语言的结构体)来描述进程的属性,而这个结构体也叫做进程控制块(PCB)。

进程控制块(Process Control Block,简称PCB)是一个数据结构,它包含了正在运行的进程或任务的状态信息,以及该进程或任务所需要的其他信息,例如进程ID、程序计数器、寄存器、内存管理信息等。PCB通常是由操作系统内核维护的,它充当着进程与操作系统之间的中介,帮助操作系统管理进程的运行和资源分配,保证多个进程间的并发执行和相互独立的运行。每个进程都有自己独立的PCB,内核在切换进程时,会保存当前进程的PCB,然后载入下一个进程的PCB,并把CPU的控制权切换到下一个进程中。

而在底层进程是由一个节点是PCB的线性表、搜索树等来组织的。

进程的属性

1. 进程标识符

进程标识符(Process Identifier,PID)是操作系统中用于唯一标识一个正在运行的进程的数字标识。每个进程在操作系统中都有一个独特的PID。

PID是一个非负整数,在大多数操作系统中是唯一的。当一个进程被创建时,操作系统会为它分配一个新的PID。该PID在进程整个生命周期中保持不变,直到进程终止。

进程标识符的作用是在操作系统中唯一标识一个进程,让操作系统能够管理和控制进程的运行。

2. 内存指针

在这里插入图片描述

在操作系统中,每个进程都有自己独立的虚拟地址空间,而内存指针则是用于访问和管理进程的内存的变量或数据结构。内存指针存储的是一个内存地址,可以用于读取或写入该地址上的数据。

这些内存指针的值在进程执行期间会不断改变,根据程序的控制流和内存管理的操作而变化。它们允许进程访问各个内存区域,如代码区、堆区、栈区和数据区,从而实现程序的执行和数据的存储与访问。

需要注意的是,进程的内存指针只能在其自身的虚拟地址空间中有效,其他进程无法直接访问或修改其他进程的内存指针。操作系统通过地址映射和访问控制机制,提供了进程间内存隔离和保护的功能,保证各个进程的内存空间相互独立和安全。

3. 文件描述符表

文件描述符表是操作系统中用于跟踪和管理进程打开的文件的数据结构。每个进程都有其独立的文件描述符表,其中记录了当前进程所打开的文件或其他I/O资源的相关信息。

文件描述符是一个整数,用于表示打开的文件或其他I/O资源。操作系统使用文件描述符来跟踪进程与打开文件之间的关联关系,以便进行I/O操作、数据传输以及资源管理。

具体的文件描述符表结构和实现方式可能因操作系统而异,但通常情况下,操作系统会为每个进程维护一个固定大小的数组来存储文件描述符。这个数组的索引即为文件描述符的值,可以通过索引来访问和操作对应的打开文件。

4. 进程的状态

在操作系统中,进程可以处于不同的状态,这些状态描述了进程当前的情况或运行阶段。常见的进程状态包括:

  1. 创建:当进程刚被创建时,它处于创建状态。在这个阶段,操作系统为进程分配了必要的资源,并设置了进程的初始状态。

  2. 就绪:当一个进程已经获得了执行所需的所有资源,并且等待操作系统分配CPU时间片时,它处于就绪状态。就绪状态的进程等待调度器的调度,以便在一个或多个可用的CPU上执行。

  3. 运行:进程在运行状态表示它当前正在执行指令。在一个时刻,只有一个进程能运行在一个CPU上,即被调度为当前运行的进程。进程可以在运行状态下花费一段时间,执行其指令。

  4. 阻塞:当进程在执行过程中遇到某些事件,例如等待输入/输出、等待资源的分配或等待一个信号等时,它会进入阻塞状态。在阻塞状态中,进程暂停执行,并等待满足特定条件后重新进入就绪状态。

  5. 终止:运行中的进程可能会在执行完成后或由于异常情况(如错误、终止信号等)而终止。进程在终止状态时,它的所有资源被释放,包括分配的内存和打开的文件等。

5. 优先级

进程的优先级是操作系统用于确定进程调度顺序的一种机制,它决定了进程在竞争有限资源(如CPU时间片)时被分配的优先级和顺序。不同的进程可以有不同的优先级,高优先级的进程会获得更多的CPU时间,以便更快地执行。

在大多数操作系统中,进程通常被赋予一个数值表示优先级,这个数值可以是一个范围内的整数,通常是较大值表示较高的优先级。例如,Windows系统中的优先级范围为0-31,Linux系统中的优先级范围为-20到+19。

进程优先级的高低可以影响进程的调度。调度程序将优先选择具有更高优先级的进程,并为其分配更多的CPU时间。这意味着高优先级的进程可能更频繁地得到执行,而低优先级的进程则会相对较少地获得执行机会。

通过调整进程优先级,可以对系统资源进行更有针对性的分配和调度,以满足不同进程的需求。例如,对于关键任务或实时应用程序,可以将其优先级设置得更高,以确保其及时得到CPU资源的分配。

需要注意的是,进程优先级仅是调度程序的参考指标,实际的调度还受到其他因素的影响,例如进程的状态、进程等待的资源等。此外,过度依赖进程优先级可能导致其他进程得到很少的执行时间,从而影响系统的公平性和平稳性,因此,在设置进程优先级时需要慎重考虑。

总结起来,进程的优先级是操作系统用于确定进程调度顺序的机制,高优先级的进程会获得更多的CPU时间。通过调整进程优先级,可以实现对系统资源的更灵活分配和调度。

6. 上下文

进程的上下文是指操作系统在调度和执行进程时,需要保存和恢复的进程相关的状态信息。这些状态信息包括进程的寄存器内容、程序计数器、堆栈指针以及其他与进程执行相关的数据。

在操作系统中,当一个进程被调度执行时,它会从先前的执行状态中恢复上下文,并继续执行。当操作系统决定切换到另一个进程时,它会保存当前进程的上下文,然后装载和恢复另一个进程的上下文,以确保进程在下次执行时能够继续从上次离开的地方开始执行。

进程的上下文通常包括以下几个重要的部分:

  1. 寄存器内容:包括通用寄存器、程序计数器(PC)、堆栈指针(SP)等。这些寄存器保存了进程在被中断或切换之前的执行状态,以便在恢复时能够准确地继续执行。

  2. 内存管理信息:包括页表、段表或其他与内存管理相关的数据结构。这些信息描述了进程的内存布局和权限,以及与进程关联的物理内存页或虚拟内存页的映射关系。

  3. 文件描述符表:记录了进程打开的文件和I/O资源的相关信息,包括文件描述符、文件状态标志、打开的文件列表等。保存文件描述符表可以确保进程在恢复时能够正确地管理已打开的文件。

  4. 进程状态:记录了进程的当前状态,如运行、就绪、阻塞等。保存进程状态可以确定进程在调度时的优先级和执行顺序。

保存和恢复进程的上下文是操作系统进行进程切换和调度的关键操作。当操作系统决定切换到另一个进程时,它会保存当前进程的上下文,将控制转移到另一个进程,并恢复其上下文。这样可以实现多任务并发执行,使多个进程能够共享系统资源并按照一定的调度策略进行执行。

7. 记账信息

在操作系统中,进程的记账信息是用于记录和追踪有关进程执行和资源使用的统计数据。这些信息可以用于性能分析、资源管理和系统监控等目的。

进程的记账信息通常包括以下方面:

  1. 进程执行时间:记录进程在CPU上的执行时间,包括总执行时间、用户模式执行时间和内核模式执行时间等。这些数据可以用于计算进程的CPU利用率,评估进程的执行效率。

  2. 进程等待时间:记录进程在就绪状态下等待CPU时间片的时间。这可以用于分析进程等待时间的分布、发现可能的资源瓶颈和优化调度算法。

  3. 进程调度次数:记录进程被调度执行的次数。这可以用于评估进程的执行优先级、调度算法的效果和进程的响应性能。

  4. 进程使用的系统资源:记录进程使用的各种系统资源,如内存使用量、打开的文件数、网络连接数等。这可以用于资源管理和限制,以防止进程过度使用或滥用系统资源。

  5. 进程错误和异常:记录进程遇到的错误、异常和中断情况。这可以用于故障诊断和错误处理,帮助分析和解决进程执行中的问题。

其中进程的状态、优先级、上下文、记账信息属于是进程调度的相关属性,也是属于进程的核心属性

内存分配

进程内存分配是指操作系统为进程分配内存空间的过程,使得进程可以存储和访问所需的数据和代码。进程内存分配包括两个方面:进程地址空间的划分和虚拟内存的管理。

  1. 进程地址空间的划分
    进程地址空间是指进程可以访问的虚拟内存空间,通常被划分为以下几个部分:
  • 代码段:存放程序代码。
  • 数据段:存放已经初始化的全局变量和静态变量。
  • BSS段:存放未初始化的全局变量和静态变量。
  • 堆区:存放动态分配的内存,如通过malloc等函数分配的内存。
  • 栈区:存放函数调用时的临时变量和返回地址等信息。
  1. 虚拟内存的管理
    虚拟内存是指操作系统通过地址转换技术提供给进程的一种抽象内存,使得进程看到的内存空间与实际物理内存不一定对应。虚拟内存的管理主要涉及以下几个方面:
  • 页面置换:当物理内存不足时,操作系统需要将一部分进程数据从物理内存中换出到硬盘上,以腾出物理内存空间供其他进程使用。这个过程叫做页面置换。
  • 页面调度:页面调度是指系统对请求访问的虚拟页面进行管理的过程。当进程访问一个虚拟页面时,如果该页面尚未在物理内存中,则需要从硬盘中获取该页面并将其加载到物理内存中,此过程叫做页面调度。
  • 页面大小:页面大小是指进程虚拟内存空间被划分成的一系列大小相等的块。常见的页面大小包括4KB、8KB等。
  • 页表:页表是记录虚拟地址和物理地址对应关系的数据结构。当进程访问一个虚拟地址时,需要通过页表将虚拟地址转换为物理地址。

程序中所获取到的内存地址,并非是真实的物理内存地址,而是经过了一层抽象,虚拟出来的地址。

访问内存上的任意地址的数据,速度都极快,时间上都差不多。正是因为内存的这个特性,才出现了数组的下标访问。如果当前进程的代码出现了bug,会导致访问的内存越界了,可能会影响其他的进程

针对进程使用的内存空间,进行“隔离”引入了虚拟地址空间。代码里不再直接使用真实的物理地址了,而是使用虚拟的地址,由操作系统和专门的硬件设备(MMU)负责进行虚拟地址到物理地址的转换。

在这里插入图片描述
哪个进程出bug,哪个进程就会崩溃,不影响其他的进程。

并行和并发

什么是并行

并行是指同时执行多个任务或操作的能力。在计算机领域中,特别是在多核CPU或分布式系统中,可以利用并行来加快任务的执行速度和提高系统的计算能力。并行 微观上同一时刻,两个核心上的进程,就是同时执行的

在并行处理中,多个任务或操作被分配给不同的处理单元或计算资源同时执行。这些处理单元可以是独立的CPU核心、多核CPU中的不同核心、不同的计算机节点或服务器等。每个处理单元独立地执行任务,并且它们之间可以并行地进行计算和数据操作。

并行处理通常用于解决需要高性能和高计算能力的任务,例如科学计算、大规模数据处理、图像和视频处理等。通过将问题分解成更小的子问题,并将每个子问题分配给不同的处理单元进行并行处理,可以显著缩短任务的执行时间。

什么是并发
并发是指系统或程序在同一时间段内执行多个独立的任务或操作。在计算机领域中,并发是一种处理多个任务同时进行的机制,通过任务切换和调度来实现任务的交替执行。

并发的主要目标是提高系统的效率和资源利用率。通过同时处理多个任务,系统可以更充分地利用CPU、内存和其他资源,以便更好地响应用户需求并提高整体的吞吐量。

并发可以在单个处理单元上,如单核CPU或单个线程中实现,也可以在多个处理单元之间,如多核CPU、多线程或分布式系统中实现。具体实现并发的方式包括时间片轮转调度、线程切换、进程切换等。

并行和并发的区别

并发在宏观上是同时进行的,微观上是串行的
并行在宏观上是同时进行的,在微观上是在不同核心上同时进行的

  1. 含义:
  • 并行(Parallel):指同时执行多个任务,每个任务在多个处理单元上同时进行,每个处理单元可以是一个独立的CPU核心或者是多核CPU中的一个核心。
  • 并发(Concurrency):指同时处理多个任务,多个任务交替执行,通过时间分片或者任务调度来实现多个任务之间的切换。
  1. 执行方式:
  • 并行:多个任务同时执行,每个任务在独立的处理单元上并行进行。
  • 并发:多个任务交替执行,每个任务在同一个处理单元上轮流执行,利用时间片或者任务切换来实现任务的并发执行。
  1. 目的:
  • 并行:通过同时执行多个任务,提高整体的计算能力和执行速度,加快任务的完成。
  • 并发:通过任务的交替执行和调度,实现多个任务之间的公平共享资源,提高系统的效率和吞吐量。
  1. 实现方式:
  • 并行:通过多核CPU、多CPU或者分布式计算等方式,将不同的任务分配给不同的处理单元并同时进行处理。
  • 并发:通过任务调度、线程或进程切换来实现任务之间的交替执行。
  1. 上下文切换:
  • 并行:由于每个任务在独立的处理单元上执行,不存在上下文切换的开销。
  • 并发:由于任务之间需要切换执行,存在上下文切换的开销,包括保存和恢复任务的执行上下文信息。

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

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

相关文章

9.3.2.1网络原理(UDP)

1.UDP的基本特点:无连接,不可靠传输,面向数据报,全双工. 2.1~1024的端口号有特定的含义,不建议使用.比如21:ftp,22:ssh,80:http,443:https. 3.CRC校验算法:循环冗余校验和,把UDP报中的每个字节都依次进行累加,把累加的结果,放到两个字节的变量中,溢出也无所谓,因为都加了一遍.…

Java多线程(2)---线程控制和线程安全的详细讲解

目录 前言 一.线程控制方法 1.1启动线程--start() 1.2线程睡眠---sleep()方法 1.3中断线程--interrupt() 方法 1.4等待线程---join() 二.线程安全 2.1数据不安全---数据共享 ⭐不安全的演示和原因 ⭐不安全的处理方法 ⭐synchronized的使用 2.2数据不安全---内存可…

性能测试—Jmeter工具

文章目录 性能测试1. 术语介绍2. 方法3. 应用场景4. 工具(Jmeter)4.1 介绍4.2 元件和组件4.2.2 元件4.2.1 组件 4.3 作用域4.4 参数化4.5 执行脚本 性能测试 1. 术语介绍 响应时间(Response time):对请求作出响应所需要的时间。 在互联网上对…

QT学习笔记-QT安装oracle oci驱动

QT学习笔记-QT安装oracle oci驱动 0、背景1、环境以及条件说明2、编译驱动2.1 下载oracle instant client2.2 编译qt oci驱动2.2.1 修改oci.pro2.2.2 MinGW64构建套件编译2.2.3 MSVC2019_64构建套件编译 3、访问数据库运行成功 0、背景 在使用QT开发应用的过程中,往…

5G用户逼近7亿,5G发展迈入下半场!

尽管普遍认为5G投资高峰期正在过去,但是从2023年上半年的情况来看,我国5G建设仍在衔枚疾走。 近日举行2023年上半年工业和信息化发展情况新闻发布会上,工信部人士透露,截至今年6月底,我国5G基站累计达到293.7万个&…

LVS负载均衡部署-NAT

文章目录 LVS-NAT模式配置原理实验环境DR添加网卡准备两台Real Server134:145:测试: 修改RS网关配置DR:开启路由转发下载软件配置查看配置 测试 LVS-NAT模式配置 原理 当客户端访问DR时即访问的外网接口然后由DR将流量在本地转发…

番外13:使用ADS进行容差分析(蒙特卡洛分析、灵敏度分析、良率分析、良率优化),以带通滤波器设计为例

番外13:使用ADS进行容差分析(蒙特卡洛分析、灵敏度分析、良率分析、良率优化),以带通滤波器设计为例 资源下载 https://download.csdn.net/download/weixin_44584198/88210327 技术背景 容差分析是当前电子可靠性设计中最先进…

Docker源码阅读 - goland环境准备

docker 源码分为两部分 cli 和 moby(docker) tips: docker是从moby拷贝过去的;docker整体是一个C-S架构,cli客户端,docker服务端 docker-ce:https://github.com/docker/docker-ce cli:https://…

【数据结构与算法】十大经典排序算法-选择排序

🌟个人博客:www.hellocode.top 🏰Java知识导航:Java-Navigate 🔥CSDN:HelloCode. 🌞知乎:HelloCode 🌴掘金:HelloCode ⚡如有问题,欢迎指正&#…

C语言属刷题训练【第八天】

文章目录 🪗1、如下程序的运行结果是( )💻2、若有定义: int a[2][3]; ,以下选项中对 a 数组元素正确引用的是( )🧿3、在下面的字符数组定义中,哪一个有语法错…

美团软件测试工程师高频面试题和答案

前言 8月底了,马上到了大家的找工作的高峰期了!为了帮助大家更好的备战面试和跳槽,可以在众多求职者中脱颖而出,我帮大家准备了丰富的企业真实面试题,大家赶紧收藏吧! 1、说下你最近做的项目,你…

DatawhaleAI夏令营第三期机器学习用户新增预测挑战赛baseline新手教程

本教程会带领大家项目制学习,由浅入深,逐渐进阶。从竞赛通用流程与跑通最简的Baseline,到深入各个竞赛环节,精读Baseline与进阶实践技巧的学习。 千里之行,始于足下,从这里,开启你的 AI 学习之旅…

python——案例17:判断某年是否是闰年

案例17:判断某年是否是闰年 判断依据:闰年就是能被400整除,或者能被4整除的年份numint(input(输入年份:))if num%1000: if num%4000: #整百年份的判断print("%s年是闰年"%num) #…

容器虚拟化基础之NameSpace

“只想从这无边的寂寞中逃出来。” 一、什么是虚拟化、容器化? 物理机:实际的服务器或者计算机。 这是相对于虚拟机而言的对实体计算机的称呼,物理机提供虚拟机以硬件环境,有时候也称为"宿主"或"寄主"。 虚拟机: 指通过软…

JDK、JRE、JVM:揭秘Java的关键三者关系

文章目录 JDK:Java开发工具包JRE:Java运行环境JVM:Java虚拟机关系概述 案例示例:Hello World结语 在Java世界中,你可能经常听到JDK、JRE和JVM这几个概念,它们分别代表了Java开发工具包、Java运行环境和Java…

Java类型转换

总是忘,总是记混,气气气! 基本类型 4整型、2浮点型、1布尔、1字符 关键字大小取值范围包装类型byte8-27~27-1Byteshort16-215~215-1Shortint32-231~231-1Integerlong64-263~263-1Longfloat323.4e-38~3.4e38Floatdouble641.7e-38~1.7e38Dou…

Easy Rules规则引擎(1-基础篇)

目录 一、序言二、Easy Rules介绍三、定义规则(Rules)1、规则介绍2、编程式规则定义3、声明式规则定义 四、定义事实(Facts)五、定义规则引擎(Rules Engine)1、规则引擎介绍2、InferenceRulesEngine规则引擎示例(1) 定义触发条件(2) 定义规则触发后的执行行为(3) 测试用例 一、…

【CSH 入门基础 5 -- csh 文件监控脚本实现】

文章目录 背景CSHLL 代码实现cshell 中 unset 的介绍bash 中监控文件的方法 背景 由于开发代码是在外网编译,而镜像的烧写是在内网中的EDA工具中进行的,所以就需要先将代码在外网编译好后,再通过FTP工具将镜像传输到内网中,然后在…

uniapp 左右滑动切换页面并切换tab

实现效果如图 要实现底部内部的左右滑动切换带动上方tab栏的切换&#xff0c;并且下方内容要实现纵向滚动 &#xff0c;所以需要swiper&#xff0c;swiper-item,scroll-view组合使用 tab栏部分 <view class"tabs"><view class"tab_item" v-for&…

Matlab时频工具箱tftb下载及安装

Matlab 时频工具箱下载及安装 首先下载安装包安装包地址如下 链接: https://tftb.nongnu.org/ 点击下面的download 跳转到如下界面&#xff0c;选择下面的安装包下载 下载之后得到一个压缩包 然后找到Matlab的安装目录&#xff0c;右键桌面图标&#xff0c;打开文件所在位置…