Кіріспе

Операциялық жүйелер мен қолданбалы бағдарламалар пайдаланатын құрылғылар. BIOS жүзеге асырылымдары операциялық жүйелер мен қолданбалы бағдарламаларға IBM PC-ге үйлесімді компьютерлерде аппараттық құралдардың мүмкіндіктерін пайдалану үшін шақыруға болатын үзілістерді қамтамасыз етеді. Дәстүрлі түрде BIOS шақыруларын негізінен DOS бағдарламалары және кейбір басқа бағдарламалық жасақтамалар, мысалы, жүктегіштер (оның ішінде, көбінесе, операциялық жүйесіз тікелей жүктелетін және жұмыс істейтін салыстырмалы түрде қарапайым қолданбалы бағдарламалық жасақтама, әсіресе ойын бағдарламалық жасақтамасы) пайдаланады. BIOS x86 процессорының нақты мекенжай режимінде (Real Mode) жұмыс істейді, сондықтан BIOS-ты шақыратын бағдарламалар да нақты режимде жұмыс істеуі керек немесе BIOS-ты шақыру алдында қорғалған режимнен нақты режимге ауысып, содан кейін қайтадан қорғалған режимге ауысуы керек. Осы себепті, қазіргі заманғы операциялық жүйелер CPU-ны қорғалған режимде немесе ұзақ режимде пайдаланады, сондықтан жүйелік функцияларды қолдау үшін BIOS үзіліс шақыруларын қолданбайды, бірақ аппаратты тексеруге және жүктеу кезінде инициализациялауға BIOS үзіліс шақыруларын пайдаланады. Нақты режимде 1 МБ жад шектеуі бар, ал қазіргі заманғы жүктегіштер (мысалы, GRUB2, Windows Boot Manager) 4 ГБ жадқа қол жеткізу үшін нағыз емес режимді немесе қорғалған режимді пайдаланады (және BIOS үзіліс шақыруларын Виртуалды 8086 режимінде орындайды, бірақ тек операциялық жүйені жүктеу үшін). Барлық компьютерлерде бағдарламалық нұсқаулар қуат қосылған сәттен бастап физикалық аппаратты (экран, диск, пернетақта және т.б.) басқарады. Компьютерде BIOS, негізгі платадағы ROM-да алдын ала жүктелген, CPU-ны қайта орнатудан кейін дереу басқаруды алады, соның ішінде қоректену кезінде, аппараттық қайта орнату түймесі басылғанда немесе маңызды бағдарламалық жасақтама қатесі (үштік қате) негізгі плата тізбектерін автоматты түрде аппараттық қайта орнатуды іске қосқанда. BIOS аппаратты тексеріп, оның күйін инициализациялайды; жүктеу бағдарламасын (әдетте, операциялық жүйе жүктегіші және тарихи ROM BASIC) табады, жүктейді және орындайды; және машинада жұмыс істейтін бағдарламалық жасақтамаға негізгі аппараттық басқаруды қамтамасыз етеді, бұл әдетте операциялық жүйе (қолданбалы бағдарламалармен), бірақ тікелей жүктелетін бір бағдарламалық қосымша болуы мүмкін. IBM өз тарапынан алғашқы IBM PC модельдерін (PS/2 алдында) бағдарламалау кезінде BIOS-ты толық пайдалану үшін немесе аппаратты тікелей пайдалану үшін және BIOS-ты мүлдем болдырмау үшін қажетті барлық ақпаратты ұсынды. Бастапқыда бағдарламалаушылар аппараттық құралдың әрқайсысы үшін BIOS-ты пайдалану немесе пайдаланбау туралы шешімді өздері қабылдады. IBM бағдарламалық қамтамасыз етудің қазіргі және болашақ PC модельдерімен үйлесімділігін сақтау үшін BIOS INT (және DOS қызмет шақырулары) арқылы ғана аппараттық жабдыққа қол жеткізетін «жақсы мінез-құлық» бағдарламаларының жасалуын ынталандырды, бірақ IBM кейбір бағдарламалық жасақтаманы әзірлеушілер мен аппараттық клиенттер үшін пайдаланушы бағдарламалық жасақтамасы аппаратты тікелей басқару мүмкіндігінің қажеттілік екенін түсінді. Бұл, бір жағынан, BIOS қызметтерінің барлық аппараттық ерекшеліктер мен функцияларының маңызды бөлігін ашпауымен байланысты. Мысалы, MDA және CGA адаптерлері аппараттық прокрутканы жүзеге асыра алады, ал PC сериялық адаптері үзіліс арқылы деректерді беруге қабілетті, бірақ IBM BIOS бұл пайдалы техникалық мүмкіндіктердің ешқайсысын қолдамайды. Бүгінгі таңда жаңа компьютердегі BIOS әлі де IBM-нің IBM AT үшін (1984 жылы енгізілген) анықтаған BIOS үзіліс функциясының шақыруларының көпшілігін, сонымен қатар көптеген жаңаларын және кейбір түпнұсқаларға кеңейтулерді (мысалы, кеңейтілген параметрлер диапазоны) қолдайды, оларды түрлі басқа ұйымдар мен салалық топтар бірлесіп жариялады. Бұл, аппараттық үйлесімділіктің ұқсас дәрежесімен біріктірілген, IBM AT үшін жазылған бағдарламалардың көпшілігі бүгінгі таңда жаңа компьютерде дұрыс орындалуы мүмкін. BIOS үзілістері арқылы қол жетімді қызметтердің шектеулеріне қарамастан, олар технологиялық өзгерістерге өте пайдалы және берік болып шықты.

