การจัดการหน่วยความจำ

Download Report

Transcript การจัดการหน่วยความจำ

Chapter 5
การจัดการหน่ วยความจา
(Memory Management)
การจัดลาดับชั้นของหน่ วยความจาแบ่ งได้ เป็ น 3 กลุ่มคือ
• หน่ วยความจาภายใน (Internal memory) หน่วยความจานี้บางครั้งเรี ยกว่า
แคช (Cache memory) ประกอบด้วยรี จิสเตอร์ ความเร็ วสู ง หน่วยความจานี้
ถูกใช้เก็บคาสั่งและข้อมูลที่ตอ้ งการทางานด้วยความเร็ วสู งมาก และเป็ น
หน่วยความจาที่หน่วยประมวลผลกลางสามารถเข้าถึงได้โดยตรงและรวดเร็ ว
• หน่ วยความจาหลัก (Main memory) หน่วยความจาความเร็ วสู ง ใช้สาหรับ
เก็บคาสั่งและข้อมูลระหว่างการทางาน จะเป็ นหน่วยความจาที่หน่วยประมวลผล
กลาง สามารถเข้าถึงได้โดยตรงและรวดเร็ ว
• หน่ วยความจาสารอง (Secondary memory) หน่วยความจาที่มีความเร็ ว
น้อยกว่าหน่วยความจาสองประเภทแรก ใช้สาหรับเก็บข้อมูลที่มีขนาดใหญ่ และยัง
ไม่ตอ้ งการนามาประมวลผล
การจัดการหน่ วยความจา คืออะไร??
คือ การเข้าถึงข้อมูล การอ่านข้อมูล การเขียนข้อมูลลงหน่วยความจา
อย่างชาญฉลาดด้วยวิธีและเทคนิคต่าง ๆ โดยมีวตั ถุประสงค์เพื่อให้ระบบใช้
เวลาน้อยที่สุดในการอ่านเขียนข้อมูล และได้ขอ้ มูลที่ถูกต้องตามที่ระบบ
ต้องการ
การจัดการหน่วยความจา มีอยู่ 3 ส่ วนหลัก ๆ คือ ส่ วนฮาร์ดแวร์, ส่ วน
ระบบปฏิบตั ิการ และส่ วนโปรแกรมประยุกต์
Hardware Memory Management
• เป็ นเรื่ องเกี่ยวกับการจัดการหน่วยความจาในระดับฮาร์ดแวร์ เกี่ยวข้อง
กับวงจรอิเล็กทรอนิกส์ รายละเอียดแผงวงจร วงจรทางานอย่างไร เวลา
จะเก็บข้อมูล อ่านข้อมูล และตรวจสอบข้อมูล เป็ นต้น
Operating System Memory Management
• เป็ นเรื่ องเกี่ยวกับการจัดการหน่วยความจาในส่ วนของระบบปฏิบตั ิการ
ซึ่งจะเป็ นส่ วนที่คงที่ ระบบปฏิบตั ิการจะกันเอาไว้ส่วนหนึ่งเพื่อใช้เก็บ
ตัวเอง ต่างจากส่ วนของโปรแกรมประยุกต์ที่เมื่อเลิกใช้พ้นื ที่ส่วนนั้นก็
จะคืนให้ระบบ เพื่อนาไปใช้กบั โปรแกรมอื่นต่อไป
Application Memory Management
• หน่วยความจาส่ วนนี้ จะเป็ นหน่วยความจาแบบหมุนเวียน(recycling)
โดยโปรแกรมไหนใช้เสร็ จก็จะคืนส่ วนที่ใช้น้ นั ให้ระบบนาไปใช้จดั การให้
โปรแกรมตัวอื่นต่อไป
การจัดการหน่วยความจาในส่ วนของโปรแกรมประยุกต์มีหน้าที่หลัก
2 อย่างคือ
• การขอพื้นที่(Allocation)
• การหมุนเวียนหน่วยความจา (Recycling)
การขอพืน้ ที่ (Allocation)
• เมื่อโปรแกรมร้องขอพื้นที่ ระบบปฏิบตั ิการจะต้องจัดหาพืน้ ที่ที่เพียงพอ
ต่อคาร้องขอ และจัดส่ งตาแหน่งของพื้นที่น้ นั ไปสู่ตวั โปรแกรม เพื่อที่
ตัวโปรแกรมจะได้รู้วา่ ต้องนางานไปเก็บไว้ที่ตาแหน่งใด ในการจัดการ
หน่วยความจา จะมีส่วนที่ใช้จองพื้นที่ เราเรี ยกส่ วนนี้วา่ Allocator
การหมุนเวียนหน่ วยความจา (Recycling)
เมื่อโปรแกรมประยุกต์ปิดลง พื้นที่ที่โปรแกรมประยุกต์ใช้อยูร่ ะบบต้องเก็บกลับคืนมา
เพื่อนากลับมาใช้ใหม่ การหมุนเวียนหน่วยความจาทาได้ 2 วิธีคือ
• ทาใช้ เอง (Manual memory management) เป็ นวิธีที่นกั พัฒนาโปรแกรม
เขียนคาสัง่ ในการคืนหน่วยความจาฝังไว้ในตัวโปรแกรม และเมื่อเลิกใช้โปรแกรม โปรแกรม
ก็จะนาพื้นที่มอบคืนให้แก่ระบบเอง(ระบบไม่ตอ้ งตามเก็บ)
ข้ อดี
ข้ อเสี ย
1) มีการจองพื้นที่เท่าที่จาเป็ น (นักพัฒนาโปรแกรม
จะเข้าใจในโปรแกรมว่าต้องการหน่วยความจาเท่าไร
และจองเท่าที่ตอ้ งการเท่านั้น)
2) การคืนพื้นที่เกิดขึ้นทันทีเมื่อเลิกใช้ ไม่ตอ้ งรอปิ ด
โปรแกรม
นักพัฒนาต้องเขียนโค้ดโปรแกรมเพิ่ม
โค้ดโปรแกรมอาจมีบคั๊ ทาให้มี
ผลกระทบกับระบบ
การหมุนเวียนหน่ วยความจา (Recycling)..ต่อ
• ระบบทา (Automatic memory management) เป็ นวิธีที่ระบบจะมีตวั
จัดการพื้นที่ (บางครั้งจะเรี ยกว่าตัวเก็บขยะ Garbage collection) ตัวจัดการนี้จะมอง
หาพื้นที่ที่จองไว้ แต่ไม่มีโปรแกรมเข้ามาใช้ ตัวจัดการพื้นที่จะทาการเก็บพื้นที่
เหล่านั้นคืนสู่ ระบบ
ข้ อดี
ข้ อเสี ย
นักพัฒนาโปรแกรมไม่ตอ้ งเขียนโค้ดในการคืน
หน่วยความจาเอง โค้ดที่เขียนจึงน้อยลงมีบคั๊
น้อยหรื อแทบไม่มีเลย
การคืนพื้นที่จะช้า เพราะถึงแม้จะ
ไม่ได้ใช้พ้นื ที่น้ นั แล้ว แต่ถา้
โปรแกรมยังเปิ ดอยู่ ตัวจัดการพื้นที่
ก็จะยังเข้าไปเก็บพื้นที่น้ นั คืนมา
ไม่ได้
ปัญหาของการจัดการหน่ วยความจา
เป็ นปั ญหาที่เกิดจากโปรแกรมคืนพื้นที่หน่วยความจาไป
แล้ว แต่ตอ้ งการใช้พ้ืนที่น้ นั อีก ปั ญหานี้เกิดจากการใช้ Manual memory
management ในการจัดการหน่วยความจา ซึ่ งบางครั้งผูพ้ ฒ
ั นาโปรแกรมอาจ
สั่งผิดพลาด สั่งยกเลิกพื้นที่ไปก่อน แล้วจึงสั่งคาสั่งในการเข้าใช้พ้นื ที่ ทาให้เกิด
ปั ญหาข้อมูลไม่ถกู ต้อง หาข้อมูลไม่พบ
Double Free ปั ญหาที่เกิดจากการคืนพื้นที่หน่วยความจาซ้ า อาจมีการสั่งคืน
พื้นที่ซ้ าซ้อน กรณี คืนพื้นที่ในครั้งแรกยังไม่มีปัญหา แต่เมื่อพื้นที่น้ นั ถูกนาไปใช้
กับโปรแกรมอื่น และต่อมาถูกโปรแกรมเดิมคืนพื้นที่ซ้ า อาจทาให้ระบบเกิดปั ญหา
ในการทางานได้
Memory Leak เป็ นปั ญหาที่เกิดจากโปรแกรมทางานผิดพลาด จองพื้นที่ไป
เรื่ อย ๆ ซ้ าๆ แต่ไม่ยอมคืนพื้นที่กลับสู่ ระบบ สุ ดท้ายทาให้หน่วยความจาหมด
• Premature Free
•
•
ปัญหาของการจัดการหน่ วยความจา
เป็ นปั ญหาที่เกิดจากตัว Allocator ไม่เก่ง
เมื่อทางานในการแจกพื้นที่และตามเก็บพื้นที่ไปสักช่วงเวลาหนึ่ง จะพบว่า พื้นที่
ว่างถูกพื้นที่ใช้งานแบ่ง ทาให้พ้นื ที่วา่ งต่อเนื่องยาว ๆ ไม่มใี ห้ใช้ การที่ระบบมี
พื้นที่วา่ งพอ แต่ไม่สามารถนามาใช้งานได้ เพราะพื้นที่วา่ งถูกพืน้ ที่ใช้งานแบ่งเป็ น
พื้นที่ยอ่ ย ๆ
P3
• External Fragmentation
P3
P0
P1
P2
ปั ญหาที่เกิดจากการจองพื้นที่หน่วยความจา
มากกว่าขนาดข้อมูล พื้นที่ที่จองเกินนั้นจะเกิดเป็ นช่องว่างของพืน้ ที่สูญเปล่าเพราะ
ถูกจองไว้ แต่ไม่ได้ใช้ เป็ นปั ญหาที่เกิดขึ้นภายในพื้นที่ที่จองไว้
• Internal Fragmentation
@@@@@@ @
@@@@ @@
@@@
ปัญหาของการจัดการหน่ วยความจา
เป็ นปั ญหาที่เกิดจากการเรี ยงพื้นที่ไม่ต่อเนื่อง
บางครั้งพื้นที่ยอ่ ยหลาย ๆ พื้นที่มีการเก็บข้อมูลที่ต่อเนื่อง ถ้าระบบจัดเก็บพื้นที่
เหล่านั้นห่างกัน หรื อไม่เป็ นไปตามลาดับ จะทาให้การอ่านเขียนมีประสิ ทธิ ภาพต่า
เป็ นปัญหาที่ทาให้ระบบโดยรวมทางานช้าได้
• Poor locality of Reference
OPQRST
ABCDEF UVWXYZ
HIJKLMN
การจัดสรรพืน้ ที่ (Memory Allocation)
• Virtual address คือ ตาแหน่งเสมือนที่อา้ งอิงโดยโปรแกรม
• Physical address คือ ตาแหน่งจริ งที่อา้ งอิงโดยหน่วยความจา เช่น
Program P0 อ้างอิงตาแหน่งที่ 5 (Virtual address = 5) แต่ใน
หน่วยความจาจะเป็ นตาแหน่งที่ 1005 (Physical address = 1005)
ดังภาพ
1005 Physical address
0
1000
P0
0
5 Virtual address
การจัดสรรพืน้ ที่ (Memory Allocation)
• Memory Management Unit : MMU คือ ส่ วนของฮาร์ดแวร์ที่
รับผิดชอบในการจัดการหน่วยความจาแทนซีพียู โดยหน้าที่หลัก ๆ ของ
MMU จะรับ Virtual address จากซีพียู และแปลงเป็ น Physical address
เพื่ออ้างอิงตาแหน่งจริ งจากหน่วยความจา ทาการป้ องกันข้อมูล(Memory
Protection)ไม่ ใ ห้ โ ป รแ ก รม ไม่ ห วั ง ดี เ ข้ า ถึ ง ได้ ท า ก า รจั ด ก า ร
หน่ ว ยความจ าแคช(Cache
control) ดู แ ลการจัด ส่ ง ข้อ มู ล (Bus
arbitration) อย่างถูกต้องครบถ้วนและปลอดภัย
การเชื่อมโยงพืน้ ที่ว่าง (Free Lists)
• เป็ นรู ปแบบในการจัดสรรพื้นที่หน่วยความจา ที่มีรูปแบบที่ง่ายที่สุด เข้าใจง่าย
ที่สุด ซับซ้อนน้อยที่สุด ฟรีลสิ ต์ คือ การเชื่อมพื้นที่วา่ งให้เป็ นแถวต่อเนื่องกัน
โดยใช้การลิงค์ (linked list) ที่ตาแหน่งแรกของทุกพื้นที่วา่ งจะเก็บตาแหน่งของ
พื้นที่วา่ งถัดไปเสมอ ดังภาพ
0
Start
5
5
10
20
P0 10
P1 20
P2 Null
จากภาพ ตาแหน่งแรกของพื้นที่วา่ งที่ 1 จะเก็บค่า 5 เป็ นค่าตาแหน่งแรกของพื้นที่วา่ งที่
2 และตาแหน่งแรกของพื้นที่วา่ งที่ 2 เก็บค่าตาแหน่งของพื้นที่วา่ งถัด ๆ ไปเรื่ อย เชื่อมต่อ
กันเป็ นลูกโซ่ โดยระบบจะค้นหาพื้นที่วา่ งได้ โดยใช้การไล่ตามการเชื่อมโยง เมื่อมีการ
คืนพื้นที่ เกิดพื้นที่วา่ งใหม่ ระบบจะทาการเชื่อมโยงพื้นที่วา่ งนั้นเข้ากับแถวการเชื่อมโยง
เดิม และเมื่อมีการร้องขอพื้นที่เพิม่ ระบบจะไล่หาพื้นที่ตามการเชื่อมโยงไปเรื่ อย ๆ
จนกว่าจะพบพื้นที่วา่ งที่เพียงพอกับความต้องการจึงหยุดค้นหา
วิธีการเลือกพืน้ ที่ในฟรีลสิ ต์ มี 3 วิธี
• First-Fit
เป็ นการเลือกพื้นที่แรกที่เจอ วิธีน้ ีจะหาพื้นที่ได้เร็ วที่สุด โดยระบบจะไล่ตามการ
เชื่อมโยงไปเรื่ อย ๆ จนพบพื้นที่วา่ งที่ใหญ่เพียงพอก็หยุดและใช้พ้ืนที่น้ นั เลย
• Best-Fit
เป็ นการเลือกพื้นที่ที่มีขนาดพอดีกบั ความต้องการมากที่สุด วิธีน้ ีระบบต้องไล่ตาม
การเชื่อมโยง 1 รอบก่อนจึงจะสามารถตัดสิ นใจเลือกพื้นที่เหมาะสมกับความ
ต้องการมากที่สุดได้ วิธีน้ ีจะใช้เวลามากกว่าแบบ First-Fit เพราะต้องตรวจสอบ
พื้นที่ท้ งั หมดในระบบให้ครบเสี ยก่อน จึงจะสามารถเลือกพื้นที่ได้ แต่จะทาให้
external fragmentation มีขนาดเล็กที่สุด
• Worst-Fit
ตรงข้ามกับ Best-Fit คือเลือกพื้นที่ที่มีขนาดใหญ่กว่าความต้องการมากที่สุด วิธีน้ ี
จะทาให้ external fragmentation มีขนาดใหญ่พอที่จะสามารถนากลับมาใช้ได้
เปรียบเทียบการเลือกพืน้ ที่ด้วยวิธีต่าง ๆ
P4
First-Fit
P0
P1
P2
P1
P2
P4
Best-Fit
P0
P4
P0
Worst-Fit
P1
P2
ปัญหา External Fragmentation
คือ การที่พ้นื ที่วา่ งถูกแตกเป็ นส่ วนย่อย ๆ มากจนเกินไป จนไม่สามารถ
นามาใช้งานได้
P1
P5
P2
P3
P4
จากภาพจะพบว่าพื้นที่วา่ งเริ่ มมีการแตกเป็ นส่ วน (Fragmentation) เมื่อมีการคืน
พื้นที่และมีการนาพื้นที่มาใช้ต่อพื้นที่วา่ งจะถูกหัน่ เป็ นส่ วน ๆ มากยิง่ ขึ้น
การเกิด External fragmentation จะมีผลกระทบต่อระบบ ทาให้ไม่สามารถใช้งาน
ทรัพยากรได้อย่างเต็มที่ บางโอกาสที่ควรใช้ได้ กลับไม่สามารถใช้ได้ ทั้งที่มีทรัพยากร
เหลือพอ
การแก้ ปัญหา External Fragmentation
• ทาได้โดยย้ายตาแหน่งของพื้นที่ใช้งานให้เลื่อนมาติดกัน ซึ่งเราเรี ยกว่า
Compaction แต่การทาเช่นนี้ ตอ้ งแลกด้วย Cost
คือ ค่าใช้จ่ายที่ระบบต้องเสี ยไปในการทางาน เช่น เวลา พลังงาน
ประสิ ทธิภาพ ซึ่งทั้งหมดนี้จะมีผลต่องานที่ทาอยู่
Compaction คือ การกระชับหน่วยความจา เพื่อให้พ้น
ื ที่วา่ ง
รวมกันเป็ นผืนเดียว ซึ่งสามารถกระชับได้หลากหลายหนทาง และแต่ละ
หนทางก็จะมีค่าใช้จ่ายแตกต่างกัน
• Cost
•
ตัวอย่ างการกระชับหน่ วยความจาแบบต่ าง ๆ
Before
P1
P2
P3
P4
Move P3+P4
600k
After
(a)
P1
P2
P3
P4
900 k
Move
400k
After
(b)
P1
P2
After
(c)
P1
P2
P4
P3
900 k
900 k
P4
Move
200k
P3
การกระชับหน่ วยความจาทีด่ ี
• จากภาพที่ผา่ นมา ระบบที่ดีตอ้ งเลือกรู ปแบบที่กระชับทีส่ ุ ด เสี ยค่าใช้จ่าย
น้อยที่สุด จึงเลือก แบบ C เป็ นรู ปแบบกระชับหน่วยความจาที่ดีที่สุด
• ในการกระชับหน่วยความจาเพื่อแก้ปัญหา External
fragmentation ของพื้นที่วา่ ง
• สรุ ปข้อดี-ข้อเสี ยของฟรี ลิสต์
ข้ อดี คือ ระบบไม่ซบั ซ้อน การออกแบบสร้างระบบทาได้ง่าย
ข้ อเสี ย คือ เกิด external fragmentation และแก้ไขปัญหานี้ทาได้
ยากด้วย
การแบ่ งพืน้ ที่เป็ นหน้ า (Paging)
เพจจิง้ คือ การแบ่งหน่วยความจาเป็ นหน้า ๆ ขนาดเท่ากัน
หลักการของเพจจิง้
 หน่วยความจาจะถูกแบ่งออกเป็ นพื้นที่เท่า ๆ กัน เรี ยงต่อกันไปเรื่ อย ๆ
