全知识整理目录
操作系统整理的目录,包括了整理的所有操作系统的知识。
目录
概述
临界区互斥,除了有软件方法(算法),还有硬件方法的实现,而硬件方法大部门都是通过命令来实现。
中断隐藏法
利用开/关中断指令实现,即某个进程开始访问临界区,那么就不允许被中断,也就避免了进程的切换,也不会出现两个进程同事访问临界区的情况。
这个方法,简单,有效,但是会导致效率很低。
TestAndSet指令
执行TestAndSet指令的逻辑是:
假设现在lock为false,代表临界资源A空闲,那么就可以访问临界资源,同时将lock设置为true,提醒别的进程,这个临界资源A正在访问,让其他的等等。
反之为true,则就等等。
bool TestAndSet(bool *lock){
bool old;
old = *lock; //old用来存放lock原来的值
*lock = true; //无论lock的值为什么,都设置为true
return old; //返回lock原来的值
}
//临界区互斥算法逻辑
while(TestAndSet(&lock));//上锁并检查
临界区代码...
lock = false;
剩余代码。。。
TestAndSet指令让上锁和检查操作一气呵成,但是不进入临界区的进程会一直进入循环状态,这样就,违反了让权等待的原则,暂时无法进入临界区的进程,会占用CPU,并循环执行TestAndSet指令。
Swap指令
这个指令跟前面的TestAndSet指令有些相似,每当有一个进程准备访问临界资源时,初始化old=true,和lock,那么别的进程就会等待。
Swap (bool *a, bool *b){
bool temp;
temp = *a;
*a = *b;
*b = temp;
}
//临界区互斥算法逻辑
bool old =ture;
while(old == true);
Swap(&lock,&old);
临界区代码...
lock = false;
剩余代码。。。
Swap指令和TestAndSet指令没有太多的区别,都是会陷入让一个进程循环执行Swap指令的情况,违反让权等待。