• 进程调度的基本过程


    1.什么是进程\任务

    打开我们电脑的任务管理器.

    进程

    我们电脑中的.exe文件,如果我们不去双击运行它的话,他只会静静的躺在你的硬盘空间里,也就是说在我们双击它之前,它不会对我们的系统产生任何影响。但双击执行exe文件后,操作系统就会把这个exe给加载到内存中,让CPU执行exe内部的一些指令。开始进行一些具体的工作,把这些运行起来的可执行文件,称为“进程

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

    操作系统是如何管理进程的呢?

    1.先描述一个进程

    (明确一个进程上面的一些相关属性)

    首先我要给大家介绍一下 "PCB"(进程控制块)~注意并不是那个参见的PCB板(这个是硬件中的),在操作系统里面主要是通过c/c++来实现相关属性,此处描述其实就是用的c语言中的“结构体” (也就和Java中的类差不多). 操作系统中描述进程的这个结构体,称为 'PCB'

    2.再组织若干进程

    (使用一些数据结构,把很多描述进程的信息给放到一起,方便进行增删查改)

    就是使用双向链表来把每个进程的PCB给串起来~

    注意这里指的是在Linux这个系统为例.

    所谓的“创建进程”,就是先创建出PCB,然后把PCB加到双向链表中。
    所谓的“销毁进程”,就是找到链表上的PCB,并且从链表上删除。
    所谓的“查看任务管理器”,就是遍历链表~~

    2.进程控制块抽象(PCB  Process Control Block)

    PCB中的属性

    pid (进程id)

    就是进程的身份标识(就像每个人的身份证号一样)

    一个主机, 同一时刻, 这些进程的 pid 是唯一的, 可以通过 pid 来区分一个进程

    可以在任务管理器上查看 pid

    内存指针

    指明了这个进程要执行的代码/指令在内存的哪里,以及这个进程执行中依赖的数据都在哪里~~当运行一个 exe ,此时操作系统就会把这个 exe 加载到内存中,变成进程。

    文件描述符表

    每个进程都可以打开一些文件~~ (文件其实是储存在硬盘上的数据)

    文件描述符表厘米就记录了当前进程都打开了那些文件, (打开了之后, 就可以后续针对这些文件进行读写操作了)

    进程--是操作系统分配资源的基本单位!!!

    进程调度的基本过程

    进程的调度,其实就是,操作系统在考虑CPU资源如何给各个进程分配~

    上面的属性是一些基础的属性,下面的一组属性,主要是为了能够实现进程的调度~

    进程状态

    1. 就绪状态  随时可以去CPU上执行
    2. 阻塞状态  暂时不能去CPU上执行

    进程优先级

    系统调度的时候, 会根据优先级, 来给进程安排时间~~

    创建进程的时候, 可以通过一些系统调用来干扰优先级的~~(相对的)

    先给谁分配时间,后给谁分配时间, 以及给谁分的多,给谁分的少

    进程上下文

    进程在CPU上执行了一会之后, 要切换给其他的进程, 就需要保存当前运行的中间结果(存档), 下次再轮到他执行的时候, 就恢复之前的中间结果(读档), 继续往下执行~~

    对于进程来说, 上下文就是CPU中的寄存器的值.

    (寄存器的值就包含了运行的中间结果, 需要把这些结果保存到PCB的上下文信息中(内存))

    进程记账信息

    每个进程再CPU上执行了多久, 统计信息~~

    执行进程的时候, 虽然有优先级, 但是还是不希望让有的进程没有COU资源去执行. 

    这样可以更加均衡, 避免有的进程完全捞不着CPU执行~~

    CPU分配 -- 进程调度

    操作系统对CPU资源的分配,采用的是时间模式 --- 不同的进程在不同的时间段去使用 CPU 资源, 

    所谓的调度就是进行时间管理

    进程的调度,其实就是草错系统在考虑CPU资源如何给各个进程分配

    由于操作系统上,同时进行多个进程

    如果某个进程,出现BUG,进程崩溃了,是否影响其他进程呢?

    依靠“进程的独立性”来保证,依靠与“虚拟地址空间'

    进程之间现在通过虚拟地址空间,已经各自隔离开了

    但实际工作中进程之间的的时候还是需要相互交互的。
     

    内存分配 —— 内存管理

    操作系统对内存资源的分配,采用的是空间模式 —— 不同进程使用内存中的不同区域,互相之间不会干扰
     

  • 相关阅读:
    静态工厂模式,抽象工厂模式,建造者模式
    java毕业设计——基于java+JSP+Oracle的记账管理系统设计与实现——记账管理系统
    Docker从认识到实践再到底层原理(二-2)|Namespace+cgroups
    ISIS-ISIS高级特性—05
    大数据Flink(八十九):Temporal Join(快照 Join)
    IIS解析漏洞复现
    Golang Web框架fiber
    【k8s学习2】二进制文件方式安装 Kubernetes之kubernetesmaster部署
    HFCTF-2021-Final-easyflask
    运维开发详解:从入门到精通
  • 原文地址:https://blog.csdn.net/qq_52592775/article/details/126747497