System Call ใน Linux คืออะไรและทำงานอย่างไรกับตัวอย่าง

What Is System Call Linux



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

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







กระดาษห่อแผ่นเวเฟอร์แบบบาง:

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



  • เปิด
  • ปิด I
  • ผู้บริหาร
  • เขียน
  • อ่าน
  • Lseek
  • เลือก

มาพูดคุยกันเกี่ยวกับการเรียกระบบ Linux บางส่วนโดยใช้ภาษา C ในบทความของเราเพื่อลงมือปฏิบัติจริง



เปิดระบบโทร:

เราสามารถใช้ Open system call ในการแจกจ่าย Linux ของเราเพื่อเปิดเอกสารได้อย่างรวดเร็ว ซึ่งเราจะระบุในรหัสภาษา C ของเรา เปิดเทอร์มินัลคำสั่งก่อน คุณสามารถใช้ปุ่มลัด Ctrl+Alt+T สมมติว่าคุณมีไฟล์ข้อความ test.txt ในโฮมไดเร็กทอรี และมีเนื้อหาบางส่วนอยู่ในนั้น ดังนั้น ในการเริ่มต้น คุณต้องสร้างชื่อไฟล์ประเภท C new.c ในเทอร์มินัลโดยใช้โปรแกรมแก้ไขนาโน ดังนั้น ให้ลองใช้คำสั่งนาโนด้านล่างอย่างง่าย





$นาโนnew.c

ตอนนี้ ตัวแก้ไข Nano ได้เปิดตัวแล้ว พิมพ์รหัสที่แสดงด้านล่างในนั้น เรามีตัวอธิบายไฟล์สองตัวในรหัส ไฟล์ทั้งสองสามารถเปิดได้โดยใช้การเรียกระบบเปิด ตัวอธิบายแรกมีการเรียกอ่าน และตัวที่สองมีฟังก์ชันเขียน การโทรเปิดครั้งแรกคือการเปิดไฟล์ข้อความ test.txt และบันทึกเนื้อหาลงใน file descriptor fd การเรียกระบบเปิดครั้งที่สองกำลังสร้างไฟล์ชื่อเป้าหมาย เป้าหมายของเอกสารได้รับการคืนเงินให้กับตัวอธิบายไฟล์ fd1 คำสั่งเขียนใช้เพื่อถอดความไบต์ของข้อมูลในบัฟเฟอร์ แตะ Ctrl+S เพื่อบันทึกโค้ดและกดปุ่มลัด Ctrl+X เพื่อออกจากไฟล์



รันคำสั่งคอมไพล์ gcc เพื่อคอมไพล์โค้ด C นี้

$gccnew.c

มารันโค้ดโดยใช้แบบสอบถาม a.out แบบง่าย ๆ ในเชลล์ดังนี้:

$./ก.ออก

ข้อมูลผลลัพธ์ถูกส่งไปยังเป้าหมายของไฟล์ มาตรวจสอบไฟล์เป้าหมายโดยใช้คิวรี cat หน้าจอเอาต์พุตแสดงข้อมูลอักขระ 20 ตัวในไฟล์เป้าหมาย

$แมวเป้า

การเรียกระบบ Exec:

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

$นาโนexp.c

บรรณาธิการได้รับการเปิดในขณะนี้ เขียนรหัสภาษา C ด้านล่างทั้งหมดด้านล่าง มีห้องสมุดหลักสามแห่งรวมอยู่ในนั้น หลังจากนั้น ฟังก์ชันหลักได้รับการยกตัวอย่าง คำสั่งพิมพ์ได้แสดงข้อมูลสตริงและรหัสกระบวนการของไฟล์ exp.c. ฟังก์ชัน getpid() ถูกใช้เพื่อจุดประสงค์นี้ จากนั้นเราก็มีอาร์เรย์ประเภทอักขระที่มีค่าบางอย่างอยู่ในนั้น การเรียกระบบ exec ถูกใช้เพื่อนำชื่อไฟล์และอาร์เรย์หนึ่งบรรทัดด้านบนเป็นอาร์กิวเมนต์ ตอนนี้ไฟล์ hello.c จะถูกประมวลผล หลังจากนั้นจะมีคำสั่งพิมพ์อื่นออกมา แต่จะไม่มีวันถูกดำเนินการ กด Ctrl+S เพื่อบันทึกไฟล์นี้ กด Ctrl+X เพื่อออก

ตอนนี้ได้เวลาสร้างไฟล์ c อื่น hello.c โดยใช้ตัวแก้ไข nano ใช้แบบสอบถามด้านล่างในเชลล์เพื่อดำเนินการดังกล่าว

$นาโนสวัสดีซี

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

มารวบรวมไฟล์ทั้งสองทีละไฟล์โดยใช้ gcc

$gcc–o exp exp.c

$gcc–O สวัสดี สวัสดี.c

เมื่อเรารันไฟล์ exp.c ไฟล์จะส่งออกคำสั่ง print แรกจากไฟล์ exp.c และทั้งบรรทัดการพิมพ์จากไฟล์ hello.c

$./exp

บทสรุป:

เราได้อธิบายอย่างละเอียดเกี่ยวกับแนวคิดทั้งหมดของการเรียกระบบ Linux และวิธีการใช้สิ่งเหล่านี้ในระบบ Linux ของคุณ เราใช้ Ubuntu 20.04 ในขณะที่นำแนวคิดนี้ไปใช้