กลับไปหน้าบทความ

อ่าน 5 นาที

อินเทอร์เฟซเคอร์เนลลินุกซ์

เคอร์เนลของลินุกซ์มีอินเทอร์เฟซหลายแบบสำหรับ โค้ด ในโหมดผู้ใช้และโหมดเคอร์เนล อิน เทอร์เฟซเหล่านี้สามารถจำแนกได้เป็นอินเทอร์เฟซการเขียนโปรแกรมแอปพลิเคชัน (API)...

อินเทอร์เฟซเคอร์เนลลินุกซ์

Linux API, Linux ABI และ API และ ABI ภายในเคอร์เนล

เคอร์เนลของลินุกซ์มีอินเทอร์เฟซหลายแบบสำหรับ โค้ด ในโหมดผู้ใช้และโหมดเคอร์เนล อิน เทอร์เฟซเหล่านี้สามารถจำแนกได้เป็นอินเทอร์เฟซการเขียนโปรแกรมแอปพลิเคชัน (API) หรืออินเทอร์เฟซไบนารีแอปพลิเคชัน (ABI) และสามารถจำแนกได้เป็นอินเทอร์เฟซระหว่างเคอร์เนลกับพื้นที่ผู้ใช้ หรืออินเทอร์เฟซภายในเคอร์เนล

ลินุกซ์ API

Linux APIประกอบด้วยอินเทอร์เฟซการเรียกใช้ระบบของเคอร์เนล Linux, ไลบรารี GNU C (โดยGNU ), libcgroup , [ 1 ] libdrm , libalsaและlibevdev [ 2 ] (โดยfreedesktop.org )
เทียบกับ API ของ Linux และAPI ของ POSIX

Linux API ประกอบด้วย Kernel–User Space API ซึ่งอนุญาตให้โค้ดในพื้นที่ผู้ใช้เข้าถึงทรัพยากรระบบและบริการของเคอร์เนล Linux [ 3 ]ประกอบด้วยอินเทอร์เฟซการเรียกใช้ระบบของเคอร์เนล Linux และซับรูทีนในไลบรารีมาตรฐาน Cจุดมุ่งหมายของการพัฒนา Linux API คือการจัดหาคุณสมบัติที่ใช้งานได้ของข้อกำหนดที่กำหนดไว้ในPOSIXในลักษณะที่เข้ากันได้ แข็งแกร่ง และมีประสิทธิภาพอย่างเหมาะสม และเพื่อจัดหาคุณสมบัติที่มีประโยชน์เพิ่มเติมที่ไม่ได้กำหนดไว้ใน POSIX เช่นเดียวกับ Kernel–User Space API ของระบบอื่นๆ ที่ใช้ POSIX API ซึ่งมีคุณสมบัติเพิ่มเติมที่ไม่ได้กำหนดไว้ใน POSIX เช่นกัน

API ของ Linux ได้รับการรักษาเสถียรภาพมาหลายทศวรรษโดยนโยบายที่ไม่นำการเปลี่ยนแปลงที่ก่อให้เกิดปัญหามาใช้ ความเสถียรนี้รับประกันความสามารถในการพกพาของซอร์สโค้ด[ 4 ] ในขณะเดียวกัน นักพัฒนาเคอร์เนลของ Linux ก็มีความระมัดระวังและพิถีพิถันในการนำการเรียกใช้ระบบใหม่มาใช้มาโดยตลอด

ซอฟต์แวร์โอเพนซอร์สฟรีจำนวนมากเขียนขึ้นสำหรับ POSIX API เนื่องจากมีการพัฒนาจำนวนมากในเคอร์เนล Linux เมื่อเทียบกับเคอร์เนลและไลบรารีมาตรฐาน C ที่สอดคล้องกับ POSIX อื่นๆ เคอร์เนล Linux และ API ของมันจึงได้รับการเสริมด้วยคุณสมบัติเพิ่มเติม การเขียนโปรแกรมสำหรับ Linux API แบบเต็มรูปแบบ แทนที่จะใช้เพียง POSIX API อาจให้ข้อดีในกรณีที่ฟีเจอร์เพิ่มเติมเหล่านั้นมีประโยชน์ ตัวอย่างที่รู้จักกันดีในปัจจุบัน ได้แก่udev , systemdและWeston [ 5 ] บุคคลเช่นLennart Poettering สนับสนุนอย่างเปิดเผยให้เลือก ใช้ Linux API มากกว่า POSIX API ในกรณีที่ให้ข้อดี[ 6 ]

