การจัดการหน่วยความจำ
Home  Contents KMArticlesMembersSponsorsAbout us

ปรับปรุง : 2556-11-14 (ปรับรูปแบบ)
ขอบซ้ายขอบบน
การจัดการหน่วยความจำ
[แสดงภาพ] สารบัญ :: #1 :: #2 :: #3 :: #4 :: #5 :: #6 :: #7 :: #8 :: #9 :: #10 :: #11 :: #12 ::

สาระการเรียนรู้
1. กระบวนการจัดการหน่วยความจำ
2. หน่วยความจำหลัก
3. การแบ่งเป็นหน้า
4. การสับเปลี่ยนหน้า
5. การแบ่งเป็นเซ็กเมนต์

จุดประสงค์การสอน
1. เข้าใจกระบวนการจัดการหน่วยความจำ
2. สามารถบอกได้ว่ากระบวนการจัดการหน่วยความจำมีอะไรบ้าง
3. เข้าใจหน่วยความจำหลัก
4. เข้าใจการแบ่งเป็นหน้า
5. เข้าใจการสับเปลี่ยนหน้า
6. เข้าใจการแบ่งเป็นเซ็กเมนต์
7. สามารถวาดภาพแสดงการสับเปลี่ยนหน้าแต่ละแบบได้

เกริ่นนำ
    หน่วยความจำหลัก (RAM = Random Access Memory เป็น Primary Memory) จะทำงานได้เร็วและอยู่ใกล้หน่วยประมวลผล (CPU) ทุกครั้งที่เรียกใช้โปรแกรม หน่วยประมวลผลก็จะโหลดโปรแกรมและข้อมูลจากหน่วยความจำสำรอง (Secondary Memory) มาไว้ในหน่วยความจำหลัก เมื่อข้อมูลมีมากเกินกว่าหน่วยความจำหลักจะรับได้ ก็จะต้องเวียนกันเข้าออกโดยอัตโนมัติ หากหน่วยความจำหลักมีขนาดเล็กก็มักจะทำให้เครื่องคอมพิวเตอร์ทำงานช้า เช่น การเล่นเกมขับเครื่องบินที่ต้องแสดงผลเร็ว ก็จะมีการ์ดจอภาพที่มีหน่วยความจำพิเศษ มาเพิ่มความสามารถในการเก็บข้อมูลและแสดงผลที่รวดเร็วกว่าเดิมมาก
บทนำ
ระบบคอมพิวเตอร์ถูกพัฒนาให้สามารถรันโปรแกรมได้หลาย ๆ โปรแกรมโดยแต่ละโปรแกรมจะแย่งกันใช้หน่วยความจำ ปัญหาที่ตามมาก็คือ ไม่มีหน่วยความจำมากเพียงพอสำหรับโปรแกรม วิธีแก้ปัญหาก็คือเพิ่มหน่วยความจำเข้าไปในระบบ แต่จะทำให้เสียค่าใช้จ่ายมากการแก้ปัญหาวิธีนี้ก็คงยังไม่เพียงพอสำหรับการใช้งาน นักคอมพิวเตอร์จึงหาวิธีอื่นที่จะแก้ปัญญาหน่วยความจำไม่เพียงพอ วิธีที่นิยมใช้ก็คือ การทำหน่วยความจำเสมือน (Virtual Memory)

5.1 กระบวนการจัดการหน่วยความจำ
5.1.1 การย้ายตำแหน่ง (Relocation)

ระบบปฏิบัติการในปัจจุบัน ยอมให้โปรแกรมทำงานพร้อมกันได้หลายงานแบบ multiprogramming ซึ่งโปรเซสต่าง ๆ เข้าใช้งานหน่วยความจำร่วมกัน จึงต้องมีการสลับโปรแกรมให้เข้าออกหน่วยความจำได้ รวมถึงการเปลี่ยนแปลงค่าตำแหน่งในหน่วยความจำที่อ้างถึงในโปรแกรม ให้ถูกต้องตามตำแหน่งจริงในหน่วยความจำ เช่นโปรแกรม a อ้างถึงตำแหน่งที่ 1000 และโปรแกรม b ก็อ้างถึงตำแหน่งที่ 1000 เช่นกัน
ค่า address แบ่งได้ 2 ค่า
1. Absolute address หมายถึง ตำแหน่งจริงของโปรเซสที่อยู่ในหน่วยความจำ
2. Relative address หมายถึง ตำแหน่งของคำสั่ง หรือโปรแกรมของโปรเซสหลังจากการ compile

