ความแตกต่างระหว่างการเรียกระบบและฟังก์ชั่นห้องสมุด


11

ฉันเคยผ่านคำตอบของคำถามนี้แต่ไม่เข้าใจความแตกต่างระหว่างการโทรของระบบและฟังก์ชั่นห้องสมุด ตามหลักการแล้วอะไรคือความแตกต่างระหว่างทั้งสอง

คำตอบ:


19

แนวคิดฟังก์ชั่นห้องสมุดเป็นส่วนหนึ่งของกระบวนการของคุณ

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

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


ตัวอย่างเช่นดูลินุกซ์คน brk เมื่อโปรแกรม C โทรmallocเพื่อจัดสรรหน่วยความจำจะเรียกใช้ฟังก์ชันไลบรารีใน glibc

หากมีพื้นที่ว่างเพียงพอสำหรับการจัดสรรภายในกระบวนการสามารถจัดการฮีปที่จำเป็นและส่งคืนหน่วยความจำไปยังผู้โทร

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


11

การเพิ่มคำตอบที่ไร้ประโยชน์:
ฟังก์ชั่นห้องสมุดเร็วกว่าการเรียกใช้ระบบและมักจะไม่มีข้อควรพิจารณาด้านความปลอดภัย / การอนุญาตเนื่องจากจะทำงานด้วยสิทธิ์ของกระบวนการและหน่วยความจำ

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

Syscalls มักจะสะท้อนให้เห็นถึงการใช้งาน CPU ของระบบในโปรแกรมตรวจสอบ


0
  1. lib fun คือคอมไพเลอร์ที่รองรับในขณะที่ syscall รองรับระบบปฏิบัติการ
  2. Libcall มีความเฉพาะเจาะจงในขณะที่ syscall เป็นเรื่องทั่วไปเช่น getc ความสนุกสามารถเข้าถึงได้ครั้งละหนึ่งตัวอักษรไม่ใช่สตริงหรือคำต่อคำ แต่เปิด syscall สามารถใช้เพื่อเปิดไฟล์ข้อความไฟล์ไบนารีและไฟล์ประเภทอื่น ๆ อีกมากมาย

0

การเรียกใช้ไลบรารี - เรียกใช้รูทีนย่อยที่ลิงก์กับแอปพลิเคชัน (รวมถึงหรือเพิ่มไลบรารี)

การเรียกระบบ - โอนการควบคุมไปยัง OS (ผู้ใช้ -> ระบบ proc-> OS) และทำให้โปรเซสเซอร์อยู่ในโหมดสิทธิพิเศษ

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.