清华大学出版社 TSINGHUA UNIVERSITY PRESS top top getaddr top a 执行语句[a a 取数失败 btop←top+1b b 栈|e后) e s「f 「f (c 图31堆栈的取数和存数过程
图3.1 堆栈的取数和存数过程
清华大学出版社 000000 TSINGHUA UNIVERSITY PRESS 例:设有堆栈S,栈指针top,栈中存放内存中相应数 据块地址(如图31(a)设有两个程序段 getaddre(op) reladdr(b,其中 getaddr(op)从给 定的top所指栈中取出相应的内存数据块地址,而 reladdr(bk)则将内存数据块地址bk放入堆栈S中。 getaddre(top)和 reladdr(bk)可分别描述为: procedure getaddr(to begin local r r←(tp) top←top-1 return(r) en d procedure reladdr(blk)
例:设有堆栈S,栈指针top,栈中存放内存中相应数 据块地址(如图3.1(a))设有两个程序段 getaddr(top)和reladdr(blk),其中getaddr(top)从给 定的top所指栈中取出相应的内存数据块地址,而 reladdr(blk)则将内存数据块地址blk放入堆栈S中。 getaddr(top)和reladdr(blk)可分别描述为: procedure getaddr(top) begin local r r ←(top) top ← top-1 return(r) end procedure reladdr(blk)
清华大学出版社 000000 TSINGHUA UNIVERSITY PRESS begin top←top+1 (top)←blk end 显然,如果上例中的 getaddr和 reladdrz程序段进行 顺序执行,其执行结果具有封闭性和可再现性。但 如果对这两个程序段采用并发执行,则在单CPU系 统中,将有可能出现下述情况:
begin top ← top+1 (top)← blk end 显然,如果上例中的getaddr 和 reladdr程序段进行 顺序执行,其执行结果具有封闭性和可再现性。但 如果对这两个程序段采用并发执行,则在单CPU系 统中,将有可能出现下述情况:
清华大学出版社 000000 TSINGHUA UNIVERSITY PRESS 首先,程序段 reladdr开始执行,准备释放内存数据 块地址入栈。然而,当 reladdr执行到top←top+1 语句时(如图3(b),程序段 getaddr也开始执行 且抢占了处理机,从而程序段 reladdr停在top← top+1处等待处理机。 getaddr程序段的执行目的是 要从对应的堆栈指针top所指的栈格中取出一个内 存数据块地址,显然,由于 reladdr程序段的执行 将指针top升高了一格且未放进适当的数据, getaddr的执行结果是失败的(如图31(c)。另外, 如果改变程序段 getaddr和 reladdr的执行顺序或执 行速度,又可得到不同的执行结果。这说明了如下 问题:在某些情况下,程序的并发执行使得其执行 结果不再具有封闭性和可再现性,且可能造成程序 出现错误
首先,程序段 reladdr开始执行,准备释放内存数据 块地址入栈。然而,当reladdr 执行到top ← top+1 语句时(如图3.1(b)),程序段getaddr 也开始执行 且抢占了处理机,从而程序段reladdr 停在top ← top+1处等待处理机。getaddr 程序段的执行目的是 要从对应的堆栈指针top 所指的栈格中取出一个内 存数据块地址,显然,由于reladdr 程序段的执行 将指针top 升高了一格且未放进适当的数据, getaddr 的执行结果是失败的(如图3.1(c))。另外, 如果改变程序段getaddr和 reladdr的执行顺序或执 行速度,又可得到不同的执行结果。这说明了如下 问题:在某些情况下,程序的并发执行使得其执行 结果不再具有封闭性和可再现性,且可能造成程序 出现错误
清华大学出版社 000000 TSINGHUA UNIVERSITY PRESS 上例中的程序段并发执行出现错误结果是由于两程 序段共享资源堆栈S,从而使得执行结果受执行速 度影响。一般情况下,并发执行的各程序段如果共 享软、硬件资源,都会造成其执行结果受执行速度 影响的局面。显然,这是程序设计人员不希望看到 的。为了使得在并发执行时不出现错误结果,必须 采取某些措施来制约、控制各并发程序段的执行速 度。这在操作系统程序设计中尤其重要,因为操作 系统用户随机性与各道程序逻辑独立的特点将使得 每个用户程序所使用的软、硬件资源都受到其他并 发程序的共享和竞争,从而得到非预料的或不正确 的结果。为了控制和协调各程序段执行过程中的软 硬件资源的共享和竞争,显然,必须应该有一个描 述各程序段执行过程和共享资源的基本单位
上例中的程序段并发执行出现错误结果是由于两程 序段共享资源堆栈S,从而使得执行结果受执行速 度影响。一般情况下,并发执行的各程序段如果共 享软、硬件资源,都会造成其执行结果受执行速度 影响的局面。显然,这是程序设计人员不希望看到 的。为了使得在并发执行时不出现错误结果,必须 采取某些措施来制约、控制各并发程序段的执行速 度。这在操作系统程序设计中尤其重要,因为操作 系统用户随机性与各道程序逻辑独立的特点将使得 每个用户程序所使用的软、硬件资源都受到其他并 发程序的共享和竞争,从而得到非预料的或不正确 的结果。为了控制和协调各程序段执行过程中的软、 硬件资源的共享和竞争,显然,必须应该有一个描 述各程序段执行过程和共享资源的基本单位