5.1.2 การป้องกันพื้นที่ (Protection)

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

5.1.3 การใช้พื้นที่ร่วมกัน (Sharing)

การป้องกันเพียงอย่างเดียว อาจทำให้การใช้ทรัพยากรไม่คุ้ม จึงต้องมีการจัดสรรให้ใช้พื้นที่ของหน่วยความจำร่วมกันอย่างยืดหยุ่น

5.1.4 การจัดการแบ่งโปรแกรมย่อย (Logical organization)

ระบบปฏิบัติการจะแบ่งโปรแกรมเป็นโปรแกรมหลัก และโปรแกรมย่อย โดยนำเฉพาะโปรแกรมหลักลงในหน่วยความจำ แต่นำโปรแกรมย่อยลงหน่วยความจำเฉพาะเมื่อมีการเรียกใช้เท่านั้น
ประโยชน์ที่ได้จากการจัดการแบ่งโปรแกรมออกเป็นโปรแกรมย่อย มีดังนี้
1. โปรแกรมย่อยที่ไม่ได้ใช้งาน จะไม่นำลงหน่วยความจำหลัก
2. โปรแกรมย่อยแต่ละตัวสามารถถูกเขียน และแปลแยกกันได้
3. โปรแกรมย่อยแต่ละตัวมีระดับการป้องกันแต่กต่างกัน
4. โปรแกรมหลักสามารถเรียกใช้โปรแกรมย่อยเหล่านี้ร่วมกันได้

5.1.5 การจัดการแบ่งทางกายภาพ (Physical organization)

หน่วยความจำแบ่งเป็น 2 ส่วนคือ หน่วยความจำหลัก และหน่วยความจำสำรอง ลักษณะของหน่วยความจำหลักจะมีราคาแพง ทำงานได้เร็ว แต่เลือนหายได้ ในการทำงานจริง จึงต้องมีการเคลื่อนย้ายทางกายภาพระหว่างหน่วยความจำทั้ง 2 ตลอดเวลา ซึ่งเป็นหน้าที่ของระบบที่ต้องจัดสรรให้ให้สอดคล้องกับการทำงานแบบ multiprogramming

5.2 หน่วยความจำหลัก (Main memory)
การจัดการหน่วยความจำมีหลายระบบ เริ่มจากแบบไม่ซับซ้อน ไปถึงซับซ้อน ในบทนี้จะเรียนรู้แบบไม่ซับซ้อน ซึ่งไม่ถูกนำมาใช้งานในระบบปฏิบัติการปัจจุบัน แต่อาจใช้ในคอมพิวเตอร์ขนาดเล็กอยู่ การเรียนรู้เรื่องนี้อาจ นำไปประยุกต์ในการพัฒนางานด้าน software อื่น ๆ ได้
5.2.1 ระบบโปรแกรมเดียว (Monoprogramming)

เป็นวิธีการจัดการที่ง่ายที่สุด โดยกำหนดเพียง 1 โปรแกรม ให้ทำงานในหน่วยความจำเพียงโปรแกรมเดียว

5.2.2 ระบบหลายโปรแกรมที่กำหนดขนาดพาร์ติชั่นคงที่ (Multiprogramming with fixed partition)

ปัจจุบันระบบปฎิบัติการยอมให้มีหลายโปรเซสทำงานพร้อมกันได้ หมายความว่าขณะที่โปรเซสหนึ่งทำเสร็จ อีกโปรเซสที่รอ ก็เข้าใช้หน่วยความจำทันที โดยแบ่งหน่วยความจำออกเป็น partition การแบ่งเห็นแต่ละ partition แบบตายตัว มีจุดบกพร่อง จึงมีการจัดการหน่วยความจำแบบ FCFS : first come first serve การจัดการแบบนี้ย่อมมีปัญหา จึงเป็นหน้าที่ของระบบปฏิบัติการ ที่ต้องจัดการ

5.2.3 ระบบที่กำหนดขนาดของพาร์ติชั่นให้เปลี่ยนแปลงได้ (Dynamic partition)

