抢票时候的超卖问题

78 阅读5分钟

持续创作,加速成长!这是我参与「掘金日新计划 · 10 月更文挑战」的第19天,点击查看活动详情

进程

  • 进程是程序执行过程中资源分配和调度的一个独立单位

  • os引入进程的目的是使程序可以并发执行,以提高资源的利用率和系统的吞吐量

PCB(记录进程的所有情况)

作用

  • 作为独立运行的基本单位的标志(进程的pid等)
  • 实现间断性运行方式(保存了cpu现场的信息)
  • 提供进程管理所需要的信息(记录了程序和数据在内存和外存的地址)
  • 提供进程调度的信息(记录进程的状态,只有在就绪态的进程才能运行)
  • 实现与其它线程的通信

内容

  • 进程标识符

    • 外部标识符(创建者提供(字母+数字)描述进程的家族关系)
    • 内部标识符(os提供的唯一编号)
  • 处理机状态 (寄存器的一些信息使得进程可以暂停和继续执行)

  • 进程调度信息(进程状态、优先级、等待cpu的时间⌛️····)

  • 进程控制信息(程序和数据的地址、进程同步和通信机制、本进程所在队列下一个进程的pcb指针)

内存中pcb管理方式

线性方式 类似于数组 链表方式 索引方式

程序段(在内存中)

数据段(在内存中)

进程状态(三种,五种,七种)

三种状态

  • 就绪态 : 进程已经获得除cpu以外的资源只要获得cpu就可以立即执行(按照一定的优先策略排列成一个队列)

  • 执行状态: 正在执行

  • 阻塞状态:指进程因为进程获取系统资源失败而产生阻塞,操作系统为了提高进程执行效率,会根据不同的阻塞原因设置多个阻塞队列,一旦获得了导致阻塞的相应资源后,就会立即切换到就绪状态等待执行。

image-20220225205552253.png

五种状态(创建态,终止态)

  • 创建态:申请一个空白的PCB资源,获取进程进程需要的操作系统资源,(如果资源不够用,就无法创建进程),并写入控制和管理信息后将进程推送到就绪队列

  • 终止态:os保留一些进程相关的信息(便于其它进程获取信息使用),然后释放PCB空间。

image.png

七种状态(活动阻塞,静止阻塞,活动就绪,静止就绪

  • 挂起状态:为了方便系统和用户观察分析进程的需要,可以将进程设置为挂起态,暂停执行。

image.png

各种状态间在什么情况下会转换

进程切换过程中发生了什么?

  1. 进程的创建过程
  2. 申请空白pcb
  3. 申请资源
  4. 初始化pcb内容
  5. 加入就绪队列

进程终止条件

  • 正常结束

  • 异常结束

    • 越界错误:程序访问了超出进程所占存储空间的范围
    • 保护错:访问了不允许访问的资源或者文件
    • 指令错:执行了不存在的指令、用错指令
    • 特权指令错:试图调用没有权限的指令
    • 运行超时:运行时间超过设置的最大值
    • 算数运算错:如除0
    • I/O错:I/O操作失败
  • 外界干预

进程终止过程:

  • 根据要终止的进程标识符,找出进程的pcb
  • 如果进程是正在执行进程 立即停止执行
  • 如果进程有子孙进程立即停止执行
  • 将进程所有资源归还父进程
  • 将终止进程的pcb从队列中移除

进程的阻塞条件

向系统申请共享资源失败 等待某种操作完成(如I/O操作) 两个进程协作,进程产生的新数据未到达

进程调度算法

进程间通信

共享存储器

管道通信

互斥(同一时间只允许一个进程读或者写)
同步(只允许写完了再读,读完了再写)

消息传递系统

直接通信()
间接通信(信箱📪)

linux进程通信

管道 信号 消息队列 共享内存 信号量(共享内存资源占用计数器) 套接字

线程

线程概念:线程是调度和分派的基本单位

进程的三个状态

  • 执行态
  • 就绪态
  • 阻塞态

线程的实现方式

内核线程KST(kernel supported thread)

优点

  • 可以并行
  • 如果一个进程被阻塞内核可以调度其它线程来执行
  • 内核线程切换快,开销小
  • 内核本身也可以采用多线程技术,提高系统执行的速度和效率

缺点

对于用户切换线程来说开销比较大(用户进程的线程在用户态运行,而调度和管理是在内核态进行,开销比较大)

用户线程(ULT)(user level thread)

用户态管理进程的调度
缺点:在基于进程机制的os中大多数系统调用都会使进程阻塞,在执行一个系统调用时候,不仅该线程会被阻塞,而且进程内的所有线程都会被阻塞。而在内核态执行线程阻塞时候,可以调度其它线程继续执行。

线程的组合模型

多对一模型

  • 优点:线程管理在用户态,线程管理开销小,效率高
  • 缺点:当一个线程阻塞时候会影响整个进程阻塞,只有一个线程能访问内核,多个线程不能并行在多个处理机上运行。

一对一模型

  • 优点:当一个线程阻塞时候会不会影响整个进程阻塞,多个线程能访问内核,多个线程可以并行在多个处理机上运
  • 缺点:每创建一个用户态线程就会相应的创建一个内核态线程,内核态线程创建开销比较大

多对多模型

  • 既可以像一对一模型一样允许多线程并行的运行在多个cpu上,又可以像多对一一减少线程管理的开销