【正确答案】首先把文件存储设备中的所有空闲块按 50 块划分为一组。组的划分为从后往前顺次划分。其中,每组的第一块用来存放前一组中各块的块号和总块数。由于第一组的前面已无其它组存在,因此,第一组的块数为 49 块。不过,由于存储设备的空间块不一定正好是 50 的整倍数,因而最后一组将不足 50 块,且由于该组后面已无另外的空闲块组,所以,该组的物理块号与总块数只能放在管理文件存储设备用的文件资源表中。
成组链法的分配和释放过程:
首先,系统在初启时把文件资源表复制到内存,从而使文件资源表中放有最后一组空闲块块号与总块数的堆栈进入内存,并使得空闲块的分配与释放可在内存进行。与空闲块块号及总块数相对应,用于空闲块分配与回收的堆栈有栈指针 Ptr ,且Ptr 的初值等于该组空闲块的总块数。当申请者提出空闲块要求 n 时,按照后进先出的原则,分配程序在取走 Ptr 所指的块号之后,再做 Ptr=Ptr-1 的操作。这个过程一直持续到所要求的 n 块都已分配完毕或堆栈中只剩下最后一个空闲块的块号。当堆栈中只剩下最后一个空闲块号时,系统启动设备管理程序,将该块中存放的下一组的块号与总块数读入内存之后将该块分配给申请者。然后,系统重新设置 Ptr 指针,并继续为申请者进程分配空闲块。
文件存储设备的最后一个空闲块中设置有尾部标识,以指示空闲块分配完毕。 如果用户进程不再使用有关文件并删除这些文件时,回收程序回收装有这些文件的物理块。成组链法的回收过程仍利用文件管理堆栈进行回收。在回收时,回收程序先做 Ptr = Ptr + 1 操作,然后把回收的物理块号放入当前指针 Ptr 所指的位置。如果 Ptr 等于 50 ,则表示该组已经回收结束。此时,如果还有新的物理块需要回收的话,回收该块并启动 I/O 设备管理程序,把回收的 50 个块号与块数写入新回收的块中。然后,将 Ptr 重新置 1 另起一个新组。显然,对空闲块的分配和释放必须互斥进行,否则将会发生数据混乱。
【答案解析】