5.1.5 โหลดเดอร์แบบย้ายโปรแกรมได้ (Relocating Loaders) หลีกเลี่ยงการแปลภาษาแอสเซมบลี้ของโปรแกรมย่อยทั้งหมดให้เป็นภาษาเครื่องซ้ำอีกครั้ง (Reassembling) แทนที่จะให้โปรแกรมเมอร์ทำหน้าที่หาที่ว่างในหน่วยความจำ (Allocation) และ เชื่อมโยงแอดเดรสระหว่างโปรแกรมย่อย Linkage) เราก็จะใช้โหลดเดอร์วิธีใหม่ที่เรียกว่า โหลดเดอร์แบบย้ายโปรแกรมได้ (Relocating Loaders) ตัวอย่างของโหลดเดอร์ที่ใช้หลักการของ Relocating Loaders คือ โหลดเดอร์ชื่อ Binary Symbolic Subroutine (BSS) 05/09/47 Loader
โหลดเดอร์ BSS ยอมให้มี Segments ของโปรแกรมย่อย (Procedure segments) จำนวนมาก แต่ยอมให้มี Segments ของข้อมูล (Data segments) เพียงอันเดียว (ข้อมูลจะถูกโปรแกรมย่อยแต่ละตัวใช้ Segment นี้ร่วมกัน) ตัวแอสเซมเบลอร์จะทำการแปล Segment โปรแกรมย่อยแต่ละ Segment อย่างอิสระ และส่งต่อให้กับตัวโหลดเดอร์ 05/09/47 Loader
Transfer vector, Length และ relocation bit Transfer vector ค่าที่ใช้อ้างอิงสัญลักษณ์ภายนอกแต่ละตัว ใช้ในการแก้ปัญหาของ Linking Length ความยาวของโปรแกรม ใช้แก้ปัญหาการจัดสรรหน่วยความจำ relocation bit ใช้ในการแก้ปัญหาของ Relocation 00 Fixed 01 Relocate ได้ 05/09/47 Loader
Addr. Relocation Object code 0 00 ‘SQRT’ 4 00 ‘ERRb’ 8 01 ST 14,36 Source program MAIN START EXTRN SQRT EXTRN ERR ST 14,SAVE Save return address L 1,=F’9’ Load test value BAL 14,SQRT Call SQRT C 1,=F’3’ Compare answer BNE ERR Transfer to ERR L 14,SAVE Get return Address BR 14 Return to Caller SAVE DS F Temp. loc. END Program length = 48 bytes Transfer vector = 8 byte Rel. Addr. Relocation Object code 0 00 ‘SQRT’ 4 00 ‘ERRb’ 8 01 ST 14,36 12 01 L 1,40 16 01 BAL 14,0 20 01 C 1,44 24 01 BC 7,4 28 01 L 14,36 32 00 BCR 15,14 34 00 (Skipped for alignment) 36 00 (Temp location) 40 00 9 44 00 3 05/09/47 Loader
05/09/47 Loader
ข้อเสียของ BSS Transfer vector linkage มีประโยชน์แค่การ Transfer เพียงอย่างเดียว มันไม่เอื้ออำนวยต่อการ Loading หรือการเก็บข้อมูลภายนอก (ข้อมูลที่อยู่อีก Segment หนึ่ง) Transfer vector เพิ่มขนาดของโปรแกรมภาษาเครื่องในหน่วยความจำ ตัวโหลดเดอร์ BSS จะดีกับ Segments ที่เป็นคำสั่ง แต่ไม่สะดวกกับการเข้าถึง Segment ที่เป็นข้อมูลที่ใช้ร่วมกัน (แก้ไขได้โดยยอมให้มี Segment ข้อมูลที่ใช้ร่วมกันได้ เพียง Segment เดียว ซึ่งเรียกว่า COMMON) 05/09/47 Loader
5.1.6 โหลดเดอร์แบบลิงค์โดยตรง (Direct-Linking Loaders) เป็นโหลดเดอร์ที่ดีที่สุด ยอมให้มี Segments คำสั่งได้หลาย Segments และยอมให้มี Segments ข้อมูลได้หลาย Segments และยอมให้มีการ Reference คำสั่งและข้อมูลที่อยู่ใน Segment อื่นๆ 05/09/47 Loader
ข้อมูลของแต่ละ Segment ความยาว (Length) ของ Segment รายการของสัญลักษณ์ทั้งหมดใน Segment ซึ่งอาจจะถูกอ้างใช้ (Referenced) โดย Segment อื่น และ Relative location ภายใน Segment รายการของสัญลักษณ์ทั้งหมดที่ไม่ได้ถูกกำหนดหรือประกาศใน Segment แต่มีการใช้สัญลักษณ์นั้น ข้อมูลเกี่ยวกับ Address constant ว่าจะวางที่ตำแหน่งไหนใน Segment และรายละเอียดว่าเราจะแก้ไขข้อมูลอย่างไร ภาษาเครื่องที่ได้จากการแปลงมาจากภาษาแอสเซมบลี้ รวมทั้ง Relative address ของมัน 05/09/47 Loader
ข้อมูลใน Object ที่เก็บสัญลักษณ์ภายนอก ESD (External Symbol Dictionary) บันจุข้อมูลเกี่ยวกับ สัญลักษณ์ทั้งหมดที่ถูกกำหนดในโปรแกรมนี้ แต่อาจถูกอ้างถึง (Referred) จากที่อื่น TXT (Text) RLD (Relocation and Linkage Directory) บรรจุ รหัสภาษาเครื่องที่แปลงมาจาก Source program บัตรที่เก็บแอดเดรสที่เปลี่ยนตำแหน่ง และใช้ในการลิงค์ END แสดงการจบของ Object 05/09/47 Loader
Program Card No. 1. JOHN START 2. ENTRY RESULT 3. EXTRN SUM 4. BALR 12,0 5. USING *,12 6. ST 14,SAVE 7. L 1,POINTER 8. L 15,ASUM 9. BALR 14,15 10. ST 1,RESULT 11. L 14,SAVE BR 14 TABLE DC F’1,7,9,10,3’ POINTER DC A(TABLE) RESULT DS F 16. SAVE DS F 17. ASUM DC A(SUM) END Translation Rel. loc. 0 BALR 12,0 2 ST 14,54(0,12) 6 L 1,46(0,12) 10 L 15,58(0,12) 14 BALR 14,15 16 ST 1,50(0,12) 20 L 14,54(0,12) 24 BCR 15,14 26 --- 28 1 32 7 36 9 40 10 44 3 48 28 52 --- 56 --- 60 ? 64 05/09/47 Loader
ตัวอย่างข้อมูล ESD TXT RLD และ END ของ โหลดเดอร์แบบลิงค์โดยตรง 05/09/47 Loader
Program Card No. 1. JOHN START 2. ENTRY RESULT 3. EXTRN SUM 4. BALR 12,0 5. USING *,12 6. ST 14,SAVE 7. L 1,POINTER 8. L 15,ASUM 9. BALR 14,15 10. ST 1,RESULT 11. L 14,SAVE BR 14 TABLE DC F’1,7,9,10,3’ POINTER DC A(TABLE) RESULT DS F 16. SAVE DS F 17. ASUM DC A(SUM) END Translation Rel. loc. 0 BALR 12,0 2 ST 14,54(0,12) 6 L 1,46(0,12) 10 L 15,58(0,12) 14 BALR 14,15 16 ST 1,50(0,12) 20 L 14,54(0,12) 24 BCR 15,14 26 --- 28 1 32 7 36 9 40 10 44 3 48 28 52 --- 56 --- 60 ? 64 05/09/47 Loader
05/09/47 Loader
บัตร ESD บรรจุข้อมูลเหล่านี้ SD ซึ่งหมายถึงสัญลักษณ์ที่ถูกกำหนดให้เป็น Segment (Segment definition) LD เป็นการกำหนดภายใน Segment ของมัน (Local definition) ER (External reference) ใช้ในการอ้างอิงภายนอก 05/09/47 Loader
บัตร RLD บรรจุข้อมูลเหล่านี้ ตำแหน่งต่างๆ ของตัวคงที่ (Constant) แต่ละตัว ที่ต้องการการเปลี่ยนแปลงอันเนื่องมาจากการเคลื่อนย้ายโปรแกรม Relocation มันต้องถูกเปลี่ยนโดยอะไร การทำงาน (Operation) ที่จะต้องถูกจัดการ 05/09/47 Loader
การเรียงลำดับข้อมูลในโปรแกรมย่อย ESD โปรแกรมย่อย A TXT RLD END โปรแกรมย่อย B TXT โปรแกรมย่อย C TXT 05/09/47 Loader
05/09/47 Loader
5.1.7 โหลดเดอร์ชนิดอื่นๆ – ชนิด Binders – ชนิด Overlays 05/09/47 Loader
Binder ทำหน้าที่เหมือนกับ Direct-Linking Loader ที่ทำหน้าที่ Binding โปรแกรมย่อยต่างๆ เข้าด้วยกัน แต่แทนที่จะ Relocated และ Linked Text โดยตรงกับหน่วยความจำ แต่มันจะเก็บ Text ลงใน File File ที่เก็บในดิสก์อยู่ในฟอร์แมทที่พร้อมจะถูกโหลดเรียกว่า โมดุลโหลดเดอร์ Binder จะทำหน้าที่ Allocation, Relocation, และ Link 05/09/47 Loader
Overlay Structure ถ้าขนาดของโปรแกรมใหญ่กว่าขนาดของหน่วยความจำ 05/09/47 Loader
(b) Overlay Structure 05/09/47 Loader