BIOS шақыруларының мақсаты

BIOS үзіліс шақырулары бағдарлама талап еткен аппараттық басқару немесе I/O функцияларын орындайды, бағдарламаға жүйелік ақпаратты қайтарады немесе екеуін де орындайды. BIOS шақыруларының маңызды аспектісі – абстракция. BIOS шақырулары жалпы анықталған функцияларды орындайды, ал жүйедегі нақты аппараттық құралдарда осы функциялардың қалай орындалатынының егжей-тегжейлі мәліметтері BIOS-та жасырылады және бағдарламадан тыс қалдырылады. Мысалы, қатты дискіден дерек оқығысы келген бағдарламаға дискінің ATA, SCSI немесе SATA стандартында екенін білудің қажеті жоқ (немесе ертерек заманда ESDI, MFM немесе RLL дискісі екенін, мүмкін Seagate ST 506 контроллері, немесе Western Digital контроллерлерінің бірі, немесе басқа өндірушінің жеке контроллері бар екенін). Бағдарламаға тек оқығысы келген дискінің BIOS-тағы нөмірін және оқу немесе жазу қажетті сектордың мекенжайын көрсету жеткілікті, ал BIOS бұл жалпы сұранысты нақты дискіге қосылған контроллер арқылы тапсырманы орындау үшін қажетті қарапайым операциялар тізбегіне аударады. Бағдарлама әртүрлі қатты дискілерді (немесе дисплей адаптерлерін, порт интерфейстерін немесе нақты уақыт сағатын) басқару қағидаларын білуден босатылады. Бұл операциялық жүйелер мен қосымшаларды бағдарламалауды жеңілдетеді және бағдарламалардың көлемін азайтады, себебі BIOS-қа енген функционалдылықты әр бағдарламаға енгізудің қажеті жоқ; бағдарламаларға BIOS-қа салыстырмалы түрде қысқа шақырулар қосылады. (BIOS қолданылмаған операциялық жүйелерде операциялық жүйенің өзі ұсынатын қызмет шақырулары көбінесе осы функцияларды орындайды.) BIOS сонымен қатар компьютерлік жабдықтарды жобалаушыларды, егер бағдарламалар BIOS-ты ғана пайдалану үшін жазылған болса, жаңа жүйелерді жобалау кезінде ескі жүйелермен аппараттық үйлесімділікті сақтау қажеттілігінен босатады, бұл қолданыстағы бағдарламалық жасақтамамен үйлесімділікті сақтау үшін қажет. Мысалы, IBM PCjr-дегі пернетақта аппараттық құралы IBM PC-нің бұрынғы модельдеріндегі пернетақта аппараттық құралынан мүлдем өзгеше жұмыс істейді, бірақ пернетақтаны тек BIOS арқылы пайдаланатын бағдарламалар үшін бұл айырмашылық көрінбейді. (Бұл мәселенің екінші жағының жақсы мысалы ретінде, PCjr пайда болған кезде қолданылған көптеген ПК бағдарламалары пернетақтаны тек BIOS арқылы пайдаланбаған, сондықтан IBM PCjr-ге бастапқы IBM PC және IBM PC XT пернетақтасының аппараттық жұмыс істеуін эмуляциялау үшін аппараттық мүмкіндіктерді де қосты. Аппараттық эмуляция толық емес, сондықтан тікелей пернетақта аппараттық құралын пайдалануға тырысатын барлық бағдарламалар PCjr-де дұрыс жұмыс істемейді, бірақ тек BIOS пернетақта қызметтерін пайдаланатын бағдарламалар жұмыс істейді.) Аппараттық мүмкіндіктерге қол жеткізуден басқа, BIOS бағдарламалық жасақтамасында іске асырылған қосымша мүмкіндіктерді де ұсынады. Мысалы, BIOS сегіз мәтіндік бетке дейін бөлек курсорлық позицияларды сақтайды және TTY сияқты автоматты жол орауышымен және негізгі басқару таңбаларын (мысалы, жолдың басына оралу және жол беру) түсіндіруді қамтамасыз етеді, ал CGA үйлесімді мәтіндік дисплей аппараттық құралы тек бір ғана жаһандық дисплей курсорына ие және курсорды автоматты түрде жылжыта алмайды, курсордың орнын дисплей жадына сілтеме жасау үшін пайдалана алмайды (қай таңба ұяшығын өзгерту немесе тексеру керектігін анықтау үшін) немесе басқару таңбаларын түсіндіру мүмкіндігіне ие емес. Басқа мысал үшін, BIOS пернетақта интерфейсі түрлі ауысу күйлерін (сол және оң Shift, Ctrl және Alt) бақылау үшін көптеген пернелер мен пернелер комбинацияларын түсіндіреді, Shift + PrtScrn пернесін басқанда скриншотты сақтайды, Ctrl + Alt + Del пернесін басқанда жүйені қайта іске қосады, Caps Lock, Num Lock және Scroll Lock пернелерінің күйін қадағалайды және AT класындағы пернетақтадағы тиісті индикаторларды басқарады, сондай-ақ пернетақта үшін басқа ұқсас түсіндіру және басқару функцияларын орындайды. Керісінше, стандартты PC және PC AT пернетақтасының аппараттық мүмкіндіктері жүйеге әрбір перне басылғанда немесе босатылғанда (яғни "босатылған" күйден "басылған" күйге немесе керісінше) оқиға туралы хабарлаумен, пернетақтаның қалпына келтіруін және өзін-өзі сынап көрумен, ал AT класындағы пернетақталар үшін жүйеден пернелердің күйін өзгерту командасын орындаумен шектеледі.

