程序和进程是多对多关系,例如同时执行两个一样的程序和操作系统的GUI绘图渲染与各个可视化程序的关系。你可以在任务管理器中发现这些关系
进程的特征并发性:与OS的并发一致
异步性:与OS异步一致
动态性:进程在运行过程中是会发生状态转变,通常认为是动态的。
结构性:使用了PCB组成
独立性:在资源分配过程中,各个进程是独立分配。例如各个进程在内存中的位置都是独立的。
进程的组成通常我们只考虑为PCB+程序或PCB+指令段+数据段。这里涉及到的指令段和数据段是什么呢?
指令段就是具体的操作逻辑,而数据段就是存储的具体数据值,他们通常都存储在栈上。例如有一段代码:
public int Add() { return 3+4; }这段代码在进程中会存储函数指针,也就是程序的具体内存位置;3和4将会作为数据段存储在独立的堆栈中,而 ‘+’会存储在指令段中。
PCB的组成PID:进程的唯一标识
状态:进程五个状态中的一种
优先级:用于控制进程的执行顺序
指令段的组成运行地址:指程序代码在内存中的位置
外存地址:程序在存储设备上中的位置
代码段指针:程序指令段在内存中的具体位置
进入内存时间:进入时间
数据段组成堆栈指针:用于存储数据的地址
数据段指针:数据段代码的地址
进程的组成
对于一个进程或程序需要运行,以下三个东西是必不可少的:
PCB
内存
CPU
进程的状态:
对于新建-->就绪过程,进程会向操作系统申请内存和PCB,同时将进程排入队列使得这个非常的简单。
就绪-->运行过程,操作系统需要向进程分配CPU资源使得程序运转。反过来则是因为某些原因使得进程不再占用CPU,通常是时间片用完。
运行-->阻塞过程,通常是有了一个I/O请求导致了进程的阻塞中断。
阻塞-->就绪过程是I/O完成后重新唤起进程,使进程重新进入就绪队列
运行-->完成则是归还内存并删除PCB。
在状态转变的时候,通常就是要实施以下三步:
分配(申请)内存或CPU
回收
修改PCB
如果我的文章帮助了你,请给我一个三连和star。