Linux yadrosi interfeyslari - Linux kernel interfaces

Linux API, Linux ABI va yadro ichidagi API va ABI

Linux yadrosi turli maqsadlarda ishlatiladigan va dizayni bo'yicha har xil xususiyatlarga ega bo'lgan foydalanuvchi makon dasturlariga bir nechta interfeyslarni taqdim etadi. Ikkita turi mavjud dastur dasturlash interfeysi Ichida (API) Linux yadrosi chalkashtirib bo'lmaydi: "kernel-user space" API va "kernel internal" API.

Linux API

The Linux API Linux yadrosining tizim chaqiruv interfeysidan tashkil topgan GNU C kutubxonasi (tomonidan GNU ), libcgroup,[1] libdrm, libalsa va libevdev[2] (tomonidan freedesktop.org ).
Linux API va boshqalar POSIX API

Linux API - bu foydalanuvchi makonidagi dasturlarga Linux yadrosi tizim resurslari va xizmatlaridan foydalanish imkoniyatini beruvchi yadro - foydalanuvchi maydoni API.[3] U Linux yadrosining tizim qo'ng'iroqlari interfeysi va GNU C kutubxonasi (glibc). Linux API-ni rivojlantirishning asosiy yo'nalishi quyidagilarni ta'minlashga qaratilgan foydali xususiyatlar da belgilangan xususiyatlardan POSIX POSIX API-ni amalga oshiradigan boshqa tizimlarning yadro-foydalanuvchi bo'shliqlari API-lari kabi POSIX-da aniqlanmagan qo'shimcha foydali funktsiyalarni taqdim etish uchun oqilona mos, mustahkam va bajariladigan usulda.

O'z xohishiga ko'ra Linux APIsi o'nlab yillar davomida o'zgaruvchan o'zgarishlarni kiritmaslik siyosati bilan barqaror saqlanib kelinmoqda; bu barqarorlik portativlikni kafolatlaydi manba kodi.[4] Shu bilan birga, Linux yadrosi ishlab chiquvchilari tarixiy jihatdan konservativ va yangi tizim qo'ng'iroqlarini joriy etishga ehtiyotkorlik bilan munosabatda bo'lishgan.[iqtibos kerak ]

Ko'p narsa mavjud bepul va ochiq manbali dasturiy ta'minot POSIX API uchun yozilgan. Linux yadrosiga yadro va C standart kutubxonasining boshqa POSIX-mos kombinatsiyalariga nisbatan juda ko'p rivojlanish kirib kelganligi sababli,[iqtibos kerak ] Linux yadrosi va uning APIsi qo'shimcha funktsiyalar bilan to'ldirildi. Ushbu qo'shimcha funktsiyalar texnik ustunlikni ta'minlasa, Linux API uchun dasturlash POSIX-API o'rniga afzaldir. Hozirgi taniqli misollar udev, tizimd va Veston.[5] Kabi odamlar Lennart Poettering POSIX API o'rniga Linux API-ni afzal ko'rishni ochiqchasiga targ'ib qiling, bu erda afzalliklar mavjud.[6]

Da FOSDEM 2016, Maykl Kerrisk Linux yadrosining foydalanuvchi maydoni API-si bilan bog'liq ba'zi bir qabul qilingan muammolarni tushuntirdi, u kengaytirilmaydigan, boshqarib bo'lmaydigan, o'ta murakkab, cheklangan maqsadga muvofiq, standartlarni buzgan va bir-biriga mos kelmaydigan bir nechta dizayndagi xatolarni o'z ichiga olgan. Ushbu xatolarning ko'pini tuzatish mumkin emas, chunki bu yadro foydalanuvchi maydoniga taqdim etadigan ABIni buzadi.[7]

Linux yadrosining tizim qo'ng'iroqlari interfeysi

Tizimli qo'ng'iroq interfeysi - bu amalga oshirilgan va mavjud bo'lganlarning barchasi uchun nominaldir tizim qo'ng'iroqlari yadroda. Kabi turli xil quyi tizimlar, masalan. The DRM o'zlarining tizim qo'ng'iroqlarini aniqlaydilar va umuman tizim qo'ng'iroqlari interfeysi deb nomlanadi.

Linux yadrosi tizimidagi qo'ng'iroqlarni tashkil qilish bilan bog'liq turli xil masalalar ommaviy ravishda muhokama qilinmoqda. Masalalarni Endi Lutomirski, Maykl Kerrisk va boshqalar ta'kidladilar.[8][9][10][11]

C standart kutubxonasi

The GNU C kutubxonasi Linux yadrosi tizimidagi qo'ng'iroq interfeysi atrofidagi o'rashdir.

A C standart kutubxonasi Linux yadrosining tizim chaqiruvlari atrofidagi o'rash; Linux yadrosi System Call Interface va C standart kutubxonasining kombinatsiyasi Linux API-ni yaratadi.

