试题

试题 试卷

logo

题型:综合题 题类: 难易度:困难

浙江省五校联盟2023-2024学年高二下学期信息技术期中考试试卷

在计算机的操作系统中,经常需要给应用程序“分配内存”和“释放内存”。若有大小为1024B的内存,如1图所示:

使用列表["+",5]表示申请连续5B的内存,使用列表[2,2]表示回收位置2开始连续2B的内存。若指令集表示为:order=[["+",5],[2,2],["+",8],[8,3]]。随着指令集被执行,1024B连续的内存块会被分割成若干个占用内存空闲内存。为方便起见,“占用内存”用1表示,“空闲内存”用0表示,故执行上述指令集后,内存占用情况如2图所示:

若将空闲块用链表组织起来,就可以快速查找空闲块和删除空闲块。把连续的空闲块定义为一个节点,每个节点由[空闲块起点, 空闲块长度, 下一个空闲块位置]三部分内容构成。根据2图内存占用情况,创建的空闲块链表如3图所示:

(1)、根据2图所示的内存占用情况,执行指令[4,4]后(连续空闲块要合并),内存中“空闲块”的数量变为个。
(2)、根据内存占用情况列表allot,创建空闲块链表代码如下:

def linkList(allot): #linkList函数功能:根据内存占用0/1列表allot,创建空闲块链表link

 link = [ [-1,-1,-1] ] #链表包含一个空头节点

 head = tail = 0 ; n = len( allot ) ; i = 0

 while i < n :

 if allot[ i ] == 0 :

 j = i + 1

 while j<n and allot[ j ] == 0: 

 j = j + 1

 link.append( [ i , j – i , -1 ] )

 link[ tail ][ 2 ] =     ▲

 tail = len( link ) - 1

            

 else:

 i += 1

return head , link

请在▲处填入合适的代码

若将加框处的代码修改为i = j,是否影响程序的执行结果(选填:是/否)。

(3)、模拟上述内存操作的Python程序如下,请在划线处填入合适的代码。

#通过文件读入内存分配表allot和指令集order,其代码略。

head , link = linkList ( allot )

for i in range( len( order ) ):

 if order[ i ][ 0 ] == " + ": #必须分配连续的空闲块,且由第一个满足空间大小的节点分配

 p = head ; q = link[ head ][ 2 ]

 while 

 p = q ; q = link[ q ][ 2 ]

 if  q == -1:

 print( "内存不足!" )

 else:

 if link[q][1] == order[i][1]: 

                

 else:

 link[ q ][ 0 ] = link[ q ][ 0 ] + order[ i ][ 1 ]

 link[ q ][ 1 ] = link[ q ][ 1 ] - order[ i ][ 1 ]

 else:

 p = head ;  q = link[ head ][ 2 ]

 while q != -1 and link[ q ][ 0 ]<order[ i ][ 0 ]:

 p = q ; q = link[ q ][ 2 ]

 if link[ p ][ 0 ] + link[ p ][ 1 ] == order[ i ][ 0 ]: #前面节点合并

 link[ p ][ 1 ] = link[ p ][ 1 ] + order[ i ][ 1 ]

 else:

 link.append([ order[ i ][ 0 ] , order[ i ][ 1 ] , q]) #添加节点

 link[ p ][ 2 ] = len( link ) - 1

            p = link[ p ][ 2 ]

   if q != -1 and : #后面节点合并

 link[ p ][ 1 ] = link[ p ][ 1 ] + link[ q ][ 1 ]

 link[ p ][ 2 ] = link[ q ][ 2 ]

举一反三
返回首页

试题篮