บทที่ 4 การจัดการหน่วยความจำ

 โดย : นาย รหัสนักศึกษา : 6031280069

บทที่ 4 การจัดการหน่วยความจำ

(Memory Management)

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

- หน้าที่หน่วยความจำหลัก
- เก็บระบบปฏิบัติการ
- เก็บโปรแกรมของผู้ใช้
- เก็บข้อมูลที่จะใช้

องค์ประกอบหน่วยความจำ

- แอดเดรส (address)
- ข้อมูล (data)


ความต้องการหน่วยความจำ

- ความเร็วสูง
- มีความเสถียรสูง
- ความจุสูง
- ราคาต่ำ

ชนิดของหน่วยความจำ

หน่วยความจำหลัก
- ROM เป็นหน่วยความจำถาวร ไม่สูญเสียข้อมูลแม้ไฟดับ มักใช้เก็บข้อมูลพื้นฐานที่จำเป็น
- RAM มักจะใช้เป็นหน่วยความจำหลัก มีอยู่ 2 ประเภท คือ static ram และ dynamic ram

หน่วยความจำสำรอง 
- มีความเร็วช้า เก็บไว้ได้นาน เช่น ดิสก์ ฮาร์ดดิสก์

การจัดการหน่วยความจำ (Memory Management)

- หน่วยความจำหลักเป็นศูนย์กลางของการทำงานต่าง ๆ ของระบบคอมพิวเตอร์ในปัจจุบัน
- หน่วยความจำหลักคือพื้นที่เก็บข้อมูลขนาดใหญ่

ประกอบด้วย
- พื้นที่เก็บข้อมูลย่อย มีหน่วยเป็น Byte
- ตำแหน่งหรือที่อยู่ของพื้นที่ย่อย (Address)
     ส่วนของ OS ที่ทำหน้าที่จัดการกับหน่วยความจำได้แก่ ตัวจัดการหน่วยความจำ (Memory Manager) ซึ่งมีหน้าที่ต่าง ๆ ดังนี้ 
- ตรวจสอบว่าส่วนใดของหน่วยความจำที่กำลังถูกใช้งาน ส่วนใดว่าง 
- จัดหน่วยความจำให้กับงานที่ทำงาน 
- ส่งหน่วยความจำคืนสู่ระบบเมื่องานเสร็จ 
- จัดการสลับหน่วยความจำหลัก กับพื้นที่ฮาร์ดดิสก์ เมื่อหน่วยความจำหลักมีขนาดเล็กเกินไปที่จะให้งานทำงานได้

*การจัดสรรหน่วยความจำแบบต่อเนื่อง*การจัดสรรหน่วยความจำแบบไม่ต่อเนื่อง

การจัดสรรหน่วยความจำแบบต่อเนื่อง 

-โปรแกรมหนึ่ง ๆ จะถูกโหลดลงหน่วยความจำได้ก็ต่อเมื่อมีหน่วยความจำขนาดใหญ่ที่จะวางโค้ดของโปรแกรมนั้นลงไปทั้งโปรแกรม 

-โปรแกรมจะอยู่ติดต่อกันในหน่วยความจำหลักเป็นผืนเดียวกัน ไม่มีส่วนหนึ่งของโปรแกรมแยกจากกัน 

-ถ้ามีพื้นที่ว่างไม่พอก็จะรอจนกว่าจะมีหน่วยความจำว่างเหลือพอ

การจัดสรรหน่วยความจำแบบไม่ต่อเนื่อง

-โปรแกรมจะถูกแบ่งออกเป็นกลุ่มหรือส่วนย่อย ๆ หลาย ๆ ส่วน เมื่อรันโปรแกรมจะโหลดลงหน่วยความจำที่ไหนก็ได้ที่มีที่ว่างพอ แต่ละส่วนไม่จำเป็นต้องเรียงต่อเป็นผืนเดียว