BIOS шақыру: BIOS бағдарламалық жасақтамасы үзіледі

Операциялық жүйелер және басқа бағдарламалық құралдар BIOS бағдарламалық құралымен, орнатылған аппаратты басқару үшін бағдарламалық үзілістер арқылы байланысады. Бағдарламалық үзіліс – үзіліс тұжырымдамасының ерекше түрі. Үзіліс – процессорды басты бағдарламаны орындаудан тоқтатып, орнына арнайы бағдарламаны, яғни Үзіліс қызметтік ретінін (ISR) дереу орындауға бағыттайтын механизм. ISR аяқталғаннан кейін процессор басты бағдарламаны жалғастырады. x86 процессорларында үзіліс орын алғанда, шақыруға тиіс ISR, жадтағы ISR басталу нүктесінің мекенжайлары тізімінен ("үзіліс векторлары" деп аталады) ізделіп табылады: Үзіліс векторлық кестесі (IVT). Үзіліс 0-ден 255-ке дейінгі типтік нөмірімен шақырылады, ал типтік нөмірі Үзіліс векторлық кестесіне индекс ретінде қолданылады, ал кестедегі осы индекс ISR-дің мекенжайын көрсетеді, ол үзіліске жауап ретінде іске қосылады. Бағдарламалық үзіліс – бағдарламалық командамен іске қосылатын үзіліс; сондықтан бағдарламалық үзілістер кіші бағдарламалар сияқты жұмыс істейді, бірақ басты айырмашылығы – бағдарламалық үзіліс шақыруын жасайтын бағдарламаға ISR мекенжайын білудің қажеті жоқ, тек оның үзіліс нөмірін білу жеткілікті. Бұл құралымдық, үйлесімділік және жүйелік конфигурациядағы икемділік үшін артықшылықтар береді. BIOS үзіліс шақыруларын BIOS пен BIOS клиенттік бағдарламалық құралы, мысалы операциялық жүйе арасында хабар алмасу механизмі ретінде қарастыруға болады. Хабарламалар BIOS-тан деректерді немесе әрекетті сұрайды және сұралған деректерді, жай-күй туралы ақпаратты және/немесе сұралған әрекеттің нәтижесін шақырушыға қайтарады. Хабарламалар әрқайсысы өз үзіліс нөмірі бар санаттарға бөлінеді, ал көптеген санаттарда "функциялар" деп аталатын және "функция нөмірлері" арқылы анықталатын кіші санаттар бар. BIOS клиенті көптеген ақпаратты CPU тіркегіштері арқылы BIOS-қа жібереді және көптеген ақпаратты сол арқылы алады, бірақ бақылау параметрлерінің кестелері немесе дискілік операциялар үшін дискілік сектор деректері сияқты тіркегіштерге сыймайтын үлкен деректерді жадта буфер бөліп (яғни, орын бөліп) және буфердің мекенжайын тіркегіштерде жіберу арқылы жібереді. (Кейде жадтағы дерек элементтерінің бірнеше мекенжайы жадтағы дерек құрылымында берілуі мүмкін, ал осы құрылымның мекенжайы тіркегіштерде BIOS-қа жіберіледі.) Үзіліс нөмірі бағдарламалық үзіліс нұсқауының параметрі ретінде (Intel құрастыру тілінде "INT" нұсқауы) көрсетіледі, ал функция нөмірі AH тіркегіште көрсетіледі; яғни шақырушы AH тіркегішін қажетті функцияның нөміріне орнатады. Жалпы, әрбір үзіліс нөміріне сәйкес келетін BIOS қызметтері бір-бірінен тәуелсіз жұмыс істейді, бірақ бір үзіліс қызметіндегі функцияларды бір BIOS бағдарламасы басқарады және олар тәуелсіз емес. (Бұл соңғы тұжырым қайта кіруге қатысты.) BIOS бағдарламалық құралы, әдетте, сәтті болмаған жағдайда қате кодын, ал сәтті болған жағдайда жай-күй кодын және/немесе сұралған деректерді шақырушыға қайтарады. Деректердің көлемі бір биттен бастап 65,536 байтқа дейін, толық шикі дискілік секторларға (нақты режимдегі жад сегментіне сыятын ең көп көлем) жете алады. BIOS жылдар бойы көптеген түрлі компаниялармен бірнеше рет кеңейтілді және жетілдірілді, және өкінішке орай, осы эволюцияның нәтижесі BIOS функцияларының бәрі деректерді пішімдеу және жеткізу немесе нәтижелерді есеп беру үшін біркелкі конвенцияларды қолданбайды. Кейбір BIOS функциялары егжей-тегжейлі жай-күй туралы ақпаратты көрсетеді, ал басқалары тіпті сәттілік немесе сәтсіздік туралы хабарламайды, тек үнсіз қайтарады, сонда шақырушы сәттілік деп санайды (немесе нәтижені басқа жолмен тексереді). Кейде белгілі бір BIOS функциясының шақыруын белгілі бір компьютердегі BIOS қолдай ма, жоқ па, немесе шақыру параметрлерінің шектері сол компьютерде қандай екенін анықтау қиын болуы мүмкін. (Бірнеше жарамсыз функция нөмірлері немесе жарамды функция нөмірлерінің жарамсыз мәндері үшін, әсіресе IBM BIOS-тің ерте нұсқасында BIOS ештеңе істемейді және қате кодын қайтармайды; сонда шақырушы мұндай шақыруларды жасамай, осы жағдайды болдырмау немесе шақырудың тиімділігін болжайтын емес, шақырудың күтілетін әсерін оңтайлы сынау керек.) BIOS өзінің тарихында көптеген қадамдарда кеңінен дамығандықтан, белгілі бір жеткізушінің BIOS нұсқасында жарамды функция сол жеткізушінің бұрынғы немесе басқаша BIOS нұсқасында немесе кез келген жасқа ие BIOS нұсқасында басқа жеткізушіден жарамсыз болуы мүмкін. BIOS үзіліс шақырулары CPU тіркегіштеріне негізделген параметрлерді жіберуді пайдаланатындықтан, шақырулар құрастыру тілінен жасауға бағытталған және көптеген жоғары деңгейлі тілдерден (HLL) тікелей жасалмайды. Алайда, жоғары деңгейлі тіл параметрлерді жоғары деңгейлі тілде қолданылатын формадан (әдетте, стекке негізделген) BIOS-қа қажетті тіркегіштік формаға аударатын және BIOS қайтарғаннан кейін жоғары деңгейлі тіл шақыру конвенциясына қайтаратын қабылдағыш процедуралар кітапханасын ұсынуы мүмкін. C-тің кейбір нұсқаларында BIOS шақыруларын C модуліндегі құрастыру тілінің кіріктірілген нұсқауларын пайдаланып жасауға болады. Құрастыру тілінің кіріктірілген нұсқауларын қолдау ANSI C стандартына кірмейді, бірақ тілдің кеңейтілуі болып табылады; сондықтан құрастыру тілінің кіріктірілген нұсқауларын пайдаланатын C модульдері таза ANSI C стандарты модульдерінен кем тасымалданады.

