(3)利用硬件技术实现进程同步机制 提高临界区代码执行中断优先级 这种方法在UNX和 Windows nt中都使用,它是在单机系 统中有效地实现互斥的一种方法 因为在传统操作系统中,打断进程对临界区代码的执 行只有中断请求、中断一旦被接受,系统就有可能调用 其它进程进入临界区,并修改此全局数据库。所以用提 高临界区中断优先级方法就可以屏蔽了其它中断,保证 了临界段的执行不被打断,从而实现了互斥 在多处理机情况下,用提高临界段代码执行的中断优先 级方法是无法保证互斥的,因为在一个处理机上提高中 断优先级并不能阻止其它处理器上的中断,所以必须采 用其它方法
(3)利用硬件技术实现进程同步机制 1.提高临界区代码执行中断优先级 这种方法在UNIX和Windows NT中都使用,它是在单机系 统中有效地实现互斥的一种方法。 因为在传统操作系统中,打断进程对临界区代码的执 行只有中断请求、中断一旦被接受,系统就有可能调用 其它进程进入临界区,并修改此全局数据库。所以用提 高临界区中断优先级方法就可以屏蔽了其它中断,保证 了临界段的执行不被打断,从而实现了互斥。 在多处理机情况下,用提高临界段代码执行的中断优先 级方法是无法保证互斥的,因为在一个处理机上提高中 断优先级并不能阻止其它处理器上的中断,所以必须采 用其它方法
2.检测和设置(TS)硬件指令 许多大型机(如IBM370等)和微型机(如 Intel×86等)中 都提供了专用的硬件指令,这些指令全部允许对一个字中的 内容进行检测和修正,或交换两个字的内容。特别要指出的 是这些操作都是在一个存储周期中完成,或者说由一条指令 来完成,用这些指令就可以解决临界区问题了。 在单机系统中,由于中断的原因,使得一个进程在对一个公 用变量先取来并检测其值,然后修改的这两个动作中,可以 插入其它进程对此公用变量的访问和修改,从而破坏了此公 用变量数据的完整性和正确性。在多机系统中,多处理机共 享主存,因而使得某处理机可插入另一处理机的两个存储访 问周期之间,访问并修改此共享变量
2. 检测和设置(TS)硬件指令 许多大型机(如IBM370等)和微型机(如Intel ×86等)中 都提供了专用的硬件指令,这些指令全部允许对一个字中的 内容进行检测和修正,或交换两个字的内容。特别要指出的 是这些操作都是在一个存储周期中完成,或者说由一条指令 来完成,用这些指令就可以解决临界区问题了。 在单机系统中,由于中断的原因,使得一个进程在对一个公 用变量先取来并检测其值,然后修改的这两个动作中,可以 插入其它进程对此公用变量的访问和修改,从而破坏了此公 用变量数据的完整性和正确性。在多机系统中,多处理机共 享主存,因而使得某处理机可插入另一处理机的两个存储访 问周期之间,访问并修改此共享变量
检测和设置(TS)硬件指令-1 对于同一主存块访问要求,即使两个处理机同时提出,存 储控制逻辑也只能让其中之一先访问,但在一个处理机 的两个存储周期间则可以插入另一个处理机的存储周期。 现在用一条指令来完成检测和修改两个功能,这样中断 和插入另一处理机的存储周期均不可能,所以不会影响 此公用变量数据的完整性。 检测和设置(TS)的功能可用 PASCAL语言描述如下: function tS (var flag: boolean): boolean begin TS= flag flag true i en 这条指令在Z-8000中称为TEST指令,在IBM370中称为TS指令
检测和设置(TS)硬件指令-1 对于同一主存块访问要求,即使两个处理机同时提出,存 储控制逻辑也只能让其中之一先访问,但在一个处理机 的两个存储周期间则可以插入另一个处理机的存储周期。 现在用一条指令来完成检测和修改两个功能,这样中断 和插入另一处理机的存储周期均不可能,所以不会影响 此公用变量数据的完整性。 检测和设置(TS)的功能可用PASCAL语言描述如下: function TS (var flag :boolean):boolean begin TS = flag ; flag :=true ; end 这条指令在Z-8000中称为TEST指令,在IBM370中称为TS指令
检测和设置(TS)硬件指令-2 用这些硬件指令可以简单有效地实现互斥。其方法是为每个 临界段或其它互斥资源设置一个布尔变量,例如称为1ock 当其值为 false则临界区末被使用,反之则说明正有进程在 临界区中执行。于是某进程用TS指令实现互斥的程序结构为 (设为无限循环进程): repeat while ts(lock) do skip 进程临界区CS; lock =false until false: WindowsNt内核用来达到多处理器互斥的机制“转锁”,它 类同于TS指令机制
检测和设置(TS)硬件指令-2 用这些硬件指令可以简单有效地实现互斥。其方法是为每个 临界段或其它互斥资源设置一个布尔变量,例如称为lock。 当其值为false则临界区末被使用,反之则说明正有进程在 临界区中执行。于是某进程用TS指令实现互斥的程序结构为 (设为无限循环进程): repeat ... while TS(lock) do skip ; 进程临界区CS ; lock :=false ; ... until false; WindowsNT 内核用来达到多处理器互斥的机制“转锁”,它 类同于TS指令机制
()信号量( Semaph。res机制 1965年,荷兰学者 Dijkstra提出的信号量机制是一种卓 有成效的进程同步工具,在长期广泛的应用中,信号量 机制又得到了很大的发展,它从整型信号量机制发展到 记录型信号量机制,进而发展为“信号集”机制。现在 信号量机制已广泛应用于0S中。 (1)记录型信号机制 记录型信号量结构 在信号量机制中信号量是代表资源物理实体的数据结构, 记录型信号量的数据结构描述如下: type semaphore record value: integer L: pointer of PCB en 信号量的值只能通过两个原子操作:P、V操作来改变, 它代表分配资源和释放资源
(二)信号量(Semaphores)机制 1965年,荷兰学者Dijkstra提出的信号量机制是一种卓 有成效的进程同步工具,在长期广泛的应用中,信号量 机制又得到了很大的发展,它从整型信号量机制发展到 记录型信号量机制,进而发展为“信号集”机制。现在 信号量机制已广泛应用于OS中。 (1) 记录型信号机制 记录型信号量结构 在信号量机制中信号量是代表资源物理实体的数据结构, 记录型信号量的数据结构描述如下: type semaphore=record value: integer; L: pointer of PCB; end 信号量的值只能通过两个原子操作:P、V操作来改变, 它代表分配资源和释放资源