cpu的虚拟化(上)———— 进程

打印 上一主题 下一主题

主题 993|帖子 993|积分 2979

前言

这是一篇我在学习OSTEP这本书的笔记与总结,这篇笔记的正文部分围绕进程赞开,主要讨论“是什么”与“为什么”两个问题,笔记如有错漏,望不吝纠正。
进程与操作体系的关系

进程是操作体系里的核心之一,在OSTEP中对进程在操作体系中扮演的角色给出了以下解释:
进程是操作体系中分配资源最小的单元。
在这段描述中有一些关键点:资源最小单元。在看到这段描述后,我就在想“资源”是什么?比进程大的资源分配单元有哪些?接下来,我来逐一举行解释。

  • 为进程分配的资源有什么?

    • 内存资源

      • 每个进程都有自己独立的内存空间,这里独立性的主要表现有:每个进程拥有的物理内存是分隔开的,不重叠的。如许设计的目的是为了避免A进程的行为对B进程产生影响。
      • 内存空间被分成主要三个部分:

        • 指令段:用于存放进程拥有的指令序列,该段的访问权限是只读的,如许做是为了避免进程对其举行修改,导致程序出现开发者非预期的行为。
        • 数据段:数据段分为两个部分:全局数据区、堆区。全局数据区用于存放程序的全局数据。比如:c语言中的全局变量的值就存储在这里。堆区用于提供用户使用如malloc时申请的空间。
        • 栈区:栈区用于存储在函数调用过程中的局部变量,


    • 内核资源

      • 操作体系为每个进程分配了如PCB,信号量,消息队列等用于管理进程的须要资源。这里我主要介绍PCB。
      • PCB的中文名称是进程控制块,用于存储描述进程的重要信息。如:进程ID,进程状态,进程的上下文等等。

    • CPU时间片

      • CPU时间片是操作体系用来管理进程使用CPU时长的信息,结合进程调度程序来完成对进程的公道调度。


  • 比进程大的资源分配单元有哪些?

    • 在操作体系中比进程大的资源分配单元有:作业、会话等,对于这些概念在此就不详细睁开了,感兴趣的可以向DeepSeek提问。

进程初识

现在让我们回到关于进程的问题中,前文我们聊了进程与操作体系的关系,那么,接下来来聊聊关于进程自己的问题吧!
当我们第一次听到进程这个词时,大概会产生如许的迷惑,进程是什么?为什么要提出进程的概念?进程与我们平时写的程序有什么关系?现在我们来逐一解释这些疑问。

  • 进程是什么?

    • 对于这个问题我的解释是:进程是程序加载到内存后,在CPU中执行的过程。这里的关键词是过程,进程不像程序是不停存储在硬盘中与其他的硬件或程序是没有任何交互的,它在时时刻刻都在与别的硬件和进程举行互动,DeepSeek对该问题的回复中使用了静态动态这两个词来描述进程与程序的联系。
    • 在聊进程的时候,程序不可避免的引入了进来。因此,在此也谈谈程序的相关问题。

      • 程序是什么呢?

        • 程序是存储在磁盘里的一条条机器指令构成的集合。

      • 程序与的进程的联系是怎样的?

        • 程序就好像是一个菜谱,它记载了做某一道菜的每个步骤。而进程则是照着这个菜谱做菜的过程,这个过程中除了有菜谱上描述的步骤,还有与这些步骤交互的厨具,如:装菜的篮子,炒菜的灶台等等。



  • 进程概念的产生在汗青上的原因

    • 在1960年之前的计算机,执行程序的方式是串行执行。串行执行就是当一个程序执行完成后,再执行另一个程序。使用这种执行方式的原因主要是因为硬件资源的不足,如:CPU的执行速度过慢、内存空间的太小等等。但随着硬件的发展,CPU的运行速度与内存空间的大小大幅提拔。此时,计算机的设计者们就开始思索怎样提高在单元时间上的硬件利用率[1]。此中有一个思绪是让多个程序交替在内存中运行,而为了实现这个目的,设计者们要面临一系列的问题,而这些问题都与程序在CPU上的运行过程有关,此中有几个要素是必要格外关注的,如:程序在内存中的指令集、程序在CPU的寄存器中的状态、程序与程序之间在物理空间上的关系等等。而为了方便描述与解决这些问题就必要一个东西,这个东西要将这些关键要素关联为一个整体,这个东西的名称便是进程。

最后,谈谈进程的几种根本状态。进程的状态是很重要的,因为对进程举行调度时,必要依赖这些状态信息。

  • 进程的根本状态

    • 运行:运行状态是指当进程正在使用CPU时处于的状态。
    • 壅闭:壅闭状态是指当进程在等待I/O请求或其他事件时处于的状态。
    • 停当:停当状态指进程除了CPU资源其他的所有所需的都停当时处于的状态。

  • 状态转化的触发条件

    • 运行->壅闭

      • 当使用体系调用获取外部存储装备的数据时发生。
      • 示例:使用体系调用read(),在读取磁盘数据时必要制止使用CPU。

    • 壅闭->停当

      • 当发出的请求有回应或者读取的数据到达时。

    • 停当->运行

      • 当该进程被调度程序选中,便会开始使用CPU。




  • 在串行执行方式下,当一个程序在等待I/O装备的回应时,CPU是处于空闲状态的。因此,硬件的利用率还有提高的空间。 ↩︎

免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。
回复

使用道具 举报

0 个回复

倒序浏览

快速回复

您需要登录后才可以回帖 登录 or 立即注册

本版积分规则

络腮胡菲菲

金牌会员
这个人很懒什么都没写!
快速回复 返回顶部 返回列表