POSIX-ga qo'shimchalar

Boshqalar singari Unixga o'xshash tizimlar, Linux yadrosining qo'shimcha imkoniyatlari mavjud, ular POSIX tarkibiga kirmaydi:

DRM aniq belgilangan va bajaruvchini ishlab chiqish va amalga oshirish uchun eng muhim bo'lgan bepul va ochiq manbali grafik qurilmalar drayverlari bu holda hech qanday renderlash tezlashishi umuman bo'lmaydi, yoki undan ham yomoni, faqat 2D drayverlari mavjud bo'ladi X.Org serveri. DRM Linux uchun ishlab chiqilgan va shu vaqtdan boshlab boshqa operatsion tizimlarga ko'chirilgan.[14]

Keyingi kutubxonalar

Linux ABI

Linux API va Linux ABI

Linux ABI atamasi ABI yadrosi-foydalanuvchi makonini anglatadi. The Ilova ikkilik interfeysi tuzilgan ikkiliklarni nazarda tutadi, in mashina kodi. Shuning uchun har qanday bunday ABI $ ga bog'liq ko'rsatmalar to'plami. Foydali ABI-ni aniqlash va uni barqaror saqlash Linux yadrosi ishlab chiqaruvchilari yoki GNU C kutubxonasi ishlab chiqaruvchilari uchun kamroq mas'uliyat yuklaydi va ko'proq vazifa Linux tarqatish va Mustaqil dasturiy ta'minot sotuvchisi (ISV), o'zlarining shaxsiy dasturiy ta'minotlarini faqat bitta Linux ABI uchun ikkilik sifatida sotishni va qo'llab-quvvatlashni xohlaydiganlar, aksincha bir nechta Linux ABI-larini qo'llab-quvvatlamoqdalar.

ABI har bir ko'rsatma to'plami uchun belgilanishi kerak, masalan x86, x86-64, MIPS, ARMv7-A (32-bit), ARMv8-A (64-bit) va boshqalar endianness, agar ikkalasi ham qo'llab-quvvatlansa.

Dasturiy ta'minotni turli xil kompilyatorlar bilan ABI-da ko'rsatilgan ta'riflarga qarshi kompilyatsiya qilishi va to'liq ikkilik muvofiqlikka erishishi kerak. Kompilyatorlar bepul va ochiq manbali dasturiy ta'minot masalan. GNU kompilyatori to'plami, LLVM /Jiringlash.

Oxirgi foydalanuvchilar aslida Linux API (yoki Windows API) bilan emas, balki ABI bilan qiziqishadi.

Yadro ichidagi API-lar

Barcha quyi tizimlar uchun bir-biri bilan interfeys qilish uchun juda ko'p ichki ichki API mavjud. Ular ancha barqaror saqlanmoqda, ammo barqarorlikka kafolat yo'q. Agar yangi tadqiqotlar yoki tushunchalar o'zgarishlarni ijobiy deb hisoblasa, API o'zgartiriladi, barcha kerakli qayta yozish va sinovlarni muallif bajarishi kerak.

Linux yadrosi monolitik yadrodir, shuning uchun qurilma drayverlari yadro komponentlari hisoblanadi. Qurilmalar drayverlarini daraxtdan tashqarida ushlab turuvchi kompaniyalarning yukini engillashtirish uchun qurilma drayverlari uchun barqaror API-lar bir necha bor so'ralgan. Linux yadrosi ishlab chiquvchilari qurilma drayverlari uchun barqaror yadro ichidagi API-larni kafolatlashni bir necha bor rad etishdi. Bunday kafolatlar o'tmishda Linux yadrosining rivojlanishini sustlashtirgan bo'lar edi va kelajakda ham bo'lishi mumkin edi va bepul va ochiq kodli dasturiy ta'minot xususiyati tufayli kerak emas. Ergo, tanlov asosida, Linux yadrosida yo'q barqaror yadro ichidagi API.[15]

Yadro ichidagi ABIlar

Yadro ichida barqaror API mavjud bo'lmaganligi sababli, yadro ichidagi barqaror ABI bo'lishi mumkin emas.[16]

Abstraktsiya API-lari

OpenGL haqiqatan ham abstraktsion API bo'lib, bir nechta sotuvchilarning turli xil GPU-laridan foydalanish uchun har biri uchun dasturlashni talab qilmaydi.
Ammo OpenGL-spetsifikatsiyasini amalga oshirish protsessorda ishlaydigan operatsion tizim kontekstida amalga oshiriladi. Bitta dizayn maqsadi Vulkan "grafik drayver" ni, ya'ni grafik API-ni amalga oshirishni kamroq qilish kerak edi.

Bir nechta foydalanish holatlarida Linux API juda past darajali hisoblanadi va undan yuqori abstraktsiya API-lari ishlatiladi. Albatta, hali ham past darajadagi Linux API-lari ustida ishlash kerak. Misollar:

