操作系统真象还原第十章

本文深入探讨操作系统中的同步机制,重点讲解了锁的使用,包括如何排查GP异常,理解原子操作,以及信号量的概念。此外,还介绍了如何用锁实现终端输出,解析了键盘输入原理和键盘驱动的编写,特别是环形输入缓冲区在解决生产者与消费者问题中的应用。
摘要由CSDN通过智能技术生成

10.1 同步机制–锁

10.1.1 排查 GP 异常,理解原子操作

线程调度工作的核心内容就是线程的上下文保护+上下文恢复。

10.1.2 找出代码中的临界区、互斥、竞争条件

公共资源:

  • 可以是公共内存、公共文件、公共硬件等,总之是被所有任务共享的一套资源

临界区:

  • 访问公共资源的指令代码

互斥:

  • 某一时刻公共资源只能被 1 个任务独享

竞争条件:

  • 多个任务以非互斥的方式同时进入临界区

关中断是实现互斥最简单的方法。

10.1.3 信号量

同步一般是指合作单位之间为协作完成某项工作而共同遵守的工作步调。

信号量是计数值,Dijkstra 用 P、V 操作来表示信号量的减、增。

P、V 的意义不明朗,本书用 down、up 来代替。

up 操作:

  • 将信号量的值加 1
  • 唤醒在此信号量上等待的线程

down 操作:

  • 判断信号量是否大于 0
  • 若信号量大于 0,则将信号量减 1
  • 若信号量等于 0,当前线程将自己阻塞,以此在此信号量上等待

up 操作和 down 操作都是原子操作。

若信号量的初值为 1,它的取值就只能为 0 和 1,称为二元信号量,可以利用二元信号量来实现锁。

1

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值