บทที่ 5 โหลดเดอร์ (Loader) Loader.

Slides:



Advertisements
งานนำเสนอที่คล้ายกัน
โครงสร้างของภาษา C ในโปรแกรมที่พัฒนาด้วยภาษา C ทุกโปรแกรมจะมีโครงสร้างการพัฒนาไม่แตกต่างกัน ซึ่งประกอบด้วย 6 ส่วนหลัก ๆ โดยที่แต่ละส่วนจะมีหน้าที่แตกต่างกัน.
Advertisements

Suphot Sawattiwong Function ใน C# Suphot Sawattiwong
Introduction to C Introduction to C.
โครงสร้างโปรแกรมภาษา C
ระบบปฏิบัติการ (Operating System : OS )
การจำลองความคิด รายวิชา ง40102 หลักการแก้ปัญหาและการโปรแกรม
5.1.5 โหลดเดอร์แบบย้ายโปรแกรมได้ (Relocating Loaders)
2.2.3 การแก้ไขแอดเดรส โดยการใช้อินเด็กรีจิสเตอร์
แนะนำการเขียนโปรแกรมภาษา C Introduction to C Programming Language
หน่วยการเรียนรู้ที่ 5 เรื่อง หลักการทำงานของคอมพิวเตอร์
การเขียนผังงาน.
Intermediate Representation (รูปแบบการแทนในระยะกลาง)
สภาวะแวดล้อมในขณะโปรแกรมทำงาน
โครงสร้างการควบคุมการทำงานของโปรแกรม Program control structures
รหัสระหว่างกลาง (Intermediate code)
Functional programming part II
Data Type part.III.
Lecture No. 3 ทบทวนทฤษฎีและแบบฝึกหัด
อ.กิตติพงศ์ เซ่งลอยเลื่อน อาจารย์พิเศษ มหาวิทยาลัยแม่โจ้
การเขียน STORYBOARD STORYBOARD.
เรื่อง องค์ประกอบของคอมพิวเตอร์ จำทำโดย นาย เดชฤทธิ์ ร้อยพรหมมา
Utility (โปรแกรมอรรถประโยชน์)
การแก้ปัญหาด้วยคอมพิวเตอร์
องค์ประกอบของโปรแกรม
บทที่ 3 พื้นฐานการเขียนโปรแกรม Visual Basic
ภาษาคอมพิวเตอร์.
หลักการทำงานคอมพิวเตอร์
องค์ประกอบพื้นฐาน ของโปรแกรม Visual Basic
โปรแกรมย่อย : Pascal Procedure
Macro Language and the Macro Processor
ขั้นตอนการแปลงไฟล์.
C Programming Lecture no. 6: Function.
SCC : Suthida Chaichomchuen
การเขียนโปรแกรมคอมพิวเตอร์และอัลกอริธึม
การสร้างตาราง (Table)
แนะนำการเขียนโปรแกรมภาษา C Introduction to C Programming Language
บทที่ 15 โปรแกรมย่อยและแสต็ก
CPU ไม่รวม I/O PROCESSOR , MATH CO-PROCESSOR
การเขียนโปรแกรมภาษาซี
Memory Management ในยุคก่อน
บทที่ 3 การวิเคราะห์ Analysis.
Linked List (ลิงค์ลิสต์)
ตัวแปรกับชนิดของข้อมูล
ประวัติและขั้นตอนการพัฒนาโปรแกรมภาษาซี
Geographic Information System
ระบบฐานข้อมูล (Database Management System)
เสรี ชิโนดม ฟังก์ชัน เสรี ชิโนดม
2.1 วิธีแก้ปัญหาด้วยคอมพิวเตอร์ (Computer problem solving methods)
ระบบคอมพิวเตอร์และการประมวลผล
องค์ประกอบของระบบเครือข่าย
วิทยา กรระสี (วท.บ. วิทยาการคอมพิวเตอร์)
ฟังก์ชัน.
หลักการเขียนโปรแกรม ( )
การจัดการฐานข้อมูล.
หลักการแก้ปัญหา.
stack #2 ผู้สอน อาจารย์ ยืนยง กันทะเนตร
หลักการเขียนโปรแกรม ( )
โครงสร้าง ภาษาซี.
Assembly Languages: PDP8
ความรู้พื้นฐานเกี่ยวกับการโปรแกรมคอมพิวเตอร์
ระบบคอมพิวเตอร์ (computer system)
ระบบฐานข้อมูล.
นาย เกียรติศักดิ์ แสนนวล โรงเรียนจักรคำคณาทรลำพูน
แนะนำการเขียนโปรแกรมภาษา C Introduction to C Programming Language
การเขียนผังงาน ผังงาน (Flowchart)
สื่อการสอนการเขียนเว็บเพจ ด้วยภาษา HTML
Computer Program คือ ขั้นตอนการทำงาน ของคอมพิวเตอร์
ซอฟต์แวร์ (software) จัดทำโดย นาย ยุทธพงศ์ คำยอง
ค31212 คณิตศาสตร์สำหรับ คอมพิวเตอร์ 2
ส่วนประกอบของคอมพิวเตอร์
ใบสำเนางานนำเสนอ:

