• 《计算机操作系统》总结(二)—进程与线程


    进程

    进程基本定义:

    • 进程的定义:
    1. 进程是程序的一次执行过程;
    2. 进程是一个程序及其数据在处理机上顺序执行时所发生的活动;
    3. 进程是具有独立功能的程序在一个数据集合上运行的过程。进程是操作系统的资源分配的基本单位

    **进程是系统进行资源分配和调度的一个独立单位**

    • 进程的特征:
    1. 动态性:进程是程序的一次执行,它有着创建、活动、暂停、终止等过程,具有一定的生命周期,是动态地产生、变化和消亡的。动态性是进程最基本的特征。
    2. 并发性:是指多个进程实体,同存在于内存中,能在一段时间内同时运行。并发性是进程的重要特征,同时也是操作系统的重要特征。
    3. 独立性:是指进程实体是一个能独立运行、独立获得资源、独立接收调度的基本单位。
    4. 异步性:由于进程的相互制约,使进程具有执行的间断性,即进程按各自独立的、不可预知的速度向前推进。
    5. 结构性:每个进程都配置一个PCB对其进行描述。

    进程的组成:

    • 从结构上看,进程实体由程序段、数据段、进程控制块(PCB)三部分组成。
    • 进程控制块PCB:
    1. 为了使参与并发执行的程序能独立地运行,必须为之配置一个专门的数据结构,即进程控制块(PCB),系统利用PCB来描述进程的基本情况和运行状态,进而控制和管理进程。
    2. 进程控制块PCB保存:进程状态、进程性质、与进程有关的控制信息、相应队列、现场保护区域等。
    3. 创建进程:实质上是创建进程映像中的PCB;撤销进程实质上是撤销进程的PCB。
    4. PCB是进程存在的唯一标志。
    • 程序段:是指能够被进程调度程序调度到CPU执行的程序代码段。(note:程序可以被多个进程共享,即多个进程可以运行同一个程序)
    • 数据段:可以是进程对应的程序加工处理的原始数据;也可以是程序执行时产生的中间或最终结果。

    **程序是进程运行所对应的运行代码,一个进程对应一个程序,一个程序可以同时对应多个进程**

    进程的状态与转换:

    • 运行状态:进程正在处理机上运行。
    • 就绪状态:进程已处于准备运行状态(即:进程获得了除处理机之外的一切所需资源,一旦得到处理机即可运行)。
    • 阻塞状态(又称为等待状态):进程正在等待某一时间而暂停运行,如等待某资源为可用(不包括处理机)或等待输入/输出完成。即使处理机空闲,该进程也不能运行。
    • 创建状态:进程正在被创建,尚未转到就绪状态。
    • 结束状态:进程正从系统中消失。这可能是进程正常结束或其他原因中断退出运行。当进程需要结束运行时,系统首先必须置进程为结束状态,然后再进一步处理资源释放和回收等工作。

    **进程在运行过程中实际上是频繁地转换到就绪状态**

    进程之间的转换如下:

    • 就绪->运行:处于就绪状态的进程被调度后,获得处理机资源,于是进程就由就绪状态转为运行状态。
    • 运行->就绪:处于运行状态的进程在时间片用完后,不得不让出处理机,从而进程由运行状态转换为就绪状态。此外,在可剥夺的操作系统中,当有更高优先级的进程就绪时,调度程序将正在执行的进程转为就绪状态,让更高优先级的进程执行。
    • 运行->阻塞:当进程请求某一资源的使用和分配或等待某一事件的发生时,它就从运行状态转为阻塞状态。
    • 阻塞->就绪:当进程等待的事件到来时,如I/O操作结束或中断结束时,中断处理程序必须把相应进程的状态由阻塞转为就绪状态。

    进程的控制:

    • 进程控制的主要功能:对系统中的所有进程实施有效的管理,具有创建新进程、撤销已有进程、实现进程状态转换等功能。一般把进程控制用的程序段称为原语,原语的特点是:执行期间不允许中断,它是一个不可分割的基本单位。
    • 进程的创建:允许一个进程创建另一个进程。此时创建者为父进程,被创建的进程为子进程。子进程可以继承父进程所拥有的资源。当子进程被撤销时,应将其从父进程那里获取的资源归还给父进程;在撤销父进程时,也必须同时撤销其所有的子进程。
    • 操作系统创建一个新进程的过程如下:
    1. 为新进程分配一个唯一的进程标识号,并申请一个空白的PCB。(PCB有限,若PCB申请失败则创建失败)
    2. 为进程分配资源。为新进程的程序和数据、以及用户栈分配必要的内存空间(若内存空间不足,则处于“等待状态”,即等待内存资源)
    3. 初始化PCB。主要包括初始化标志信息、初始化处理机状态信息、初始化处理机控制信息、设置进程的优先级等。
    4. 如果成功就绪队列能够接纳新进程,就将新进程插入到就绪队列,等待被调度运行。
    • 进程的终止:

    引起进程终止的事件有:

    1. 正常结束(表示进程的任务已经完成和准备退出运行);
    2. 异常结束(指进程在运行时,发生了某种异常事件,使程序无法继续运行);
    3. 外界干预(指进程应外界的请求而终止运行,如操作员或操作系统干预、父进程请求、父进程终止等)
    • 操作系统终止进程的过程如下:
    1. 根据被终止进程的标志符,检索PCB,从中读出该进程的状态。
    2. 若被终止进程处于执行状态,立即终止该进程的执行,将处理机资源分配给其他进程。
    3. 若该进程还有子进程,则应将其所有子进程终止。
    4. 将该进程所拥有的全部资源,或归还给其父进程或归还给操作系统。
    5. 将该PCB从所在队列中删除。
    • 进程的阻塞和唤醒:正在执行的进程,由于期待的某些事件未发生,则由系统自动执行阻塞原语,使自己由运行状态变为阻塞状态。进程的阻塞是进程自身的一种主动行为,因此只有处于运行状态的进程,才能将其转为阻塞状态
    • 阻塞(Block)原语的执行过程:
    1. 找到将要被阻塞的进程的标识号对应的PCB。
    2. 若该进程为运行状态,则保护其现场,将其状态转换为阻塞状态,停止运行。
    3. 把该PCB插入到相应事件的等待队列中去。

    **当被阻塞的进程所期待的事件出现时,则由有关进程调用唤醒原语,将等待该事件的进程唤醒**

    • 唤醒(Wakeup)原语的执行过程:
    1. 在该事件的等待队列中找到相应进程的PCB。
    2. 将其从等待队列中移出,并置其状态为就绪状态。
    3. 把该PCB插入就绪队列中,等待调度程序调度。

    **Block原语和Wakeup原语是一对作用刚好相反的原语,必须成对使用**

    • 进程切换:是指处理机从一个进程的运行转到另一个进程上运行。任何进程都是在操作系统内核的支持下运行的,是与内核紧密相关的。

    切换进程的过程如下:

    1. 保存处理机上下文,包括程序计数器和其他寄存器。
    2. 更新PCB。
    3. 把进程的PCB移入相应的队列。
    4. 选择另一个进程运行,并更新其PCB。
    5. 更新内存管理的数据结构。
    6. 恢复处理机上下文。

    **进程切换与处理机模式切换是不同的。模式切换时,处理机逻辑上可能还在同一个进程中运行。但若切换进程,当前运行进程改变了,则当前进程的环境信息也需要改变**

    进程的通信

    • 进程通信的定义:是指进程之间的信息交换。
    • 高级的通信方式如下:
    1. 共享存储:在通信的进程之间存在一块可以直接访问的共享空间,通过对这片共享空间进行读/写操作实现进程之间的信息交换。
    2. 消息传递:若通信的进程之间不存在可以直接访问的共享空间,则必须利用操作系统提供的消息传递方式实现进程通信。进程通过系统提供的发送消息和接收消息这两个原语进行数据交换。
    3. 管道通信:是消息传递的一种特殊方式。是指用于连接一个读进程和一个写进程,以实现它们之间通信的一个共享文件,又名pipe文件。

    线程

    线程的基本概念:

    • 引入进程的目的:为了使多道程序并发执行,以提高资源利用率和系统吞吐量。
    • 引入线程的目的:为了减小程序在并发执行时所付出的时空开销,提高操作系统的并发性能。
    • 线程的定义:别名“轻量级进程”,是一个基本的CPU执行单元,也是程序执行流的最小单元。线程是进程中的一个实体,是被系统独立调度和运行的基本单位。线程自己不拥有系统资源,但它可以与同属一个进程的其他线程共享进程所拥有的全部资源。一个线程可以创建和撤销一个线程,同一个进程中的多个线程之间可以并发执行。

    线程的属性:

    • 线程是一个轻型实体,它不拥有系统资源。但每个线程都应有一个唯一的标识符和一个线程控制块,线程控制块记录了线程执行的寄存器和栈等现场状态。
    • 不同的线程可以执行相同的程序,即同一个服务程序被不同的用户调用,操作系统为它们创建成不同的线程。
    • 同一进程中的各个线程共享该进程所拥有的全部资源。
    • 线程是处理机的独立调度单位,多个线程是可以并发执行的。在单CPU的计算机系统中,各线程可交替地占用CPU;在多CPU的计算机系统中,各线程可同时占用不同的CPU,若各个CPU同时为一个进程内的各线程服务,则可以缩短进程的处理时间。
    • 一个线程被创建后便开始了它的生命周期,直至终止,线程在生命周期内会经历阻塞态、就绪态、运行态等各种状态变化。

    进程与线程的比较:

    • 调度。在传统的操作系统中,拥有资源和独立调度的基本单位都是进程。在引入线程的操作系统中,线程是独立调度的基本单位,进程是资源拥有的基本单位。在同一进程中,线程的切换不会引起进程切换。在不同进程中进行线程切换,如从一个进程内的线程切换到另一个进程中的线程时,会引起进程切换。
    • 拥有资源。不论是传统操作系统还是设有线程的操作系统,进程都是拥有资源的基本单位,而线程不拥有系统资源,但线程可以访问其隶属进程的系统资源。
    • 并发性。在引入线程的操作系统中,不仅进程之间可以并发执行,而且多个线程之间也可以并发执行。从而使操作系统具有更好的并发性,提高了系统的吞吐量。
    • 系统开销。由于创建或撤销进程时,系统都要为之分配或回收资源,如内存空间、I/O设备等,因此操作系统所付出的开销远大于创建或撤销线程时的开销。类似地,在进行进程切换时,涉及当前执行进程CPU环境的保存以及新调度到进程CPU环境的设置;而线程切换时,只需保存和设置少量的寄存器内容,开销很小。此外,由于同一进程内的多个线程共享进程的地址空间,因此,这些线程之间的同步与通信非常容易实现,甚至无需操作系统的干预。
    • 地址空间和其他资源。进程的地址空间之间独立。同一进程的各线程间共享进程的资源,某进程内的线程对于其他进程不可见。
    • 通信方面。进程间通信需要进程同步和互斥手段的辅助,以保证数据的一致性。而线程之间可以直接读/写进程数据段(如全局变量)来进行通信。
    • 其他:一个进程至少有一个线程;多个线程可以同时执行。

    本博客内容为原创,版权所有违者必究,转载请注明来源 http://www.cnblogs.com/sunshine-blog/ 

  • 相关阅读:
    进入MFC讲坛的前言(四)
    进入MFC讲坛的前言(二)
    进入MFC讲坛的前言(一)
    进入MFC讲坛的前言(三)
    jar命令+7z:创建,替换,修改,删除Jar, war, ear包中的文件
    java架构之项目结构(entity / DTO / VO)
    面试无忧之Zookeeper总结心得
    BigDecimal.setScale 处理java小数点
    最详细的 paypal 支付接口开发--Java版
    社会化登录分享-Android SDK的二次封装和使用
  • 原文地址:https://www.cnblogs.com/sunshine-blog/p/8391419.html
Copyright © 2020-2023  润新知