OS学习笔记-11(清华大学慕课)进程与线程

为什么要引入进程概念?

多道程序环境下,为了使多个程序更好地并发执行,实现操作系统的并发性和共享性。

进程与程序的联系与区别
在这里插入图片描述在这里插入图片描述

进程的组成

  • PCB(进程控制块)
  • 程序段
  • 数据段
  • 通用寄存器
  • 状态寄存器

PCB的组成

  • 进程描述信息
  • 进程控制和管理信息
  • 资源分配清单
  • 处理机相关信息

程序段

  • 多个进程可以共享一个程序代码段,即一个程序多次执行对应多个进程

数据段

  • 装进程的原始数据,执行中产生的中间或最终结果

进程的状态

共有5个状态

  • 创建态
  • 就绪态
  • 运行态
  • 阻塞态
  • 终止态

在这里插入图片描述

进程控制
操作系统有进程控制的程序段,会完成对进程的创建,撤销已有进程,实现进程状态转换等功能。我们称这个程序段为原语,它的特点是执行过程中不允许打断。

进程的创建

  • 允许一个进程创建另一个进程
  • 创建进程时会分配一个进程号,并申请一个PCB。由于PCB有限,所以可能会创建失败
  • 给进程分配资源,包括:程序段所需内存空间,数据段所需内存空间,用户栈所需内存空间
  • 初始化PCB,如设置进程优先级
  • 如果就绪队列能接纳新进程,则放入就绪队列

进程的终止

  • 正常结束
  • 异常结束
  • 外界干预

进程的阻塞和唤醒

  • 需要阻塞时执行阻塞原语(block),保护现场,修改PCB状态为阻塞态,将PCB插入等待队列
  • 需要唤醒时调用唤醒原语(wakeup),在等待队列中找到PCB,修改为就绪态,将PCB插入就绪队列

进程切换与调度
切换和调度不同,切换是指实际分配的行为,在进程间切换;调度指的是将资源分配给某进程的行为。

进程的通信
pv操作是低级通信方式,高级通信是指较高速率传输大量数据,包括下面三种方式:

  1. 共享存储:操作系统会提供一段共同的数据段内存空间,你们两一起用,但要符合P,V操作规定进行。此时读写操作隔离。
  2. 消息传递:两个进程数据段的物理地址是独立的,通过直接发消息的方式传递数据。
  3. 管道通信:使用连接读进程和写进程的pipe文件,像一条(半双工通信)输血管一样插在两个进程上。可以理解为共享存储的优化与发展,缓冲区(linux下4KB大小)(输血管)虽然只允许一边读一边写,但却可以同时进行。

为什么要引入线程

引入进程是为了多道程序更好地并发执行,增加并发程度;引入线程是为减少程序并发执行过程中产生的时间和空间上的开销,提高并发性能。

线程的概念

  • “轻量级进程”,cpu执行流的基本单位
  • 本身没有资源,但可以和其他线程共享进程资源
  • 一个进程可以创建多个线程,一个线程可以创建和撤销另一个线程
  • 同一个进程的线程可以并发执行
  • 线程也有就绪、阻塞和运行态
  • 进程是除cpu外的系统资源的单元,线程是cpu的分配单元
  • 两个线程在同一个进程里切换需要很少的时空开销

线程与进程的比较

  • 在现在的操作系统中,线程是cpu独立调度的最小单元,进程是拥有资源的最小单元
  • 线程切换可能会引起进程切换,即:在同一个进程里的线程切换不会引起线程切换,不同进程里的线程切换必然会引起进程切换。进程只能被动切换。
  • 不同进程间的线程不可见
  • 进程之间通信使用:共享内存,消息传递,管道通讯,线程之间的通信使用全局变量即可
  • 进程在执行,实际上是其下的某线程在执行

线程的组成

  • 有唯一的标识符和一个线程控制块,线程控制块记录了线程执行的寄存器和栈等现场信息
  • 多个线程可以执行一个程序,多个用户调用同一程序时会创建多个线程
  • 同一进程的多个线程共享该进程资源
  • 线程是cpu的调度单位,在单cpu计算机中,多个线程交替占用cpu;在多核多线程cpu中可以多个线程占用不同cpu,如我的电脑是6核12线程,即最多同时12个线程一起跑
  • 与进程相似,线程的生命周期也是创建、等待、就绪、执行、终止状态
  • 由于线程切换不一定会切换进程,所以可以提高系统的并发性

线程的实现

有两种线程实现方式

  • 用户级线程

  • 内核级线程
    在这里插入图片描述
    在这里插入图片描述
    对应关系

  • 目前主要用第一种

在这里插入图片描述

发布了43 篇原创文章 · 获赞 3 · 访问量 3372

猜你喜欢

转载自blog.csdn.net/a1920993165/article/details/99712820