操作系统学习之进程线程

1.并发与并行

2.进程与程序
人—》CPU
菜谱—》程序
材料—》数据
做菜—》进程

3.状态


4.PCB:进程控制块,是进程存在的唯一标识

  • 进程描述信息
    • 进程标识符
    • 用户标识符
  • 进程控制和管理信息:当前状态,优先级
  • 资源分配清单
  • CPU相关信息

5.每个PCB是如何组织
通过链表,将具有相同状态的进程链在一起,组成各种队列
通过索引,将索引表的表项指向相应的PCB,不同的状态对应不同的索引表

6.CPU上下文切换
事先设置好CPU寄存器和程序计数器

  • CPU寄存器
    一个CPU内部容量小,速度极快的缓存
  • 程序计数器
    用来存储CPU正在执行的指令位置,或即将执行的下一条指令位置
    CPU寄存器和程序计数器是在CPU运行前,所必须依赖的环境

7.进程的上下文切换是切换什么?
进程:由内核管理和调度
进程的切换只发生在内核态
进程的上下文切换不仅包含了虚拟内存栈,全局变量等用户空间资源,还包含了内核堆栈,寄存器等内核空间的资源。

发生进程切换的场景:

  • 时间片耗尽
  • 内存不足
  • sleep
  • 遇到优先级更高的进程
  • 硬件中断

8.线程的优缺点
优点:

  • 一个进程可以多线程
  • 多个线程可以并发执行
  • 多个线程可以共享地址空间和文件等资源
    缺点:当进程中的一个线程崩溃,会导致其所属进程的所有线程崩溃

进程是资源分配单位,线程是CPU调度单位。线程比进程时间效率高

9.线程的上下文切换
①2个线程属于同一个进程,虚拟内存是共享的,切换时虚拟内存资源不动,切换线程的私有数据 寄存器等不能共享的数据
②2个线程不属于同一个进程,切换与进程一样

根据任务不同:进程上下文切换,线程上下文切换,中断上下文切换

10.线程的实现

  • 用户线程:由用户空间实现的线程,由用户态的线程来管理
  • 内核线程:由内核实现的线程,由内核态的线程来管理
  • 轻量级线程:在内核中来支持用户线程

11.5个调度原则

  • CPU利用率
  • 系统吞吐量
  • 同转时间
  • 等待时间
  • 响应时间

12.调度算法
①FCFS,对长作业有利,适用CPU繁忙型作业,不适用于IO繁忙型
②最短作业优先
③高响应比
④时间片轮转
⑤最高优先级
⑥多级反馈队列

学习链接

互斥 同步

1.临界区:共享资源的代码片段,不能给多线程同时执行

2.同步:操作A应该在B之前就执行,执行C在操作A和B都完成之后执行
互斥:操作A和操作B不能在同一时刻执行

3.线程—》加锁—-》临界资源—》解锁
锁:

  • 忙等待锁
  • 无等待锁

管道

管道传输数据是单向的
[|]:匿名管道
FIFO:命名管道
使用命名管道前,先需要通过mkfifo命令来创建,并且指定管道名字

1
2
$ echo "Hello" > myPipe    //将数据写入管道  
$ cat < myPipe //读取管道里的数据

管道这种通信方式效率低,不适合进程间频繁地交换数据

管道:内核里面的一串缓存
对于匿名管道,它的通信范围是存在父子关系的进程
对于命名管道,它可以在不相关的进程间也能相互通信

消息队列是保存在内核中的消息链表

经典问题