我有两个不同的应用程序访问Linux中共享库中的相同代码。
情况1: - 当第一个应用程序访问库中的代码时,它获取锁定。但是当第二个应用程序访问相同的代码时,它如何知道已经应用了锁,因为将为第二个应用程序创建另一个单独的代码副本。
答案 0 :(得分:2)
Semaphore
是一个内核变量。
一种考虑信号量的有用方法是记录特定资源的可用单位数量,并结合安全操作(即没有竞争条件)调整该记录作为单位是必需的或变为免费,并在必要时等到资源的一个单位可用 link
所以当您锁定semaphore
时,其值将为0(零),现在显示其不可用。因此,当其他进程因锁定而尝试访问该共享区域时,共享区域将不可用。当信号量解锁时,该值将为1(一),这意味着它现在可用。
因为它是一个内核变量,我们用它来进行同步
没有方法可以访问信号量的值,我们依靠Semaphore的不变量来定义它的行为。
在基于Unix的系统上,代码段(.text)可以在多个进程之间共享,因为它是不可变的。共享库的代码由操作系统映射到内存中。
基本上,每个包含静态数据的共享库(例如全局变量)都有一个全局偏移表GOT。在共享库上,所有对静态数据(全局)的引用都通过。因此,即使代码段在多个进程之间共享,每个进程也具有其共享库的其他段的独占映射,包括相应的全局偏移表,其条目相应地重新定位。复杂性由CPU的内存管理单元解决。