一、进程
多道程序在执行时,需要共享系统资源,从而导致各程序在执行过程中出现相互制约的关系,程序的执行表现出间断性的特征。这些特征都是在程序的执行过程中发生的,是动态的过程,而传统的程序本身是一组指令的集合,是一个静态的概念,无法描述程序在内存中的执行情况,即我们无法从程序的字面上看出它何时执行,何时停顿,也无法看出它与其它执行程序的关系,因此,程序这个静态概念已不能如实反映程序并发执行过程的特征。为了深刻描述程序动态执行过程的性质,人们引入“进程”概念。
1、进程:运行加载到内存中的程序被称之为进程。
2、进程和程序的区别:
- 存储位置不同,程序是存储在磁盘上的二进制文件,进程被加载到了内存上;
- 进程不仅仅是由程序实体组成,还包括进程控制块PCB以及一些描述进程信息的结构体。程序是指令、数据及其组织形式的描述;
- 一个进程只能对应一个程序,一个程序可以有多个进程;
- 进程的生命周期短暂,有动态属性,程序是永久的;
3、进程PCB:
- 每个进程在内核中都有一个进程控制块PCB来保存进程的信息;
- PCB是操作系统感知进程存在的唯一标识;
- 在Lunix中,Lunix内核通过一个被称为进程描述符task_struct的结构体来管理进程。task_struct是Linux内核的一种数据结构,它会被装载到RAM里并且包含着进程的信息;
task_struct结构体内容包括:
- 标识符:描述本进程的唯一标示符,用来区别其他进程;
- 状态:任务状态,退出代码,退出信号等;
- 优先级:相对于其他进程的优先级;
- 程序计算器:程序中即将被执行的下一条指令的地址;
- 内存指针:包括程序代码和进程相关数据的指针,还有和其他进程共享的内存块的指针;
- 上下文数据:进程执行时处理器的寄存器中的数据;
- I/O状态信息:包括现实的I/o请求,分配给进程的I/O设备和被进程使用的文件列表;
- 记账信息:可能包括处理器时间总和,使用的时钟数总和,时间限制,记账号;
- 其它信息
4、进程状态
- 就绪->执行:处于就绪的进程被调度后,获得处理机资源(分派处理机时间片)。
- 执行->就绪:处于运行状态的进程在时间片用完后,不得不让出处理机,从而从执行态转为就绪态。在可剥夺方式的操作系统中,当有优先级更高的进程就绪时,调度程序将正在执行的进程转换为就绪状态,让优先级更高的进程执行。
- 运行->阻塞:当进程等待某一资源(如外设)使用或分配或者等待某一事件的发生(如I/O操作的完成)时,进程状态就从运行转换为了阻塞状态。进程以系统调用的形式请求操作系统提供服务,这是一种由运行用户态调用操作系统内核态的过程。
- 阻塞->就绪:当进程等待的时间发生,如I/O操作结束或者中断结束时,中断程序必须把相应进程的状态由阻塞转换为就绪状态。
- 退出状态:1、进程正常结束退出;2、被强制退出;3、因为异常而终止;4、因出错而终止。
二、进程加载:内存进行简单分页
1、将内存上用户空间划分为多个4k的页帧,从0地址开始编号。
2、一个程序在磁盘上存储,对于EXT文件系统也是4k的block号存储,从0开始编号称为页。
3、操作系统为每一个进程维护了一个页表,记录了进程页与内存页帧的映射关系。
4、加了页表,进程加载可以不连续,其次只会在最后一个页浪费一些空间,提高了效率。