Operating System-进程间互斥的方案-保证同一时间只有一个进程进入临界区(3)- TSL指令
2015-12-16 21:47
357 查看
本文接上一篇文章继续介绍如何实现同一时间只允许一个进程进入临界区的机制。本文主要介绍TSL指令。
方案汇总
屏蔽中断
锁变量
严格轮换法
TSL指令
Peterson解法
硬件指令:
该指令所做的事情:
读取Lock的值
把读到的值存入寄存器RX中
然后给LOCK设置一个非0的值(设置到LOCK对应的内存中)
以上三个步骤是一个不可拆分的原子操作,执行该指令的CPU将会锁住内存总线(memory bus),所以在该指令执行完成之前其他CPU是无法访问内存的。
如果LOCK的值为0,则将LOCK的值设置为1,且进入临界区
如果LOCK的值为1,则一直循环等待
如果多个进程同时调用TSL,利用TSL的特性:只有一个进程访问,其他的会被block
离开临界区
离开临界区后将LOCK设置为0,其他进程变可进入临界区。
方案汇总
屏蔽中断
锁变量
严格轮换法
TSL指令
Peterson解法
一、What is TSL
TSL是Test and Set Lock的缩写。要实现TSL需要硬件的支持。硬件指令:
TSL RX, LOCK
该指令所做的事情:
读取Lock的值
把读到的值存入寄存器RX中
然后给LOCK设置一个非0的值(设置到LOCK对应的内存中)
以上三个步骤是一个不可拆分的原子操作,执行该指令的CPU将会锁住内存总线(memory bus),所以在该指令执行完成之前其他CPU是无法访问内存的。
二、TSL和中断屏蔽的区别
当一个CPU将中断屏蔽后,只影响当前屏蔽中断的CPU,其他CPU还是依然可以照样访问内存的(想要中断)。唯一一个当一个CPU在访问内存时阻止其他CPU访问内存的方法就是将内存总线锁住,这个需要硬件的支持,TSL可以达到该目的。三、利用TSL完成进程间互斥
进入临界区如果LOCK的值为0,则将LOCK的值设置为1,且进入临界区
如果LOCK的值为1,则一直循环等待
如果多个进程同时调用TSL,利用TSL的特性:只有一个进程访问,其他的会被block
离开临界区
离开临界区后将LOCK设置为0,其他进程变可进入临界区。
相关文章推荐
- docker使用总结
- Linux软连接和硬链接_note
- 快速搭建Web服务器软件PHP+Apache+MySQL
- ZooKeeper学习之运维工具zkweb
- 网站优化时要学会避免哪些错误
- 网站板块布局黄金视线分布法
- 如何做到网站改版不换权
- AMD 宣布开源 Linux 显卡驱动与 GPUOpen 工具
- CentOS 7.2安装详解
- linux c 生产者与消费者问题 信号量(sem_t)
- linux内核的三种调度方法
- XAMPP Apache 无法启动原因及解决方法
- centos 下安装vitrualbox
- centos DNS服务搭建 DNS原理 使用bind搭建DNS服务器 配置DNS转发 配置主从 安装dig工具 DHCP dhclient 各种域名解析记录 mydns 第三十节课
- openjudge 宗教信仰
- Activity生命周期之stop和restart Activity
- 【Linux】对比直接编译进内核和模块形式
- linux gdb信号调试程序
- Linux 的多线程编程的高效开发经验
- WIN7SP1 Crystal Reports异常:System.Runtime.InteropServices.ComException(0x800003E7)