*การจัดการหน่วยความจำนั้นมีหลายวิธี ตั้งแต่การจัดการแบบพื้นฐาน จนถึงแบบที่ซับซ้อน
*การจัดการหน่วยความจำจึงมีการแบ่งออกเป็น 2 ระบบดังนี้
-ระบบโปรแกรมเดี่ยว (Monoprogramming or Single program)
-ระบบหลายโปรแกรม (Multiple program)

ระบบโปรแกรมเดี่ยว (Monoprogramming or Single program)

-เป็นวิธีการจัดการหน่วยความจำที่ง่ายที่สุด เนื่องจากจะมีโปรแกรมเพียง 1 โปรแกรมทำงานในขณะใดขณะหนึ่ง 

-ดังนั้นการใช้งานหน่วยความจำจะมีเพียงโปรแกรมนั้น ๆ กับระบบปฏิบัติการเท่านั้น ดังรูป




 



จากรูปเราอาจแบ่งหน่วยความจำหลักออกเป็น 2 ส่วนคือ

-ส่วนของ OS เป็นหน่วยความจำที่ถูกครอบครองโดย OS
-ส่วนของผู้ใช้ (User area) คือส่วนที่สามารถนำโปรแกรมของผู้ใช้ลงไปวางได้ ซึ่งก็คือหน่วยความจำหลักทั้งหมดที่เหลือจากส่วนของ OS

ระบบหลายโปรแกรม (Multiple program)

-ระบบคอมพิวเตอร์ส่วนใหญ่ในปัจจุบันอนุญาตให้มีงานหลาย ๆ งานทำงานในเวลาเดียวกัน
-การที่ระบบมีหลายงานทำงานพร้อมกันนั้น หมายความว่าแต่ละงานต้องถูกบันทึกอยู่ในหน่วยความจำหลัก
-ดังนั้นเพื่อให้คอมพิวเตอร์สามารถทำงานหลายงานพร้อมกัน จึงจำเป็นต้องทำการแบ่งพื้นที่หน่วยความจำออกเป็นส่วน ๆ สำหรับแต่ละงานเพื่อไม่ให้ปะปนกัน
การแบ่งหน่วยความจำสำหรับระบบหลายโปรแกรมมี 2 แบบ 
-การแบ่งหน่วยความจำขนาดคงที่ (Fixed partition multi-programming) 
-การแบ่งหน่วยความจำขนาดไม่คงที่ (Variable partition multi-programming)

   การแบ่งหน่วยความจำขนาดคงที่

    -วิธีนี้หน่วยความจำจะถูกแบ่งออกเป็นหลายส่วน แต่ละส่วนมีขนาด คงที่ และในแต่ละส่วนจะมีเพียง         งานเดียว และการแบ่งนั้นจะเปลี่ยนแปลงอีกไม่ได้
    -ดังนั้นจำนวนงานที่ทำงานได้พร้อมกันจะเท่ากับจำนวนส่วนย่อยของหน่วยความจำหลัก

การแบ่งหน่วยความจำขนาดคงที่ แบ่งได้เป็น 2 แบบ

-การแปลงและโหลดด้วยค่าสัมบูรณ์ (Absolute translation and loading)
-การแปลงและโหลดด้วยค่าสัมพัทธ์ (Relocatable translation and loading)

การแปลงและโหลดด้วยค่าสัมบูรณ์ ( Absolute translation and loading )

-ค่าแอดเดรสสัมบูรณ์ คือค่าแอดเดรสจริง ๆ ในหน่วยความจำ 

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

-นิยมใช้กับคิวงานที่เป็นแบบ Multiple queues

การแปลงและโหลดด้วยค่าสัมพัทธ์ (Relocatable translation and loading)

- เพื่อแก้ปัญหาที่เกิดขึ้นในการแปลงและโหลดด้วยค่าสัมบูรณ์ จึงทำให้เกิดวิธีการที่เรียกว่าการแปลงและโหลดด้วยค่าสัมพัทธ์ 

