
แผนภูมิเปรียบเทียบ
พื้นฐานสำหรับการเปรียบเทียบ | linker | พับ |
---|---|---|
ขั้นพื้นฐาน | มันสร้างโมดูลที่ปฏิบัติการได้ของโปรแกรมต้นฉบับ | มันโหลดโมดูลที่ปฏิบัติการได้ไปยังหน่วยความจำหลัก |
อินพุต | มันใช้เป็นอินพุตรหัสวัตถุที่สร้างโดยแอสเซมเบลอร์ | ใช้โมดูลปฏิบัติการที่สร้างขึ้นโดย linker |
ฟังก์ชัน | มันรวมโมดูลวัตถุทั้งหมดของซอร์สโค้ดเพื่อสร้างโมดูลที่ปฏิบัติการได้ | มันจัดสรรที่อยู่ไปยังโมดูลที่ปฏิบัติการได้ในหน่วยความจำหลักสำหรับการดำเนินการ |
ประเภท / วิธีการ | ตัวแก้ไขลิงก์, ตัวเชื่อมโยงแบบไดนามิก | การโหลดแบบสัมบูรณ์การโหลดแบบเปลี่ยนตำแหน่งได้และการโหลดแบบไดนามิกรันไทม์ |
ความหมายของ Linker
แอสเซมเบลอร์สร้างโค้ดออบเจ็กต์ของซอร์สโปรแกรมและส่งมอบให้กับลิงเกอร์ ตัวเชื่อมโยงใช้รหัสวัตถุนี้และสร้าง รหัสที่ปฏิบัติการได้ สำหรับโปรแกรมและส่งมอบให้กับ Loader
ภาษาระดับสูงโปรแกรมมีบาง ไลบรารีในตัว และ ไฟล์ส่วนหัว ซอร์สโปรแกรมอาจมีฟังก์ชั่นไลบรารีบางอย่างที่มีการจัดเก็บคำจำกัดความไว้ในไลบรารีภายใน ตัวเชื่อมโยงเชื่อมโยงฟังก์ชันเหล่านี้กับไลบรารีในตัว ในกรณีที่ไม่พบไลบรารีในตัวมันจะแจ้งไปยังคอมไพเลอร์และคอมไพเลอร์จะสร้างข้อผิดพลาด
บางครั้งโปรแกรมขนาดใหญ่จะถูกแบ่งออกเป็นโปรแกรมย่อยซึ่งเรียกว่า โมดูล ตอนนี้เมื่อรวบรวมและประกอบโมดูลเหล่านี้โมดูลวัตถุของโปรแกรมต้นฉบับจะถูกสร้างขึ้น ตัวลิงก์มีความรับผิดชอบในการรวม / เชื่อมโยงโมดูลวัตถุทั้งหมดเพื่อสร้างไฟล์เรียกทำงานไฟล์เดียวของโปรแกรมต้นฉบับ เรามีลิงเกอร์สองประเภท
ตัวแก้ไขการเชื่อมโยง : มันเป็นตัวเชื่อมโยงที่สร้างโมดูล relocatable ที่ปฏิบัติการได้
Dynamic Linker : มัน defers / เลื่อนการเชื่อมโยงของโมดูลภายนอกบางอย่างจนกว่าโมดูลโหลด / โมดูลที่ปฏิบัติการได้ถูกสร้างขึ้น ที่นี่การเชื่อมโยงจะทำในช่วงเวลาโหลดหรือเวลาทำงาน
คำจำกัดความของ Loader
เนื่องจากโปรแกรมที่จะต้องดำเนินการในขณะนี้จะต้องอยู่ในหน่วยความจำหลักของคอมพิวเตอร์ มันเป็นความรับผิดชอบของ โหลดเดอร์ โปรแกรมในระบบปฏิบัติการโหลดไฟล์ / โมดูลปฏิบัติการของโปรแกรมที่สร้างขึ้นโดยตัวเชื่อมโยงไปยังหน่วยความจำหลักสำหรับการดำเนินการ มันจัดสรรพื้นที่หน่วยความจำให้กับโมดูลปฏิบัติการในหน่วยความจำหลัก
มีวิธีการโหลดสามแบบ:
- การโหลดแน่นอน
- โหลด relocatable
- การโหลดรันไทม์แบบไดนามิก
การโหลดแบบสัมบูรณ์ : วิธีการนี้จะโหลดไฟล์ปฏิบัติการของโปรแกรมไปยัง ตำแหน่งหน่วยความจำหลักเดียวกัน ทุกครั้ง แต่มี ข้อเสีย บาง ประการ เช่นโปรแกรมเมอร์จะต้องตระหนักถึงกลยุทธ์การกำหนดสำหรับการโหลดโมดูลไปยังหน่วยความจำหลัก ในกรณีที่โปรแกรมจะถูกแก้ไขที่เกี่ยวข้องกับการแทรกและการลบบางส่วนในโปรแกรมแล้วที่อยู่ทั้งหมดของโปรแกรมจะต้องมีการเปลี่ยนแปลง
การโหลด Relocatable: ในวิธีการนี้คอมไพเลอร์หรือแอสเซมเบลอร์ไม่ ได้สร้างที่อยู่หน่วยความจำหลักที่ แท้จริง มันสร้างที่อยู่ญาติ
การโหลดแบบรันไทม์แบบไดนามิก : ในวิธีการนี้ที่อยู่แบบสัมบูรณ์สำหรับโปรแกรมจะถูกสร้างขึ้นเมื่อคำสั่งของโมดูลที่ปฏิบัติการได้ถูกดำเนินการจริง มีความยืดหยุ่นสูงโมดูลที่โหลดได้ / โมดูลที่สามารถเรียกใช้งานได้สามารถโหลดลงใน พื้นที่ใด ๆ ของหน่วยความจำหลัก โปรแกรมการดำเนินการสามารถถูกขัดจังหวะในระหว่างและสามารถสลับออกไปยังดิสก์และกลับสู่หน่วยความจำหลักในครั้งนี้ที่ที่อยู่หน่วยความจำหลักที่แตกต่างกัน
ความแตกต่างที่สำคัญระหว่างตัวเชื่อมโยงและตัวโหลด
- ข้อแตกต่างที่สำคัญระหว่างตัวเชื่อมโยงและตัวโหลดคือตัวเชื่อมโยงสร้างไฟล์ที่ เรียก ใช้งานได้ของโปรแกรมในขณะที่ตัวโหลดโหลดไฟล์ที่เรียกใช้งานที่ได้รับจากตัวเชื่อมโยงไปยัง หน่วยความจำหลักเพื่อดำเนินการ
- ตัวเชื่อมโยงจะใช้ โมดูลวัตถุ ของโปรแกรมที่สร้างโดยแอสเซมเบลอร์ อย่างไรก็ตามโหลดเดอร์จะ ใช้โมดูลที่สามารถเรียกทำงานได้ซึ่ง สร้างขึ้นโดย linker
- ตัวลิงก์รวมโมดูลวัตถุทั้งหมดของโปรแกรมเพื่อสร้าง โมดูลที่ปฏิบัติการ ได้และยังเชื่อมโยง ฟังก์ชันไลบรารี ในโมดูลวัตถุกับ ไลบรารีในตัว ของภาษาการเขียนโปรแกรมระดับสูง โหลดเดอร์จะ จัดสรรพื้นที่ให้กับ โมดูลที่ สามารถใช้งานได้ ในหน่วยความจำหลัก
- ตัวลิงก์สามารถจัดประเภทเป็นตัว แก้ไขการเชื่อมโยง และ ตัวเชื่อมโยงแบบไดนามิก ในขณะที่ ตัว โหลดสามารถจัดประเภทเป็นตัว โหลดสัมบูรณ์ตัวโหลด แบบเปลี่ยนตำแหน่งได้ และตัว โหลด แบบไดนามิกรันไทม์
สรุป:
ตัวเชื่อมโยงใช้โมดูลวัตถุของโปรแกรมจากแอสเซมเบลอร์และเชื่อมโยงเข้าด้วยกันเพื่อสร้างโมดูลที่ปฏิบัติการได้ของโปรแกรม จากนั้นโมดูลที่สามารถเรียกใช้งานได้จะถูกโหลดโดยตัวโหลดลงในหน่วยความจำหลักเพื่อดำเนินการ