操作系统原理:进程与线程、进程生命周期、线程的类型

一、进程定义

     进程可以看成程序的执行过程,可以展示在当前时刻的执行状态。它是程序在一个数据集合上的一次动态执行的过程。这个数据集合通常包含存放可执行代码的代码段,存放初始化全局变量和初始化静态局部变量的数据段、用于调试的符号表、未初始化的全局变量和未初始化的静态局部变量的bss段,存放对象数据和临时变量以及数据层次结构的堆栈,系统资源等。程序是静态的,一组有序代码的集合,保存在硬盘中,进程是动态的,是程序的执行过程,执行过程结束,进程也就被结束。进程分为用户态和核心态。当进程需要在内核中进行系统调用完成功能时,这个步骤由操作系统完成,进程只需要向操作系统进行请求操作就行,此时的进程状态称之为核心态,进程不再内核中工作时的状态称之为用户态。

二、进程具有的特点:

1)动态性:可以动态地被创建、结束进程

2)并发性:进程可以被独立调度并占用处理机运行

3)独立性:每个进程有自己的内存空间,进程执行的正确性不会受到其他进程的正常执行。

4)制约性:访问共享内存和资源或者在进程间通信根据某种规则保持同步,所产生的制约

 

    进程控制块PCB:操作系统管理控制进程运行所运用的信息集合,也是进程存在的唯一标志。信息集合包含,进程标识信息(进程PID,父进程标识,所属用户等);处理机状态信息保存区(用户可见的寄存器、控制和状态寄存器,栈指针);进程控制信息(调度和状态信息、进程间通信信息、存储管理信息、资源、有关数据结构的连接信息等);

 

三、进程的生命周期

1)进程创建。进程可以被用户请求创建,也可被其他进程创建。在系统初始化时也会创建进程

2)进程运行。当进程可以被CPU执行时的状态为就绪状态,可以一个系统中有很多就绪状态的进程。此时操作系统根据某种调度算法选择出一个就绪态的进程给CPU执行,同时把进程的状态改成运行态。这个运行在”畅通无阻“时也不是无休止的运行,当正常运行了一段时间后 ,也会被CPU置成就绪态,把CPU的使用权让给其他进程执行。

3)进程等待(阻塞):当执行命令无法马上完成时就会把进程置为阻塞状态。例如这个文件正在其他进程写入时,或者访问资源不足时。例如换页时,读硬盘的操作时,CPU会在这个时间段去执行其他进程。

4)进程唤醒:当阻塞的进程所需要的资源被满足,或者等待的事件被到达,有其他进程或者操作系统把该进程PCB插入到就绪队列。

5)进程结束:当进程正常执行退出、错误退出、发生致命错误、被其他进程所kill 。就意味这这个进程结束了

OT)进程挂起:暂停进程的执行,此时进程不占内存空间,其映射在硬盘上。进程挂起,分为阻塞挂起和就绪挂起。解除挂起和挂起的操作主要原理是内存和硬盘换入换出。当内存空间不够用时,操作系统就会将没在执行的进程挂起(换到硬盘中)以腾出内存空间。或者有优先级更高的进程需要被执行时,此时可能会将低优先级的进程进行挂起。如果阻塞挂起进程的资源被满足,可在磁盘上修改进程状态为就绪挂起。

 

四、线程的定义

如果一个程序希望并发地执行不同功能。可以把这些需要并发的功能来建立进程,使它们可以并发地执行。这样做的问题是,由于每个进程中的数据相互不共享,如何实现进程间的通信,共享数据呢?实现起来开销难免会大。所以希望有一个实体能够并发地执行不同功能,共享内存数据来方便并发运行,这就是线程的目的。线程是进程的一条执行流程。进程创建需要创建PCB,分配资源。而线程有自己的TCB(线程控制块),TCB,其中包含自己独有的一些栈和寄存器如IP/PC,SP等,但是每个线程共享进程的数据段、代码段、堆空间等

进程是资源分配的单位,线程是CPU调度单位。线程同样有就绪、执行、阻塞三种状态。线程的创建、之间的通信,切换线程要比进程的创建,之间的通信,切换进程开销要来得小 。但是对于数据安全性来讲,多进程要比多线程来得安全。

五、线程的类型

线程的实现方式可分为三种:用户线程,内核线程,轻量级进程。

用户线程是操作系统看不到的线程,而内核线程是操作系统能够看得见的线程。用户线程的管理是由用户态的对应的代码库函数来进行管理,而内核线程由操作线程直接管理。通常多个用户线程可以对应一个或多个内核线程。

每个用户线程的TCB由代码库函数来管理,操作系统无法访问到。所以用户线程请求系统调用,在操作系统眼里,就是一个进程发起的系统调用,如果这个系统调用造成了系统阻塞,那么整个进程都会变成等待。除此之外,除非用户线程交出CPU的使用权,那么该进程下的其他用户线程都将无法运行。只不过这个使用权的时间片段很小让用户感觉线程在“并发执行”。

内核线程的TCB是放在操作系统的内核中的,其创建、回收、管理都是由操作系统通过系统调用/内核函数来完成的,由内核来维护进程和线程的上下文信息。所以内核线程的切换意味这硬件资源的切换,切换线程其开销要比用户线程来得大。内核线程直接由CPU来调度,如果一个内核线程被阻塞,不会影响其他内核线程,如果一个进程有多个内核线程,那么进程CPU平均使用时间要比其他进程来得长。

轻量级进程。由内核支持的用户线程。一个进程有一个或多个轻量级进程,每个轻量级进程由一个单独的内核线程来支持。因此多轻量级进程的进程,其CPU平均使用时间要比其他进程来得长,更高效

六、进程的上下文切换概述

      当发生中断时,在执行的进程要停止执行把CPU的控制权交给其他进程。此时CPU要做的就是把进程的状态保存起来。进程的执行变量,代码,数据由进程自身的数据段,代码段,堆栈保存。而CPU需要另外保存的是寄存器里的值,例如SP永远指向进程栈顶的指针寄存器,执行到的代码位置的IP/PC 等寄存器。而这些寄存器的值都保存在PCB中,PCB保存在操作系统的内核中。

    常用寄存器汇总:https://blog.csdn.net/superSmart_Dong/article/details/115920429

  

Guess you like

Origin blog.csdn.net/superSmart_Dong/article/details/116464012