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

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

作者: 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.

相关文章

  • iOS开发之GCD多线程一

    1. 多线程的一些相关概念 1.1 进程和线程:操作系统学习笔记之进程与线程 1.2 同步和异步 同步任务:在执行...

  • Python ☞ day 15

    Python学习笔记之 进程和线程 多任务的原理 现代操作系统(Windows、Mac OS X、Linux、UN...

  • Python - 进程、线程与协程

    Python - 高级教程 - 进程、线程与协程 进程与线程 在操作系统中,每一个独立运行的程序,都占有 操作系统...

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

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

  • GO学习笔记(18) - 并发编程(1) - 理解gorouti

    目录 进程、线程与协程 并发模模型介绍 GO并发编程介绍 进程、线程与协程 进程和线程 进程是程序在操作系统中的一...

  • 线程,安全,通信

    进程与线程 在操作系统中,正在运行的程序称为进程,进程负责程序内存空间的分配。 进程包含线程,每条线程都是进程中代...

  • JS内存图

    Get Started • 操作系统• 进程与线程• JS引擎• 瓜分内存• JS入门三座大山之原型 操作系统常识...

  • Java多线程(1)--创建多线程

    多线程 线程与进程: 进程:进程是处于运行中的程序,是操作系统进行资源分配和调度的一个单位 线程:线程是进程的执行...

  • iOS多线程整理

    一.进程与线程 进程是操作系统分配资源的最小单元,线程是操作系统调度的最小单元。一个程序至少要有进程,一个进程至少...

  • 面试题_ios(四)

    1.进程和线程的区别和联系 Progress和Thread,进程和线程是操作系统里的基本概念线程与进程的区别:线程...

网友评论

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

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