Кіріспе
Бағдарламалық жасақтамадағы процедуралар жиынтығы. Аппараттық абстракциялар – бағдарламалық жасақтамадағы процедуралар жиынтығы болып табылады, олар бағдарламалық интерфейстер арқылы бағдарламаларға аппараттық ресурстарға қол жеткізуді қамтамасыз етеді. Бағдарламалау интерфейсі аппараттық құрылғылардың белгілі бір C класындағы барлық құрылғыларға бірдей интерфейстер арқылы қол жеткізуге мүмкіндік береді, тіпті C әртүрлі аппараттық интерфейстерді ұсынатын құрылғылардың әртүрлі кіші топтарын қамтуы мүмкін болса да. Аппараттық абстракциялар бағдарламашыларға құрылғыға тәуелсіз, жоғары өнімділікті қолданбаларды жазуға мүмкіндік береді, аппараттық құрылғыларға стандартты операциялық жүйе (ОЖ) шақыруларын ұсынады. Аппараттық құрылғылардың бөліктерін абстракциялау процесі көбінесе процессордың (CPU) көзқарасынан жүзеге асырылады. Әрбір процессор түрінің өзіндік нұсқаулар жиынтығы немесе ISA болады. ISA – құрастырушы бағдарламалаушылар мен компилятор жазушылар қолдана алатын машинаның бастапқы операцияларын көрсетеді. Компилятордың басты міндеттерінің бірі – бағдарламашыға жоғары деңгейдегі тілде алгоритм жазуға мүмкіндік беру, процессорға тән нұсқаулар туралы алаңдамау. Содан кейін компилятор процессорға тән атқарылатын файлды құрайды. Операциялық жүйелерде де осындай абстракция қолданылады, бірақ ОЖ API енді ISA емес, машинаның бастапқы операцияларын көрсетеді. Бұл бағдарламашыға өз бағдарламаларында ОЖ деңгейіндегі операцияларды (мысалы, тапсырманы құру/жою) пайдалануға мүмкіндік береді, сонымен бірге әртүрлі платформаларда тасымалданатындығын сақтайды.
Hardware abstractions are sets of routines in software that provide programs with access to hardware resources through programming interfaces. The programming interface allows all devices in a particular class C of hardware devices to be accessed through identical interfaces even though C may contain different subclasses of devices that each provide a different hardware interface. Hardware abstractions often allow programmers to write device independent, high performance applications by providing standard operating system (OS) calls to hardware. The process of abstracting pieces of hardware is often done from the perspective of a CPU. Each type of CPU has a specific instruction set architecture or ISA. The ISA represents the primitive operations of the machine that are available for use by assembly programmers and compiler writers. One of the main functions of a compiler is to allow a programmer to write an algorithm in a high level language without having to care about CPU specific instructions. Then it is the job of the compiler to generate a CPU specific executable. The same type of abstraction is made in operating systems, but OS APIs now represent the primitive operations of the machine, rather than an ISA. This allows a programmer to use OS level operations (e. g. task creation/deletion) in their programs while retaining portability over a variety of different platforms.
Шолу
Көптеген ерте компьютер жүйелерінде аппараттық абстракцияның ешқандай түрі болмаған. Бұл дегеніміз, мұндай жүйе үшін бағдарлама жазған кез келген адам әр аппараттық құрылғының қалған жүйемен қалай байланысатынын білуі керек еді. Бұл бағдарламалық жасақтаманы жасаушылар үшін маңызды қиындық болды, өйткені олар бағдарламалық жасақтаманың үйлесімділігін қамтамасыз ету үшін жүйедегі әрбір аппараттық құрылғының қалай жұмыс істейтінін білуі керек еді. Аппараттық абстракция арқылы бағдарлама аппараттық құрылғымен тікелей байланыспайды, ол операциялық жүйеге құрылғы не істеу керектігін айтады, содан кейін құрылғыға аппараттық тәуелді нұсқаулық шығарады. Бұл бағдарламашыларға белгілі бір құрылғылардың қалай жұмыс істейтінін білудің қажеті жоқ екенін білдірді, олардың бағдарламалары кез-келген құрылғымен үйлесімді болды. Бұған мысал ретінде "Joystick" абстракциясын қарастырамыз. Көптеген физикалық іске асырылған джойстик құрылғысы көптеген джойстик сияқты құрылғылар бөлісетін API арқылы оқуға / жазуға болады. Жойстик құрылғыларының көпшілігі қозғалыс бағыттарын хабарлай алады. Көптеген джойстик құрылғыларында сыртқы қолданба арқылы конфигурацияланатын сезімталдық параметрлері болуы мүмкін. Жойстик абстракциясы аппараттық жабдықтың егжей-тегжейін (мысалы, регистрлік формат, I2C мекенжайы) жасырады, сондықтан абстракцияланған API-ді пайдаланатын бағдарламашыға құрылғының физикалық интерфейсінің егжей-тегжейін түсінудің қажеті жоқ. Бұл сондай-ақ кодты қайта пайдалануға мүмкіндік береді, өйткені сол код "жойстик" абстракциясын қамтамасыз ететін кез келген іске асырудан стандартталған хабарламаларды өңдеуге болады. "Алдыға түрткі" потенциометрден немесе "қозғалыс" сигналын беретін "қозғалыстың" қозғалысын танитын сыйымдылық сенсорынан болуы мүмкін. Физикалық шектеулер (мысалы, сенсордың ажыратымдылығы, уақытша жаңарту жиілігі) аппараттық жабдыққа байланысты әр түрлі болуы мүмкін, сондықтан API оны "ең аз ортақ бөлімше" моделін қабылдамастан басқаша жасыра алмайды. Осылайша, іске асырудан алынған кейбір терең архитектуралық шешімдер абстракцияның белгілі бір нұсқасын пайдаланушылар үшін маңызды болуы мүмкін. Жақсы метафора – көлік абстракциясы. Велосипедпен жүру де, көлік жүргізу де көлік болып табылады. Олардың екеуінде де ортақ белгілері бар (мысалы, рульді басқару керек) және физикалық айырмашылықтары бар (мысалы, аяқтарды пайдалану). Адам әрқашан "мақсатқа жетуге" деген абстракцияны көрсете алады және велосипедпен немесе көлікпен жүрудің жақсы екенін іске асырушыға шешуге мүмкіндік береді. "Жердегі дөңгелекті көлік" функциясы абстракцияланған және "көлік жүргізу қалай" екенінің егжей-тегжейлері жасырылған. Компьютердегі "абстракцияларға" мысал ретінде бейне кірісі, принтерлер, дыбыс кірісі және шығысы, блок құрылғылары (мысалы, қатты дискілер немесе USB флеш-дискілер) және т.б. жатады. Компьютерлік ғылымның белгілі бір салаларында, мысалы, операциялық жүйелер немесе кіріктірілген жүйелерде абстракциялар сәл өзгеше көрінеді (мысалы, операциялық жүйелерде стандартталған интерфейстер көбірек болады), бірақ абстракция және күрделілікті жасыру тұжырымдамасы кең таралған және терең. Аппараттық абстракция қабаты бағдарламалық жасақтама стегіндегі қолданбалы бағдарламалау интерфейсінен (API) төмен орналасқан, ал қолданбалық қабат (көбінесе жоғары деңгейдегі тілде жазылған) API-ден жоғары орналасқан және API-дегі функцияларды шақыру арқылы аппараттық жасақтамамен байланысады.
Операциялық жүйелерде
Жабдықтық абстракция қабаты (HAL) – компьютердің физикалық жабдықтары мен сол компьютерде іске қосылатын бағдарламалық қамтамасыз ету арасындағы бағдарламалық түрде жүзеге асырылған абстракция қабаты. Оның міндеті – операциялық жүйенің ядросының көп бөлігінен жабдық арасындағы айырмашылықтарды жасыру, соның салдарынан ядролық режимдегі кодтың көп бөлігін әртүрлі жабдықталған жүйелерде жұмыс істеуі үшін өзгерту қажеттігі тумайды. Microsoft Windows жүйесінде HAL негізінен аналық платаның драйвері ретінде қарастырылады және жоғары деңгейдегі компьютерлік тілдерден берілген командалардың төменгі деңгейдегі компоненттермен байланысуына мүмкіндік береді, бірақ жабдыққа тікелей қол жеткізуге рұқсат бермейді. CP/M (CP/M BIOS), DOS (DOS BIOS), Solaris, Linux, BSD, macOS және тағы да бірнеше портативті операциялық жүйелерде де HAL бар, тіпті ол атай берілмесе де. Кейбір операциялық жүйелер, мысалы Linux, Adeos сияқты, жұмыс істеп тұрғанда оны қосуға мүмкіндік береді. NetBSD операциялық жүйесі өте таза жабдықтық абстракция қабатына ие екендігімен белгілі, бұл оның жоғары портативті болуына мүмкіндік береді. Windows Vista және Windows Server 2008 нұсқаларынан бастап қолданылатын HAL жүйе іске қосылғанда автоматты түрде анықталады. Android, Project Treble жобасынан бұрын, әртүрлі стандартталмаған HAL-дарға сүйенген. Halium – Android негізіндегі HAL, ол Ubuntu Touch және LuneOS сияқты бірнеше мобильді операциялық жүйелерде Android алдын ала орнатылған смартфондарда жұмыс істеу үшін қолданылады.