e finalizados,surgem na memoria areas fragmentadas, que podem dificultar o carregamento denovos programas maiores. Este problema e conhecido como fragmentacao externa, etambem e resolvido com o uso da paginacao. Uma vez que a paginacao permite que frames nao contiguos de memoria fisicapossam ser mapeados em paginas contiguas no espaco de memoria virtual, naoimporta em quais frames de memoria fisica os programas sao carregados, pois,eles sao mapeados em paginas virtuais adjacentes.Nosprocessadores da familia Intel o mapeamento de enderecos virtuais em fisicos efeito atraves do uso de dois niveis de tabelas de paginas, como demonstra afigura acima. No primeiro nivel existe a PageDirectory, que possui 1024 entradas. Cada uma dessas entradas aponta parauma Page Table. As Page Tables, por sua vez, tambem possuem1024 entradas, e cada uma delas aponta para um bloco de 4KB de memoria fisica.Dessa forma, o mapeamento de enderecos virtuais em fisicos e feito da seguinteforma: os 10 primeiros bits maissignificativos do endereco virtuais de 32 bitsrepresentam um indice na Page Directory.Os 10 bits anteriores a estesrepresentam um indice na page table,e os 12 bits menos significativosrepresentam o deslocamento dentro do framede memoria.Uma limitacao dagerencia de memoria do sistema FESO e a nao utilizacao de tecnicas para trocaentre programas, ou partes de programas, da memoria para alguma forma dearmazenamento secundario ou vice-versa. Caso nao haja memoria fisica disponivelpara um programa, este simplesmente nao e executado pelo sistema.Alocacao de MemoriaDiversos programas de computador sao criados de maneira que aquantidade total de memoria necessaria em sua execucao nao e definida duranteseu desenvolvimento. Isto e, nao ha como saber exatamente quanta memoria oprograma ira precisar, ou mesmo a quantidade de memoria pode variar a cadaexecucao.Neste caso, os programas se utilizam da alocacao dinamica dememoria, que consiste na expansao da memoria utilizada por um programa namedida em que esta e necessaria. O sistema operacional deve controlar quantamemoria cada programa esta utilizando, e permitir que mais memoria seja alocadadurante sua execucao.A alocacao dinamica e utilizada tanto pelo nucleo e drivers de dispositivos, quanto pelosaplicativos de usuario. Cada programa possui uma area reservada em seu espacode enderecos para a alocacao dinamica. Esta area esta e conhecido como heap e esta tambem presente no espaco deenderecamento do nucleo.Na linguagem C, as funcoes malloce free sao as principais responsaveis pela alocacao e liberacao de blocosde memoria. O sistema operacional oferece uma estrutura base na qual essasfuncoes podem operar. Cada processo, assim como o kernel, possui variaveis para o controle do heap. Sempre que a funcao malloc(ou sua versao implementada dentro do kernel,a kmalloc) necessita de mais memoria,e preciso aumentar o heap, e retornaro endereco do primeiro byte dememoria da area recem-expandida.No caso do kernel, asrotinas da gerencia de memoria virtual alocam um novo bloco de memoria fisica eaumentam a area do heap. Osprogramas, por sua vez, fazem uma chamada ao sistema operacional, solicitandouma nova area de memoria. Cada processo de usuario possui suas propriasvariaveis para controle de quanta memoria esta sendo utilizada.A funcao mallocutiliza uma lista encadeada com blocos livres de memoria como e possivel ver nafigura abaixo [1]. Sempre que a funcao e chamada, a lista e percorrida,