Fiz alguns ajustes na versão incial da minha lista, agora ela atende os requisitos dispostos no material do professor Maziero. Ajustei para passar os testes, e também resolvi utilizar readaptar para C. A compilação juntamente com o arquivo de teste disponibilizado me pareceu menos problemática desse modo.
Revisitando o código dessa lista, precisei revisitar listas mais simples que vem antes da circular duplamente encadeada, assim consegui montar um raciocínio sólido na hora de codificar.
Lista duplamente encadeada
É uma estrutura na qual cada nó contém três partes: Valor, ponteiro para o próximo nó, e ponteiro para o nó anterior.
Permite navegação bidirecional, e para remover ou adicionar um nó, é necessário somente ajustar os ponteitos do nó anterior e do nó seguinte.
[head] <-> [nó1] <-> [nó2] <-> [tail]
Lista circular
Pode ser simplesmente encadeada (sentido unilateral) ou duplamente encadeada (esse é o que estou usando para o projeto).
O último nó da lista está conectado ao primeiro, o que faz com que a lista não tenha um ponto de término natural.
A lista pode ser percorrida indefinidamente, pois ao chegar no final, ela retorna ao início.
Lista circular duplamente encadeada e sua relação com sistemas operacionais
Utilizar uma lista circular duplamente encadeada, faz com que o sistema operacional tenha caracterísica de escalonamento circular.
Dito isso, após o último processo ser executado, o sistema retorna ao primeiro e continua a execução.
Imaginando que um sistema operacional possui três processos:
[P1] <-> [P2] <-> [P3] <-> [P1] ...
Após o P3 terminar seu tempo de execução, a lista voltará diretamente para P1, garantindo uma execução contínua.
O código atual do sistema operacional pode ser encontrado aqui.