ในงาน FOSDEM 2016 Michael Kerriskได้อธิบายถึงปัญหาบางประการที่รับรู้ได้เกี่ยวกับ API พื้นที่ผู้ใช้ของเคอร์เนล Linux โดยระบุว่ามีข้อผิดพลาดในการออกแบบหลายประการ ได้แก่ ไม่สามารถขยายได้ บำรุงรักษาไม่ได้ ซับซ้อนเกินไป มีวัตถุประสงค์จำกัด ละเมิดมาตรฐาน และไม่สอดคล้องกัน ข้อผิดพลาดส่วนใหญ่ไม่สามารถแก้ไขได้ เพราะการแก้ไขจะทำให้ ABI ที่เคอร์เนลนำเสนอต่อพื้นที่ผู้ใช้เสียหาย[ 7 ]

อินเทอร์เฟซการเรียกใช้ระบบของเคอร์เนลลินุกซ์

อินเทอร์เฟซการเรียกใช้ระบบของเคอร์เนลคือชุดของการเรียกใช้ระบบ ทั้งหมดที่ถูกนำไปใช้งานและพร้อมใช้งาน ในเคอร์เนล ในเคอร์เนลของลินุกซ์ ระบบย่อยต่างๆ เช่นตัวจัดการการเรนเดอร์โดยตรง (DRM) จะกำหนดการเรียกใช้ระบบของตนเอง ซึ่งทั้งหมดเป็นส่วนหนึ่งของอินเทอร์เฟซการเรียกใช้ระบบ

ประเด็นปัญหาต่างๆ เกี่ยวกับการจัดระเบียบการเรียกใช้ระบบเคอร์เนล Linux กำลังถูกนำมาพูดคุยกันในวงกว้าง ประเด็นปัญหาเหล่านี้ได้รับการชี้ให้เห็นโดย Andy Lutomirski, Michael Kerriskและคนอื่นๆ[ 8 ] [ 9 ] [ 10 ] [ 11 ]

ไลบรารีมาตรฐาน C

ไลบรารีGNU Cเป็นตัวห่อหุ้มรอบอินเทอร์เฟซการเรียกใช้ระบบของเคอร์เนล Linux

ไลบรารีมาตรฐานภาษา Cสำหรับลินุกซ์ประกอบด้วยส่วนห่อหุ้มรอบการเรียกใช้ระบบของเคอร์เนลลินุกซ์ การรวมกันของอินเทอร์เฟซการเรียกใช้ระบบของเคอร์เนลลินุกซ์และไลบรารีมาตรฐานภาษา C คือสิ่งที่สร้าง API ของลินุกซ์ การใช้งานไลบรารีมาตรฐานภาษา C ที่ได้รับความนิยมบางส่วน ได้แก่

แม้ว่าสถานการณ์จะเปลี่ยนแปลงไป แต่ในบรรดาตัวเลือกเหล่านี้ glibc ยังคงเป็นการใช้งานที่ได้รับความนิยมมากที่สุด จนถึงขั้นที่หลายคนถือว่าเป็นค่าเริ่มต้นและมีความหมายเทียบเท่ากับ libc

การเพิ่มเติมใน POSIX

