เป็นวิชาเรียนเทอมล่าสุด คือ ปี 3 เทอม 1 ก็สนุกดี TT ทำไว้แล้วก็เอามาลงใน Medium บ้างดีกว่า (กระซิบว่าเหตุผลจริง ๆ คือ เขียนเรื่องอื่นไม่ทัน) เนื่องจากเป็นสรุป(?)ที่ทำแบบ bullet เลยอาจไม่ได้ใช้คำอธิบายที่ดีมาก แต่ก็สามารถอ่านเพื่อสอบได้? คิดว่านะ5555
✒️ พื้นที่หน่วยความจำของโพรเซส
💩 Address binding
❦ Absolute binding
- ตัวแปร x อยู่ที่ตำแหน่งแอดเดรส 1424 ของโปรแกรม
- ถูกโหลดเข้าสู่ memory ซึ่งมีตำแหน่งเริ่มต้น 1024
- ตัวแปรภาษากำหนดแอดเดรส 2224 ให้กับตัวแปร x ขณะ compile ได้ทันที
- ตัวแปรภาษากำหนดแอดเดรส 2224 ให้กับตัวแปร x ขณะ compile ได้ทันที
❦ Relative binding
- ตัวแปร x อยู่ตำแหน่งที่ 400 ของโปรแกรม
- ถูกโหลดเข้าสู่ memory ซึ่งไม่รู้แอดเดรสเริ่มต้น ให้เป็น x
- ตัวแปร x จะมีแอดเดรสเป็น x+400
💩 Link
❦ Static linking
- หมายถึงการรวมโมดูลทั้งหมดเข้าไปเป็นส่วนของไบนารีอิมเมจโปรแกรม (Binary program image)
- คือส่วนของโปรแกรมทั้งหมดจะถูกบรรจุในไฟล์ซึ่งสามารถประมวลผลได้เป็นไฟล์ใหญ่ ไฟล์เดียว
❦ Dynamic linking
- จะชะลอการลิงค์ไปยังโมดูลออกไปจนถึงเวลาที่โค้ดกําลังประมวลผล โดยการใส่โค้ดเล็ก ๆ เรียกว่า Stub
- Stub คือส่วนของโปรแกรมขนาดเล็กๆที่ชี้ไปยังเนื้อที่ใน memory ที่เก็บโมดูลที่ต้องการ หรือเป็นโปรแกรมขนาดเล็กที่มีวิธีการโหลดโมดูล
- ถ้ามีโมดูลอยู่แล้วก็ไม่ต้องโหลด ถ้าไม่มีจะดูวิธีโหลดจาก Stub
- ต้องใช้ os ตรวจสอบว่ามีโมดูลไหนที่ถูกโหลดเข้ามาแล้วบ้าง เพราะพื้นที่ memory ของโพรเซสต่าง ๆ จะถูกป้องกัน ทำให้โพรเซสไม่สามารถเข้าถึงพื้นที่ memory ของโพรเซสอื่นได้
💩 Dynamic loading
- ระบบจะไม่โหลดรูทีนบางตัวของโปรแกรมจนกว่ารูทีนดังกล่าวจะถูกเรียกใช้
- ทําให้ระบบสามารถประหยัดเนื้อที่หน่วยความจําได้
- ไม่ต้องใช้ os ช่วย แต่ os อำนวยความสะดวกด้วยการสร้าง Library เพื่อให้เรียกใช้ง่าย
✒️ Logical address & Physical address
💩 Logical address
- เป็นแอดเดรสที่อ้างอิงโดยซีพียู มีอีกชื่อคือ Virtual addresss
💩 Physical address
- แอดเดรสของ memory ที่บรรจุข้อมูลอยู่จริง
ถ้า address binding เกิดในช่วง compile แอดเดรสทั้งสองจะเหมือนกัน
💩 หน่วยจัดการหน่วยความจำ (Memory management unit, MMU)
- คืออุปกรณ์ฮาร์ดแวร์ที่แปลง Logical address เป็น Physical address
❦ การหา physical address ใน memory
- แอดเดรสในโค้ดเป็นการอ้างอิงจากจุดเริ่มต้นของโค้ด
- โค้ดถูกโหลดเข้าสู่ memory เริ่มที่ตำแหน่ง 14000
- จะได้แอดเดรสจริงของ 346 คือ 14346
💩 แนวคิดพื้นฐานของการจัดการ memory
❦ Base : เก็บ Physical address ที่โพรเซสถูกโหลดเข้ามาใน memor
❦ Limit : เก็บค่าขนาด memory หรือพื้นที่ที่โพรเซสนั้นสามารถใช้งานได้
❦ ตัวอย่าง
- โพรเซสมีค่า Base เป็น 300040 และค่า Limit เป็น 120900
- ดังนั้นโพรเซสจะสามารถใช้พื้นที่ใน memory ได้ตั้งแต่แอดเดรส 300040 ถึง 420940 (300040+120900)
❦ os ต้องตรวจสอบการร้องขอเข้าพื้นที่ใน memory ของโพรเซส เพื่อไม่ให้โพรเซสเข้าถึงพื้นที่ memory ที่ไม่ใช่ของตัวเอง
- นําแอดเดรสที่โพรเซสต้องการเข้าถึงไปเปรียบเทียบกับ Base & Limit
- ถ้าอยู่ โพรเซสสามารถเข้าถึงพื้นที่ที่ร้องขอได้
- ถ้าไม่อยู่ โพรเซสจะไม่ได้รับการอนุญาตและเกิด Trap หรือข้อผิดพลาดขึ้น
✒️ ความต้องการการบริหารจัดการหน่วยความจำ
💩 Relocation
❦ มีความจำเป็นบนระบบ multiprogramming
- เนื่องจาก memory ต้องใช้งานร่วมกันระหว่างหลายโพรเซส
- และโพรเซสต่าง ๆ ไม่รู้ว่าโพรเซสไหนจะประมวลผลอยู่บ้าง
❦ os ต้องนำ process เข้าออก memory ระหว่างการประมวลผล
- เพื่อให้ memory ทำงานได้อย่างมีประสิทธิภาพ
- จึงมีการ swap ข้อมูลบางส่วนหรือทั้งหมดของโพรเซส ออกจาก memory มาเก็บในพื้นที่ที่กำหนดไว้ เรียกว่า Backing store
- จากนั้นนำข้อมูลดังกล่าวกลับเข้าไปยัง memory เพื่อประมวลผลต่อไป
💩 Protection
- เนื่องจากมีการใช้งานทรัพยากรร่วมกันของโพรเซส
- โพรเซสจึงไม่ควรเข้าไปยัง memory อื่นที่ไม่ใช่ของตนเอง
- แต่ Relocation ทำให้ Protection ยาก เพราะโพรเซสสามารถถูกโหลดไปอยู่บริเวณไหนก็ได้ใน memory
- ต้องมีความยืดหยุ่น เพราะ Sharing ยังมีความจำเป็นกับระบบแบบ multprogramming
💩 Sharing
- มีความจำเป็นสำหรับระบบ multiprogramming เพื่อให้โพรเซสอื่นสามารถใช้โมดูลร่วมกันได้
💩 Logical organization
❦ เกิดจากความแตกต่างของการมองพื้นที่ main memory
- ระบบจริงมอง memory ติดกันแบบ linear
- โปรแกรมเมอร์สร้างโปรแกรมเป็นโมดูล บางส่วนเป็นโค้ดที่ไม่มีการเปลี่ยนแปลง เช่น การอ่านอย่างเดียว หรือ การประมวลผล บางส่วนเป็นโค้ดที่ถูกเปลี่ยนแปลงได้
💩 Physical orgaization
✒️ การพาร์ทิชันหน่วยความจํา
💩 Fixed Partition
- จะแบ่งพื้นที่ memory ออกเป็นพื้นที่ที่มีขนาดเท่ากัน (Equal-size partition) หรือไม่เท่า(Unequal-size partition)ก็ได้
- โพรเซสจะถูกโหลดไปยังพื้นที่ memory ที่มีขนาดใหญ่พอที่จะบรรจุโค้ดและข้อมูบของโพรเซสได้
- ข้อดี : จัดการง่าย
- ข้อเสีย : เกิดปัญหา internal fragmentation คือมีพื้นที่ memory ที่แจกจ่ายให้กับโพรเซสแล้วไม่ได้ถูกใช้งานและไม่สามารถนำไปแจกจ่ายให้โพรเซสอื่นได้
💩 Dynamic partitioning
- มีขึ้นเพื่อแก้ปัญหา Internal fragmentation
- แบ่งพื้นที่ memory ตามขนาดที่โพรเซสต้องการ
- เกิดปัญหา External fragmentation คือมีพื้นที่ memory ที่ว่างไม่ได้แจกจ่ายให้ใคร แต่ไม่สามารถแจกจ่ายให้กับโพรเซสที่ต้องการได้ เพราะพื้นที่ memory ไม่ได้อยู่ติดกัน
❦ อธิบายรูป 5.6
- (ก) ใน memory มีโพรเซส 1, 3 ทำงานอยู่
- (ข) มีโพรเซส 4 เข้ามา
- (ค) โพรเซส 1 ทำงานเสร็จ คืนพื้นที่ memory แล้วออกจากระบบไป
- (ง) โพรเซส 2 เข้ามาในระบบ
- เหลือพื้นที่ใน memory อยู่ (6M + 6M + 4M) ถ้ามีโพรเซสที่ต้องการพื้นที่มากกว่า 6M ระบบจะไม่สามารถแจกจ่ายพื้นที่ให้กับโพรเซสนั้นได้ แม้มีพื้นที่ว่างรวม (16M)
💩 Compaction
- เป็นแนวคิดในการแก้ปัญหา external fragmentation โดยย้ายพื้นที่ว่างของ memory มารวมกันเป็นก้อนเดียวเพื่อให้ได้พื้นที่ขนาดใหญ่ สามารถแจกจ่ายให้กับโพรเซสได้
✒️ Paging
💩 แนวคิด
❦ เป็นแนวคิดที่อนุญาตให้ memory ที่โพรเซสใช้ไม่จำเป็นต้องอยู่ติดกัน
❦ แบ่ง memory ออกเป็น frame เท่า ๆ กันซึ่งมีขนาด 512–8,192 byte
❦ แบ่ง logical address เป็น page เท่า ๆ กัน มีขนาดเท่ากับ frame
❦ os ต้องเก็บข้อมูลของ frame ที่ไม่ได้ใช้งานไว้
❦ เมื่อระบบต้อง execute โปรแกรมขนาด n page
- ระบบต้องหาพื้นที่ว่างของ memory ขนาด n frame แล้วโหลดโปรแกรมขนาด n page นั้นเข้าไปยัง frame ที่ว่างนั้น
- เพื่อให้ระบบรู้ว่าโปรแกรมนั้นอยู่ที่บริเวณไหนใน memory (page ใดของโปรแกรมอยู่ที่ frame ใดใน memory)
- เก็บข้อมูลเหล่านี้ไว้ใน page table
❦ ข้อดี : ลดปัญหา External fragmentation
❦ ข้อเสีย : ขนาดของโค้ดใน page สุดท้ายของแต่ละโปรแกรมอาจจะไม่ได้ใช้พื้นที่ทั้งหมดของ frame ดังกล่าว ส่งผลให้การใช้ paging เกิดปัญหา Internal fragmentation(เฉพาะ frame สุดท้าย)
💩 อธิบายรูป 5.7 การอ้างอิง memory โดยใช้ paging
❦ logical address ถูกแบ่งออกเป็น 2 ส่วนคือ page number (p) และ page offset (d)
- page number (p) : ใช้เป็นตัวชี้ (index) หาหมายเลข frame (f) ใน page table (หาเฟรม)
- page offset (d) : เป็นตัวระบุว่าแอดเดรสดังกล่าวอยู่ตําแหน่งใดในเฟรมนั้น (หาแอดเดรสในเฟรม)
❦ หาเสร็จได้ Physical address
❦ วิธีการคำนวณจำนวนบิตของ page number & page offset
- ขึ้นกับขนาดของ page & main memory
- ถ้า main memory มีขนาด 2^m ต้องใช้ m bit ในการอ้างอิงแอดเดรสแต่ละคำแหน่งใน main memory
- ถ้าแต่ละ page/frame มีขนาด 2^n ต้องใช้ n bit ในการอ้างอิงแอดเดรสแต่ละตำแหน่งใน page/frame
- เลยมี page offset (d) n bit
- มีจำนวนเฟรม 2^m/2^n frame
- มี page number m-n bit
💩 อธิบายรูป 5.8 ตัวอย่างข้อมูลที่ใช้ paging
- page ต่าง ๆ ของโปรแกรมไม่จำเป็นต้องอยู่ติดกันใน memory
- page table เก็บข้อมูลว่า page ใด อยู่ที่ frame ใด
💩 อธิบายรูป 5.9 การแจกจ่าย frame ให้กับ process ใหม่
- (ก) มี frame ว่าง คือ 14, 13, 18, 20 และ 15 ตามลำดับ
- โปรแกรมที่จะถูกโหลดเข้าสู่ memory ต้องการพื้นที่ memory 4 page/frame
- (ข) os ทำการโหลดข้อมูลแต่ละ page ของโปรแกรมเข้าสู่ frame ที่ว่างอยู่
- page table ของ process ใหม่ เก็บข้อมูลของแต่ละ page ใน main memory
- frame ว่างลดลงเหลือแค่ 15
💩 page table
❦ เดิม page table ถูกเก็บใน main memory
❦ page-table base register (PTBR)
- เก็บแอดเดรสเริ่มต้นของ page table ใน main memory
❦ page-table length register (PRLR)
- เก็บขนาดของ page table ดังกล้าว
❦ ต้องเข้าถึง memory 2 ครั้ง ทำให้ระบบทำงานช้า
- ครั้งแรก หา Physical address จาก page table
- ครั้งสอง เข้าถึง Physical address ใน memory ที่ต้องการอ่านข้อมูลหรือคำสั่งที่ต้องการ
💩 อธิบายรูป 5.10 TLB ใน paging
❦ hardware พิเศษชื่อว่า translation look-aside buffers (TLBs) ช่วยแก้ปัญหาการที่ใช้ paging แล้วเข้า memory ถึง 2 ครั้ง ทำให้ระบบทำงานช้า
❦ TLBs คือ associative cache ที่ทำงานอย่างรวดเร็ว สามารถค้นหาข้อมูลแบบขนานได้ มีราคาสูง เลยมีขนาดเล็ก
- แต่ละช่องของ TLB จะเก็บ page number และ frame number
- เมื่อมีการร้องขอแอดเดรส ระบบจะนำ page number มาให้ใน TLB
- ถ้าเจอ เรียกว่า TLB hit และได้ frame number ไปใช้
- ถ้าไม่เจอ เรียกว่า TLB miss ต้องไปหา frame number ใน page table ที่อยู่ใน main memory
page number & frame number จะถูกเพิ่มเข้าไปใน TLB ด้วย - ระบบมักใช้ TLB ควบคู่กับ page table
💩 การวัดประสิทธิภาพของระบบที่ใช้งาน TLBs
EAT = (TLBh * HitR) + (TLBm * (1-HitR))
- EAT : ประสิทธิผลเวลาเข้าถึง (Effective Access Time)
- TLBh : เวลาที่ใช้ในการเข้าถึงข้อมูลใน memory เมื่อเกิด TLB hit
- TLBm : เวลาที่ใช้ในการเข้าถึงข้อมูลใน memory เมื่อเกิด TLBm ซึ่งรวมตั้งแต่เวลาที่เข้าถึง TLB ครั้งแรกที่ทําให้ทราบว่าเกิด TLB miss และเวลาเข้า memory เพื่อไปค้นหา frame number ใน page table และเวลาที่เข้าไปเอาข้อมูล memory
- HitR : Hit ratio เปอร์เซ็นต์ที่ค้นพบ page ที่ต้องการใน TLB
💩 replacement policy
❦ เป็นวิธีที่ os ต้องเลือกช่องที่ต้องการเอาข้อมูลใหม่ทับข้อมูลเก่า เมื่อระบบต้องการใส่ข้อมูลใน TLB แต่ไม่มีพื้นที่ว่าง เช่น
- การแทนที่แบบสุ่ม (Random)
- ถ้าข้อมูลของ kernel os จะให้อยู่ใน TLB ตลอด ไม่ให้มีการเขียนทับ
💩 ข้อดีของ paging
❦ การที่โมดูลหรือโค้ดบางส่วนสามารถใช้งานร่วมกันหลายโพรเซสได้ เช่น
- โค้ดที่ไม่มีการเปลี่ยนแปลงตัวเองขณะ execute หรือ Reetrant code → ตัวแปรภาษา, text editor
❦ อธิบายรูป 5.11 การใช้งานเพจร่วมกัน
- โปรแกรม ed1,2,3 เป็นโปรแกรม retrant code ถูกใช้งานโดยโพรเซส P1, P2, P3
- ซึ่งระบบไม่จำเป็นต้องโหลดโปรแกรมทั้งสามเข้าสู่ memory ตามจำนวนโพรเซสที่เรียกใช้
เอาไว้เท่านี้ก่อนค่ะ เดี่ยวจะยาวเกินไป หัวข้อต่อไปจะเป็นเรื่องของการจัดการโครงสร้างตารางเพจ, segmentation, Virtual memory และ Page Replacement เจอกันค่ะ ^^