美文网首页
操作系统学习笔记之进程与线程

操作系统学习笔记之进程与线程

作者: LuckyBugGo | 来源:发表于2018-11-02 12:15 被阅读0次

    进程

    进程:进程是具有独立功能的程序在某个数据集合上的一次运行活动,也是操作系统进行资源分配和保护的基本单位。

    如果你熟悉面向对象编程,并熟知类与对象的概念。不妨这样理解进程和程序两者之间的关系:进程是程序的实例对象,程序是进程的类描述。
    或者你也可以这样理解进程与程序:程序是建筑图纸,进程是房子施工建筑的过程。程序为进程的执行提供了规划模板,而进程则是程序的一次动态执行过程。

    进程的属性

    1. 动态性:进程是程序在数据集合上动态执行的过程,基于不同的数据集合,程序可以同时创建多个进程。其次进程是具有生命周期的。而程序是静态的,是一种存储在磁盘中的资源文件。在日常工作中,很多时候都把程序和进程混为一谈,不加以区别,比如说:这个程序开始跑了——严格来说是进程在执行。不过一般情况下,也不需要对程序和进程这两个概念加以严格得区分。
    2. 独立性:每个进程都是操作系统中的一个独立实体,有自己的虚存空间,程序计数器和内部状态。
    3. 制约性:进程因共享资源或协同工作产生相互制约关系,造成进程执行速度的不可预测性。
    4. 并发性:多个进程的执行在时间段上是可以重叠的。比如将厨师当成CPU,那么假设煲汤为线程A、煮饭为线程B和炒菜为线程C。在厨师做菜的过程中,煲汤、煮饭和炒菜这三个任务是可以同时去做的。线程也是一样,在某个CPU执行时间段内,CPU并不会等待一个线程执行完再去执行下一个线程,而是不断的调度执行多个线程。

    进程的状态

    三态模型

    1. 运行态:进程占有CPU正在处理的状态。
    2. 就绪态:进程具备运行条件,等待系统分配CPU以便运行的状态。
    3. 等待态:进程需要等待某个事件完成,不具备运行的状态。

    七态模型

    1. 新建态:进程被创建时的状态,尚未进入就绪队列。
    2. 就绪态:同三态模型。
    3. 挂起就绪态:当系统内存等资源不足时,就会将就绪态的进程从内存中剥离,对换到磁盘交换区中的状态。
    4. 挂起等待态:当系统内存等资源不足时,就会将等待态的进程从内存中剥离,对换到磁盘交换区中的状态。
    5. 运行态:同三态模型。
    6. 等待态:同三态模型。
    7. 终止态:进程完成任务结束,或是出现错误而异常终止,或被操作系统终止。最终,系统会将终止态的进程销毁掉。

    进程的组成

    1. 进程控制块:即PCB,每个进程有且仅有一个PCB,并与之一一对应的,用来存储进程的标志信息、现场信息和控制信息。
    2. 进程程序块:被进程执行的程序,规定进程一次运行所应完成的功能。
    3. 进程核心栈:每个进程捆绑一个,并与之一一对应。进程在内核状态工作时使用,用来保存中断/异常现场,保存函数调用的参数、局部变量和返回地址。
    4. 进程数据块:时进程的私有地址空间,存放各种私有数据,用户栈也在数据块中开辟,用于在函数调用时存放栈帧、局部变量和返回地址等参数。

    线程

    线程是进程中能够并发执行的实体,是进程的组成部分,也是处理器调度和分派的基本单位。

    如果进程是做菜这样简单的任务,可能还不需要引入线程。当进程是盖房子这样的任务时,就需要引入线程来提高系统资源的利用率和效率了。当建筑公司要修建多做房子时(一个CPU要执行多个进程),多个房子可以按照建筑的不同时期,建筑公司可以同时进行建筑。但由于线程的限制,建筑公司只能是,要么把所有的建筑资源建筑这套房子,要么把所有的建筑资源建筑那套房子。这样,在进程任务复杂之后,建筑公司调整安排建筑任务的资源浪费是十分巨大的(CPU在进行进程任务调度时的资源浪费)。所以为了减少这样的浪费,将进程的程序任务再进行分割小的,可并发的线程程序任务。这样,建筑公司就能够尽量完成某个建筑任务,再去完成其它的(减少CPU在进程之间的调度,转为对进程里多线程的调度)。

    多线程结构进程.png

    线程的优点

    1. 快速线程切换:同一进程中的多线程切换只需改变堆栈和寄存器,地址空间不变。
    2. 通讯易于实现:自动共享进程的内存和文件,线程可以自由访问全局数据,实现数据共享十分方便,线程通信相对简单不必经过内核。
    3. 减少管理开销:线程插件和撤销工作比进程少很多,并且无须再分配存储空间和各种资源。
    4. 并发程度提高:多线程适宜并发工作,能充分发挥处理器与设备的并行工作能力,是多核和多处理器系统的效能发挥更好。

    线程的状态

    在同一进程中的不同线程会竞争CPU和数据资源,而出现各种等待事件,继而存在各种状态。同线程一样,有运行、就绪、等待和终止状态。对于线程来说,它并不是资源拥有单位,其资源来自进程的共享。故而挂起状态对线程来说是没有意义的。

    参考文献

    [1] 费翔林,骆斌.操作系统教程[M].高等教育出版社,2014:71-85.

    相关文章

      网友评论

          本文标题:操作系统学习笔记之进程与线程

          本文链接:https://www.haomeiwen.com/subject/pinfxqtx.html