บทที่ 5 โหลดเดอร์ (Loader) Loader

แอสเซมเบลอร์ และโหลดเดอร์ Source program ที่เป็นภาษาแอสเซมบลี้ ของผู้ใช้ จะถูกแปลงให้เป็น Object program (หรือภาษาเครื่อง) โดยตัว แอสเซมเบลอร์ ตัวโหลดเดอร์ ก็คือโปรแกรมที่ยอมรับ Object หรือภาษาเครื่องที่ได้ แล้วจัดการเตรียมส่งให้เครื่องคอมพิวเตอร์ทำงาน Loader

แสดงผังการทำงานทั่วไปของตัวโหลดเดอร์ A B LOADER DATABASE Loader

โหลดเดอร์ ทำหน้าที่ 4 อย่าง จัดหาที่ว่างในหน่วยความจำ เพื่อจะนำโปรแกรมไปใส่ในที่ว่างนั้น (Allocation) แก้ปัญหา การเชื่อมโยงแอดเดรสของสัญลักษณ์ต่างๆ (Symbolic references) ระหว่าง Objects (ที่มาจากแต่ละโปรแกรมย่อย) (Linking) ปรับตำแหน่งแอดเดรสที่ไม่อิสระทั้งหมด (เช่น แอดเดรสที่เป็นค่าคงที่ แอดเดรสที่ต้องอ้างอิงตารางอื่น) ให้สัมพันธ์กับที่ว่างในหน่วยความจำ ที่ได้จัดเตรียมไว้ (Relocation) วางภาษาเครื่อง (คำสั่ง และข้อมูล) ลงไปในหน่วยความจำ (Loading) Loader

Segment เป็นหน่วยของสารสนเทศที่ป้อนเข้าไป ซึ่งอาจจะเป็นข้อมูล หรือโปรแกรมก็ได้ (Data or Program) โดยปกติ Segment หมายถึง แหล่งข้อมูลชุดเดียว หรือ Object ชุดเดียว Loader

“Compile-and-Go” Loader Source Program Deck Compile-and-go Translator (e.g. assembler) Loaded In Memory Assembler Loader

“Compile-and-Go” Loader คอมไพล์ หรือแอสเซมเบิลเสร็จ ก็ให้โปรแกรมทำงานเลย ตัวแอสเซมเบลอร์จะวางภาษาเครื่องที่ได้ลงในหน่วยความจำ และตัวโหลดเดอร์ (ซึ่งประกอบด้วยเพียงคำสั่งเดียว) จะทำหน้าที่บอกแอดเดรสเริ่มต้นของโปรแกรมภาษาเครื่องในหน่วยความจำนั้น เพื่อให้เครื่องเริ่มทำงานที่แอดเดรสเริ่มต้นนั้น ง่ายต่อการออกแบบและเขียนโปแกรม Loader

ข้อเสีย บางส่วนของหน่วยความจำต้องสูญเสียไปเพราะว่าตัวแอสเซมเบลอร์ต้องถูกใช้งานด้วย จะต้องแปลงภาษาแอสเซมบลี้ ให้เป็นภาษาเครื่องทุกครั้ง ที่จะทำการ Run โปรแกรม ในกรณีที่โปรแกรมมีหลาย Segments (เช่น มีหลายโปรแกรมย่อย หรือ Source program มาจากหลายภาษาที่ต่างกัน ) โหลดเดอร์วิธีนี้จะไม่สามารถทำได้ Loader

โหลดเดอร์ที่ใช้งานโดยทั่วไป Source Program Translator Object Programs Ready for Execution Loader Program 1 Program 2 Loader

โหลดเดอร์ที่ใช้งานโดยทั่วไป แทนที่เราจะเอาภาษเครื่องที่ได้ลงไปไว้ในหน่วยความจำ เราก็เอาไปเก็บไว้ในหน่วยความจำสำรองก่อน (เช่น ดิสก์ เป็นต้น) จะทำการโหลดมาไว้ในหน่วยความจำหลัก ก็เฉพาะตอนที่เราจะทำการ Run โปรแกรม เราสามารถโหลดโปรแกรมภาษาเครื่อง ลงแทนที่พื้นที่เดิมของตัวแอสเซมเบลอร์ได้ ถ้าภาษาเครื่องที่ได้จากตัวแอสเซมเบลอร์ หรือตัวคอมไพเลอร์ อยู่ใน Format เดียวกัน ใช้ข้อตกลงการ Link โปรแกรมร่วมกัน ก็จะทำให้สามารถ เขียนโปรแกรมย่อย ที่มาจากภาษาที่แตกต่างกันได้ (เช่น ภาษา C หรือปาสคาล เป็นต้น) Loader

