《操作系统真象还原》第十章输入输出系统

本章主要讲述了、缓冲区、与键盘的交互控制。

基本概念

本章涉及的基本概念如下:

  • 公共资源:所有任务共享的一套资源
  • 临界区:访问公共资源的指令代码组成的区域
  • 互斥:公共资源在任意时刻只能被一个任务访问,即只能有一个任务在自己的临界区中执行。
  • 竞争条件:多个任务以非互斥的方式同时进入凝结去
  • 信号量:就是一个整形变量,可以被增加或减少
    • 信号量的增加和减少都必须是原子性的
  • 锁:就是一个二进制信号量,值为0表示上锁了不能访问,为1表示可以访问。
  • 阻塞:由线程自己发起,被加入阻塞(all)队列中
  • 唤醒:由另一个线程唤A醒某个线程B(线程无法唤醒自己),将线程B加入到就绪队列中
  • 键盘驱动:把由键盘传给CPU的通码或者断码翻译成ASCII码的程序
  • 环形输入缓冲区:环形队列,一头写另一头读
  • 生产者消费者模型:两(多)个线程,对同一个缓存区进行读写,加锁访问即可。

实现

thread_block(): 阻塞线程:就是让线程状态为阻塞态,并且schedule,(原子操作)

thread_unblock() 释放线程:就是改状态为TASK_READY,并加入到就绪队列中,(原子操作)

作者在最后用显示器环形缓存队列实现了消费者,生产者模型,在判断队列是否为空必须关中断 ,在这模型中关键的点就是:每个线程执行临界区时,必须得是原子操作

这一篇代码实现都没有什么太大的亮点

执行结果

  1. 直接写满了缓冲区

image-20210914161740077

  1. 消费者、生产者模型

image-20210914161937360

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值