摘要: #死锁处理 一个死锁的栗子,来源于用户对信号量的错误使用,形成一种信号量需求环路,相互依赖,导致谁也无法向下进行。更坏的情况是,锁住的资源越来越多,导致最后cpu不工作了。 (这里应该是先使用P(mutex),再P(empty))先使用了mutex,然后由于empty不够则producer被阻塞,另 阅读全文
posted @ 2020-10-25 23:41 HermioneGranger 阅读(105) 评论(0) 推荐(0)
摘要: #信号量的代码实现 申请信号量,这个在内核中实现,因为信号量中具有pcb。 每个信号量具有唯一的标识,内核根据标识在信号量表中查询信号量。 这里用开关中断来保证原子性。 具体逻辑是,在做相关操作之前,调用wait函数,判断当前信号量的值,判断自己是否要进入等待队列,如果要就schedule。 如果不 阅读全文
posted @ 2020-10-25 18:43 HermioneGranger 阅读(205) 评论(0) 推荐(0)
摘要: #信号量临界区保护 共同修改一个变量,可能会发生问题。 这种情况称为Race Condition,不是编程的问题,是系统调度的问题。 解决问题的直观想法:给信号量上锁。一个程序在操作信号量的时候,确保信号量不能被别人修改。 我们定义临界区:一次只允许一个进程进入的该进程的那一段代码。其他地方叫剩余区 阅读全文
posted @ 2020-10-25 17:31 HermioneGranger 阅读(236) 评论(0) 推荐(0)
摘要: #进程同步与信号量 引例: 多进程合作要沟通好。 总不能售票员还在卖票的时候就开车。 在停车的时候,司机在等售票员的一个信号,这样他才可以开车。 在开车的时候,售票员也在等司机的一个信号,这样他才可以开门。 形成一种合理有序向前推进的工作。 进程同步的核心:等!等信号! 但是,只发信号还是解决不了全 阅读全文
posted @ 2020-10-25 17:04 HermioneGranger 阅读(114) 评论(0) 推荐(0)
摘要: #一个实际的schedule函数 Linux 0.11的调度函数schedule函数 注释: 在这里,counter有两个含义,一是优先级,二是时间片。简单理解就是,时间片多的,优先级高。 然后每次调度的时候,找到counter最大的就绪任务,也就是优先级最高的就绪任务去执行。 如果没有找到,那么就 阅读全文
posted @ 2020-10-25 16:30 HermioneGranger 阅读(156) 评论(0) 推荐(0)