进程(一)—— 进程的创建和程序的运行过程

一些课本上对进程的定义:进行中的程序

即便知道定义,但进程依然十分抽象

在了解进程之前,我们需要先了解程序运行的整个流程......

一、进程的创建过程

程序都是以文件的形式存在于磁盘上的

运行程序时,我们通过程序加载器(exe文件)把程序加载到内存中

这个时候,进程就创建好了吗?不,还没有!!

进了清华园 ≠ 清华的学生

进了清华园 + 清华的学生证 = 清华的学生

OS会为加载到内存中的代码和数据创建一个进程控制块(PCB),进程控制块记录着当前进程的属性信息,如程序代码的指针、进程的优先级等各种信息

(除了PCB,还有虚拟地址空间、页表等内容,这里只需要知道PCB即可)

这个时候,进程才算创建完了!!!

进程 = 加载到内存的程序 + 进程控制块

这里的进程控制块可以用一个结构体来表示

二、程序的运行过程(进程被调用的过程)

上面说了进程的创建过程,下一步就是运行程序了

在冯诺依曼体系结构中,和CPU处理速度最接近的就是内存(存储器),所以一般都是内存和CPU打交道

内存中往往有很多个进程

CPU往往有一个运行队列,队列中的每个进程都设置了时间片轮着运行

(详细内容会在下面解释)

假设现在CPU不忙,然后对内存说:“内存,我现在不忙,给我一个进程跑跑”

内存:“收到,你接好了”

 这个时候程序才真正开始运行起来了

问:CPU找内存要进程的时候,应该给哪个进程??

答:给哪个进程根据进程的优先级决定

问:把进程控制块放到CPU里,CPU要怎么运行对应的代码呢??

答:进程控制块中存了代码的指针,也就是地址信息,CPU会根据地址信息去物理内存中找到对应的代码

三、CPU运行队列是怎么管理进程的?

现在我们不考虑新增进程,仅考虑 运行队列中的进程是如何运作的?

如果轮到A进程运行,时间片是10ms,

        — 进程A运行完了,那么就把进程A从运行队列中踢出去

        —进程A没有运行完,此时存在大量的临时数据(临时数据在寄存器中),这个时候,进程A

           需要取出寄存器中的临时数据,带着临时数据排到队尾

等到下一次 再轮到A进程,进程A再把临时数据放到寄存器中

 

这里的临时数据我们称之为  上下文数据(没轮到进程A时,上下文数据存在于进程控制块中)

可以是运行过程中生成的临时结果,也可以是函数执行到哪一行

  • 9
    点赞
  • 41
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值