Операционные системы. Марапулец Ю.В. - 24 стр.

UptoLike

Составители: 

void DeleteList()
{
// отменить закрепление памяти и освободить адресное пространство
// Для операции MEM_DECOMMIT необходимо указать размер области
if( ! VirtualFree( (void*) pBase, MAX_ITEMS*ITEM_SIZE,
МЕМ_DECOMMIT))
ShowErrorMsg ( __LINE__ ) ;
// освободить память, начиная с базового адреса;
// указывать размер не требуется
if( ! VirtualFree( (void*) pBase, 0, MEM_RELEASE ) )
ShowErrorMsg( __LINE__ );
return;
}
По индексу в списке функция GetPageBaseEntry определяет первый
элемент соответствующей страницы памяти, округляя индекс до ближайшего
значения, кратного четырем и меньшего или равного iPlace.
int GetPageBaseEntry ( int iPlace )
{
while( iPlace % 4 )
{
iPlace--;
}
return( iPlace ) ;
}
После удаления записи из списка необходимо обновить массив, который
связывает элементы списка со значениями смещения в памяти. Параметр iStart
задает позицию строки, удаленной из списка.
void AdjustLookupTable ( int iStart )
{
int i;
// Этот цикл начинается с позиции, из которой только что
// была удалена запись. Все последующие элементы смещаются
// таким образом, чтобы заполнить образовавшееся свободное место.
for( i = iStart; i < MAX_ITEMS - 1; i++ )
{
iListLookup[i] = iListLookup[i + 1];
}
iListLookup[MAX_ITEMS - 1] = 0;
24
void DeleteList()
{
// отменить закрепление памяти и освободить адресное пространство
// Для операции MEM_DECOMMIT необходимо указать размер области
    if( ! VirtualFree( (void*) pBase, MAX_ITEMS*ITEM_SIZE,
              МЕМ_DECOMMIT))
           ShowErrorMsg ( __LINE__ ) ;

             // освободить память, начиная с базового адреса;
             // указывать размер не требуется
            if( ! VirtualFree( (void*) pBase, 0, MEM_RELEASE ) )
                    ShowErrorMsg( __LINE__ );
                   return;
}


     По индексу в списке функция GetPageBaseEntry определяет первый
элемент соответствующей страницы памяти, округляя индекс до ближайшего
значения, кратного четырем и меньшего или равного iPlace.

int GetPageBaseEntry ( int iPlace )
{
      while( iPlace % 4 )
      {
             iPlace--;
      }
      return( iPlace ) ;
}

      После удаления записи из списка необходимо обновить массив, который
связывает элементы списка со значениями смещения в памяти. Параметр iStart
задает позицию строки, удаленной из списка.

void AdjustLookupTable ( int iStart )
{
       int i;
// Этот цикл начинается с позиции, из которой только что
// была удалена запись. Все последующие элементы смещаются
// таким образом, чтобы заполнить образовавшееся свободное место.
       for( i = iStart; i < MAX_ITEMS - 1; i++ )
       {
               iListLookup[i] = iListLookup[i + 1];
       }
       iListLookup[MAX_ITEMS - 1] = 0;

                                       24