เช่นเดียวกับ ระบบ ที่คล้าย Unix อื่นๆ เคอร์เนลของ Linux มีความสามารถเพิ่มเติมที่ไม่เป็นส่วนหนึ่งของ POSIX:

  • ระบบย่อย cgroupsระบบจะเรียกมันว่าแนะนำและ libcgroup [ 1 ]
  • การเรียกใช้ระบบของDirect Rendering Managerโดยเฉพาะอย่างยิ่ง ioctl ที่เป็นส่วนตัวของไดรเวอร์สำหรับการส่งคำสั่งนั้นไม่ได้ เป็น ส่วนหนึ่งของข้อกำหนด POSIX
  • สถาปัตยกรรมเสียงขั้นสูงของ Linux สามารถกำหนดการเรียกใช้ระบบ ซึ่งไม่ได้เป็นส่วนหนึ่งของข้อกำหนด POSIX
  • การเรียกใช้ระบบfutex(mutex ผู้ใช้แบบเร็ว) , epoll, splice, dnotify, fanotifyและinotifyเป็นฟังก์ชันเฉพาะของเคอร์เนล Linux มาจนถึงปัจจุบัน
  • การเรียกใช้ระบบgetrandomได้รับการแนะนำในเวอร์ชัน 3.17 ของเคอร์เนล Linux หลัก[ 12 ]
  • memfdได้รับการเสนอโดยนักพัฒนาkdbus [ 13 ]
    • memfd_createถูกรวมเข้ากับเคอร์เนลหลักของ Linux ในเวอร์ชันเคอร์เนล 3.17
  • readaheadเริ่มต้นการ "อ่านล่วงหน้า" ไฟล์ลงในแคชของเพจ

DRM มีความสำคัญอย่างยิ่งต่อการพัฒนาและการใช้งาน ไดรเวอร์อุปกรณ์กราฟิกแบบโอเพนซอร์สที่มีประสิทธิภาพและชัดเจนซึ่งหากไม่มีไดรเวอร์เหล่านี้ การเร่งความเร็วการเรนเดอร์จะไม่สามารถใช้งานได้เลย จะมีเพียงไดรเวอร์ 2 มิติเท่านั้นที่ใช้งานได้ในX.Org Server DRM ได้รับการพัฒนาสำหรับ Linux และต่อมาได้ถูกพอร์ตไปยังระบบปฏิบัติการอื่น ๆ ด้วย[ 14 ]

ห้องสมุดเพิ่มเติม

ลินุกซ์ เอบีไอ

API และ ABI ของ Linux

Linux ABI เป็น ABI ที่ใช้ระหว่างเคอร์เนลและพื้นที่ผู้ใช้ เนื่องจาก ABI เป็น อินเทอร์เฟซของ รหัสเครื่อง Linux ABI จึงผูกติดอยู่กับชุดคำสั่งการกำหนด ABI ที่มีประโยชน์และรักษาเสถียรภาพนั้นไม่ใช่ความรับผิดชอบของนักพัฒนาเคอร์เนล Linux หรือนักพัฒนาไลบรารี GNU C มากนัก แต่เป็นหน้าที่ของดิสทริบิวชัน Linuxและผู้จำหน่ายซอฟต์แวร์อิสระ (ISV) ที่ต้องการขายและให้การสนับสนุนซอฟต์แวร์ที่เป็นกรรมสิทธิ์ของตนในรูปแบบไบนารีสำหรับ Linux ABI เดียวเท่านั้น แทนที่จะสนับสนุน Linux ABI หลายตัว

ต้องมีการกำหนด ABI สำหรับชุดคำสั่งทุกชุด เช่นx86 , x86-64 , MIPS , ARMv7-A (32 บิต), ARMv8-A (64 บิต) เป็นต้น พร้อมทั้งระบุลำดับไบต์ (endianness ) ด้วย หากชุดคำสั่งนั้นรองรับทั้งสองอย่าง

ควรสามารถคอมไพล์ซอฟต์แวร์ด้วยคอมไพเลอร์ต่างๆ โดยอ้างอิงจากคำจำกัดความที่ระบุไว้ใน ABI และให้ได้ความเข้ากันได้ในระดับไบนารีอย่างสมบูรณ์ คอมไพเลอร์ที่เป็นซอฟต์แวร์โอเพนซอร์สและใช้งานได้ฟรีเช่นGNU Compiler Collection , LLVM / Clangเป็นต้น

API ภายในเคอร์เนล

