d) dividir a memória em pedaços de tamanho variável, de modo que cada programa utilize apenas o espaço necessário para sua execução.
Isso aí refere-se a gerência de memória. Nesse caso é utilizado algum algoritmo para alocar dinamicamente memoria para algum processo. Esse algoritmo pode ser (não-exaustivamente) First-Fit - Que vai alocar a memória para o processo no primeiro espaço que couber essa quantidade de memória necessária, nesse caso, a memória restante pode ser utilizada por outro processo. Outro algoritmo é o Best-Fit, que vai alocar a memória necessária no menor espaço suficientemente grande, com o objetivo de deixar a menor fragmentação possível ( espaço restante) - essa é uma estratégia gulosa que não dá muito certo porque com o passar do tempo a memória fica com , fragmentos que não podem ser utilizados por outros processos porque são muito pequenos. Outro algoritmo é o Worst-Fit, que tenta fazer ao contrário do Best-Fit, deixar o maior fragmento livre possível.
e) desenvolver as aplicações de modo a não ultrapassar o espaço de endereçamento de memória disponível.
A memória utilizada pelos processos tende a crescer indefinidamente. Mesmo processos que aparentemente podem usar pouca memória, como por exemplo operações matemáticas, que utilizem, por exemplo, recursão, podem acabar sempre precisando de mais memória (algoritmos recursivos precisam crescer a stack - pilha - a cada recursão), ou quem nunca tomou um stack overflow...