- งานจะถูกแปลงให้ได้แอดเดรสเป็นค่าสัมพัทธ์กับจุดเริ่มต้นของงาน จุดเริ่มต้นของงานก็คือแอดเดรส 0 นั่นเอง 

- ถ้างานมีขนาด 100 byte เมื่องานถูกโหลดลงในหน่วยความจำหลักจะไม่รอให้แอดเดรส 0 ถึง 100 ว่าง แต่จะโหลดลงส่วนที่มีขนาดมากกว่าหรือเท่ากับขนาดของงาน 

- ดังนั้นคิวงานจึงไม่จำเป็นต้องเป็น Multiple Queues ใช้เป็น Single Queues 
- วิธีการจัดคิวใช้วิธี FCFS คืองานใดมาก่อนก็มีสิทธิ์โหลดลงในส่วนของหน่วยความจำหลักที่ชี้อยู่
- แต่ถ้าขนาดของงานมีขนาดใหญ่กว่าส่วนของหน่วยความจำหลักที่ชี้อยู่ OS จะข้ามงานนั้นไปทำให้กับงานอื่น ๆ ที่อยู่ถัดไป
- สำหรับงานที่ถูกข้ามก็จะต้องคอยอยู่ในคิว ซึ่ง OS จะกำหนดว่างานจะถูกมองข้ามได้ไม่เกินจำนวนครั้งที่กำหนด ถ้าเกินระบบจะต้องเลือกงานนั้นเข้าไปทำงาน
 การป้องกัน OS ในระบบหลายโปรแกรมประเภทแบ่งหน่วยความจำนิยมใช้รีจีสเตอร์ขอบเขตหลาย ๆ ตัว ส่วนย่อยแต่ละส่วนจะใช้รีจีสเตอร์ขอบเขต 2 ตัว ในการแยกแยะส่วนแต่ละส่วน เรียกว่ารีจีสเตอร์ขอบเขตบน (high boundary register) และรีจีสเตอร์ขอบเขตล่าง (Low boundary register)
- ปรแกรมของผู้ใช้สามารถข้ามเข้าไปในขอบเขตของ OS ได้โดยผ่านทางคำสั่งเรียกระบบ
ข้อเสียของการแบ่งหน่วยความจำขนาดคงที่



การแบ่งหน่วยความจำขนาดไม่คงที่(Variable partition multi-programming)

- จากปัญหาที่พบของการทำงานของการแบ่งหน่วยความจำขนาดคงที่ ผู้ออกแบบ OS จึงได้ทำการปรับปรุงการแบ่งหน่วยความจำให้ดีขึ้น
- โดยระบบจะกำหนดให้มีการแบ่งหน่วยความจำตามความต้องการของงาน และไม่มีการจำกัดขอบเขตของหน่วยความจำหลัก
- การแบ่งหน่วยความจำแบบนี้เรียกว่า การแบ่งหน่วยความจำขนาดไม่คงที่
ตัวอย่าง ถ้าเรามีหน่วยความจำหลักทั้งหมด 1 MB ดังรูป






การจัดยุทธวิธีการวาง

-เมื่อมีโปรเซสถูกส่งเข้ามาในหน่วยความจำหลัก ซึ่งขณะนั้นหน่วยความจำหลักอาจมีช่องว่างเกิดขึ้นกระจายไปทั่ว
-การจะจัดว่าโปรเซสใดควรจะวางไว้ในช่องว่างใด มีวิธีการอยู่ 3 แบบดังนี้
-เลือกช่องว่างที่พบก่อน (First-Fit)
-เลือกช่องว่างที่เหมาะสม (Best-Fit)
-เลือกช่องว่างที่ใหญ่ที่สุด (Worst-Fit)

เลือกช่องว่างที่พบก่อน (First-Fit)

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

 เลือกช่องว่างที่เหมาะสม (Best-Fit)

วิธีการนี้ OS จะตรวจหาช่องว่างที่มีอยู่ในหน่วยความจำทั้งหมด แล้วเลือกเอาช่องว่างที่เมื่อวางโปรเซสลงไปแล้วจะเกิดช่องว่างขนาดเล็กที่สุด

