进程与线程

进程

代码是一个存储在硬盘的静态文件,通过编译后就会生成二进制可执行文件,当我们运行这个可执行文件后,它会被装载到内存中,接着CPU会执行程序中的每一条指令,那么这个运行中的程序就被称为进程。

并行和并发

在这里插入图片描述

进程的状态

在这里插入图片描述
运行状态(runing):该时刻进程占用CPU
就绪状态(ready):可运行,但由于其他进程处于运行状态而暂时停止运行
阻塞状态(blocked):该进程正在等待某一事件发生而暂时停止运行,这时机试给他CPU控制权,它也无法运行
创建状态(new):进程正在被创建时的状态
结束状态(Exit):进程正在从系统中消失的状态

如果有大量处于阻塞状态的进程,进程可能会占用大量的物理内存空间,所以在虚拟内存管理的操作系统中,通常会把阻塞状态的进程的物理内存空间换出到磁盘,需要等再次运行的时候,再从硬盘换入到物理内存。
挂起状态:来描述进程没有占用实际的物理内存空间的情况。进程挂起的原因还有通过sleep函数,用户通过ctrl+z挂起进程。
阻塞挂起状态:进程在外存等待某个事件的出现
就绪挂起状态:进程在外存,只要进入内存就立即运行

进程的控制结构

操作系统中用进程控制块(PCB)来描述进程。PCB是进程存在的唯一标识。通常通过链表的方式进行组织,把具有相同状态的进程链接在一起,组成各种队列。

  1. 进程描述信息:进程标识符,进程归属的用户
  2. 进程控制和管理信息:进程当前的状态,进程的优先级(抢占CPU时的优先级)
  3. 资源分配清单:内存地址空间或虚拟地址空间的信息,所打开文件的列表和所使用的I/O设备信息
  4. CPU相关信息:CPU中各个寄存器的值,当进程被切换时,CPU的状态信息都会被保存在相应的PCB中,以便进程重新执行时能从断点出继续执行

进程的上下文切换

各个进程之间共享CPU资源,进程间需要进行切换让不同进程可以在CPU执行,那么这个进程切换到另一个进程运行就叫做进程的上下文切换。
CPU的上下文:CPU寄存器和程序计数器
进程的上下文切换:不仅包含了虚拟内存、栈、全局变量等用户空间的资源,还包括了内核堆栈、寄存器等内核空间的资源。通常会把交换的信息保存在进程的PCB中,当要运行另外一个进程的时候,只需要在其PCB中取出上下文,并回复到CPU中即可。

线程

线程是进程中的一条执行流程。同一个进程内多个线程之间可以共享代码段,数据段,打开的文件等资源,但是每个线程都有一套属于自己的寄存器和栈。

当进程中的一个线程崩溃时,会导致其所属进程的所有线程崩溃。

线程的上下文切换

  1. 如果两个线程不属于同一个进程,则切换的过程就跟进程上下文切换一样。
  2. 如果两个线程是输入同一个进程,因为虚拟内存是共享的,所以在切换时就只需要切换线程的私有数据、寄存器等不共享的数据。

线程的实现

  1. 用户线程:在用户空间实现的线程,不是由内核管理的线程,是由用户态的线程库来完成线程的管理
  2. 内核线程:在内核中实现的线程,是由内核管理的线程
  3. 轻量级线程:在内核中来支持用户线程
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值