操纵体系 | 学习条记 | 王道 | 2.1 进程与线程

[复制链接]
发表于 2025-12-19 01:59:55 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有账号?立即注册

×
2.1 进程与线程



2.1.1 进程的概念和特性




  • 进程的概念
    进程是进程实体的运行过程,是体系举行资源分配和调治的一个独立单元。
           进程实现操纵体系的并发性和共享性。
        步调:是静态的,就是个存放在磁盘里的可实行文件,如:QQ.exe。
    进程:是动态的,是步调的一次实行过程,大概是一个正在运行的步调,如:可同时启动多次QQ步调。
    进程实体:即进程映像,是静态的,可明白为进程的一次时候的状态。
    作业:用户向盘算机提交的一项使命,是静态的,它通常是一个批处理处罚步调或一个配景步调。
  • 进程实体的构成


    • 步调控制块PCB
      PCB是进程存在的唯一标记,当进程被创建时,操纵体系为其创建PCB,当进程竣事时,会接纳其PCB。

      • 进程形貌信息

        • 进程标识符PID:当进程被创建时,操纵体系会为该进程分配一个唯一的、不重复的“身份证号”–PID(Process ID,进程ID)
        • 用户标识符UID

      • 进程控制和管理信息

        • CPU、磁盘、网络流量利用情况统计…
        • 进程当前状态:停当态/壅闭态/运行态.…

      • 资源分配清单

        • 正在利用哪些文件
        • 正在利用哪些内存地区
        • 正在利用哪些I/O装备

      • 处理处罚机相干信息(CPU现场信息):如PSW、PC等等各种寄存器的值(用于实现进程切换)

           ① PCB,即进程控制块,操纵体系必要对各个并发运行的进程举行管理, 但凡管理时所必要的信息,都会被放在 PCB 中。
    ② PCB 是进程存在的唯一标记。
    ③ PCB 存于内存的内核区,注意内存的内核区和 OS 的内核态的区别,内核步调运行在内核态。
          

    • 步调段:步调的代码(指令序列)
    • 数据段:运行过程中产生的各种数据(如:步调中界说的变量)
           ①PCB 是给操纵体系用的,步调段和数据段是给进程本身用的。
        ②引入进程实体的概念后,可把进程界说为是进程实体的运行过程,是体系举行资源分配和调治的一个独立单元。
       


  • 进程的特性

    • 动态性:进程是步调的一次实行过程,是动态地产生、变革和死亡的;动态性是进程最根本的特性。
    • 并发性:内存中有多个进程实体,各进程可并发实行
    • 独立性:进程是能独立运行、独立得到资源、独立继承调治的根本单元
    • 异步性:各进程按各自独立的、不可预知的速率向前推进,异步性会导致并发步调实行结果的不确定性。
    • 结构性:每个进程都会设置一个PCB。结构上看,进程由步调段、数据段、PCB构成

2.1.2 进程的状态与转换



  • 根本状态

    • 运行态。占据CPU,并在CPU上运行;√CPU√其他所需资源
    • 停当态。已具有运行条件,但无空闲CPU,临时不能运行;×CPU√其他所需资源
                 体系中处于停当状态的进程大概有多个,通常将它们排成一个队列,称为停当队列。
    • 壅闭态,又称等候态。因等候某一变乱临时不能运行;×CPU×其他所需资源
                 体系通常将处于壅闭态的进程也排成一个队列,乃至根据壅闭缘故原由的差别,设置多个壅闭队列。
    • 创建态。进程正在被创建,尚未转到停当态。OS为进程分配体系资源、初始化PCB

      • 起首申请一个空缺PCB,并向PCB中填写用于控制和管理进程的信息
      • 然后为该进程分配运行时所必须的资源
      • 末了把该进程转入停当态并插入停当队列
      但是,假如进程所需的资源尚不能得到满足,如内存不敷,则创建工作尚未完成,进程此时所处的状态称为创建态。

    • 制止态。进程正从体系中消散,进程正常竣事或其他缘故原由退出运行。OS接纳进程拥有的资源,取消PCB

  • 进程状态的转换


    • 停当态一>运行态:进程被调治
    • 运行态一>停当态:时间片到 or CPU被其他进程抢占
    • 运行态一>壅闭态:等候体系资源分配or等候某变乱发生(主动活动)
    • 壅闭态一>停当态:资源分配到位,等候的变乱发生(被动活动)
    • 创建态一>停当态:体系完成创建进程相干的工作
    • 运行态一>制止态:进程运行竣事 or 运行过程中碰到不可修复的错误



