210 likes | 321 Views
5.1.5 โหลดเดอร์แบบย้ายโปรแกรมได้ (Relocating Loaders). หลีกเลี่ยงการแปลภาษาแอสเซมบลี้ของโปรแกรมย่อยทั้งหมดให้เป็นภาษาเครื่องซ้ำอีกครั้ง (Reassembling)
E N D
5.1.5 โหลดเดอร์แบบย้ายโปรแกรมได้(Relocating Loaders) • หลีกเลี่ยงการแปลภาษาแอสเซมบลี้ของโปรแกรมย่อยทั้งหมดให้เป็นภาษาเครื่องซ้ำอีกครั้ง (Reassembling) • แทนที่จะให้โปรแกรมเมอร์ทำหน้าที่หาที่ว่างในหน่วยความจำ (Allocation) และ เชื่อมโยงแอดเดรสระหว่างโปรแกรมย่อย Linkage) เราก็จะใช้โหลดเดอร์วิธีใหม่ที่เรียกว่า โหลดเดอร์แบบย้ายโปรแกรมได้ (Relocating Loaders) • ตัวอย่างของโหลดเดอร์ที่ใช้หลักการของ Relocating Loaders คือ โหลดเดอร์ชื่อ Binary Symbolic Subroutine (BSS) Loader
โหลดเดอร์ BSS • ยอมให้มี Segments ของโปรแกรมย่อย (Procedure segments) จำนวนมาก • แต่ยอมให้มี Segments ของข้อมูล (Data segments) เพียงอันเดียว (ข้อมูลจะถูกโปรแกรมย่อยแต่ละตัวใช้ Segment นี้ร่วมกัน) • ตัวแอสเซมเบลอร์จะทำการแปล Segment โปรแกรมย่อยแต่ละ Segment อย่างอิสระ และส่งต่อให้กับตัวโหลดเดอร์ Loader
Transfer vector, Length และ relocation bit • Transfer vector ค่าที่ใช้อ้างอิงสัญลักษณ์ภายนอกแต่ละตัว ใช้ในการแก้ปัญหาของ Linking • Length ความยาวของโปรแกรม ใช้แก้ปัญหาการจัดสรรหน่วยความจำ • relocation bit ใช้ในการแก้ปัญหาของ Relocation • 00 Fixed • 01 Relocate ได้ Loader
1 Loader
ข้อเสียของ BSS • Transfer vector linkage มีประโยชน์แค่การ Transfer เพียงอย่างเดียว มันไม่เอื้ออำนวยต่อการ Loading หรือการเก็บข้อมูลภายนอก (ข้อมูลที่อยู่อีก Segment หนึ่ง) • Transfer vector เพิ่มขนาดของโปรแกรมภาษาเครื่องในหน่วยความจำ • ตัวโหลดเดอร์ BSS จะดีกับ Segments ที่เป็นคำสั่ง แต่ไม่สะดวกกับการเข้าถึง Segment ที่เป็นข้อมูลที่ใช้ร่วมกัน (แก้ไขได้โดยยอมให้มี Segment ข้อมูลที่ใช้ร่วมกันได้ เพียง Segment เดียว ซึ่งเรียกว่า COMMON) Loader
5.1.6 โหลดเดอร์แบบลิงค์โดยตรง (Direct-Linking Loaders) • เป็นโหลดเดอร์ที่ดีที่สุด • ยอมให้มี Segments คำสั่งได้หลาย Segments และยอมให้มี Segments ข้อมูลได้หลาย Segments และยอมให้มีการ Reference คำสั่งและข้อมูลที่อยู่ใน Segment อื่นๆ Loader
ข้อมูลของแต่ละ Segment • ความยาว (Length) ของ Segment • รายการของสัญลักษณ์ทั้งหมดใน Segment ซึ่งอาจจะถูกอ้างใช้ (Referenced) โดย Segment อื่น และ Relative location ภายใน Segment • รายการของสัญลักษณ์ทั้งหมดที่ไม่ได้ถูกกำหนดหรือประกาศใน Segment แต่มีการใช้สัญลักษณ์นั้น • ข้อมูลเกี่ยวกับ Address constant ว่าจะวางที่ตำแหน่งไหนใน Segment และรายละเอียดว่าเราจะแก้ไขข้อมูลอย่างไร • ภาษาเครื่องที่ได้จากการแปลงมาจากภาษาแอสเซมบลี้ รวมทั้ง Relative address ของมัน Loader
ข้อมูลใน Object ที่เก็บสัญลักษณ์ภายนอก • ESD (External Symbol Dictionary) บรรจุข้อมูลเกี่ยวกับ สัญลักษณ์ทั้งหมดที่ถูกกำหนดในโปรแกรมนี้ แต่อาจถูกอ้างถึง (Referred) จากที่อื่น • TXT (Text) รหัสภาษาเครื่องที่แปลงมาจาก source program • RLD (Relocation and Linkage Directory) บรรจุ รหัสภาษาเครื่องที่แปลงมาจาก Source program บัตรที่เก็บแอดเดรสที่เปลี่ยนตำแหน่ง และใช้ในการลิงค์ • END แสดงการจบของ Object Loader
ตัวอย่างข้อมูล ESD TXT RLD และ END ของ โหลดเดอร์แบบลิงค์โดยตรง Loader
บัตร ESD บรรจุข้อมูลเหล่านี้ • SD ซึ่งหมายถึงสัญลักษณ์ที่ถูกกำหนดให้เป็น Segment (Segment definition) • LD เป็นการกำหนดภายใน Segment ของมัน (Local definition) • ER(External reference) ใช้ในการอ้างอิงภายนอก Loader
บัตร RLD บรรจุข้อมูลเหล่านี้ • ตำแหน่งต่างๆ ของตัวคงที่ (Constant) แต่ละตัว ที่ต้องการการเปลี่ยนแปลงอันเนื่องมาจากการเคลื่อนย้ายโปรแกรม Relocation • มันต้องถูกเปลี่ยนโดยอะไร • การทำงาน (Operation) ที่จะต้องถูกจัดการ Loader
การเรียงลำดับข้อมูลในโปรแกรมย่อยการเรียงลำดับข้อมูลในโปรแกรมย่อย ESD โปรแกรมย่อย A TXT RLD END ESD โปรแกรมย่อย BTXT RLD END ESD โปรแกรมย่อย CTXT RLD END Loader
5.1.7 โหลดเดอร์ชนิดอื่นๆ – ชนิด Binders – ชนิด Overlays Loader
Binder • ทำหน้าที่เหมือนกับ Direct-Linking Loader ที่ทำหน้าที่ Binding โปรแกรมย่อยต่างๆ เข้าด้วยกัน แต่แทนที่จะ Relocated และ Linked Text โดยตรงกับหน่วยความจำ แต่มันจะเก็บ Text ลงใน File • File ที่เก็บในดิสก์อยู่ในฟอร์แมทที่พร้อมจะถูกโหลดเรียกว่า โมดุลโหลดเดอร์ • Binder จะทำหน้าที่ Allocation, Relocation, และ Link Loader
Overlay Structure • ถ้าขนาดของโปรแกรมใหญ่กว่าขนาดของหน่วยความจำ Loader
70K (b) Overlay Structure Loader