ฉันเคยผ่านคำตอบของคำถามนี้แต่ไม่เข้าใจความแตกต่างระหว่างการโทรของระบบและฟังก์ชั่นห้องสมุด ตามหลักการแล้วอะไรคือความแตกต่างระหว่างทั้งสอง
ฉันเคยผ่านคำตอบของคำถามนี้แต่ไม่เข้าใจความแตกต่างระหว่างการโทรของระบบและฟังก์ชั่นห้องสมุด ตามหลักการแล้วอะไรคือความแตกต่างระหว่างทั้งสอง
คำตอบ:
แนวคิดฟังก์ชั่นห้องสมุดเป็นส่วนหนึ่งของกระบวนการของคุณ
ณ รันไทม์โค้ดที่รันได้ของคุณและโค้ดของไลบรารีใด ๆ (เช่น libc.so) ขึ้นอยู่กับว่าจะได้รับการเชื่อมโยงไปยังกระบวนการเดียว ดังนั้นเมื่อคุณเรียกใช้ฟังก์ชั่นในไลบรารีดังกล่าวมันจะเรียกใช้งานเป็นส่วนหนึ่งของกระบวนการของคุณโดยมีทรัพยากรและสิทธิพิเศษเหมือนกัน มันเป็นความคิดเดียวกับการเรียกฟังก์ชั่นที่คุณเขียนด้วยตัวเอง (มีข้อยกเว้นที่เป็นไปได้เช่น PLT และ / หรือฟังก์ชั่นแทรมโพลีนซึ่งคุณสามารถค้นหาได้หากคุณสนใจ)
ตามหลักการแล้วการเรียกของระบบเป็นอินเทอร์เฟซพิเศษที่ใช้ในการโทรจากรหัสของคุณ (ซึ่งโดยทั่วไปไม่มีสิทธิพิเศษ) ไปยังเคอร์เนล (ซึ่งมีสิทธิ์ในการเพิ่มสิทธิ์ตามความจำเป็น)
ตัวอย่างเช่นดูลินุกซ์คน brk เมื่อโปรแกรม C โทรmalloc
เพื่อจัดสรรหน่วยความจำจะเรียกใช้ฟังก์ชันไลบรารีใน glibc
หากมีพื้นที่ว่างเพียงพอสำหรับการจัดสรรภายในกระบวนการสามารถจัดการฮีปที่จำเป็นและส่งคืนหน่วยความจำไปยังผู้โทร
ถ้าไม่เช่นนั้น glibc จำเป็นต้องร้องขอหน่วยความจำเพิ่มเติมจากเคอร์เนล: มัน (อาจ) เรียกใช้brk
ฟังก์ชัน glibc ซึ่งจะเรียกใช้brk
syscall เมื่อการควบคุมได้ส่งผ่านไปยังเคอร์เนลผ่าน syscall สามารถแก้ไขสถานะหน่วยความจำเสมือนส่วนกลางเพื่อสำรองหน่วยความจำเพิ่มเติมและแมปลงในพื้นที่ที่อยู่ของกระบวนการของคุณ
การเพิ่มคำตอบที่ไร้ประโยชน์:
ฟังก์ชั่นห้องสมุดเร็วกว่าการเรียกใช้ระบบและมักจะไม่มีข้อควรพิจารณาด้านความปลอดภัย / การอนุญาตเนื่องจากจะทำงานด้วยสิทธิ์ของกระบวนการและหน่วยความจำ
Syscalls ในทางกลับกันเนื่องจากพวกเขาทำงานในเคอร์เนลมีการเข้าถึงทุกอย่างในระบบและดังนั้นพวกเขาจำเป็นต้องควบคุมสิ่งที่กระบวนการเรียกสามารถทำได้เมื่อมันเรียกพวกเขา (ตรวจสอบว่ามีสิทธิ์ในการเปิดไฟล์สำหรับ ตัวอย่าง) นอกจากนี้เนื่องจาก syscalls อยู่ในเคอร์เนลการเรียกใช้ต้องสลับบริบทใน CPU ซึ่งเป็นกระบวนการที่หนักมากเมื่อเทียบกับการเรียกการเรียกใช้ไลบรารี
Syscalls มักจะสะท้อนให้เห็นถึงการใช้งาน CPU ของระบบในโปรแกรมตรวจสอบ
การเรียกใช้ไลบรารี - เรียกใช้รูทีนย่อยที่ลิงก์กับแอปพลิเคชัน (รวมถึงหรือเพิ่มไลบรารี)
การเรียกระบบ - โอนการควบคุมไปยัง OS (ผู้ใช้ -> ระบบ proc-> OS) และทำให้โปรเซสเซอร์อยู่ในโหมดสิทธิพิเศษ