深入解析现代计算系统中的进程与线程:基础、生命周期和区别

面试的时候被问到了,这块内容挺重要的

1. 进程和线程的基础

进程:是计算机中已运行程序的实例,是操作系统分配资源和调度的基本单位。

线程:是进程的一个实例,是 CPU 调度和执行的单位,一个进程可以包含一个或多个线程,线程间共享进程的资源。

一个进程由以下资源组成:

  1. 文本段(Text Segment):包含程序编译后的机器代码。这部分是进程内存空间的核心,执行的代码在这里运行。
  2. 数据段(Data Segment):存储全局变量、静态变量、常量以及未初始化的变量。
  3. 堆(Heap):用于动态内存分配,当程序运行过程中需要更多的内存时,通过 mallocnew 操作符在运行时创建对象,内存从堆上分配。
  4. 栈(Stack):用于存储临时数据,如函数的局部变量、函数参数、返回地址等。

在这里插入图片描述

在内存中,堆和栈的物理或虚拟地址分配是由操作系统的内存管理器控制的,它们在进程的地址空间中通常被安排在两端,中间留有足够的空间以供扩展。在许多系统中,栈从高地址向低地址增长(即向堆的方向),而堆则从低地址向高地址增长,两者在内存中相向而行,使可用空间的灵活性最大化。

2. 进程状态和生命周期

进程在其生命周期中的确会经历不同的状态,这些状态反映了进程从创建到终止的整个过程。

在这里插入图片描述

  1. 开始(Start):操作系统在这一阶段为进程分配必要的资源和内存,并初始化进程控制块(PCB)
  2. 就绪(Ready)
    • 进程在这一状态具备了运行的所有条件(除了CPU资源外)
    • 进程也可以从运行状态转回就绪状态(通常是因为它的时间片已用完或更高优先级的进程需要执行)
  3. 运行(Running)
    • 进程正在处理器上执行其指定的操作。
    • 如果进程需要等待其他资源(如I/O操作、文件等)或者执行完毕,会结束运行状态。
  4. 等待(Waiting or Blocked)
    • 当进程需要等待某一事件(例如输入/输出操作完成、信号量操作、获取资源失败等)时,它会转入等待状态。此时进程不占用处理器资源,即使有空闲的处理器也不会被执行(因为要先转到就绪态)
    • 一旦等待的事件被满足,进程将转回就绪状态,再次等待处理器的调度
  5. 终止(Terminated or Exit)
    • 一旦进程完成了它的执行任务或者被操作系统强制终止,它就进入终止状态。在此状态下,操作系统回收分配给进程的所有资源,包括内存、打开的文件等,并清理其进程控制块。

3. 进程和线程的区别

  1. 资源共享(主要区别)
    • 进程:每个进程都有自己独立的内存空间,包括代码、数据和堆等。因此,不同进程之间的资源是不共享的,除非通过进程间通信(IPC)机制如管道、共享内存或信号等。
    • 线程:同一进程中的所有线程共享相同的内存空间和资源,如文件描述符和全局变量等。这种共享使得数据的交换和通信更为方便和高效。
  2. 开销与性能
    • 进程:创建新进程(重量级操作)需要复制父进程的资源和初始化新的内存空间,这需要较大的开销。进程切换也需要更多的时间和资源,因为它涉及到保存和加载不同进程的内存状态。
    • 线程:线程作为轻量级进程,创建和销毁的开销小,切换速度快,因为它们共享相同的内存和资源。线程切换主要涉及保存和加载寄存器、栈和程序计数器的状态。
  3. 执行与调度
    • 进程切换(需要与操作系统交互):在进程切换时,操作系统需要进行完整的上下文切换,包括内存地址空间的转换,这需要与操作系统密切交互,导致切换时间较长。
    • 线程切换:线程之间的切换不需要改变内存地址空间,只需调整少量寄存器和堆栈信息。因此,线程切换的开销远小于进程切换。
  4. 变量和同步
    • 进程:每个进程操作自己的私有变量,进程间的数据隔离提供了更好的数据安全性,但这也意味着进程间的通信和数据交换更为复杂。
    • 线程:由于线程共享内存,一个线程对共享数据的修改可以被同一进程中的其他线程立即看到。这提供了高效的数据交流方式,但也带来了同步和数据一致性的挑战。

推荐我的相关专栏:

参考:

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Peter-Lu

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值