มี API ภายในเคอร์เนลอยู่มากมาย ซึ่งช่วยให้ระบบย่อยของเคอร์เนลสามารถเชื่อมต่อกันได้ API เหล่านี้ได้รับการรักษาให้มีเสถียรภาพในระดับหนึ่ง แต่ก็ไม่มีการรับประกันความเสถียรอย่างสมบูรณ์ API ภายในเคอร์เนลอาจเปลี่ยนแปลงได้เมื่อมีความจำเป็นเกิดขึ้นจากงานวิจัยหรือข้อมูลเชิงลึกใหม่ๆ การแก้ไขและการทดสอบที่จำเป็นทั้งหมดต้องดำเนินการโดยผู้เขียนเอง

เคอร์เนล Linux เป็นเคอร์เนลแบบโมโนลิธิก ดังนั้นไดรเวอร์อุปกรณ์จึงเป็นส่วนประกอบของเคอร์เนล เพื่อลดภาระของบริษัทต่างๆ ในการบำรุงรักษาไดรเวอร์อุปกรณ์ (ที่เป็นกรรมสิทธิ์) ของตนเองนอกเหนือจากโครงสร้างเคอร์เนลหลัก จึงมีการร้องขอ API ที่เสถียรสำหรับไดรเวอร์อุปกรณ์ซ้ำแล้วซ้ำเล่า นักพัฒนาเคอร์เนล Linux ได้ปฏิเสธที่จะรับประกัน API ที่เสถียรภายในเคอร์เนลสำหรับไดรเวอร์อุปกรณ์ซ้ำแล้วซ้ำเล่า การรับประกันเช่นนั้นจะทำให้การพัฒนาเคอร์เนล Linux หยุดชะงักในอดีตและจะยังคงเป็นเช่นนั้นในอนาคต และเนื่องจากธรรมชาติของซอฟต์แวร์ฟรีและโอเพนซอร์ส จึงไม่จำเป็น ดังนั้น เคอร์เนล Linux จึงเลือกที่จะไม่มี API ที่เสถียรภายในเคอร์เนล[ 15 ]

ABI ภายในเคอร์เนล

เนื่องจากไม่มี API ในเคอร์เนลที่เสถียร จึงไม่มี ABI ในเคอร์เนลที่เสถียร[ 16 ]

API นามธรรม

OpenGL เป็น API ที่เป็นนามธรรมที่ช่วยให้สามารถใช้งาน GPU ที่หลากหลายจากผู้ผลิตหลายรายได้โดยไม่จำเป็นต้องเขียนโปรแกรมสำหรับแต่ละผู้ผลิตโดยเฉพาะ
แต่การใช้งานตามข้อกำหนด OpenGL นั้นจะดำเนินการบน CPU ในบริบทของระบบปฏิบัติการที่กำลังทำงานอยู่ เป้าหมายหนึ่งของการออกแบบVulkanคือการทำให้ "ไดรเวอร์กราฟิก" หรือก็คือการใช้งาน API กราฟิก ทำงานน้อยลง

ในหลายกรณี API ของ Linux ถือว่าอยู่ในระดับต่ำเกินไป ดังนั้นจึงต้องใช้ API ที่มีระดับนามธรรมสูงกว่า โดยต้องนำ API ระดับสูงมาพัฒนาต่อยอดจาก API ระดับต่ำ ตัวอย่างเช่น:

ดูเพิ่มเติม

  • ตัวระบุไฟล์  – ตัวระบุทรัพยากรระบบในระบบปฏิบัติการ
  • Hybris (ซอฟต์แวร์)  – เลเยอร์ความเข้ากันได้เพื่อเรียกใช้ไดรเวอร์ Android บนระบบ Linux ที่ใช้ glibc หรือ musl
  • อินเทอร์เฟซการเขียนโปรแกรมลินุกซ์  – หนังสือโดย ไมเคิล เคอร์ริสก์
  • netlink  – อินเทอร์เฟซเคอร์เนลของลินุกซ์สำหรับการสื่อสารระหว่างกระบวนการต่างๆ
  • เซมาฟอร์ (การเขียนโปรแกรม)  – ตัวแปรที่ใช้ในระบบแบบขนาน
  • การเรียกใช้ระบบ (System Call)  – วิธีที่โปรแกรมสามารถเข้าถึงบริการของเคอร์เนลได้
  • Windows API  – ชุดอินเทอร์เฟซการเขียนโปรแกรมแอปพลิเคชันหลักของ Microsoft บนระบบปฏิบัติการ Windows
  • windows.h  – ไฟล์เฮดเดอร์ภาษาซีสำหรับการเข้าถึง Windows API
  • Wine (ซอฟต์แวร์)  – ซอฟต์แวร์ที่ใช้งานร่วมกับ Windows ได้
  • Linux Kernel API 5.0 , Memory Management APIs 5.0 ( รูปแบบ Sphinx ใหม่ )
  • API ของเคอร์เนล Linux เวอร์ชัน 2.6.20และ4.12 (ในรูปแบบ htmldocs ที่เลิกใช้แล้ว)
  • การตรวจสอบการเปลี่ยนแปลง API/ABI สำหรับ Linux
  • หนังสือThe Linux Programming Interface กล่าวถึงการเปลี่ยนแปลง ของ Linux และglibc APIนับตั้งแต่หนังสือ The Linux Programming Interfaceวางจำหน่ายในปี 2010
  • แผนผังเคอร์เนล Linux แบบโต้ตอบพร้อมฟังก์ชัน API หลักและโครงสร้างเวอร์ชันPDF
  • หนังสือ "Linux Device Drivers"โดย Jonathan Corbet, Greg Kroah-Hartman และ Alessandro Rubini ฉบับพิมพ์ครั้งที่ 3
  • คำอธิบายเกี่ยวกับ Linked List ในเคอร์เนล Linux ( เก็บถาวรเมื่อ 25 กันยายน 2009 ที่Wayback Machine)
ดึงข้อมูลมาจาก " https://en.wikipedia.org/w/index.php?title=Linux_kernel_interfaces&oldid=1351670164#Linux_API "

สรุปเนื้อหา

ข้อมูลสำคัญจากบทความ

ข้อมูลสำคัญเกี่ยวกับ อินเทอร์เฟซเคอร์เนลลินุกซ์

เคอร์เนลของลินุกซ์มีอินเทอร์เฟซหลายแบบสำหรับ โค้ด ในโหมดผู้ใช้และโหมดเคอร์เนล อิน เทอร์เฟซเหล่านี้สามารถจำแนกได้เป็นอินเทอร์เฟซการเขียนโปรแกรมแอปพลิเคชัน (API)...

ลินุกซ์ API

Linux API ประกอบด้วย Kernel–User Space API ซึ่งอนุญาตให้โค้ดในพื้นที่ผู้ใช้เข้าถึงทรัพยากรระบบและบริการของเคอร์เนล Linux [ 3 ] ประกอบด้วยอินเทอร์เฟซการเรียกใช้ระบบของเคอร์เนล Linux และซับรูทีนใน ไลบรารีมาตรฐาน C จุดมุ่งหมายของการพัฒนา Linux API คือการจัดหา...

อินเทอร์เฟซการเรียกใช้ระบบของเคอร์เนลลินุกซ์

อิน เทอร์เฟซการเรียกใช้ระบบ ของเคอร์เนลคือชุดของ การเรียกใช้ระบบ ทั้งหมดที่ถูกนำไปใช้งานและพร้อมใช้งาน ในเคอร์เนล ในเคอร์เนลของลินุกซ์ ระบบย่อยต่างๆ เช่น ตัวจัดการการเรนเดอร์โดยตรง (DRM) จะกำหนดการเรียกใช้ระบบของตนเอง...

ไลบรารีมาตรฐาน C

ไลบรารี มาตรฐานภาษา C สำหรับลินุกซ์ประกอบด้วยส่วนห่อหุ้มรอบการเรียกใช้ระบบของเคอร์เนลลินุกซ์ การรวมกันของอินเทอร์เฟซการเรียกใช้ระบบของเคอร์เนลลินุกซ์และไลบรารีมาตรฐานภาษา C คือสิ่งที่สร้าง API ของลินุกซ์ การใช้งานไลบรารีมาตรฐานภาษา C ที่ได้รับความนิยมบางส่วน...