Кіріспе
Карталанбаған жадқа қол жеткізуден туындаған қате. Компьютерде беттік қате (кейде PF немесе қатты қате деп аталады) — процесс жад бетіне тиісті дайындықсыз қол жеткізген кезде жад басқару блогы (MMU) тудыратын ерекше жағдай. Бетке қол жеткізу үшін процестің виртуалды адрестік кеңістігіне карталау қосылуы керек. Сонымен қатар, нақты беттің мазмұны диск сияқты қосалқы сақтау құрылымынан жүктелуі қажет болуы мүмкін. MMU беттік қатені анықтайды, бірақ операциялық жүйенің ядросы қажетті бетті физикалық жадта қолжетімді ету арқылы немесе заңсыз жадқа қол жеткізуді жоққа шығару арқылы осы ерекше жағдайды өңдейді. Виртуалды жадты пайдаланатын кез келген операциялық жүйеде, мысалы Windows, macOS және Linux ядросында бағдарламаларға қолжетімді жад көлемін арттыру үшін жарамды беттік қателер жиі кездеседі және қажетті болып табылады.
In computing, a page fault (sometimes called PF or hard fault) is an exception that the memory management unit (MMU) raises when a process accesses a memory page without proper preparations. Accessing the page requires a mapping to be added to the process's virtual address space. Besides, the actual page contents may need to be loaded from a backing store, such as a disk. The MMU detects the page fault, but the operating system's kernel handles the exception by making the required page accessible in the physical memory or denying an illegal memory access. Valid page faults are common and necessary to increase the amount of memory available to programs in any operating system that uses virtual memory, such as Windows, macOS, and the Linux kernel.
Кіші
Егер қате пайда болған кезде бет жадыда жүктелсе, бірақ жадты басқару бірлігінде жадыда жүктелген деп белгіленбесе, онда оны кіші немесе жұмсақ бет қатесі деп атайды. Операциялық жүйенің бет қатесін өңдеушісіне тек жад басқару бірлігіндегі сол бетке қатысты жазбаны жадтағы бетке сілтеуі және беттің жадқа жүктелгенін көрсетуі қажет; оған жадқа бетті оқудың қажеті жоқ. Мұндай жағдай әр түрлі бағдарламалар жадты бөлісіп пайдаланғанда және бет басқа бағдарламалар үшін жадқа енгізілгенде туындауы мүмкін. Бет процестің жұмыс жиынтығынан алынып тасталуы мүмкін, бірақ әлі дискіге жазылмаған немесе өшірілмеген, мысалы, Екінші бет кэштеуді қолданатын операциялық жүйелерде. Мысалы, OpenVMS дискіге жазу қажет емес бетті алып тастауы мүмкін (егер ол дискіден соңғы рет оқылғаннан бері өзгермеген болса) және жұмыс жиынтығы тым үлкен деп есептелген жағдайда оны бос беттер тізіміне орналастыра алады. Дегенмен, беттің мазмұны басқа орынға тағайындалғанға дейін жаңартылмайды, яғни ол бастапқы процесспен сілтеме жасалғанша қолжетімді болып қалады. Бұл қателер дискіге қатынауды қажет етпегендіктен, олар үлкен бет қателеріне қарағанда жылдам және төмен құнды.
Майор
Бұл операциялық жүйенің қажет болғанда бағдарламалық жадының көлемін арттыру үшін пайдаланатын механизмі. Операциялық жүйе бағдарлама оны пайдалануға тырысқанға дейін және бет қатесі туғанға дейін бағдарламаның бөліктерін дискіден жүктеуді кейінгіге қалдырады. Егер қате пайда болған кезде бет жадта жүктелмеген болса, онда ол маңызды немесе қатты бет қатесі деп аталады. Операциялық жүйедегі бет қатесін өңдеуші бос орын табуы керек: жадтағы бос бет немесе жадта бос емес бет. Соңғысы басқа процесспен пайдаланылуы мүмкін, мұндай жағдайда операциялық жүйе сол беттегі деректерді жазып шығаруы керек (егер ол соңғы рет өзгертілгеннен бері жазылмаса) және процестің бет кестесінде сол бетті жадта жүктелмеген деп белгілеуі керек. Орын босатылғаннан кейін операциялық жүйе жаңа беттің деректерін жадқа оқи алады, жадты басқару бірлігінде оның орналасқан жерін қосады және бет жүктелгенін көрсетеді. Осылайша, маңызды қателер ұсақ қателерге қарағанда қымбатқа түседі және тоқтатылған бағдарламаның орындалуына қосымша сақтау құрылымына кірудің кешігуін қосады.
жарамсыз
Егер виртуалды мекенжай кеңістігіне жатпайтын мекенжайға сілтеме жасау кезінде беттік қате туындаса, яғни жадыда оған сәйкес бет болмаса, онда ол жарамсыз беттік қате деп аталады. Операциялық жүйедегі беттік қателерді өңдеуші, әдетте, бұзушы процеске сегментациялық қате жібереді, бұл қол жеткізудің жарамсыз екенін көрсетеді; мұндай жағдайда жарамсыз сілтеме жасаған кодтың қалыптан тыс тоқтауына себеп болады. Нөлдік көрсеткіш әдетте мекенжай кеңістігіндегі 0 мекенжайына сілтеме ретінде ұсынылады; көптеген операциялық жүйелер MMU-ды осы мекенжайды қамтитын бет жадыда жоқ екенін көрсету үшін орналастырады және бұл бетті виртуалды мекенжай кеңістігіне қоспайды, сондықтан нөлдік көрсеткішпен сілтеме жасалған жадты оқуға немесе жазуға тырысу жарамсыз беттік қатені тудырады.
Жарамсыз шарттар
Заңсыз кірулер мен жарамсыз беттік қателер сегментациялық қатеге немесе шина қатесіне алып келуі мүмкін, нәтижесінде қосымша немесе операциялық жүйе құлдырауы мүмкін. Бағдарламалық жасақтамадағы қателер көбінесе осы проблемалардың себебі болып табылады, бірақ аппараттық жадтағы қателер, мысалы, разгон салдарынан туындаған қателер, көрсеткіштердің бұзылуына және жарамды кодтың қателікпен аяқталуына әкелуі мүмкін. Операциялық жүйелер беттік қателерді хабарлау үшін әртүрлі механизмдерді ұсынады. Microsoft Windows жарамсыз беттік қателерді қол жетімділік бұзушылық ретінде хабарлау үшін құрылымдалған ерекшеліктерді пайдаланады. UNIX сияқты жүйелер әдетте SIGSEGV сияқты сигналдарды қолданады, бұл қате жағдайларын бағдарламаларға хабарлау үшін. Егер қате алған бағдарлама оны өңдемесе, операциялық жүйе әдетте қатеге себеп болған процесті тоқтату және пайдаланушыға бағдарламаның жұмысы бұзылғанын хабарлау сияқты стандартты әрекетті орындайды. Windows көбінесе мұндай құлдырауларды ешқандай егжей-тегжейлі ақпаратсыз хабарлайды. Тәжірибелі пайдаланушы WinDbg және Windows құлдырау кезінде жасайтын кіші құлдырау арқылы толыққанды ақпаратты ала алады. UNIX сияқты операциялық жүйелер бұл жағдайларды "сегментация бұзуы" немесе "шина қатесі" сияқты қате хабарламаларымен хабарлайды және жүйелік құлдырау файлын (core dump) жасауы мүмкін.
Орындау әсері
Беттік қателер жүйенің өнімділігін төмендетеді және жүйелік тұрақсыздыққа алып келуі мүмкін. Қатты дискілерді қолданатын дәстүрлі компьютерлердегі маңызды беттік қателер олардың жұмысына елеулі әсер етеді, себебі орташа қатты дискіде айналу күту уақыты 3 мс, іздеу уақыты 5 мс және бір бетті жіберу уақыты 0,05 мс құрайды. Сондықтан, беттерді ауыстыруға кететін жалпы уақыт шамамен 8 мс (= 8000 мкс) тең. Егер жадқа қол жеткізу уақыты 0,2 мкс болса, онда беттік қате операцияны шамамен 40 000 есе баяулатады. Бағдарламалардың немесе операциялық жүйелердің өнімділігін жақсарту көбінесе беттік қателер санын азайтумен байланысты. Оптимизацияның екі негізгі бағыты – жалпы жадты пайдалануды азайту және жадтың локальдығын арттыру. Беттік қателерді азайту үшін әзірлеушілер беттік сәйкестікті максималдайтын тиісті беттерді алмастыру алгоритмін қолдануы керек. Мұндай алгоритмдердің көптеген түрлері ұсынылған, мысалы, беттік қателердің жиілігін азайту үшін эвристикалық алгоритмдерді енгізу. Сонымен қатар, физикалық жадтың көлемін ұлғайту да беттік қателерді азайтады.