: BASIC орындау

дәстүрлі түрде Option ROM-да сақталған Cassette BASIC (Microsoft ұсынған) іске қосылатын еді. Бұл шақыру әдетте BIOS жүктелу кезінде ешқандай жүктелетін дискіні анықтай алмаса қолданылатын. 1981 жылы түпнұсқа IBM PC (IBM машинасының 5150 түрі) шығарылған кезде ROM-дағы BASIC маңызды мүмкіндік болды. Commodore 64 және Apple II сияқты сол кездегі танымал жеке компьютерлерде де Microsoft Cassette BASIC ROM-да болды (бірақ Commodore өз лицензиялық нұсқасын Commodore BASIC деп атады), сондықтан IBM PC өзінің күтілетін нарығының үлкен бөлігінде BASIC-ке бәсекелес болуы керек болды. Басқа жүйелердегідей, IBM PC-нің ROM BASIC-і қарапайым дискісіз операциялық жүйе ретінде жұмыс істеді, ол пайдаланушыға бағдарламаларды жүктеуге, сақтауға және іске қосуға, сондай-ақ оларды жазуға және жетілдіруге мүмкіндік берді. (Түпнұсқа IBM PC сонымен қатар жоғарыда аталған екі бәсекелесі сияқты кассеттік интерфейс жабдығын қамтитын IBM-нің жалғыз PC моделі болды. IBM PC базалық моделінде тек 16 КиБ жедел жад және ешқандай дискілік жекпе-жек болмады [ешқандай түрі], сондықтан кассеттік интерфейс және ROM-дағы BASIC базалық модельді пайдалануға жарамды ету үшін қажет болды. 32 КиБ-тан аз жедел жады бар IBM PC дискіден жүктеле алмайды. Түпнұсқа IBM PC-дегі 8 КиБ көлеміндегі 5 ROM чипінің төртеуі BASIC-ті, ал біреуі ғана BIOS-ті қамтиды; егер 16 КиБ жедел жад орнатылса, ROM BASIC жалпы жүйелік жадтың жартысынан астамын құрайды (нақтырақ айтқанда, 4/7). Уақыт өте келе және BASIC барлық компьютерлермен бірге жеткізілмейтін болғандықтан, бұл үзіліс жай ғана жүктелетін том табылмағанын көрсететін қате хабарламаны көрсетті (әсіресе, "No ROM BASIC" немесе BIOS-тың кейінгі нұсқаларында түсіндірме хабарламалар); басқа BIOS нұсқаларында ол пайдаланушыдан жүктелетін томды енгізуді және перне басуды сұрайды, содан кейін пайдаланушы перне басканнан кейін қайтадан жүктеуге тырысу үшін bootstrap жүктеушісіне (INT 19h) оралады. Digital Rainbow 100B өзінің BIOS деп атаған, ол IBM BIOS-пен үйлеспейтін. Turbo Pascal, Turbo C және Turbo C++ INT 18-ді жадты бөлу және беттеу үшін қайта пайдаланды. Басқа бағдарламалар да осы векторды өздерінің мақсаттары үшін қайта пайдаланды.

DOS

DOS жүйелерінде IO. SYS немесе IBMBIO. COM INT 13 арқылы дискета алмасуын анықтайды, форматтау шақыруларын қадағалайды, DMA шекаралық қателерді түзетеді және алғашқы шақырудан бұрын IBM-нің ROM BIOS "01/10/84" нұсқауындағы 0xFC модельдік кодымен байланысты мәселелерді шешеді.

BIOS- ті айналып өту

Көптеген заманауи операциялық жүйелер (мысалы, Linux және Windows) бастап қосылғаннан кейін BIOS-тың ешқандай үзіліс шақыруларын қолданбайды, оның орнына аппараттық құралдармен тікелей байланыс жасауды жөн көреді. Мұны істеу үшін олар OS ядросының бір бөлігі болып табылатын, OS-пен бірге келетін немесе аппараттық өнімдерді шығарушылар ұсынатын драйверлерге сенеді. Бұл тәсілдің бірнеше себебі бар. Ең маңыздысы – қазіргі операциялық жүйелер процессормен қорғалған (немесе ұзақ) режимде жұмыс істейді, ал BIOS коды тек нақты режимде ғана орындалады. Яғни, егер қорғалған режимде жұмыс істейтін операциялық жүйе BIOS шақыруын жасағысы келсе, ол алдымен нақты режимге ауысып, содан кейін шақыруды орындап, оның аяқталуын күтіп, соңында қорғалған режимге қайта оралуы керек. Бұл өте баяу және тиімсіз болар еді. Нақты режимде (BIOS-ты қоса алғанда) жұмыс істейтін код 16 биттік сегменттелген жад адрестеуді пайдалануға байланысты 1 МБ-тан сәл астам жадқа ғана қол жеткізе алады. Сонымен қатар, BIOS әдетте кез келген міндетті орындаудың ең жылдам жолы емес. Шындығында, BIOS-тың жылдамдық шектеулері DOS дәуірінде бағдарламалардың оны айналып өтуіне себеп болды, әсіресе бейне графикасы мен жылдам тізбектік байланыс үшін. Жоғарыда аталған факторлардан басқа, BIOS функционалдығының проблемаларына анықталған функциялардың шектеулі саны, әртүрлі компьютерлерде қолдау көрсетілетін функциялардың әртүрлі жиынтығы және BIOS сапасының айырмашылықтары (яғни, кейбір BIOS толық және сенімді, ал басқалары толық емес және қателі) жатады. Өздерінің қолына алып, BIOS-қа тәуелділіктен бас тарту арқылы операциялық жүйелерді жасаушылар жүйелік бағдарламалық жасақтаманы жазу және қолдау кезінде туындайтын кейбір тәуекелдер мен қиындықтарды жоя алады. Екінші жағынан, мұндай жағдайда олар өздерінің операциялық жүйесімен жұмыс істеуі жоспарланған әр түрлі жүйелер немесе сыртқы құрылғылар үшін "тікелей" драйверлік бағдарламалық жасақтаманы ұсынуға (немесе аппараттық өндірушілерді осы драйверлерді ұсынуға көндіруге) жауапты болады. Осыдан, шағын бюджетпен жасалған ықшам операциялық жүйелер BIOS-ты жиі пайдаланатыны, ал үлкен бюджетке және көптеген бағдарламалық жасақтама инженерлеріне ие үлкен операциялық жүйелер BIOS-ты пайдаланудың орнына өз драйверлерін жазуды жөн көреді – яғни, BIOS пен қорғалған режимнің үйлесімділік проблемаларын ескерместен.