zoukankan      html  css  js  c++  java
  • 操作系统:进程与线程

    进程的概念

    为什么会有进程?
    操作系统的设计目标之一是充分利用硬件资源,当有程序处于阻塞状态(如正在 I/O)时,CPU是闲下来的
    自然而然地可以想到,为什么不让 CPU 先执行另一个程序等到这个程序 I/O 结束,再继续执行这个阻塞的程序呢?
    另一方面,多用户操作系统使得计算机要能在不同用户执行的程序中来回切换

    即管理 CPU 的方式应该是多道程序、交替执行(并发)

    顺序执行一个程序,只需要置好 PC,CPU 就会取指执行
    想要在进行中的程序间交替执行,不能只简单地改变 PC
    交替执行的程序不同于顺序执行的程序,因此产生了进程的概念

    进程,简单来说就是进行中的程序,
    操作系统记录进程的信息,按照合理的次序推进(分配资源、进行调度

    CPU 的管理就是进程的管理,通过管理 PCB(Process Control Block,进程控制块)实现
    每个进程的 PCB 中保存了这个进程切换所需的上下文,寄存器值、PC,等等


    多进程的组织形式:PCB、进程的状态以及队列
    在这里插入图片描述
    一个正在执行的进程占用 CPU
    其他就绪的进程在就绪队列中等待执行
    有些进程在等待某些事件 如磁盘等待队列
    在这里插入图片描述

    多进程交替执行:队列操作、调度及切换
    队列操作,比如,将一个进程的 PCB 由磁盘等待队列出队,挂到就绪队列队尾
    调度:即进程调度,决定接下来 CPU 执行哪一个线程
    切换:进程上下文的切换

    进程对内存的使用
    如果一个进程将中间结果存储在某个位置,另一个进程恰好也在该位置写入数据,那么就出事了
    因此每个进程的内存空间应当是独立的

    进程同步与合作
    然而进程间常常需要合作,比如进程间通信,或者说两个进程共用一块内存
    简单的说,两个进程同时修改同一个变量,可能丢失其中一个进程的修改结果
    此时当保证进程同步,即合理的推进顺序(控制进程切换的时机)

    因此多进程并发的状态应该关心一下几件事

    • 读写 PCB
    • 操作寄存器完成上下文切换
    • 进程调度
    • 进程的同步与合作
    • 地址映射

    操作系统多进程基本图像
    在这里插入图片描述


    线程的概念

    如上,进程由 资源 + 指令序列 两部分组成,
    因此进程既作为资源分配的单位,又可以作为调度和分派的单位
    进程切换时,资源与指令序列都需要切换

    那么,如果将资源和指令序列分开,一份资源对应多个指令序列,切换时仅切换指令序列
    保留并发的优点,减小切换的代价
    实质是,内存映射表不变、PC 等寄存器改变
    在这里插入图片描述
    一份资源对应多个指令序列是有实用价值的,比如 IDE,可以有一个线程用于显示,一个线程
    负责处理输入,还有一个线程进行语法检查,它们确实使用同一块内存

    线程即是轻量级的进程
    它拥有最基本的资源(TCB(Thread Control Block,线程控制块)、PC、寄存器值、栈)
    因此,线程作为调度和分派的基本单位

    一个进程中可以有多个线程,这些线程共享进程的内存地址空间(可以访问任何一个虚地址)和资源(打开的文件、定时器、申请到的 I/O设备 等等),

    进程间并发执行,一个进程中的多个线程间同样可以并发执行,但是不同进程中的线程进行切换时,也就发生了进程的切换


    总结一下

    进程作为资源分配的基本单位,线程作为调度、分派和独立运行的基本单位

    线程是轻量级的进程,保留了并发性的优点,减小切换的代价(没有切换内存映射表)

    线程只拥有能保证独立运行的资源,多个线程间共享该进程的内存地址空间和资源

    不同进程间需要保持相当的独立性,而同一进程的不同线程间独立性低很多




    进一步了解:用户级线程、内核级线程


    2019/12/20

  • 相关阅读:
    windows下编译及使用libevent
    安装和使用memcached
    BroadcastReceiver插件化解决方案
    Service插件化解决方案
    Activity插件化解决方案
    换肤-插件化
    资源的插件化
    startActivity进行Hook
    代理模式
    对反射的封装
  • 原文地址:https://www.cnblogs.com/kafm/p/12721790.html
Copyright © 2011-2022 走看看