浅谈操作系统底层锁的实现
在写代码时经常会使用到锁,很多的锁是需要操作系统支持的,系统层面的锁是如何实现的呢?
其实系统的锁实现和平时我们自己实现锁的过程是一样的:
1.读取锁标志位read lock 2.判断标志位锁状态lock status 3.上锁(如果已经上锁则返回失败) 4.返回成功 5.执行程序 6.释放锁
但是这个过程不得不考虑的是当有两个线程同时拿到标志位都是0怎么办,很简单,直接把1,2,3作为一个原子操作就行了,也就是操作系统层面的关闭中断来保证123是一个原子操作。这样的话就不会有两个线程同时get lock了,但是问题又来了这是在单核上没有问题,可是现在计算机都是多核该如何处理呢,这就涉及到计算机的硬件总线支持了。
总线
总线(Bus)是计算机各种功能部件之间传送信息的公共通信干线,它是由导线组成的传输线束, 按照计算机所传输的信息种类,计算机的总线可以划分为数据总线、地址总线和控制总线,分别用来传输数据、数据地址和控制信号。总线是一种内部结构,它是cpu、内存、输入、输出设备传递信息的公用通道,主机的各个部件通过总线相连接,外部设备通过相应的接口电路再与总线相连接,从而形成了计算机硬件系统。在计算机系统中,各个部件之间传送信息的公共通路叫总线,微型计算机是以总线结构来连接各个功能部件的。(以上摘抄百度)
多核计算机上提供了锁总线的支持来实现锁,然后再配合关闭中断的原子操作就能保证锁的正确性了。
最后,由于计算机的硬件机制和OS的配合就能实现锁,基于锁就可以实现各种各样的同步功能了。