Кіріспе

Компьютерлік есептеулерде, шина қатесі – аппараттық құралдың тудырған қатесі, операциялық жүйеге (ОЖ) процестің процессор физикалық түрде адрестемейтін жадқа қол жеткізуге тырысатынын хабарлайды: адрестік шина үшін жарамсыз мекенжай, осыдан аталған. Қазіргі заманғы архитектураларда, олар сегментациялық қателерге қарағанда сирек кездеседі, олар негізінен жадқа қол жеткізудің бұзылуынан туындайды: логикалық мекенжай немесе рұқсаттардағы мәселелер. POSIX стандартымен үйлесімді платформаларда, шина қатесі көбінесе қатеге себеп болған процеске SIGBUS сигналының жіберілуіне әкеледі. SIGBUS компьютер анықтаған кез келген жалпы құрылғы ақаулығынан да туындауы мүмкін, бірақ шина қатесі компьютерлік жабдықтың физикалық бұзылуын сирек білдіреді – көбінесе бұл бағдарламалық құралдағы қатеден туындайды. Шина қатесі кейбір басқа беттік қателер үшін де туындауы мүмкін; төменде қараңыз.

Адресі жоқ

Бағдарламалық қамтамасыз ету процессорға белгілі бір физикалық жад адресін оқуға немесе жазуға нұсқайды. Осыған сәйкес, процессор осы физикалық адресті өзінің адрес шинасына қойып, процессорға қосылған барлық басқа аппараттық құрылmalарға, егер олар осы нақты адресқа жауап берсе, нәтижелермен жауап беруді сұрайды. Егер ешбір аппараттық құрылма жауап бермесе, процессор қателік тудырып, сұралған физикалық адрес компьютерлік жүйеде танылмайтынын көрсетеді. Бұл тек физикалық жад адрестерін қамтиды екенін ескеріңіз. Белгісіз виртуалды жад адресіне қол жеткізуге тырысу, көбінесе шина қатесі емес, сегментациялық қате болып саналады, бірақ егер жад басқару блогы (MMU) жеке болса, процессор аражігін ажырата алмайды.

Қатарсыз қол жеткізу

Көптеген CPU-лар байттық адрестеуді қолданады, онда әрбір бірегей жад адресі 8 биттік байтты көрсетеді. Көптеген CPU-лар әр жад адресінен жеке байттарға қол жеткізе алады, бірақ олар әдетте үлкен блоктарға (16 бит, 32 бит, 64 бит және т.б.) осы блоктар белгілі бір шекараға «тураланбағанда» (x86 платформасы ерекше жағдай) қол жеткізе алмайды. Мысалы, егер көп байттық кіру 16 биттік туралануды талап етсе, 0, 2, 4, 6 және т.б. адрестер (байттармен көрсетілген) тураланған және осылайша қолжетімді деп есептеледі, ал 1, 3, 5 және т.б. адрестер тураланбаған деп есептеледі. Сол сияқты, егер көп байттық кіру 32 биттік туралануды талап етсе, 0, 4, 8, 12 және т.б. адрестер тураланған және осылайша қолжетімді деп саналады, ал олардың арасындағы барлық адрестер тураланбаған деп саналады. Тураланбаған адрестен байттан үлкен блокқа қол жеткізуге тырысу автобус қатесіне әкелуі мүмкін. Кейбір жүйелер қолданылатын архитектураға байланысты осы екі нұсқаудың аралас түрлерін қолдануы мүмкін. Мысалы, IBM System/360 мейнфрейміне негізделген, соның ішінде IBM System z, Fujitsu B8000, RCA Spectra және UNIVAC Series 90 аппараттық құралдары үшін нұсқаулар 16 биттік шекарада болуы керек, яғни орындалу адрестері жұп байттан басталуы керек. Тақ адреске өтуге тырысу спецификациялық қатеге әкеледі. Дегенмен, деректерді жадтағы кез келген адрестен алуға болады, және олар нұсқауға байланысты бір байт немесе одан да ұзын болуы мүмкін. CPU әдетте деректер шинасының толық енімен деректерге қол жеткізеді. Байт адрестерін алу үшін олар деректер шинасының толық енімен жадқа кіреді, содан кейін жеке байтты адрестеу үшін масканы қолданып, ығыстырады. Жүйелер бұл тиімсіз алгоритмге төзімді, өйткені ол көптеген бағдарламалық қамтамасыздар үшін, әсіресе жолдарды өңдеу үшін маңызды мүмкіндік болып табылады. Байттардан айырмашылығы, үлкен блоктар екі тураланған адресті қамтуы мүмкін, сондықтан деректер шинасынан бірнеше рет дерек алу қажет болады. CPU мұны қолдауы мүмкін, бірақ бұл мүмкіндік машиналық код деңгейінде сирек қажет болады, сондықтан CPU жасаушылары оны іске асырудан аулақ болады және оның орнына тураланбаған жадқа қол жеткізу кезінде автобус қатесін шығарады.

Беттеу қателері

FreeBSD, Linux және Solaris виртуалды жад беттерін қосып алу мүмкін болмаған кезде, мысалы, олар жойылғандықтан (мысалы, жадқа бейнеленген файлға қол жеткізу немесе бағдарлама жұмыс істеп тұрғанда қысқартылған екілік файлды орындау), сенімді емес дереккөз: date=June 2016, немесе жаңадан құрылған жадқа бейнеленген файл физикалық жадқа бөліне алмағанда, мысалы, диск толып кеткенде, шина қатесін (bus error) хабарлай алады.