ไม่มีช่องว่าง จนหมดพื้นที่หน่วยความจา
 การจองหน่วยความจาจะจองเป็ นตัวเลขลงตัวเสมอ เช่น ข้อมูลขนาด
3 หน้าครึ่ ง จะจองพื้นที่ 4 หน้าเป็ นต้น
 การรับ Virtual address จากซีพียู และแปลงเป็ น Physical address เพื่อ
อ้างอิงตาแหน่งจริ งจากหน่วยความจา จะเป็ นหน้าที่ของ Memory
Management Unit เพื่อช่วยลดบทบาทการทางานของซีพียู
การทางานของ Paging
• Paging สามารถใช้จานวนหน้าที่ไม่ติดกันได้ และในการจองพื้นที่กจ็ ะไม่
เหลือพื้นที่วา่ งคัน่ ไว้ จึงทาให้ไม่เกิดปั ญหา external fragmentation
Frame Number
Virtual Address
Page Number
0
Pa0
1
7
Physical address
Page Table
3
7
0
1
2
Pa0
Pa1
Page
Frame
3
0
0
4
1
3
5
1
Pa1
2
Pa2
3
Pb0
2
6
6
4
Pc0
Pa2
3
8
7
Pb0
5
Pc1
4
7
5
9
8
Pc0
9
Pc1
การทางานของ Paging
• Page Table คือ ตารางที่ใช้จบั คู่ตวั เลข Page Number และ Frame
Number ซึ่งจะเก็บไว้ในหน่วยความจา
• Page Number คือ ตัวเลขหน้า เป็ นตัวเลขเสมือน (Virtual Address) ที่
ใช้อา้ งอิงตาแหน่งในโปรแกรม
• Frame Number คือ ตัวเลขเฟรม เป็ นตัวเลขจริ ง (Physical Address) ที่
ใช้อา้ งอิงตาแหน่งในหน่วยความจา
การทางานของ Paging
• จากภาพโปรแกรม a ใช้พ้นื ที่ 3 หน้า (Pa0,Pa1,Pa2) โปรแกรม b ใช้
พื้นที่ 1 หน้า (Pb0) และโปรแกรม c ใช้พ้นื ที่ 2 หน้า (Pc0,Pc1)
• เริ่ มต้นเมื่อมีการอ้างอิงตาแหน่ง ซีพียจู ะส่ ง Virtual Address ให้ MMU
จากนั้น MMU จะแบ่งตัวเลขมา 2 ชุด คือ ตัวเลขหน้า(Page Number)
และตัวเลขบรรทัด(Page Offset) จากภาพคือ หน้าที่ 1 บรรทัดที่ 7
• ในส่ วนของตัวเลขหน้า MMU จะนาไปจับคู่ที่ตาราง Page Table ที่อยูใ่ น
หน่วยความจา เมื่อพบจะได้ตวั เลขเฟรม (Frame Number) ตัวเลขเฟรมที่
ได้ MMU จะนามารวมกับตัวเลขบรรทัดเดิม ได้ผลลัพธ์เป็ น Physical
Address ที่ใช้ระบุตาแหน่งในหน่วยความจา จากภาพคือ เฟมที่ 3
บรรทัดที่ 7 เมื่อได้ตาแหน่งก็นาข้อมูลในตาแหน่งนั้นส่ งให้ซีพียู
Paging และการแก้ ไขปัญหา External Fragmentation
• การจองพื้นที่ในเพจจิ้งจะจองเป็ น nPage เสมอ โดยค่า n จะเป็ นจานวน
เต็ม และ Page คือปริ มาณข้อมูลใน 1 หน้ากระดาษ
• ตัวอย่างเช่น เรากาหนด ให้ 1 Page เก็บข้อมูล 1024 ไบต์ ดั้งนั้นถ้าเรามี
ข้อมูล 9555 ไบต์เราจะต้องจองพื้นที่เท่ากับ 10 Page
• การจองลักษณะนื้จะทาให้ปัญหา External Fragmentation ไม่เกิด เพราะการ
จองพื้นที่และคืนพื้นที่จะใช้ในอัตราส่ วนเดียวกัน เช่น จอง 3 Page เมื่อใช้เสร็ จคืน
พื้นที่ ต่อมา 3Page นั้นถูกนาไปใช้ต่อ 2 Page เหลือช่องว่าง 1 Page เราไม่นบั
ช่องว่างนี้เป็ น External fragmentation เพราะช่องว่างนี้สามารถนามาใช้งานต่อได้
(ช่องว่างที่เล็กที่สุดในเพจจิ้งจะมีขนาดเท่ากับ 1 Page แต่ในฟรี ลิสต์ช่องว่าง
สามารถเล็กกว่านั้นได้อีก บางกรณี อาจเล็กเพียงแค่ 5-6 ไบต์เท่านั้น)
ปัญหา Internal Fragmentation
แม้เพจจิ้งจะช่วยแก้ปัญหา External Fragmentation แต่กจ็ ะเกิดปั ญหาใหม่ข้ ึนมา คือ
Internal Fragmentation และการมีตาราง Page Table
• Internal Fragmentation คือ การใช้งานพื้นที่ไม่คุม้ ค่า จากหลักการของเพจจิ้ง จะมี
น้อยครั้งมากที่ขนาดของข้อมูลกับขนาดหน้าจะเท่ากันพอดี ส่ วนใหญ่จะเหลื่อม ทาให้
ต้องเสี ยหน้าเพิ่มขึ้นอีกหน้า เกิดช่องว่างไม่ได้ใช้ภายในพื้นที่ที่จอง





ปัญหา Internal Fragmentation แสดงการเก็บข้อมูลไม่เต็มหน้า เกิดพื้นที่สูญเปล่า
ยกตัวอย่างเช่น ใน1Page เรากาหนดให้เก็บข้อมูลได้ 1024 ไบต์ ตัวข้อมูลมี 9555ไบต์
เพราะฉะนั้นต้องจอง 10Page แต่ในความเป็ นจริ ง 10Page คือพื้นที่เท่ากับ 10240 ไบต์
เกิด Internal Fragmentation ขนาด 685 ไบต์
ปัญหา Internal Fragmentation
ในการใช้ง านจริ ง โดยเฉลี่ ย แล้ว การจองพื้ น ที่ แ ต่ ล ะครั้ งจะเสี ย พื้ น ที่
สูญเปล่า (wasted spaces) ไปประมาณครึ่ งหนึ่งเสมอ ดังนั้นจึงต้องเลือกขนาด
หน้าให้เล็กที่สุดเพื่อลดการสู ญเสี ยพื้นที่เปล่า แต่ไม่ควรเลือกเล็กจนเกินไป
เพราะถ้าแบ่งหน้าถี่ การจอง 1 ครั้งต้องใช้จานวนหน้าเพิ่ม ข้อมูลในตาราง
Page table ก็มากแถวตาม ถ้าตารางมีขอ้ มูลมาก ขนาดใหญ่ การค้นหาข้อมูล
เพื่อจับคู่กจ็ ะช้าตามไปด้วย
ปัญหา Page Table
Page Table เป็ นหัวใจหลักในการทางานของเพจจิ้ง การเพิ่มตารางทาให้ระบบต้อง
มีตวั จัดการตารางที่ดี เพราะถ้าไม่ดีอาจกลายเป็ นตารางปั ญหาของระบบก็เป็ นได้
ในระบบเพจจิ้งมีการนาตาราง Page Table มาใช้ การทางานของระบบจะช้าลง
เพราะในการท างานแต่ ละครั้ งระบบต้อ งอ่ านหน่ วยความจ าสองหน หนแรกเพื่ อ หา
ตาแหน่งเฟรม หนที่สองเพื่อทางานกับข้อมูลที่ตอ้ งการในเฟรมนั้น
Frame
data
Frame number
Page Table
Page number
ปัญหา Page Table
เมื่อมีการอ่ านหน่ วยความจาครั้ งแรก จะเกิดอะไรขึ้น ? เมื่อ MMU นาค่าเพจ(Page
Number) มาเทียบในตาราง Page table การเปรี ยบเทียบจะเริ่ มตั้งแต่ขอ้ มูลบรรทัดที่ 1 ไล่
ไปเรื่ อย ๆ จนพบเลขหน้าที่ ตอ้ งการเปรี ยบเที ยบ เราจะเรี ยกว่า liner search (หรื อ
sequential search) มีความสะดวกในการออกแบบสร้างระบบ แต่ทางานช้าเมื่อนามาใช้
กับข้อมูลปริ มาณมาก
Page number
Frame number
Page Table
สรุปข้ อดี-ข้ อเสี ยของเพจจิง้
• ข้ อดี – ช่วยแก้ปัญหา external fragmentation
• ข้ อเสี ย – เกิดปัญหา internal fragmentation การอ้างอิงตาแหน่ง ทุก
ครั้งจะต้องอ่านหน่วยความจา 2 ครั้งเสมอ เพิม่ ค่าใช้จ่ายระบบ เพราะต้องใช้
ฮาร์ดแวร์ (MMU) ช่วย
Homework
และ Automatic Memory
Management ต่างกันอย่างไรจงอธิ บาย
2) ปัญหาของการจัดการหน่วยความจา 6 ประการมีอะไรบ้างจงอธิบาย
3) จงอธิบายคาศัพท์ต่อไปนี้
1) Manual Memory Management
1) Virtual address
2) Physical address
3) Memory management Unit
Homework
4) Given five memory partitions of 100 KB, 500 KB, 200 KB,
300 KB, and 600 KB (inorder),
- How would each of the first-fit, best-fit, and worst-fit
algorithms place processes of 212 KB, 417 KB, 112 KB,
and426 KB (inorder)?
- Which algorithm makes the most efficient use of memory?
ขอบเขตของ address และ Virtual memory
ในระบบคอมพิวเตอร์แบบ 32 บิต และ 64 บิต ตาแหน่งที่อา้ งอิงได้ที่เป็ น
ตาแหน่งของ Virtual address หรื อประมาณ 4G(4พันล้านตาแหน่ง)
ส่ วนขอบเขตของ Physical address คือ จานวนหน่วยความจาที่มีใน
เครื่ อง สาหรับเครื่ องทัว่ ไปจะมีหน่วยความจาสูงสุ ดได้ 2G (2 พันล้าน
ตาแหน่ง) หรื อต่ากว่านั้น เช่น 256 M (2.5 ร้อยล้านตาแหน่ง)
ดังนั้น ส่ วนต่างระหว่าง Virtual address และ Physical address จะเห็นว่า
Virtual address มีตาแหน่งมากกว่า ถ้าการทางานของคอมพิวเตอร์มีการใช้
จานวนเพจมากกว่าเฟรม ระบบจะทางานอย่างไร ในกรณี ที่มีการทางาน
หลายโปรแกรมพร้อมกัน
ขอบเขตของ address และ Virtual memory
โอกาสที่จานวนเพจที่ตอ้ งการใช้จะมีมากกว่าจานวนเฟรมทีม่ ีในเครื่ อง
มีความเป็ นไปได้สูง ในกรณี น้ ีระบบจะนาข้อมูลในเฟรมบางส่ วนเก็บลง
ฮาร์ดดิสก์ ซึ่งข้อมูลเหล่านั้นจะเก็บลงฮาร์ดดิสก์ในส่ วนที่กนั เอาไว้เพื่อใช้
เป็ น Virtual memory เราเรี ยกการทาเช่นนี้วา่ การย้ายออก (Swap out)
ขอบเขตของ address และ Virtual memory
ขอบเขตของ address และ Virtual memory
ส่ วนในตาราง Page table ก็ตอ้ งมีบิตเพื่อใช้ในการตรวจสอบว่า ข้อมูลใด
อยูใ่ นหน่วยความจาหลัก ข้อมูลใดถูกย้ายไปเก็บในหน่วยความจาเสมือน
ถ้าข้อมูลในบิตเป็ น Valid (ใช้ได้) แสดงว่า ข้อมูลในเพจนั้นเก็บอยูใ่ น
หน่วยความจาหลัก แต่ถา้ ข้อมูลใช้ไม่ได้ (Invalid) แสดงว่าข้อมูลในเพจนั้น
เก็บอยูใ่ นหน่วยความจาเสมือน ระบบต้องทาการดึงข้อมูลนั้นกลับมาเก็บใน
หน่วยความจาหลัก การดึงข้อมูลจากหน่วยความจาเสมือนมาเก็บใน
หน่วยความจาหลักเราเรี ยกว่า การย้ายเข้า (swap in) แต่ถา้ หน่วยความจาเต็ม
ระบบอาจต้องเอาข้อมูลอื่นที่ไม่ใช้ ไปเก็บในหน่วยความจาเสมือนก่อน
ขอบเขตของ address และ Virtual memory
ขอบเขตของ address และ Virtual memory
การที่ระบบเรี ยกใช้เพจที่ใช้ไม่ได้(invalid) เราเรี ยกว่า Page Fault เมื่อเกิด
Page Fault ขึ้นกระบวนการที่ถูกเรี ยกเพจหน้านั้นจะถูกยกเลิกไป ระบบก็จะ
นาข้อมูลเพจนั้นกลับเข้าสู่หน่วยความจาหลัก (swap in) จากนั้นก็ทาการ
ปรับปรุ งตารางจาก invalid เป็ น valid สุ ดท้ายส่ งสัญญาณไปให้ระบบเพื่อ
เริ่ มทากระบวนการนั้นใหม่อีกครั้ง
Page Fault
1 ระบบอ้างอิงเลขเพจ
ที่เป็ น invalid
2 ส่ งสัญญาณขอให้
ระบบยกเลิก
กระบวนการนั้น
3 ค้นหาเพจที่ตอ้ งการ
ในหน่วยควาจาเสมือน
4 Swap in หน้านั้น
ออกมาเก็บใน
หน่วยความจา
5 ปรับปรุ งตารางเพจ
เป็ น valid
6 ส่ งสัญญาณพร้อมให้
ระบบเริ่ มต้น
กระบวนการใหม่
Page Fault
การที่มีหน่วยความจาเสมือน ทาให้ระบบสามารถรันโปรแกรมต่าง ๆ
ได้มากขึ้น เครื่ องมีพ้นื ที่หน่วยความจารวมเพิ่มขึ้น ทางานได้หลากหลาย
พร้อม ๆ กันได้มากขึ้น แต่การทาเช่นนี้มีขอ้ เสี ย คือ เมื่อระบบสามารถ
รองรับเพจได้มากขึ้น จานวนข้อมูลในตารางเพจก็จะมีมากขึ้นตาม ถ้ามี
ข้อมูล 1 เพจ ต้องใช้ขอ้ มูล 1 แถวในตาราง Page table เพื่อมาใช้อา้ งอิง
เพราะฉะนั้นในตารางจึงมีความเป็ นไปได้ที่จะมีจานวนแถวสูงสุ ดถึง 1 ล้าน
แถวในตาราง ซึ่งถ้าเป็ นเช่นนั้นการทา linear search เพื่อหาข้อมูลจะเป็ น
เรื่ องที่เป็ นไปได้ยาก
Page Directory
การแก้ปัญหานี้ทาได้โดยแบ่ง Page table เป็ นหลาย ๆ ชั้น หรื อที่เรี ยกว่า
Page directory หรื อการสร้างตารางแบบย้อนกลับ Inverted page table หรื อ
การใช้อุปกรณ์ฮาร์ดแวร์ช่วยเหลือ TLB : Translation Lookaside Buffer)
บางครั้งเรี ยกว่า Multilevel page table เทคนิคนี้คือการแบ่งตาราง เป็ น
ตารางย่อยซ้อนกันหลายชั้น คล้ายการเก็บไฟล์ในไดเร็ กทอรี่ เป็ นชั้น ๆ
ซึ่งปกติเวลา CPU ส่ ง Virtual address ให้ MMU ตัว MMU จะแบ่ง
Virtual address เป็ น 2 ส่ วน คือ เลขเพจและเลขบรรทัด (Page and offset)
เช่น คอมพิวเตอร์แบบ 14 บิต Virtual address จะแบ่ง 4 บิตแรก เป็ นเลขเพจ
และ 10 บิตหลังเป็ น เลขบรรทัด เช่น Page= 4 bit , Offset = 10 bit
Page Directory
สมมติซีพียอู า้ งอิงตาแหน่งที่ 10010001000010 สี่ บิตแรก คือ 9 , สิ บบิต
หลังคือ 66 MMU จะนาเลขเพจ 9 ไปหาเลขเฟรมในตาราง Page table
สมมติวา่ ได้ค่าเลขเฟรมเป็ น 3 เอา 3 กับ 66 มาต่อกัน ดังนั้นค่าตาแหน่งจริ ง
จะเป็ น 00110001000010
Start
Linear Search
0
9
3
Page Directory
แต่การนา Page Directory มาใช้ Virtual address จะถูกแบ่งออกมากกว่า
นั้น เช่น แบ่งเป็ น ส่ วนคือ เลขตาราง เลขหน้า เลขบรรทัด (table, page,
offset) เช่น Table Page Offset
2 bit 2 bit 10 bit
สมมติกรณี เดิมถ้าซีพียู อ้างอิงตาแหน่งที่ 10010001000010 การค้นหาจะ
หาตามลาดับ โดย 2 บิตแรก จะเป็ นค่า 2 (10) นาค่า 2 ไปค้นหาในตาราง
Main page table เพื่อหาตาแหน่ง sub page table จากนั้นนา 2 บิตต่อไปคือ
1(01) ไปค้นหาในตาราง sub page table เพื่อหาเลขเฟรม เมื่อได้เลขเฟรมก็
นามารวมกับเลขบรรทัดได้ค่าตาแหน่งอ้างอิงจริ งขึ้นมา
Start
0
Page Table
Linear Search
9
3
Sub page table 0
Main page table
Start
0
Sub page table 1
2
0
Linear Search
Page Directory
1
3
Linear Search
Sub page table 3
Page Directory
จากตัวอย่าง เปรี ยบเทียบ ตัวอย่างแรกจะต้องทาการเปรี ยบเทียบค่า 10
ครั้ง เพื่อหาค่าเฟรมที่ตอ้ งการ แต่การใช้ Page Directory ลดการเปรี ยบเทียบ
เหลือเพียง 5 ครั้ง (3 ครั้งในตาราง Main 2 ครั้งในตาราง Sub) การทาเช่นนี้
ช่วยลดระยะเวลาในการค้นหาข้อมูลในตาราง Page table แบบตารางเดี่ยว
ได้ แต่มีขอ้ เสี ยคือ การอ่านข้อมูลจากหน่วยความจาจะเป็ น 3 ครั้ง และถ้า
แบ่งชั้นมากขึ้นการเข้าอ่านข้อมูลในหน่วยความจาก็จะมากครั้งตาม
Inverted Page table
รู ปแบบการลดตาราง Page table อีกรู ปแบบหนึ่งต่างจากแบบ Page
directory ที่ทาการลดตารางโดยใช้การแบ่งเป็ นตารางย่อย แต่ในกรณี ของ
Inverted Page Table : IPT จะใช้แค่ตารางเดียวจึงไม่มีการอ่านข้อมูลจาก
หน่วยความจาเกิน 2 ครั้งต่อการอ้างอิงตาแหน่ง 1 ครั้ง
IPT จะสร้างตารางอ้างอิงจากเลขเฟรม แทนที่การสร้างตารางอ้างอิงจาก
เลขเพจแบบเดิม ถ้าในเครื่ องมีหน่วยความจาที่เมื่อแบ่งเฟรมแล้วได้ 6.5
หมื่นเฟรม ตารางแถวสูงสุ ดจะมีไม่เกิน 6.5 หมื่นแถวเช่นกัน
นอกจากลดตารางแล้ว ภายใน IPT แต่ละแถวจะมีการลิงค์หน้าเพจไว้
ด้วย ในความเป็ นจริ ง จานวนเพจจะมากกว่าจานวนเฟรม ฉะนั้นในแต่ละ
แถวจะลิงค์ขอ้ มูลได้มากกว่า 1 เพจขึ้นไป
Inverted Page Table
pagea
pagek
pageb
null
pagec
null
paged
null
pagee
pagef
pagem
null
pagep
null
null
pagei
pagej
null
null
null
pageg
pageh
pagel
pageo
pagen
null
การค้นหาข้อมูล ถ้าเป็ นตารางแบบเดิม แต่ละแถว คือเพจ แต่ละหน้า เราสามารถใช้เลขเพจไล่
ตามแถวไปเรื่ อย ๆ ได้ แต่ถา้ เป็ นตาราง IPT แถวแต่ละแถวคือเลขเฟรม เราไม่สามารถนาเลขเพจมา
เทียบกับเลขเฟรมได้โดยตรง แต่เราจะใช้วธิ ี Hash เข้ามาช่วย
Hash
คือการคานวณเพื่อให้ผลลัพธ์ออกมาอยูใ่ นขอบเขตที่เราต้องการ หรื อ
จากัดได้ เช่น สูตรคานวณ Hash หรื อเรี ยกว่า Hash Function คือ n mod s
โดย n คือ ค่าจานวนเต็มบวก ผลลัพธ์คือค่าเศษที่อยูใ่ นขอบเขต การทาเช่นนี้
เรี ยกว่า การทา Hash
ขอบเขตในการทา Hash คือ ไม่เกินกว่าจานวนเฟรมที่มีอยูใ่ นระบบ ใน
กรณี ที่มีการใช้จานวนเพจมากกว่าจานวนเฟรม เพจส่ วนเกินจะถูกทาการ
Hash ให้ได้ผลลัพธ์อยูใ่ นขอบเขตเฟรมที่มีอยู่ และเพจนั้นจะต่อท้ายแถว
ของค่าเฟรมที่คานวณได้ เช่น ระบบมี 5 เฟรม สูตร n mod 5 โดย n คือ
เลขเพจ ดังนั้นเพจที่ 0 และเพจที่ 5 จะอยูด่ ว้ ยกันในช่องแรกของตาราง ใน
รู ปแบบของลิงค์ที่เชื่อมโยงถึงกัน และเพจที่ 2,7 อยูด่ ว้ ยกันในแถวที่ 3 ของ
ตาราง
Hash
Frame
number
0
1
page0
2
page1
3
page2
4
page3
n
page4
n
page5
n
page7
n
n
การค้นหาข้อมูลใช้หลักการเดียวกันคือ นาเลขเพจมาผ่านการทา Hash โดยค่าที่ได้จากการทา Hash
คือเลขเฟรมที่เพจนั้นอยู่ เมื่อหาแถวของเฟรมนั้นเจอแล้ว ก็ไล่ตามลิงค์เชื่อมโยงจนพบข้อมูลที่เรา
ต้องการ
Hash
Page
number
Hash
Frame
Frame
number
number
0
0
1
page0
V
page5
2
page1
v
3
page2
I
4
page3
v
null
page4
v
null
i
null
null
page7
v
null
1
page0
2
page1
3
page7
4
page3
page4
การค้นหาข้อมูลใช้หลักการเดียวกันคือ นาเลขเพจมาผ่านการทา Hash โดยค่าที่ได้จากการทา
Hash คือเลขเฟรมที่เพจนั้นอยู่ เมื่อหาแถวของเฟรมนั้นเจอแล้ว ก็ไล่ตามลิงค์เชื่อมโยงจนพบข้อมูลที่
เราต้องการ
เมื่อพบข้อมูลเพจที่ตอ้ งการแล้ว ต้องตรวจสอบต่อไปว่า Valid bit ของเพจนั้นเป็ นอย่างไร ถ้า
เป็ น Invalid ต้องนาข้อมูลเพจนั้นกลับไปใส่ ในหน่วยความจาตาแหน่งเฟรมที่ระบุก่อน แต่ถา้ เป็ น
Valid ก็ทาการดึงข้อมูลของเฟรมนั้นในตาแหน่ง Offset ที่ตอ้ งการออกมาได้เลย
สรุป
การใช้ IPT จะสามารถลดขั้นตอนในการอ่านข้อมูลจากหน่วยความจาได้
เพราะใช้ตารางเพียงแค่ตารางเดียว การอ้างอิงตาแหน่งของซีพียแู ต่ละครั้ง
จะใช้การอ่านหน่วยความจา 2 หนเท่านั้น อีกทั้งรู ปแบบตารางมีขนาดเล็ก
ไม่เสี ยเวลาในการค้นหามากจนเกินไป จึงเป็ นวิธีที่สะดวกและนาไปใช้งาน
กว่าการใช้วิธี Page Directory
Translation lookaside buffer (TLB)
วิธีน้ ีเป็ นวิธีที่ใช้เพิม่ ความเร็ วของ Page Table โดยการนาเอาฮาร์ดแวร์มา
ช่วย หลักการของ TLB คือการย้าย Page Table ไปเก็บใน MMU แต่ไม่ได้
เก็บทั้งหมด เก็บเพียงบางส่ วน เนื่องจาก Page Table มีขนาดใหญ่ ดังนั้น
Page Table ในหน่วยความจาแบบเดิมยังคงมีอยู่
การนา Page Table บางส่ วนไปเก็บที่ MMU หรื อที่เรี ยกว่า TLB
เนื่องจาก TLB ทางานได้เร็ วกว่า Page Table ในหน่วยความจา การค้นหา
เพจจิ้งจะเริ่ มที่ TLB ก่อน
การค้นหาตาแหน่งอ้างอิง MMU จะค้นหาที่ TLB ก่อน และถ้าไม่พบก็
จะไปหาในตาราง Page Table ในหน่วยความจา
Translation lookaside buffer (TLB)
Virtual Address
CPU
p
d
TLB Miss
TLB
Physical Address
f
d
Main
Memory
Page Table
Translation lookaside buffer (TLB)
TLB จะเหมือนกับที่พกั ข้อมูลที่ใช้อยูใ่ นปั จจุบนั เมื่อมีการเรี ยกใช้เพจใด ข้อมูลเพจ
นั้นจะถูกคัดลอกจากตาราง Page Table ในหน่วยความจามาเก็บใน Page Table ใน
TLB เพื่อรอการเรี ยกใช้
จากการทดสอบพบว่า การใช้ TLB ขนาด 64 แถว สามารถประสบความสาเร็ จใน
การเรี ยกใช้ TLB ได้ 90% (อีก 10% ไปหาจากตาราง Page Table ในหน่วยความจา)
สมมติเวลาเฉลี่ยในการอ่านหน่วยความจา คือ 100 ns(nanosecond) กรณี ไม่มี TLB
ต้องอ่านหน่วยความจา 2 รอบ คือ 200 ns ต่อการอ้างอิงตาแหน่ง 1 ครั้ง เมื่อมี TLB
เวลาที่ใช้จะลดลงเพราะ 90% ของการอ้างอิงตาแหน่ง ใช้การอ่านหน่วยความจาแค่ครั้ง
เดียว (ครั้งแรกอ่านจาก TLB ไม่ใช่อ่านจากหน่วยความจา) ดังนั้นเวลาเฉลี่ยในการอ่าน
หน่วยความจาคือ 0.9*100+0.1*200 = 110ns (เวลาเฉลี่ยที่ใช้ลดลงไป 45%)
จึงเห็นได้ชดั เจนว่า TLB ช่วยลดการเข้าอ่านหน่วยความจาได้นอ้ ยลงได้ ทาให้การ
อ้างอิงตาแหน่งทาได้เร็ วขึ้น
Homework
• Page Table มีขอ้ ดีขอ้ เสี ยอย่างไร จงอธิบาย
• การเพิ่มประสิ ทธิภาพ Page Table มีวิธีใดบ้างจงอธิบาย
• TLB คืออะไร มีประโยชน์อย่างไรจงอธิบาย