เพื่อแก้ปัญหาของการกำหนดแบบคงที่ จึงออกแบบการกำหนด partition แบบเปลี่ยนแปลงได้ ซึ่งมีความซับซ้อน มากขึ้น ตามโปรเซสที่เข้าใช้หน่วยความจำ

5.2.4 การจัดการแบบระบบบัดดี้ (Buddy system)

ระบบจัดการหน่วยความจำแบบคงที่ และเปลี่ยนแปลงได้ อาจมีข้อจำกัดเรื่องการรองรับจำนวนโปรเซส และใช้พื้นที่ไม่เต็มประสิทธิภาพได้ ส่วนการแบ่งแบบเปลี่ยนแปลงได้ก็มีความซับซ้อนในทางปฏิบัติ และใช้ทรัพยากร จึงมีการผสมระหว่าง 2 ระบบนี้เข้าด้วยกัน ระบบนี้จะแบ่งพื้นที่เป็น 2 ส่วน และตรวจสอบว่าพอจะแบ่งให้กับโปรเซสล่าสุดได้หรือไม่ ถ้าแบ่งแล้วเข้าไม่ได้ ก็จะแบ่งขนาดเท่าก่อนหน้าที่ถูกแบ่ง และจัดเรียงพื้นที่เป็นแบบ link list ไว้รอการเข้าใช้ของโปรเซส

5.3 การแบ่งเป็นหน้า (Paging)
ระบบที่ใช้หน่วยความจำเสมือน (Virtual memory) มักใช้เทคนิคที่เรียกว่า การแบ่งหน้า หรือเพจจิ่ง(Paging) เพื่อเชื่อมระหว่างตำแหน่งทางตรรก กับเลขของเฟรมในหน่วยความจำหลัก
5.3.1 ตารางหน้า (Page table)

หมายถึงการรับค่าตำแหน่งทางตรรกเป็นค่านำเข้า แล้วหาเลขของเฟรมในหน่วยความจำหลักออกมา เทคนิคตารางหน้า(Page table) มักมีขนาดใหญ่ และต้องทำด้วยความเร็วสูง หากสรุปแล้วตารางหน้า ก็คือตารางที่เก็บอาร์เรย์ของรีจิสเตอร์นั่นเอง

5.3.2 บัฟเฟอร์ค้นหาที่อยู่ (TLB : Translation lookaside buffer)

ทุกครั้งที่เรียกใช้หน่วยความจำเสมือน ย่อมเรียกใช้หน่วยความจำหลัก 2 ครั้ง คือ การอ่านตารางหน้า และอ่านข้อมูลจริงจากหน่วยความจำหลัก ดังนั้นการทำงานแบบนี้จึงใช้เวลาถึง 2 เท่า จึงมีการใช้ cach memory ซึ่งทำหน้าที่เก็บตารางหน้าที่เคยถูกเรียกใช้ หรือเรียกว่า บัฟเฟอร์ค้นหาที่อยู่ (TLB : Translation Lookaside Buffer) ถ้าพบใน TLB จะเรียก TLB hit ถ้าไม่พบเรียก TLB miss และเข้าไปอ่านตารางหน้า เมื่ออ่านแล้วก็จะนำมาเพิ่มใน TLB สำหรับโอกาสที่จะถูกเรียกในอนาคต

5.4 การสับเปลี่ยนหน้า (Page replacement algorithms)
5.4.1 วิธีสับเปลี่ยนแบบมาก่อน-ออกก่อน (FIFO : First in first out algorithm)
5.4.2 วิธีสับเปลี่ยนแบบให้โอกาสครั้งที่สอง (Second change page replacement algorithm)
5.4.3 วิธีสับเปลี่ยนแบบวงรอบนาฬิกา (Clock page replacement algorithm)
5.4.4 วิธีสับเปลี่ยนแบบที่ดี่สุด (Optimal page replacement algorithm)
5.4.5 การสับเปลี่ยนแบบที่ไม่ได้ใช้งานออกก่อน (NRU : Not recently used)
5.4.6 การสับเปลี่ยนแบบใช้งานน้อยที่สุดออกก่อน (LRU : Least recently used)
ใช้ข้อมูลในอดีตประมาณการณ์อนาคต

