学进去-教育应平等而普惠
试题
类型:操作题
难度系数:0.15
所属科目:高中信息技术
操作系统在管理磁盘时,会将磁盘分为一个个“盘块”。在为文件分配空间时,可以将文件装到离散的盘块中。读取一个文件时,首先在目录结构中找到文件项。从文件项中可以获取文件名、存储时间、该文件在存储块中的起始地址等基本信息,但不包含文件具体内容,然后在磁盘文件分配表中找到对应的文件。磁盘文件分配表如图a所示。文件结束块用-1表示,空闲盘块用0xff表示。

图a


(1)根据文件的起始地址,能方便地找到文件的其它盘块。如图a中,文件abc在磁盘中的盘块号依次是____(注:各盘块号用→分隔)。
(2)如果目录结构损坏,就不能获取文件的基本信息和起始地址。但我们可以借助文件分配表来恢复部分数据(不考虑恢复文件名、存储时间等信息)。函数regain的功能是模拟数据恢复,找到各个文件的起始地址和大小(盘块数量),并返回以[[起始地址,文件大小],…]形式的列表lst。变量allot存储文件分配表信息。
def regain(allot):
       lst=[]
       visited=[]#记录allot的访问情况
       for i in range(len(allot)):
             if allot[i]!=0xff and i not in visited:
                    fsize=0
                    p=i
                    while p!=-1 and p not in visited:
                           visited.append(p)
                           fsize+=1
                           p=allot[p]
                    if p==-1:
                           lst.append([i,fsize])
                    else:
                           for j in range(len(lst)):
                                 if lst[j][0]==p:
                                        lst[j][0]=i
                                        

return lst


若 allot 为[3,7,13,9,0xff,0xff,0xff,8,-1,-1,0xff,1,0,11,0xff,0xff],调用regain函数,
①加框语句 lst[j][1]=lst[j][1]+fsize一共会被执行____次。
②如果把while p!=-1 and p not in visited 改写为while p!=-l,对程序的影响是____(多选,填字母)。
A.会增加while的循环体执行次数B.返回的lst中的节点数量保持不变
C.while循环不能正常结束D.返回的lst中,文件的起始地址部分不正确
(3)在创建文件时,若新文件需要占据5个盘块大小,只需要从头到尾找到空闲盘块,并依次链接,并把首地址存放到文件项中。为了有效管理空闲块,我们可以将所有空闲盘区(每个空闲盘区可以包括若干个空闲盘块)构建到一条空闲链freelst中。freelst每个节点存储本空闲盘区的盘块号、长度和指向下个盘块的指针,创建时把新节点链接到freelst尾部。

图b


如图b所示,共有3个空闲盘区,盘块号依次为4、5、6、10、14、15,请在划线处填上合适的代码。
def mergefree(allot):#mergefree 的功能是从头到尾扫描文件分配表,创建空白盘区链

freeh=-1;freelst=[]


       n=len(allot)
       i=0

while i<n:

if allot[i]==0xff:

       j=i+1

while ①____:

       j+=1

freelst.append([i,j-i,-1])

if freeh==-1:

freeh=cur=len(freelst)-1

else:

freelst[cur][2]=len(freelst)-1

____


                      i=j+1

else:


                      i+=1

return freeh,freelst


#读取文件分配表信息存储到allot中,代码略
allot=[3,7,13,9,0xff,0xff,0xff,8,-1,-1,0xff,1,0,11,0xff,0xff]
head,freelst=mergefree(allot)
p=head
while p!=-1:#打印出所有空闲盘块号

for i in range(freelst[p][1]):

print(③____,end=',')

p=freelst[p][2]

编辑解析赚收入
收藏
|
有奖纠错

同类型试题

优质答疑

y = sin x, x∈R, y∈[–1,1],周期为2π,函数图像以 x = (π/2) + kπ 为对称轴
y = arcsin x, x∈[–1,1], y∈[–π/2,π/2]
sin x = 0 ←→ arcsin x = 0
sin x = 1/2 ←→ arcsin x = π/6
sin x = √2/2 ←→ arcsin x = π/4
sin x = 1 ←→ arcsin x = π/2

用户名称
2019-09-19

y = sin x, x∈R, y∈[–1,1],周期为2π,函数图像以 x = (π/2) + kπ 为对称轴
y = arcsin x, x∈[–1,1], y∈[–π/2,π/2]
sin x = 0 ←→ arcsin x = 0
sin x = 1/2 ←→ arcsin x = π/6
sin x = √2/2 ←→ arcsin x = π/4
sin x = 1 ←→ arcsin x = π/2

用户名称
2019-09-19
我要答疑
编写解析
解析:

奖学金将在审核通过后自动发放到帐

提交
我要答疑
我要答疑:
提交