2.1.3 进程的构造方式





  • 链接方式
    链接方式是将同一状态的进程的PCB构成一个双向链表,称为进程队列。

    • 结构:每个队列的队首和队尾都有一个指针,指向第一个和末了一个PCB。每个PCB中也有两个指针,分别指向前一个和后一个PCB。如许,就可以方便地在队列中插入或删除PCB。
    • 优点:简单、机动
    • 缺点:查找服从低,必要遍历链表

  • 索引方式
    索引方式是将全部的PCB存放在一张索引表中,每个表项包罗一个PCB的地点和状态信息。

    • 结构:索引表可以是次序表或散列表,可以按照进程号或其他关键字举行排序或散列。
    • 优点:查找服从高,可以快速定位到某个PCB
    • 缺点:必要额外的空间存储索引表,且索引表的巨细受限于内存容量

2.1.4 进程控制


进程控制就是要实现进程状态的转换,通过原语实现。

  • 进程的创建


    • 创建原语:操纵体系创建一个进程时利用的原语,其操纵如下;创建态→停当态

      • 申请空缺PCB
      • 为新进程分配所需资源
      • 初始化PCB
      • 将PCB插入停当队列

    • 引起进程创建的变乱

      • 用户登录:分时体系中,用户登录乐成,体系会创建为其创建一个新的进程
      • 作业调治:多道批处理处罚体系中,有新的作业放入内存时,会为其创建一个新的进程
      • 提供服务:用户向操纵体系提出某些哀求时,会新建一个进程处理处罚该哀求
      • 应用哀求:由用户进程主动哀求创建一个子进程

    • 父子进程
      允许一个进程创建另一个进程,此时创建者称为父进程,被创建的进程称为子进程。

      • 进程可以继承父进程所拥有的资源。
      • 当子进程被取消时,应将其从父进程那边得到的资源归还给父进程。
      • 在取消父进程时,通常也会同时取消其全部的子进程。


  • 进程的制止


    • 取消原语:其操纵如下;
      停当态/壅闭态/运行态→制止态→无

      • 从PCB聚会合找到制止进程的PCB
      • 若进程正在运行,立即剥夺CPU,将CPU分配给其他进程
      • 制止其全部子进程
      • 将该进程拥有的全部资源归还给父进程或操纵体系
      • 删除PCB

    • 引起进程制止的变乱

      • 正常竣事:进程自已哀求制止(exit体系调用)
      • 非常竣事:整数除以0、非法利用特权指令,然后被操纵体系强行杀掉
      • 外界干预:Ctrl+Alt+delete,用户选择杀掉进程


  • 进程的壅闭


    • 壅闭原语:其操纵如下;
      运行态→壅闭态

      • 找到要壅闭的进程对应的PCB
      • 掩护进程运行现场,将PCB状态信息设置为“壅闭态,临时制止进程运行
      • 将PCB插入相应变乱的等候队列

    • 引起进程壅闭的变乱

      • 必要等候体系分配某种资源
      • 必要等候相相互助的其他进程完成工作


  • 进程的唤醒

    • 唤醒原语:其操纵如下;
      壅闭态→停当态

      • 在变乱等候队列中找到PCB
      • 将PCB从等候队列移除,设置进程为停当态
      • 将PCB插入停当队列,等候被调治

    • 引起进程唤醒的变乱

      • 等候的变乱发生:因何事壅闭,就应由何事唤醒

    壅闭原语唤醒原语必须成对利用

  • 进程的切换


    • 切换原语:其操纵如下;
      运行态→停当态,停当态→运行态

      • 将运行情况信息存入PCB
      • PCB移入相应队列选择
      • 另一个进程实行,并更新其PCB
      • 根据PCB规复新进程所需的运行情况

    • 引起进程切换的变乱

      • 当进步程时间片到
      • 有更高优先级的进程到达
      • 当进步程主动壅闭
      • 当进步程制止


2.1.5 进程的通讯


