Algorithme de planification de disque SCAN (ascenseur)
Dans le système d'exploitation, les requêtes provenant de l'entrée ou de la sortie des programmes ou applications sont traitées par des algorithmes de planification de disque. Le système reçoit un nombre incalculable de demandes de différents programmes et une seule demande peut être traitée à la fois par le système et toutes les autres demandes doivent attendre dans la file d'attente. Le travail principal de la planification de disque consiste à augmenter les performances du système en réduisant le temps de recherche, la latence de rotation et le temps de transfert. Pour ces processus, différents algorithmes sont utilisés et l'un d'entre eux est SCAN (Elevator).
Algorithme de planification de disque d'analyse
L'algorithme Scan Disk Scheduling est également appelé algorithme d'ascenseur en raison de son mode de fonctionnement. L'ascenseur monte et descend en fonction des demandes de différentes personnes situées à différents étages. Lorsque l’ascenseur atteint le dernier étage ou le rez-de-chaussée, il change de direction et commence à se déplacer dans la direction opposée.
Semblable au fonctionnement ci-dessus, le bras de disque se déplace d'avant en arrière sur le disque en fonction des demandes de maintenance des pistes en cours de route.
Caractéristiques de l'algorithme de planification d'analyse de disque
Les demandes de milieu de gamme sont davantage satisfaites et celles qui arrivent derrière le bras de disque devront attendre.
Cet algorithme est simple.
-
Il n'y a pas de famine car les processus sont alloués avec des ressources à mesure que le disque se déplace continuellement.
C'est bien meilleur que l'algorithme du premier arrivé, premier servi.
Exemple d'algorithme de planification de disque SCAN -
Algorithme
Étape 1 − Le tableau contient les éléments qui ont demandé des ressources à différents processus par ordre croissant en fonction de l'heure d'arrivée.
Étape 2 − Le bras de disque part d'une extrémité du disque et se déplace vers l'autre extrémité.
Étape 3 − Lorsque le disque se déplace dans cette direction, il desservira toutes les pistes une par une en fonction de la demande.
Étape 4 − Calculez ensuite la distance totale parcourue depuis la tête.
Étape 5 − Le nouveau poste est identifié par la demande actuellement traitée
Étape 6 − Ensuite, l'étape 3 est répétée lorsqu'elle atteint une extrémité du disque.
Étape 7 − Lorsque le point final est atteint, il inversera la direction et reviendra à l'étape 2 lorsque la totalité de la requête aura été traitée.
Approche : programme C pour implémenter l'algorithme de planification SCAN Disk
Programme,Code :
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define size 10
#define disk_size 200
int comp(const void * l, const void * n) {
return (*(int*)l - *(int*)n);
}
void SCAN(int arr[], int head, char* dn){
int seek_num = 0;
int dt, cur_track;
int leftside[size], rightside[size];
int seek_seq[size + 3];
int m_scan = 0, s_scan = 0;
if (strcmp(dn, "leftside") == 0)
leftside[m_scan++] = 0;
else if (strcmp(dn, "rightside") == 0)
rightside[s_scan++] = disk_size - 1;
for (int p_s = 0; p_s < size; p_s++) {
if (arr[p_s] < head)
leftside[m_scan++] = arr[p_s];
if (arr[p_s] > head)
rightside[s_scan++] = arr[p_s];
}
qsort(leftside, m_scan, sizeof(int), comp);
qsort(rightside, s_scan, sizeof(int), comp);
int go = 2;
int ind = 0;
while (go--) {
if (strcmp(dn, "leftside") == 0) {
for (int p_s = m_scan - 1; p_s >= 0; p_s--) {
cur_track = leftside[p_s];
seek_seq[ind++] = cur_track;
dt = abs(cur_track - head);
seek_num += dt;
head = cur_track;
}
dn = "rightside";
}
else if (strcmp(dn, "rightside") == 0) {
for (int p_s = 0; p_s < s_scan; p_s++) {
cur_track = rightside[p_s];
seek_seq[ind++] = cur_track;
dt = abs(cur_track - head);
seek_num += dt;
head = cur_track;
}
dn = "leftside";
}
}
printf("Num of seek process = %d
", seek_num);
printf("Sequence is
");
for (int p_s = 0; p_s < ind; p_s++) {
printf("%d
", seek_seq[p_s]);
}
}
int main(){
int arr[size] = { 126, 90, 14, 50, 25, 42, 51, 78, 102, 100 };
int head = 42;
char dn[] = "leftside";
SCAN(arr, head, dn);
return 0;
}
Sortie
Num of seek process = 168
Sequence is
25
14
0
50
51
78
90
100
102
126
Conclusion
Le concept de planification de disque SCAN est décrit dans cet article avec un exemple. Il est utilisé pour planifier les programmes en fonction de la demande d'un accès direct. L'accès direct est le paramètre qui prend le plus de temps dans le système d'exploitation et son objectif principal est de minimiser le temps de recherche et de transfert et d'augmenter ses performances.