เลือกช่องว่างที่ใหญ่ที่สุด (Worst-Fit)

การเลือกช่องว่างแบบนี้จะตรงกันข้ามกับแบบที่ 2 OS จะเลือกช่องว่างที่เมื่อวางโปรเซสลงไปแล้วจะเกิดช่องว่างขนาดใหญ่ที่สุด

การบีบอัดหน่วยความจำ (Storage Compaction)

-ถึงแม้ว่าจะมีการรวมโฮลเกิดขึ้น แต่ช่องว่างที่ไม่อยู่ติดกันก็ยังคงมีกระจายอยู่ในหน่วยความจำ

-ซึ่งการมีช่องว่างขนาดเล็ก ๆ หลายช่อง เมื่อนำมารวมกันก็จะทำให้เกิดช่องว่างขนาดใหญ่ซึ่งมากพอ
สำหรับ 1 โปรเซสได้ 

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

ระบบหลายโปรแกรมแบบสลับหน่วยความจำ (multiprogramming with storage swapping)

-เป็นการสลับโปรแกรมไปสู่หน่วยความจำสำรองเมื่อโปรแกรมไม่ต้องการหน่วยความจำหลักเรียกว่าการสลับออก (swapped out) และนำโปรแกรมเข้ามาใช้หน่วยความจำใหม่เมื่อต้องการใช้หน่วยความจำเรียกว่าการสลับเข้า (swapped in)
-โปรแกรมจะอยู่ในหน่วยความจำและถูกสลับออกเมื่อเกิดเหตุการณ์ 3 กรณี คือ
-โปรแกรมจบ
-โปรแกรมต้องการใช้งานอินพุต-เอาต์พุต
-หมดเวลาควอนตัม

การทำโอเวอร์เลย์

-เนื่องจากโปรแกรมของผู้ใช้มีขนาดใหญ่กว่าหน่วยความจำหลัก จึงต้องแก้ปัญหานี้ ถ้าเป็นกรณีโปรแกรมเดี่ยวจะแก้ปัญหาด้วยการทำโอเวอร์เลย์
-การทำโอเวอร์เลย์ (overlay) เป็นหน้าที่ของผู้เขียนโปรแกรมเอง OS ไม่ได้ จัดการให้
-ผู้เขียนโปรแกรมแบ่งโปรแกรมออกเป็นส่วนย่อยหลาย ๆ ส่วน แต่ละส่วนต้องมีขนาดเล็กกว่าหน่วยความจำ อาศัยหลักการสลับโปรแกรม โดยที่ส่วนแรกจะอยู่ในหน่วยความจำตลอดเวลาแล้วโหลดส่วนอื่นเข้ามาทับ

หน่วยความจำเสมือน (Virtual Memory)

-การใช้หน่วยความจำของโปรแกรมผู้ใช้ที่กล่าวมานั้น จะเห็นว่าขนาดของโปรแกรมต้องมีขนาดเล็กกว่าขนาดของหน่วยความจำที่เหลืออยู่
-แต่ถ้าโปรแกรมของผู้ใช้มีขนาดใหญ่กว่า ไม่ว่าเราจะใช้วิธีการจัดการหน่วยความจำที่กล่าวมาแล้วชนิดใดก็ตามไม่สามารถจะทำงานได้
-ดังนั้นถ้าโปรแกรมของผู้ใช้มีขนาดใหญ่กว่าหน่วยความจำที่เหลือ เราแก้ปัญหาโดยใช้หน่วยความจำเสมือน (Virtual Memory)
-ใช้ในกรณีแบบหลายโปรแกรม

 

แหล่งที่มาของข้อมูล

-http://www.chantra.sru.ac.th/OS.html




ความคิดเห็น

โพสต์ยอดนิยมจากบล็อกนี้

บทที่ 2 การจัดการ Process

บทที่ 3 การจัดเวลาซีพียู (CPU Scheduling)