โหลดเดอร์ชนิด แอบโซลุท (Absolute Loader) ง่ายต่อการออกแบบและเขียนโปรแกรม ภาษาเครื่องที่ได้จากตัวแอสเซมเบลอร์จะเกือบเหมือนกับวิธี Assemble-and-Go เพียงแต่ภาษาเครื่องที่ได้ จะถูกเก็บลงในดิสก์ก่อน แทนที่จะส่งไปหน่วยความจำโดยตรง วิธีนี้จะเหลือพื้นที่ในหน่วยความจำไว้ใช้งานเยอะ เพราะตัวแอสเซมเบลอร์ ไม่จำเป็นต้องอยู่ในหน่วยความจำในช่วงของการโหลด Loader

FROM ABSOLUTE ASSEMBLER Location Instruction 100 BALR 12,0 102 : : : MAIN program MAIN START 100 BALR 12,0 USING MAIN+2,12 : L 15,ASQRT call BALR 14,15 SQRT ASQRT DC F’400’ address OF SQRT END SQRT subroutine SQRT START 400 USING *,15 : compute square root BR 14 OBJECT DECK OUTPUT FROM ABSOLUTE ASSEMBLER Location Instruction 100 BALR 12,0 102 : : : 120 L 15,142(0,12) 124 BALR 14,15 126 : 244 F’400’ 248 400 476 BCR 15,14 Loader

ตัวอย่างของโหลดเดอร์ชนิด แอบโซลุท MAIN SQRT Object decks Absolute Loader 100 248 400 478 Loader

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

หน้าที่ของตัวโหลดเดอร์ 4 อย่าง ในกรณีของโหลดเดอร์ ชนิดแอบโซลุท หน้าที่ของตัวโหลดเดอร์ 4 อย่าง ในกรณีของโหลดเดอร์ ชนิดแอบโซลุท Allocation -- ทำโดยโปรแกรมเมอร์ Linking -- ทำโดยโปรแกรมเมอร์ Relocation -- ทำโดยตัวแอสเซมเบลอร์ Loading -- ทำโดยตัวโหลดเดอร์ Loader

การ Link ระหว่างโปรแกรมย่อย (Subroutine Linkage) เมื่อโปรแกรมหลัก A ต้องการเรียกโปรแกรมย่อย B เราสามารถใช้คำสั่ง ในการกระโดดออกจาก A ไปยังโปรแกรมย่อย B ได้ (เช่นคำสั่ง BAL 14,B) Branch and link อย่างไรก็ตาม ตัวแอสเซมเบลอร์ไม่รู้ว่าตำแหน่งที่จะกระโดดไปนั้นอยู่ที่ไหน เช่น กรณีแอดเดรสของ B ตัวแอสเซมเบลอร์จะแสดงข้อความบอกว่า เกิด ERROR ขึ้นมาเช่น ไม่มีการกำหนดสัญลักษณ์มาก่อน (Undefined symbol) เว้นแต่ว่าเราจะมีคำสั่งพิเศษอย่างอื่นมาช่วย เช่น EXTRN และ ENTRY Loader

ตัวอย่าง MAIN START --- L 15,=A(B) call B BALR 14,15 : END EXTRN B Loader

EXTRN คำสั่งประเภท Pseudo-op ตามด้วยสัญลักษณ์ บอกให้รู้ว่าสัญลักษณ์เหล่านั้นถูกกำหนด (หรือประกาศการใช้) ในโปรแกรมอื่น แต่ถูกเรียกใช้ในโปรแกรมนี้ Loader

ENTRY ถ้าสัญลักษณ์ถูกกำหนดในโปรแกรมนี้ และถูกเรียกใช้โดยโปรแกรมอื่นๆ เป็นคำสั่งประเภท Pseudo-op Loader

ตัวอย่าง ASSEMBLER LINKAGE PSEUDO-OPS Subroutine and Entry Naming (START and ENTRY Pseudo-ops) A START defines subroutine A. ENTRY B1,B2,B3,… defines locations B1,…,Bn As additional subroutine entry points EXTRN C : B1 --- B2 --- Loader

โปรแกรมย่อยโดยทั่วไปจะมีลักษณะดังนี้ BETA START USING *,15 : BR 14 END Loader

การอ้างแอดเดรสระหว่างโปรแกรมย่อย โดยการใช้ EXTRN CALL BETA กลายเป็น EXTRN BETA : L 15, ABETA BALR 14,15 ABETA DC A(BETA) Loader