进程、线程、协程

进程

进程就是运行中的程序。 单核cpu在某个时间,只能运行一个进程,但是在一秒钟期间,它可能会运行多个进程,这样就会产生并行的错觉,实际上这是并发。

进程、程序、CPU、数据之间的关系:

 菜谱就是程序,买的菜就是程序需要的数据,炒菜的人就是cpu,做菜的过程就是进程。进程有运行-暂停-运行的活动规律。

进程的状态变迁图:

 

 为了防止大量处于阻塞状态的进程占用物理存储空间,在虚拟内存管理的操作系统中,会把阻塞状态的进程的物理内存换成到硬盘,等再次需要运行的时候,再从硬盘换入到物理内存。

挂起状态就是为了描述进程没有占用实际的物理内存空间的情况。

PCB是进程存在的唯一标识,PCB包含的有:

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

进程的上下文切换就是一个进程切换到另外一个进程运行。进程的上下文切换不仅包含虚拟内存、栈、全局变量等用户空间的资源,还有内核堆栈、寄存器等内核空间的资源。这些交换的信息通常会保存在进程的PCB中,当要运行另外一个进程的时候,需要擦这个进程的PCB取出来上下文,然后恢复到CPU中,使得这个进程可以继续执行。

任务是交给CPU执行的,每个任务执行之前,CPU需要知道任务从哪里加载,又从哪里开始运行。所以,需要操作系统实现帮助CPU设置好CPU寄存器和程序计数器。


CPU寄存器是一个CPU内部一个容量小,但是速度极快的内存;

程序计数器则是用来存储CPU正在执行的指令位置、或者即将执行的下一条指令

CPU的上下文就是CPU寄存器和程序计数器,CPU的上下文切换就是把前一个任务的CPU上下文(CPU寄存器和程序计数器)保存起来(系统内核会存储保存下来的上下文信息),然后加载新的任务的上下文到这些寄存器和程序计数器,最后在跳转到程序技术期所指向的新位置,允许新任务。

进程的上下文切换的场景有哪些?

  • cpu时间片用完
  • 系统资源不足,进程会被挂起
  • sleep函数
  • 让给更高优先级的进程
  • 硬件中断

线程

线程是进程中的一条执行流程,同一进程中的多个线程可以共享代码段、数据段、打开的文件等资源,同时每个线程各自都有一套独立的寄存器和栈,线程的控制流是相对独立的。

进程和线程的比较:

  • 进程是资源分配的基本单位,线程是cpu调度的单位;
  • 进程拥有一个完整的资源平台,进程只独享必不可少的资源

线程相对于进程能减少开销,具体体现在:

线程有三种实现方式:

  • 用户线程,基于用户态的线程管理库来实现,线程控制块也是在库里面来实现的,对于操作系统而言是看不到这个TCB(线程控制块)的,操作系统不直接参与
  • 内核线程
  • 轻量级进程(内核支持的用户线程)

调度

调度原则:

  • 为了提高CPU利用率,如果发生I/O事件导致CPU空闲,调度程序需要从就绪队列中选择一个进程来执行。
  • 为提高系统的吞吐率,调度系统需要权衡长任务和短任务进程的运行完成数量

调度算法:

  • 先来先服务
  • 短作业优先
  • 高响应比优先
  • 时间片轮转
  • 最高优先级调度
  • 多级反馈队列调度

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值