62
қолданылмайтын алаңының көлемі бірінші стратегияны пайдаланғанға
қарағанда өте үлкен. Егер «ең қолайлы аймақ» стратегиясы негізінде
жадының бос, пайдаланбай қалып қойған бөліктері («тесік») қайта
пайдалану үшін көлемдері өте аз болып, жадты фрагменттеуді
туындататын болса, екінші тәсілді пайдаланғанда пайда болатын
«тесіктер» жадты бөлуге сұралатын келесі сұратылымдарда пайдаға
асады, фрагменттелуі мүмкіндігін азайтады.
«Бірінші қолайлы аймақ» стратегиясын қолданған кезде жады
менеджері көлемі бойынша сәйкес келетін бірінші блокты іздеу
мақсатында бос блоктар тізімін сканерлейді. Өз қарапайымдылығына
қарамастан бұндай бос блоктарды іздеу алгоритмі «ең қолайлы аймақ»
салыстырмалы түрде өзін жақсы көрсетеді, оны пайдаланған кезде
жады фрагменттелуге аз ұшырайды. Бұл стратегияның басты кемшілігі
жадының «тесіктерінің» көп бөлігі бос блоктар тізімінің басына
шоғырланады, сол себепті жады менеджері уақыт өткен сайын бос
блоктарды тізімнің бас жағынан емес орта жағынан іздеуге мәжбүр
болады.
«Бірінші қолайлы аймақ» стратегиясының негізгі мәселесін шешу
үшін «келесі қолайлы аймақ» стратегиясы қолданылады. Жадының
шағын бөліктерін тізім басына шоғырлануын болдырмау үшін бос
блоктардың сақина тәріздес тізімі қолданылады. Сонымен қатар, жады
блоктарын таңдау үшін «бірінші қолайлы аймақ» стратегиясы
қолданылады, бірақ блокты таңдаған әр таңдаған сайын тізім басы
таңдалған блоктан кейінгі блокты көрсете бастайды. Оған қоса,
фрагменттер бос блоктардың тізімі бойынша азды көпті тегіс
орналасады.
Бос блоктарды таңдау алгоритмі қаншалықты айлақор болса да
жадының толық фрагменттеуді қамтамасыз ететін абсолютті
стратегияны ойлап табу мүмкін емес. Ерте ме кеш пе жады да
«тесіктер» саны сыни мәннен асуын бастайды, және бұл жағдай
қосымша өңдеуді қажет етеді. Бұндай өңдеу қалыңдату немесе жадты
дефрегменттеу деп аталады.
Дефрагменттеу процесі «тесіктер» мәселесін шешеді. Ол барлық
қолданыстағы жады блоктарын жадының бір бөлігіне жинайды да,
«тесіктерді» бөлек үлкен бос блокқа құяды. Бұл операцияның шығыны
көп, өйткені ол барлық процестердің тоқтап тұруын талап етеді,
адрестердегі қажет жылжытуларды есептеу, деректерді физикалық
тасымалдау және т.б. Осыған қарамастан бұл тәсіл процестерді шақыру
уақытына сыни талап қоймайтын кейбір операциялық жүйелерде
қолданылады,
есесіне
бағдарламалау
жүйесінің
және
бағдарламалардың өздерінің жұмыстарын жеңілдетеді.
|