低级通讯方式:PV操纵。高级通讯方式:共享存储、消息通报、管道通讯。

  • 共享存储

    设置一个共享空间,通过对其举行读/写操纵实现信息交换

    在对共享空间举行写/读操纵时,必要利用同步互斥工具(如PV操纵)。
    共享存储分为两种:

    • 低级方式:基于数据结构的共享
      比如共享空间里只能放一个长度为10的数组。这种共享方式速率慢、限定多,是一种低级通讯方式
    • 高级方式:基于存储区的共享
      操纵体系在内存中划出一块共享存储区,数据的情势、存放位置都由通讯进程控制,而不是操纵体系。这种共享方式速率很快,是一种高级通讯方式。
           进程之间共享空间必要通过特殊的体系调用实现;进程内线程共享进程空间。
       
  • 消息通报

    在消息通报体系中,进程间的数据交换以格式化的消息(Message)为单元。

    进程通过操纵体系提供的“发送消息/吸收消息”两个原语举行数据交换。
           在微内核操纵体系中,微内核与服务器之间的通讯就接纳了消息通报机制。
        消息格式:

    • 消息头:发送进程ID、继承进程ID、消息长度等格式化的信息
    • 消息体
    通讯方式:
       

    • 直接通讯方式:发送进程直接把消息发送给吸收进程,并将它挂在吸收进程的消息缓冲队列上,吸收进程从消息缓冲队列中取得消息。

    • 间接通讯方式:送进程通过信箱间接地通讯,将消息发送到某个中心实体,吸收进程从中心实体取得消息。该通讯方式广泛应用于盘算机网络中。

    •            注:可以多个进程往同一个信箱 send 消息,也可以多个进程从同一个信箱中 receive 消息。
            用发送原语和吸收原语实现基于信箱的进程间通讯

  • 管道通讯
    管道是一个特殊的共享文件,又名pipe文件。着实就是在内存中开辟一个巨细固定的内存缓冲区。
    管道通讯允许两个进程按生产者-斲丧者方式举行通讯。各进程要互斥访问管道。

    • 写满时,不能再写,读空时,不能再读
    • 没写满时,不能读,没读空时,不能写

           一个管道只能实现半双工通讯;实现双向同时通讯要创建两个管道
          

    • 管道本质上是一种特殊的文件。相比于平凡的文件通讯,其区别如下:

      • 限定管道的巨细。管道文件是一个固定巨细的缓冲区,使得它的巨细不像平凡文件那样不加查验地增长。
      • 读进程也大概工作得比写进程快。读空时再读管道会被壅闭,而不是调用返回文件竣事。

    • 管道中的数据一旦被读出,就彻底消散。因此,当多个进程读同一个管道时,大概会繁芜。对此,通常有两种办理方案:

      • ①一个管道允许多个写进程,一个读进程(2014年408真题高教社官方答案);
      • ②允许有多个写进程,多个读进程,但体系会让各个读进程轮替从管道中读数据(Liux的方案)。

    管道只能由创建进程所访问,当父进程创建一个管道后,由于管道是一种特殊文件,子进程会继承父进程的打开文件,因此子进程也继承父进程的管道,并利用它来与父进程进举行通讯。

2.1.6 线程和多线程模子



  • 线程的根本概念
    线程可明白为轻量级进程,它是一个根本的CPU实行单元,也是步调实行流的最小单元。
    线程由线程ID、步调计数器、寄存器聚集和堆栈构成。
           引入进程的目标是更好地使多道步调并发实行,进步资源利用率和体系吞吐量;
        而引入线程的目标则是减小步调在并发实行时所付出的时空开销,进步操纵体系的并发性能。
        引入线程后,进程只作为除CPU外的体系资源的分配单元,线程则作为处理处罚机的分配单元
  • 线程与进程的比力
       传统进程机制引入线程后资源分配、调治进程是资源分配、调治根本单元进程是资源分配根本单元 线程是资源调治根本单元并发性进程间并发线程间也能并发拥有资源拥有资源的根本单元不拥有体系资源独立性进程间独立地点空间和资源同进程下的线程共享地点空间和资源体系开销必要切换进程运行情况,开销大同一进程内线程,不需切换进程情况,开销小支持多处理处罚机体系进程只能运行在一个处理处罚机上进程中多个线程可以分配到多个处理处罚机实行

  • 线程的属性
    多线程操纵体系中的进程已不再是一个根本的实行实体,但它仍具有与实行相干的状态。所谓进程处于“实行”状态,实际上是指该进程中的某线程正在实行。

    • 线程是处理处罚机调治的单元
    • 多CPU盘算机中,各个线程可占用差别的CPU
    • 每个线程都有一个线程ID、线程控制块(TCB)
    • 线程也有停当、壅闭、运行三种根本状态
    • 线程险些不拥有体系资源
    • 同一进程的差别线程间共享进程的资源
    • 由于共享内存地点空间,同一进程中的线程间通讯乃至无需体系干预
    • 同一进程中的线程切换,不会引起进程切换
    • 差别进程中的线程切换,会引起进程切换
    • 切换同进程内的线程,体系开销很小
    • 切换进程,体系开销较大
           注:线程是处理处罚机调治的单元,这里的线程指的是 操纵体系看得见的内核级线程,内核级线程是处理处罚机分配的单元 。
        同进程的线程之间可以共享进程的代码段、全局变量、打开的文件,不共享线程各自的栈指针等TCB内容
       
  • 线程的实现方式

    线程的实现可以分为两类:用户级线程 和 内核级线程。内核级线程又称内核支持的线程。

    • 用户级线程
      在用户级线程中,有关线程管理(创建、取消和切换等)的全部工作都由应用步调在用户空间中完成,内核意识不到线程的存在,因此说用户级线程对操纵体系透明。

      • 用户级线程由应用步调通过线程库实现,全部的线程管理工作都由应用步调负责(包罗线程切换)
      • 用户级线程中,线程切换可以在用户态下即可完成,无需操纵体系干预。
      • 在用户看来,是有多个线程。但是在操纵体系内核看来,并意识不到线程的存在。“用户级线程”就是“从用户视角看能看到的线程
                 若体系中只有效户级线程,则处理处罚机的调治对象是进程
            优点:
           

      • 用户级线程的切换在用户空间即可完成,不必要切换到焦点态,
      • 线程管理的体系开销小,服从高
      缺点:
           

      • 当一个用户级线程被壅闭后,整个进程都会被壅闭,并发度不高。
      • 多个线程不可在多核处理处罚机上并行运行


       

    • 内核级线程
      内核级线程是在内核的支持下运行的,线程管理的全部工作也是在内核空间内实现的。

      • 内核级线程的管理工作由操纵体系内核完成。
      • 线程调治、切换等工作都由内核负责,因此内核级线程的切换一定必要在焦点态下才华完成。
      • 操纵体系会为每个内核级线程创建相应的TCB(Thread Control Block,线程控制块)通过TCB对线程举行管理。“内核级线程”就是“从操纵体系内核视角看能看到的线程”
      优点:
           

      • 当一个线程被壅闭后,别的线程还可以继承实行,并发本事强。
      • 多线程可在多核处理处罚机上并行实行。
      缺点:
           

      • 一个用户进程会占用多个内核级线程,线程切换由操纵体系内核完成,必要切换到焦点态,因此线程管理的本钱高,开销大。
           用户级线程内核级线程线程的管理工作由谁来完成由 应用步调 通过线程库实现全部的线程管理工作 ,包罗线程切换线程管理工作由 操纵体系内核完成线程切换是否必要 CPU 失常用户级线程切换 可以在用户态下即可完成 ,无需操纵体系干预线程调治、切换等工作都由内核负责,因此 内核级线程的切换 一定必要在 焦点态 下才华完成。OS 是否能意识到用户级线程的存在OS 内核意识不到用户级线程的存在 用户级线程就是从用户视角看能看到的线程OS 会为每个内核级线程创建相应的 TCB(线程控制块) 通过TCB对线程举行管理 内核级线程就是从操纵体系内核视角看能看到的线程优点用户级线程的切换在用户空间即可完成, 不必要切换到焦点态,线程管理的体系开销小,服从高当一个线程被壅闭后,其他线程还可以继承实行,并发本事强 多线程可在多核处理处罚机上并行实行缺点当一个用户级线程被壅闭后,整个进程都会被壅闭,并发度不高 由于进程是处理处罚机调治的根本单元,同一进程的多个线程不可在多核处理处罚机上并行运行一个用户进程会占用多个内核级线程,线程切换由操纵体系内核完成 必要切换到焦点态,因此线程管理的开销大,服从低,本钱高
    • 组合方式
      有些体系利用组合方式的多线程实现。在组合实现方式中,内核支持多个内核级线程的创建、调治和管理,同时允许用户步调创建、调治和管理用户级线程。


      • 一些内核级线程对应多个用户级线程,这是用户级线程通过期分多路复用内核级线程实现的。
      • 同一进程中的多个线程可以同时在多处理处罚机上并行实行,
      • 且在壅闭一个线程时不必要将整个进程壅闭,

    • 线程库
      线程库是为步调员提供创建和管理线程的API。实现方式有以下两种。

      • ①在用户空间中提供一个没有内核支持的库。这种库的全部代码和数据结构都位于用户空间中。这意味着,调用库内的一个函数只导致用户空间中的一个当地函数的调用。
      • ②实现由操纵体系直接支持的内核级的一个库。对于这种情况,库内的代码和数据结构位于内核空间。调用库中的一个API函数通常会导致对内核的体系调用。


  • 多线程模子


    • 一对一模子
      一个用户级线程映射到一个内核级线程。每个用户进程有与用户级线程同数目的内核级线程。

      • 优点:当一个线程被壅闭后,别的线程还可以继承实行,并发本事强。多线程可在多核处理处罚机上并行实行。(内核级线程优点)
      • 缺点:一个用户进程会占用多个内核级线程,线程切换由操纵体系内核完成,必要切换到焦点态,因此线程管理的本钱高,开销大。(内核级线程缺点)

    • 多对一模子

      多个用户级线程映射到一个内核级线程。且一个进程只被分配一个内核级线程。

      • 优点:用户级线程的切换在用户空间即可完成,不必要切换到焦点态,线程管理的体系开销小,服从高(用户级线程优点)
      • 缺点:当一个用户级线程被壅闭后,整个进程都会被壅闭,并发度不高。多个线程不可在多核处理处罚机上并行运行(用户级线程缺点)

    • 多对多模子
      n用户及线程映射到m个内核级线程(n>=m)。每个用户进程对应m个内核级线程。

      降服了多对一模子并发度不高的缺点(一个壅闭全体壅闭),又降服了一对一模子中一个用户进程占用太多内核级线程,开销太大的缺点。还拥有上述两种模子各自的优点。

  • 线程的状态与转换

  • 线程的构造与控制


    • 线程控制块
      与进程雷同,体系也为每个线程设置一个线程控制块TCB,用于纪录控制和管理线程的信息。线程控制块通常包罗

      • ①线程标识符
      • ②一组寄存器,包罗步调计数器、状态寄存器和通用寄存器
      • ③线程运行状态,用于形貌线程正处于何种状态
      • ④优先级
      • ⑤线程专有存储区,线程切换时用于生存现场等
      • ⑥堆栈指针,用于过程调用时生存局部变量及返回地点等。
      同一进程中的全部线程都完全共享进程的地点空间和全局变量。
      各个线程都可以访问进程地点空间的每个单元,以是一个线程可以读、写或乃至打扫另一个线程的堆栈。

    • 线程的创建
      用户步调启动时,通常仅有一个称为“初始化线程”的线程正在实行,其紧张功能是用于创建新线程。
      在创建新线程时,必要利用一个线程创建函数,并提供相应的参数,如指向线程主步调的入口指针、堆栈的巨细、线程优先级等。线程创建函数实行完后,将返回一个线程标识符。
    • 线程的制止
      当一个线程完成本身的使命后,或线程在运行中出现非常而要被逼迫制止时,由制止线程调用相应的函数实行制止操纵。
      但是有些线程(紧张是体系线程)一旦被创建,便不绝运行而不会被制止。通常,线程被制止后并不立即开释它所占据的资源,只有当进程中的其他线程实行了分离函数后,被制止线程才与资源分离,此时的资源才华被其他线程利用。
      被制止但尚未开释资源的线程仍可被其他线程调用,以使被制止线程重新规复运行。

错题总结:

1.线程包罗CPU现场,可以独立实行步调
2.并发进程的运行结果具有不可再现性
3.在单处理处罚器体系中任何时候都只有一个进程处于运行态(X)全部进程都死锁
4.一个进程在同一时候不能实行多个步调,只能实行一个步调
5.分时体系中,处于停当态的进程最多
6.并发进程失去封闭性是指:并发进程共享变量,着实行结果与速率有关
7.进程是资源分配的单元,内核级线程是调治和分派的单元
8.速率最快的进程通讯方式:共享内存
9.第27题
10.线程不会增上进程安全性
11.51题A
12.用户级线程切换是咱们本身控制的
13.同一进程的多少线程不能共享某个线程的栈指针
14.管道只允许单向的数据传输
双向传输必要两个管道
15.父子进程不是完全共享父进程假造地点空间,只是共享一部门
回复

使用道具 举报

登录后关闭弹窗

登录参与点评抽奖  加入IT实名职场社区
去登录
快速回复 返回顶部 返回列表