5.5 การแบ่งเป็นเซ็กเมนต์ (Segmentation)
การแบ่งหน้าจะแบ่งให้มีขนาดเท่ากัน แต่การแบ่งเป็นเซ็กเมนต์จะแบ่งโปรแกรมออกเป็นส่วน ๆ ไม่เท่ากัน และมีการใช้ตำแหน่งทางตรรก อ้างอิงตำแหน่งจริงเช่นกัน และมีการใช้ข้อมูล 2 ส่วนคือ เลขที่เซ็กเมนต์ และระยะเริ่มต้นของเซ้กเมนต์(Offset) สำหรับผลของการแบ่งเซ็กเมนต์ทำให้เกิดชิ้นส่วนไม่เท่ากัน (Dynamic partitioning) ซึ่งลดปัญหาการสูญเสียพื้นที่ (Internal fragmentation)
5.5.1 การนำวิธีการแบ่งเป็นเซ็กเมนต์มาใช้ในหน่วยความจำเสมือน
5.5.2 การรวมวิธีการแบ่งเป็นหน้ากับการแบ่งเป็นเซ็กเมนต์เข้าด้วยกัน
5.6 ปฏิบัติการฝึกเขียนแผนภาพ และฝึกเปลี่ยน RAM
- ฝึกเปลี่ยน RAM บน mainboard และศึกษารุ่นต่าง ๆ ที่มีในปัจจุบัน
- ฝึกเขียนแผนภาพแสดงการสับเปลี่ยนแบบต่าง ๆ
- ค้นคว้าข้อมูลเกี่ยวกับ การจัดการหน่วยความจำ จากอินเทอร์เน็ต แล้วทำรายงาน และส่งตัวแทนนำเสนอหน้าชั้น
แนะนำเว็บไซต์ประกอบการค้นคว้าบางส่วน
+ http://www.sci.csuhayward.edu/~billard/cs4560/node15.html (Page replacement)
+ http://www.fareastern.ac.th/acad/bc/pichate/os_c9/chapter9.htm
+ http://www.pantipprice.com
ผู้สนับสนุน + ผู้สนับสนุน
+ รับผู้สนับสนุน
เอกสารอ้างอิง #
[1] Abraham silverschatz, Peter baer galvin, "Operating system concept", John wiley & Sons, New York, 2003.
[2] Milan Milenkovic, "Operating systems: concepts and design", McGraw-Hill inc., New York, 1992.
[3] William stallings, "Operating system", Prentice hall, New York, 1999.
[4] ไพศาล โมลิสกุลมงคล และคณะ, "ระบบปฏิบัติการ", สำนักพิมพ์ดวงกมลสมัย, กรุงเทพฯ, 2545.
[5] พิเชษฐ์ ศิริรัตนไพศาลกุล, "ระบบปฏิบัติการ (Operating system)", บริษัท ซีเอ็ดยูเคชั่น จำกัด., กรุงเทพฯ, 2546.
[6] ดร.ยรรยง เต็งอำนวย, "ระบบปฏิบัติการ (Operating system)", บริษัท ซีเอ็ดยูเคชั่น จำกัด., กรุงเทพฯ, 2541.
[7] ประชา พฤกษ์ประเสริฐ, "ระบบปฏิบัติการ", บริษัท ซัคเซส มีเดีย จำกัด., กรุงเทพฯ, 2549.
[8] วศิน เพิ่มทรัพย์, "คู่มือ MS-DOS", พี.เอ็น.การพิมพ์, กรุงเทพฯ, 2545.
[9] ชนินทร์ เชาวมิตร, "คู่มือยูนิกซ์เดสก์ทอป", บริษัท ซีเอ็ดยูเคชั่น จำกัด., กรุงเทพฯ, 2538.
[10] ผศ.ดร.กฤษดา ขันกสิกรรม, "ระบบปฏิบัติการ (Operating Systems)", อาง้วนการพิมพ์, นครสวรรค์, 2555.
"Imagination is more important than knowledge" - Albert Einstein
Home
Thaiabc.com
Thainame.net
Lampang.net
Nation university
PHP
MySQL
Visual basic.NET
TabletPC
Linux
Online quiz
Download
Search engine
Web ranking
Add website
Blog : Education
Blog : ACLA
Blog : Lampang
Facebook.com
Twitter.com
About us
My dream
Site map
Sponsor
http://goo.gl/72BPC