增加了资源绑定,有整理好的更容易理解串记的大白话内容。
Docshttps://uw3utkuiqu.feishu.cn/file/I3bYbEkc6oUg1JxcrHAcpq2in4b?from=from_copylink
进程和线程
我是一个ikun,我坐着不动(静态)就是ikun程序,我开始执行任务唱、跳、rap和打篮球(动态)就是ikun进程。在ikun进程中,我们的孩子就是线程。
为了ikun进程们能公平地抢坤坤哥哥下的蛋(临界资源),坤坤哥哥(CPU)会安排(进程调度)时间片给每个ikun进程,规定每个人在一段时间内(CPU时间片)可以执行任务的顺序(进程同步),这确保了每个进程都有机会使用CPU而不会被其他进程无限期地阻塞。
当我们每个ikun进程在抢蛋时,一次只能有一个ikun进程可以使用这个资源(进程互斥)。如果多个进程同时抢蛋,可能会导致数据冲突和不一致,因此必须保证互斥访问。
如果每个ikun进程都不同意坤坤哥哥提出的调度方案,导致大家都在等待对方释放资源,而没有人能继续执行任务,这种情况就会形成死锁。死锁意味着多个进程互相等待对方占用的资源,导致所有进程都无法继续执行。
进程和线程的详细概念
进程:
静态的程序跑起来就是动态的进程,一个程序可以跑多次就有了多个进程(引入进程是为了更好地描述和控制程序的并发执行)。进程的组成是程序段、数据段、PCB。PCB就是进程的“学生证”,记录了进程的各种信息(进程描述信息、进程控制和管理信息、资源分配清单、CPU上下文)。
进程的状态:
进程有五种状态:
- 创建态:终端用户登录系统、用户程序应用请求、系统提供服务、作业调度。
- 就绪态:等待CPU分配时间片。
- 运行态:占用CPU执行任务。
- 等待/阻塞态:期待的事件没有发生(如请求资源失败)。
- 终止态:正常或异常结束、外界干扰。
进程通信:
进程之间需要相互通信,主要通过消息传递和共享内存来实现。
线程:
线程是进程的轻量级子任务,同一进程的线程共享地址空间和资源,因此可以更高效地进行任务切换和协作。线程有三种实现方式:
- 用户级线程:多对一,不需要内核支持,切换开销小。
- 内核级线程:一对一,内核支持,切换开销大。
- 组合方式:多对多,结合了以上两种方式的优点。
CPU调度
调度类型:
- 高级调度(作业调度)
- 中级调度(内存调度)
- 低级调度(进程调度)
调度模式:
- 抢占式:高优先级、时间片轮转、多级反馈队列。
- 非抢占式:先来先服务、短作业优先、高响应比。
同步与互斥
临界区:对临界资源进行操作的代码段。
互斥:确保一次只有一个进程进入临界区。实现方法包括:
- 软件方法:单标志法、双标志法、Peterson算法等。
- 硬件方法:中断屏蔽、TSL指令和Swap指令。
信号量机制:
- 整型信号量:只记录资源数目。
- 记录型信号量:记录资源数目并改变进程状态。
- P操作:申请资源,若资源不足则等待。
- V操作:释放资源,唤醒等待进程。
经典场景:
- 生产者-消费者问题:协调生产和消费的同步问题。
- 吸烟者问题:如何实现公平轮流。
- 读者-写者问题:控制读写操作的同步与互斥。
- 哲学家进餐问题:避免死锁和饥饿问题。
死锁
死锁条件:
- 互斥条件:资源独占。
- 不可剥夺条件:资源不可强制释放。
- 请求并保持条件:持有资源时请求新的资源。
- 循环等待:存在循环等待链。
解决方案:
- 预防:破坏上述四个条件。
- 防止:如银行家算法。
- 检测和解除:通过资源分配图检测,资源剥夺、撤销进程、进程回退等方法解除。
这样的小故事可以帮助你更好地理解操作系统中进程和线程的概念以及它们的管理机制,包括调度、同步、互斥和死锁处理。