Shuningdek qarang

  • Linux dasturlash interfeysi tomonidan Maykl Kerrisk
  • Semafor (dasturlash)
  • tizim qo'ng'irog'i - bu yadrodan xizmatlarni so'rash uchun dasturlarni engillashtirish funktsiyasi
    • eventfd ()
    • netlink - voris sifatida yaratilgan yadro va foydalanuvchi fazoviy jarayonlari o'rtasida IPC uchun ishlatiladigan soket oilasi ioctl; Netlink tomonidan qo'shilgan Alan Koks Linux yadrosi 1.3-da ko'p yadroli va foydalanuvchi makonining ikki tomonlama aloqalarini ta'minlaydigan belgi drayveri interfeysi sifatida ishlab chiqish paytida. Keyinchalik, Aleksey Kuznetsov Linux yadrosi 2.1-ni ishlab chiqishda yangi zamonaviy marshrutlash infratuzilmasiga moslashuvchan va kengaytiriladigan xabar interfeysini taqdim etish uchun kengaytirdi. O'shandan beri Netlink soketlari yadro quyi tizimlari Linuxdagi foydalanuvchi uchun mo'ljallangan dasturlarga taqdim etadigan asosiy interfeyslardan biriga aylandi. Zamonaviy WNIC haydovchilar foydalanuvchi maydoni bilan aloqa qilish uchun uni ishlating.
  • Windows API - Microsoft Windows operatsion tizimlarida mavjud bo'lgan turli xil API bo'yicha maqola
  • Vino - Linux va Microsoft Windows uchun yozilgan dasturlar o'rtasidagi muvofiqlik darajasi
  • libibrizlar - Linux va Android uchun yozilgan dasturlar o'rtasidagi muvofiqlik darajasi

Adabiyotlar

  1. ^ a b "ControlGroupInterface". freedesktop.org.
  2. ^ "libevdev". freedesktop.org.
  3. ^ Alessandro Rubini (2006-11-02). "Kernel tizimidagi qo'ng'iroqlar". linux.it. Olingan 2014-11-11.
  4. ^ Linus Torvalds (2012-12-23). "Re: [Regression w / patch] Media-ni amalga oshirishda foydalanuvchi maydoni yomonlashishiga olib keladi (shunday edi: Re: Linux 3.8-rc1)". Linux yadrosi pochta ro'yxati. Olingan 2014-08-26. Agar o'zgarish foydalanuvchi dasturlarining buzilishiga olib keladigan bo'lsa, bu yadrodagi xato. Biz hech qachon foydalanuvchi dasturlarini hech qachon ayblamaymiz.
  5. ^ "Portativlik va innovatsiya o'rtasida tanlov". LWN.net. 2011-03-02.
  6. ^ "Intervyu: Lennart Poettering - Lennart Poettering FOSDEM 2011-da" Systemd: init beyond "haqida ma'ruza qiladi". fosdem.org. 2011 yil. Olingan 2014-06-16. Darhaqiqat, men narsalarga qanday qarayman Linux API rolini o'ynab kelmoqda POSIX API va Linux - bu Bepul dasturiy ta'minotni ishlab chiqishning asosiy yo'nalishi. Shu sababli men ishlab chiqaruvchilarga faqat Linuxni hisobga olgan holda xakerlik hujumini qilishga va sizga taqdim etilayotgan erkinlik va imkoniyatlardan foydalanishga maslahat beraman. Shunday qilib, o'zingizga nusxasini oling Linux dasturlash interfeysi, unda aytilganlarning barchasini e'tiborsiz qoldiring POSIX moslik va ajoyib Linux dasturiy ta'minotingizni buzib tashlash. Bu juda oson!
  7. ^ Maykl Kerrisk (2016-01-31). "Linux yadrosi API-ni qanday tuzish kerak". Olingan 2016-02-04.
  8. ^ "Tizim qo'ng'iroqlarini tashkil etish".
  9. ^ "Siskallarning universal ro'yxatini tuzasizmi?". LKML. 2014-02-27.
  10. ^ "Bayroqlar tizim chaqiruvi API dizayn namunasi sifatida". LWN.net. 2014-02-12.
  11. ^ "Vyssalls va vDSO to'g'risida". LWN.net. 2011-06-08.
  12. ^ "[PATCH, RFC] tasodifiy: getrandom (2) tizim chaqiruvini joriy etish". LKML. 2014-07-17.
  13. ^ "memfd.c". Arxivlandi asl nusxasi 2014-04-22.
  14. ^ "NetBSD 7.0 nihoyat DRM / KMS drayverlariga ega bo'ladi". Froniks. 2014-03-19.
  15. ^ "Linux yadrosi drayveri interfeysi".
  16. ^ "Linux yadrosidagi ABI o'zgarishlarini tahlil qilish". Andrey Ponomarenkoning ABI laboratoriyasi. 2016-03-15.

Tashqi havolalar