zoukankan      html  css  js  c++  java
  • 进程与线程

    • 进程是什么

      • 进程:是程序的动态执行

        计算机可以同时运行多个程序,称为多任务计算机,为完成这些任务,这些程序必须在硬件上运行并获得结果才能完成任务。操作系统的主要职责就是控制计算机中多个程序的执行并保证其正确完成

         

      • 资源:程序动态执行需要的必备资源,主要是CPU和内存,是程序执行的基本的时间和空间的物质保证

      • 进程调度:操作系统的主要任务之一就是控制进程以实现程序动态运行,这种工作称为进程调度。

        进程调度是协调机构,协调n个程序和m个资源空间的关系,以保证多个程序在计算机中正确、高效、合理地执行

    • 进程有哪些状态

      进程是动态的,处于不断活动中,其活动变化与资源有关。进程活动必须有资源的支持。由于资源因素,进程 的状态可分为下面3种:

      • 运行状态: 进程的所有资源满足,特别是CPU满足,进程中的程序即可执行,此时进程处于运行状态

      • 等待状态:进程缺少资源无法运行,此时进程处于等待资源状态【等待CPU以外的资源】

      • 就绪状态:表示除了CPU资源外,其他资源均已具备,一旦获得CPU即能进入运行状态。

        进程的所有资源中,最重要和稀缺的是CPU资源,每个进程的运行必须要有CPU资源,因此专门设置一个就绪状态。

      进程的状态转换:

      1)进程一开始处于就绪状态

      2)就绪进程获得CPU后进入运行状态

      3)运行的进程失去CPU后进入就绪状态,再次等待CPU

      4)运行的进程因申请资源,转入等待状态

      5)等待的进程获得资源后处于就绪状态,开始等待CPU资源

    • 进程的调度

      进程调度的方法是控制进程的状态转换,具体操作如下:

      1)建立若干等待队列:

      首先是CPU等待队列,即就绪队列,等待CPU的进程在此排队;

      其次是其他资源 的等待队列,每个资源设置一个等待队列,如打印机等待队列,内存等待队列,等 待该队列资源的进程在此排队

      2)当某资源【包括CPU】被运行的进程释放后,此时启动进程调度程序,它从相应的队列中按一定的调度算法选取一个进程,改变该进程的状态【如果释放的资源是CPU,那么进程调度选取一个就绪进程进入运行,同时选取一个等待中的进程进入就绪队列】

      3)当运行中的进程申请新的资源时,该进程从运行状态变为等待状态,进入相应的队列排队

      4)当运行进程失去CPU后,进程进入就绪状态、

      5)不断重复排队与调度的过程,从而实现进程的活动

    • 进程描述:进程的属性

      每个进程都必须有一组数据用来对进程做静态刻画和描述,这组数据称为进程控制块【PCB】,PCB一般包括以下数据:

      1)进程标识符:一组符号,可以唯一表示该进程

      2)进程控制信息:包括进程 的所处状态、进程的优先级、进程的程序和数据的地址信息等

      3)进程使用资源的信息:包括进程使用内存、I/O设备以及文件的信息

      文件的信息指什么?

      4)CPU现场信息:进程在退出CPU时必须保留现场寄存器的内容,以便重新使用CPU时恢复现场,从上次中断的地方继续运行。CPU现场信息包括专用寄存器、通用寄存器、当时程序的断点地址等内容

      PCB是进程的代表,操作系统是根据PCB管理和调度进程

    • 进程控制:

      为实现进程活动,操作系统提供了一些基本操作命令,称为原语,原语大致分以下4种:

      1)创建进程原语:用来生成一个新进程,并给予初始资源,生成时给出一个PCB,并给出PCB初始数据。新进程一旦建立,立即进入就绪队列

      2)撤销进程原语:当进程执行完毕,或进程因为内外部的意外中止时,可实施进程的撤销。此时操作系统收回分配给进程的资源,取消PCB,最终取消进程在队列中的排队

      3)等待进程原语:运行中的进程发生对某项资源的需求时,该进程主动调用等待进程原语,保留CPU现场信息,然后从运行状态转入等待,并进入某个队列等待

      4)唤醒进程原语:处于等待中的进程,一旦获得相应的资源,即可用此原语激活进程,进入就绪队列

      操作系统的进程控制部分一般就用这四种原语以及PCB来控制进程的活动,协调资源和进程的关系,使多个进程有序进行

    • 线程是什么:

      进程解决了多道程序并发的问题,是资源的拥有者和CPU的调度单位【即CPU的资源是根据进程来分配】。

      但是进程创建、撤销、进程不同状态之间的转换需要花费较多时间,限制了多道程序并发执行的效率

      为解决这个问题,引入了线程概念

      • 线程:是属于进程中的执行实体,进程是资源的拥有者,而线程与分配资源无关,同一进程的多个线程共享进程的资源,共同运行在同一进程的地址空间。因此线程的切换不需要进程那样复杂的资源保护和地址变换等处理,提高了并发程度。

      • 在多线程系统中,CPU以线程作为基本调度单位,而资源分配以进程作为基本单位

      • 在多线程系统中,除了有进程控制块PCB外,还需要线程控制表TCB,用于刻画线程的状态、程序计数器、堆栈指针、寄存器等

      • 线程是进程的深化和提高

      • 现代的操作系统都采用线程作为程序动态执行的基本单位

  • 相关阅读:
    STM32 F4 DAC DMA Waveform Generator
    STM32 F4 General-purpose Timers for Periodic Interrupts
    Python第十四天 序列化 pickle模块 cPickle模块 JSON模块 API的两种格式
    Python第十三天 django 1.6 导入模板 定义数据模型 访问数据库 GET和POST方法 SimpleCMDB项目 urllib模块 urllib2模块 httplib模块 django和web服务器整合 wsgi模块 gunicorn模块
    查看SQL Server服务运行帐户和SQL Server的所有注册表项
    Pycharm使用技巧(转载)
    SQL Server 2014内存优化表的使用场景
    Python第十天 print >> f,和fd.write()的区别 stdout的buffer 标准输入 标准输出 从控制台重定向到文件 标准错误 重定向 输出流和输入流 捕获sys.exit()调用 optparse argparse
    Python第七天 函数 函数参数 函数里的变量 函数返回值 多类型传值 函数递归调用 匿名函数 内置函数
    Python第六天 类型转换
  • 原文地址:https://www.cnblogs.com/come202011/p/12556645.html
Copyright © 2011-2022 走看看