J'essaye d'implémenter le remplacement de page LRU. J'ai réussi à faire fonctionner l'algorithme FIFO. Mais je ne suis pas sûr de savoir comment garder la trace du moins récemment utilisé?implémentation de LRU en C++
Je lis dans un fichier. sa structure comme premier numéro pid (1) et le deuxième numéro est l'arbitre (45) et ainsi de suite comme:
1 45
1 46
1 45
1 44
2 76
2 75
2 77
2 77
, je suis en utilisant un tableau de classe et analyse de la ligne de fichiers en ligne et si son pas dans le tableau pour mettre le pid et ref là dans cet index. Si le tableau est plein, retournez au début de l'annonce et recommencez partout.
class pagetable
{
public:
int pid;
int ref;
int faults;
pagetable();
};
pagetable* page = new pagetable[frames];
Je demande le nombre de trames. Je PROMPTING le nom de fichier et le stocker dans
ifstream inputStream;
Alors je peux appeler ma fonction LFU et saisir chaque pid et ref pour vérifier.
int runsimLFU(ifstream &inputStream, pagetable* page, int frames){
int i =0;
int j=0;
bool flag = false;
int cnt=0;
int index = 0;
int value = 0;
while(1){
inputStream >> pid;
inputStream >> ref;
page[count].pid = pid;
page[count].ref = ref;
pagefaults++;
Quelque chose comme ça je peux continuer à saisir chaque ligne du fichier.
c'est comment je suis à la recherche du tableau
bool findinarray(pagetable* page, int frames, int pid, int ref)
{
for(int i=0; i < frames+1; i++) {
if(page[i].pid == pid && page[i].ref == ref)
{
return true;
}
}
return false;
}
Deux questions se
1) Je ne suis pas sûr comment garder une trace de la LRU. J'imagine un deuxième tableau et une variable de compteur mais c'est aussi loin que je peux voir quoi faire.
2) une fois que je connais le LRU et quand le pid entrant, ref n'est pas dans le tableau je bourre cela dans le tableau au numéro d'index LRU?
Merci
Une liste chaînée serait probablement plus facile à utiliser qu'un tableau. D'une manière ou d'une autre, tout ce que vous avez à faire est de prendre la valeur que vous utilisez et de la déplacer jusqu'à la fin (en faisant l'avant du LRU). Si vous utilisez un tableau, cela signifie que vous devez utiliser tout déplacer après la valeur d'un espace vers la gauche avant d'ajouter l'élément en cours. Ce n'est pas prohibitif difficile, mais nécessite un peu plus de tenue de livres. – jpm
Je ne suis pas certain de comprendre cela. Donc, si je pointe sur le premier index (0) dans le tableau et que j'ai besoin d'ajouter au tableau, je déplace tout après l'index 0 vers la gauche, puis j'ajoute à l'index zéro? –
Chaque fois que vous apportez une nouvelle page, ajoutez-la à la liste. Chaque fois que vous utilisez une page résidente, supprimez-la de la liste (en déplaçant le reste dans le cas d'un tableau (ou mieux, un vecteur)) et remplacez-la à la fin. Chaque fois que vous avez besoin de déposer une page, prenez la première entrée dans la liste. – jpm