1、什么是进程?
进程是一个动态的实体,是程序的一次执行过程,进程是操作系统资源分配的基本单位。进程与程序的区别在于进程是动态的,程序是静态的,好比程序是乐谱,进程就是演凑的过程,进程是运行中的程序,程序是存储在磁盘上的可执行的二进制文件。
2、进程的管理
操作系统为了管理进程,通过一个task_struct的结构体来记录进程的信息(进程标识符、进程状态、优先级、程序计数器、程序上下文、信号、文件信息等等),每一个进程都有一个task_struct结构体变量,称之为PCB(进程控制块),在32位系统上,每个PCB大概有1.7K,操作系统通过一个双向循环链表管理所有的PCB。
进程标识符:和这个进程相关的唯一标识符,用来区别其他进程。
进程状态:如果进程正在执行,那么进程处于执行状态。
优先级:相对于其他进程的优先级。
程序计数器:程序中即将被执行的下一条指令的地址。
程序上下文:进程执行时处理器的寄存器中的数据。
3、进程的运行状态
进程在其生命周期内可以存在多个状态,主要有就绪态、运行态和阻塞态。
就绪态:所有资源都准备完成,等待CPU空闲的状态。
运行态:在CPU上真正执行的状态。
阻塞态:等待某些事件发生,该事件未发生前,就不能被CPU调度的状态。
就绪态——>运行态:系统进行进程调度。
运行态——>就绪态:分配给进程的时间片用完,将CPU的执行时间划分为很小的时间片,每个进程在CPU上执行一次只会分配一个时间片。
运行态——>阻塞态:需要的某些事件发生才能运行,如I/O请求等。
阻塞态——>就绪态:等待的事件已经发生,只能进入到就绪态,不能直接到运行态。
除此之外,进程还有创建、退出、就绪/挂起、阻塞/挂起等状态。
4、程序的加载----以简单分“页”为例
当运行一个程序时,首先将程序加载到内存上,加载到内存上有很多方法,下面以简单分页为例:
页表:操作系统为每个进程维护一个页表,页表主要记录其加载时每个块对应的页号。
分页的特点:不要求所有的块连续,可以避免外部碎片,但是会产生内部碎片。
分页将物理内存上的空间划分为很小的区块,这个区块称为页,一般大小为4KB,内存上的程序使用完后释放,在循环使用,可以提高空间的使用率。A程序中在2号页上有一个变量a,假设a在2号页上的偏移量为256,它的逻辑地址为4k*2+256,通过查页表可知2号页在内存的5号页帧上,偏移量不变还是原来的256,所以物理地址为4k*5+256。
当一个程序加载到内存时,刚开始只加载0号页,剩下的页暂时不会访问到,不用加载到内存中,当0号页访问快完毕时,如果要访问1号页,再将1号页加载到内存中,如果此时内存已满,没有空间让页面加载进来,则采用页面置换算法,将页面加载到内存中在接着访问,以此类推,直到访问完毕释放内存上的程序。