• 计算机怎样同时运行多个程序的?进程相关概念介绍


    进程管理

    概念

    进程就是一个正在运行的程序,即双击打开的应用程序或是系统自启动的软件,我们可以在任务管理器中发现它们。

    在这里插入图片描述

    可执行文件原本都是存储在硬盘中的,只要双击成为进程后就会占用系统的内存、CPU等硬件空间,当进程过多时计算机就会发生卡顿现象。

    PCB

    PCB是进程控制块(process control block),一个进程内部需要包含很多信息,包括/进程的唯一标识 —— pid,进程关联的程序信息(例如哪个程序,加载到内存中的区域等),分配给该资源使用的各个资源,进度调度信息。

    而一台计算机上会运行多个进程,因此会有多个PCB,它们以双向链表的结构存储在计算机中,进行进程的调度(下文会具体介绍)和删除只需要遍历该链表或对节点进行删除即可。

    可以理解为PCB是一个结构体,pid等信息就是结构体的属性,下面将介绍PCB内具体有哪些信息

    1. pid

    pid是进程的唯一标识,在同一时刻同一主机上,每个进程的pid是唯一的。

    在这里插入图片描述

    在任务管理器的详细信息中我们可以看到这些进程的pid。

    2. 内存指针

    **内存指针描述进程持有的内存资源。**对于存储一个进程的内存,其中的内存必然是要进行分类的,即一部分存储指令信息,一部分存储数据,一部分维护运行状态等等,所以必须对内存进行划分。而内存指针就是指明不同区域的工具,当需要某数据时只要调用内存指针到指定位置即可。

    3. 文件描述符表

    **文件描述符表描述进程持有的文件资源。**每一个进程都需要使用到硬盘内部的文件,文件描述符表记录了该进程打开了哪些文件,之后就能直接对这些文件进行读写操作了。

    下面还有四个属性,全部都和进程调度有关,在这之前需要先介绍一下进程调度的相关概念。

    由于一个计算机需要同时运行多个进程,但是计算机的资源是有限的,一个六核CPU一次也只能执行六个进程。

    CPU概念补充:CPU的运算能力和其集成程度密切相关,集成程度越高,单位面积下CPU的元件数量越多,即元件更小。提高集成程度是比较困难的,但是我们可以使用多核CPU的方式来提高运算速度即同时运行多个进程。

    所以不可避免的需要一个CPU运行多个进程,为了让一个CPU进行多个进程,CPU必须不断对这些进程进行快速切换,使其看样子就像是一次在运行多个进程。而对这些进程进行切换就是对进程的调度,下面的几个属性就和CPU的调度密切相关。

    4. 进程状态

    进程状态表示了该进程是否可以切换的状态,即就绪状态和阻塞状态。如果该进程处于阻塞状态则说明该进程此时无法被调度到CPU上,而就绪状态则表示该进程随时可以被调度。

    5. 进程优先级

    进程优先级决定了CPU分配给该进程的时间长短,优先级往往和该程序需要进行的计算量相关联。

    6. 进程上下文

    为了介绍进程上下文我们假设有A和B两个进程,当A调度到B后又从B调度回A时,我们必然不可能重新来一遍进程A,所以必须保存好A之前运行未结束的中间结果,该中间结果就是进程上下文。

    对于CPU来说进程的上下文就是寄存器中的值,因此寄存器中的值包含了进程的中间结果,而进程上下文存储的就是这些结果(即将原本寄存器中的值存储在内存中)。

    7. 进程记账信息

    进程的记账信息是用来辅助进程进行调度的,虽然各进程之间有优先级,但是我们还是需要保证优先度较低的进程的运行的,如果一个进程运行时间太短就会给它再分配一些时间(注意,进程运行的时间并不是实际的时间,不是以秒等时间为单位,而是执行指令的条数)。

    虚拟地址空间

    我们知道进程是分配在内存中的,如果不加措施直接保存在内存中就不可避免会出现一个进程的指针指向其它内存导致越界访问的问题,所以我们必须对虚拟地址对进程的内存进行限制。

    我们给每个进程都划分出专门的空间,成为虚拟地址空间(并不是实际存在的),通过专门的MMU(MemoryManagementUnit 的缩写即,内存管理单元)实现虚拟地址实际地址的映射,同时进行内存监控,出现越界问题直接中止该进程以避免影响其它进程。

    在这里插入图片描述

    进程间的通信

    虚拟地址满足了隔离问题,但是有很多场景需要不同进程之间进行通信交互,进程间有很多通信方式,在此我们并不讨论通信的具体实现。但无论是那种通信,它们都具有一个核心原则,即划分一块进程都能访问的公共资源,然后基于公共资源使进程之间进行交换数据。这个公共资源可能是内存,可能是一个文件也可能是一个网卡…

  • 相关阅读:
    java-net-php-python-jsp罪犯信息管理系统mp4计算机毕业设计程序
    基于PHP+MySQL的在线学习网站系统
    初学者要如何学习3D游戏建模
    上传图片时系统提示尺寸太大无法上传?证件照怎么改kb大小?
    PythonStock(38)全栈股票系统:Python全栈股票系统,使用vue进行前端界面开发,修改接口可以展示股票数据,持续开发中。
    蓝桥ACM培训-搜索
    零基础如何学习c语言
    【腾讯云原生降本增效大讲堂】Kubernetes集群利用率提升实践
    技术干货 | MindSpore AI科学计算系列(四):AlphaFold2分析
    达梦数据库整合在springboot的使用教程
  • 原文地址:https://blog.csdn.net/m0_61016568/article/details/126336643