ՍԿԱՆ (վերելակ) սկավառակի պլանավորման ալգորիթմ


Օպերացիոն համակարգում ծրագրերի կամ հավելվածների մուտքագրման կամ ելքի հարցումները մշակվում են սկավառակի պլանավորման ալգորիթմների միջոցով: Համակարգը ստանում է անհամար թվով հարցումներ տարբեր ծրագրերից, և միայն մեկ հարցումը կարող է միաժամանակ մշակվել համակարգի կողմից, իսկ մնացած բոլոր հարցումները պետք է հերթագրվեն: Սկավառակի պլանավորման հիմնական աշխատանքը համակարգի արդյունավետության բարձրացումն է՝ նվազեցնելով որոնման ժամանակը, պտտվող ուշացումը և փոխանցման ժամանակը: Այս գործընթացների համար օգտագործվում են տարբեր ալգորիթմներ, որոնցից մեկը SCAN-ն է (Elevator):

Սկան սկավառակի պլանավորման ալգորիթմ

Scan Disk Scheduling ալգորիթմը կոչվում է նաև վերելակի ալգորիթմ՝ իր աշխատանքային ձևի պատճառով: Վերելակը շարժվում է վեր ու վար՝ տարբեր հարկերում գտնվող տարբեր անձանց խնդրանքների հիման վրա: Երբ վերելակը հասնի կամ վերջին հարկ, կամ առաջին հարկ, այն կփոխի իր ուղղությունը և կսկսի շարժվել հակառակ ուղղությամբ:

Վերոհիշյալ գործողության նման, սկավառակի թեւը շարժվում է ետ ու առաջ սկավառակի միջով` ճանապարհին հետքերով սպասարկելու հարցումների հիման վրա:

Սկան սկավառակի պլանավորման ալգորիթմի բնութագրերը

  • Միջին միջակայքի հարցումներն ավելի շատ սպասարկվում են, և նրանք, ովքեր ժամանում են սկավառակի թևի հետևում, պետք է սպասեն:

  • Այս ալգորիթմը պարզ է.

  • Այն չունի սով, քանի որ գործընթացները բաշխվում են ռեսուրսներով, քանի որ սկավառակը անընդհատ շարժվում է:

  • Դա շատ ավելի լավ է, քան First Come First Serve ալգորիթմը:

SCAN սկավառակի պլանավորման ալգորիթմի օրինակ −

Ալգորիթմ

Քայլ 1 Զանգվածն ունի այն տարրերը, որոնք պահանջել են ռեսուրսներ տարբեր պրոցեսներից՝ ըստ ժամանման ժամանակի աճման կարգի:

Քայլ 2 Սկավառակի թեւը սկսվում է սկավառակի մի ծայրից և շարժվում դեպի մյուս ծայրը:

Քայլ 3 Երբ սկավառակը շարժվում է այս ուղղությամբ, այն կսպասարկի բոլոր հետքերը մեկ առ մեկ՝ հիմնվելով հարցման վրա:

Քայլ 4 Այնուհետև հաշվարկեք գլխից անցած ընդհանուր հեռավորությունը:

Քայլ 5 Նոր պաշտոնը ճանաչվում է ներկայումս սպասարկվող հարցումով

Քայլ 6 Այնուհետև քայլ 3-ը կրկնվում է, երբ այն հասնում է սկավառակի մի ծայրին:

Քայլ 7 Երբ վերջնակետին հասնի, այն կփոխի ուղղությունը և կվերադառնա քայլ 2, երբ ամբողջ հարցումը սպասարկվի:

Մոտեցում. C ծրագիր՝ SCAN սկավառակի պլանավորման ալգորիթմը իրականացնելու համար

Ծրագիր, Կոդ.

#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;
}

Արդյունք

Num of seek process = 168
Sequence is
25
14
0
50
51
78
90
100
102
126

Եզրակացություն

SCAN սկավառակի պլանավորման հայեցակարգը ներկայացված է այս հոդվածում օրինակի հետ միասին: Այն օգտագործվում է ծրագրերը պլանավորելու համար՝ հիմնվելով ուղղակի մուտքի խնդրանքի վրա: Ուղղակի մուտքն այն պարամետրն է, որն ավելի շատ ժամանակ է պահանջում օպերացիոն համակարգում, և դրա հիմնական նպատակն է նվազագույնի հասցնել որոնման և փոխանցման ժամանակը և բարձրացնել դրա կատարումը: