欢迎来到天天文库
浏览记录
ID:48734699
大小:45.50 KB
页数:10页
时间:2020-01-20
《chp08内核同步导论.ppt》由会员上传分享,免费在线阅读,更多相关内容在行业资料-天天文库。
1、第8章.内核同步导论引言在共享内存的应用中并发访问的资源需要保护因为如果多个执行线程可能会同时访问和操作数据适当地对共享资源保护是比较困难的多处理器支持意味着内核代码可以同时运行在多个处理器上本章讨论操作系统内核中的并发和同步临界区和竞争条件临界区访问和处理共享的数据多个线程同时访问共享的资源会存在不安全性竞争条件(bug)两个线程同时进入同一个临界区会发生同步保证不安全的并发不发生,竞争条件不发生例如对共享变量进行修改:i++;线程2---geti(8)incrementi(8->9)writebacki(9)共享变量线程1geti(7)increm
2、enti(7->8)writebacki(8)---线程1geti(7)incrementi(7->8)-writebacki(8)--线程2geti(7)-incrementi(7->8)-writebacki(8)线程1incrementi(7->8)-Or:-incrementi(8->9)线程2-incrementi(8->9)incrementi(7->8)-希望的顺序可能的顺序可能的顺序加锁锁提供的机制:类似于门锁线程1试图锁定队列成功:获得锁访问队列...解锁...线程2试图锁定队列失败:等待..等待...等待...成功:获得锁访问队列.
3、..解锁锁的例子什么导致了并发?在什么地方?中断Softirqs和tasklets内核抢占用户空间的睡眠和同步SMP怎么知道那些东西需要保护?编写内核代码时,应当多问如下问题:是否全局变量?这些数据是进程上下文和中断上下文之间共享的数据吗?如果一个进程在访问这些数据时被抢占了,新调度的进程可以访问这些数据吗?当前进程是否可以睡眠在(阻塞)在一些资源上?怎样防止数据失控?这个函数如果在另一个处理器调用,会发生什么事情?你要对这些代码做什么?死锁多线程多资源每一个线程都在等待其中的一个资源但所有的资源都已被占用死锁死锁的例子防止死锁死锁:一些简单的方法锁的
4、顺序至关重要防止饥饿不要对同一个锁上两次锁锁的方案过于复杂易导致死锁线程1获得锁A试图获得锁B等待锁B线程2获得锁B试图获得锁A等待锁A争用和可扩充性锁的竞争用于描述一个锁当修门在被使用,但是另一个线程正在试图获得可扩充性系统可被扩展的程度考虑大量的进程,处理器以及内存Kernel2.6内核锁粒度较小且可扩充性好
此文档下载收益归作者所有