บทที่ 4 การจัดการหน่วยความจำ
- รับลิงก์
- X
- อีเมล
- แอปอื่นๆ
โดย : นาย รหัสนักศึกษา : 6031280069
- เก็บระบบปฏิบัติการ
- เก็บโปรแกรมของผู้ใช้
- เก็บข้อมูลที่จะใช้
- ข้อมูล (data)
- ความเร็วสูง
- มีความเสถียรสูง
- ความจุสูง
- ราคาต่ำ
- ROM เป็นหน่วยความจำถาวร ไม่สูญเสียข้อมูลแม้ไฟดับ มักใช้เก็บข้อมูลพื้นฐานที่จำเป็น
- RAM มักจะใช้เป็นหน่วยความจำหลัก มีอยู่ 2 ประเภท คือ static ram และ dynamic ram
หน่วยความจำสำรอง
- หน่วยความจำหลักคือพื้นที่เก็บข้อมูลขนาดใหญ่
ประกอบด้วย
- พื้นที่เก็บข้อมูลย่อย มีหน่วยเป็น Byte
- ตำแหน่งหรือที่อยู่ของพื้นที่ย่อย (Address)
-โปรแกรมจะอยู่ติดต่อกันในหน่วยความจำหลักเป็นผืนเดียวกัน ไม่มีส่วนหนึ่งของโปรแกรมแยกจากกัน
-ถ้ามีพื้นที่ว่างไม่พอก็จะรอจนกว่าจะมีหน่วยความจำว่างเหลือพอ
-ดังนั้นการใช้งานหน่วยความจำจะมีเพียงโปรแกรมนั้น ๆ กับระบบปฏิบัติการเท่านั้น ดังรูป
-ส่วนของผู้ใช้ (User area) คือส่วนที่สามารถนำโปรแกรมของผู้ใช้ลงไปวางได้ ซึ่งก็คือหน่วยความจำหลักทั้งหมดที่เหลือจากส่วนของ OS
-การที่ระบบมีหลายงานทำงานพร้อมกันนั้น หมายความว่าแต่ละงานต้องถูกบันทึกอยู่ในหน่วยความจำหลัก
-ดังนั้นเพื่อให้คอมพิวเตอร์สามารถทำงานหลายงานพร้อมกัน จึงจำเป็นต้องทำการแบ่งพื้นที่หน่วยความจำออกเป็นส่วน ๆ สำหรับแต่ละงานเพื่อไม่ให้ปะปนกัน
-ดังนั้นจำนวนงานที่ทำงานได้พร้อมกันจะเท่ากับจำนวนส่วนย่อยของหน่วยความจำหลัก
-การแปลงและโหลดด้วยค่าสัมพัทธ์ (Relocatable translation and loading)
-หน่วยความจำหลักจะถูกแบ่งออกเป็นส่วนที่มีขนาดคงที่ และแต่ละส่วนจะมีแอดเดรสที่เป็นขอบเขตบน และล่างอยู่ ดังนั้นเมื่องานต้องการใช้หน่วยความจำหลักในส่วนย่อยใดก็ตาม OS จะต้องกำหนดแอดเดรสจริงให้กับงาน เพื่อให้งานเข้าไปครอบครองหน่วยความจำหลักในส่วนที่ถูกต้อง
-นิยมใช้กับคิวงานที่เป็นแบบ Multiple queues
- งานจะถูกแปลงให้ได้แอดเดรสเป็นค่าสัมพัทธ์กับจุดเริ่มต้นของงาน จุดเริ่มต้นของงานก็คือแอดเดรส 0 นั่นเอง
- ถ้างานมีขนาด 100 byte เมื่องานถูกโหลดลงในหน่วยความจำหลักจะไม่รอให้แอดเดรส 0 ถึง 100 ว่าง แต่จะโหลดลงส่วนที่มีขนาดมากกว่าหรือเท่ากับขนาดของงาน
- ดังนั้นคิวงานจึงไม่จำเป็นต้องเป็น Multiple Queues ใช้เป็น Single Queues
การป้องกัน OS
ในระบบหลายโปรแกรมประเภทแบ่งหน่วยความจำนิยมใช้รีจีสเตอร์ขอบเขตหลาย ๆ ตัว
ส่วนย่อยแต่ละส่วนจะใช้รีจีสเตอร์ขอบเขต 2 ตัว ในการแยกแยะส่วนแต่ละส่วน
เรียกว่ารีจีสเตอร์ขอบเขตบน (high boundary register)
และรีจีสเตอร์ขอบเขตล่าง (Low boundary register)
- ปรแกรมของผู้ใช้สามารถข้ามเข้าไปในขอบเขตของ OS ได้โดยผ่านทางคำสั่งเรียกระบบ
ข้อเสียของการแบ่งหน่วยความจำขนาดคงที่
- โดยระบบจะกำหนดให้มีการแบ่งหน่วยความจำตามความต้องการของงาน และไม่มีการจำกัดขอบเขตของหน่วยความจำหลัก
- การแบ่งหน่วยความจำแบบนี้เรียกว่า การแบ่งหน่วยความจำขนาดไม่คงที่
ตัวอย่าง ถ้าเรามีหน่วยความจำหลักทั้งหมด 1 MB ดังรูป
-ซึ่งการมีช่องว่างขนาดเล็ก ๆ หลายช่อง เมื่อนำมารวมกันก็จะทำให้เกิดช่องว่างขนาดใหญ่ซึ่งมากพอ
-OS จะต้องสามารถที่จะทำการบีบอัดหน่วยความจำ โดยย้ายเอาหน่วยความจำที่ถูกครอบครองโดยโปรเซสต่าง ๆ ไปอยู่ชิดติดกันที่ด้านใดด้านหนึ่ง ซึ่งจะทำให้เกิดช่องว่างใหญ่เพียงช่องเดียว จึงทำให้โปรเซสอื่น ๆ สามารถเข้ามาใช้หน่วยความจำที่เหลือได้
-โปรแกรมจะอยู่ในหน่วยความจำและถูกสลับออกเมื่อเกิดเหตุการณ์ 3 กรณี คือ
-โปรแกรมจบ
-โปรแกรมต้องการใช้งานอินพุต-เอาต์พุต
-หมดเวลาควอนตัม
-การทำโอเวอร์เลย์ (overlay) เป็นหน้าที่ของผู้เขียนโปรแกรมเอง OS ไม่ได้ จัดการให้
-ผู้เขียนโปรแกรมแบ่งโปรแกรมออกเป็นส่วนย่อยหลาย ๆ ส่วน แต่ละส่วนต้องมีขนาดเล็กกว่าหน่วยความจำ อาศัยหลักการสลับโปรแกรม โดยที่ส่วนแรกจะอยู่ในหน่วยความจำตลอดเวลาแล้วโหลดส่วนอื่นเข้ามาทับ
-การใช้หน่วยความจำของโปรแกรมผู้ใช้ที่กล่าวมานั้น จะเห็นว่าขนาดของโปรแกรมต้องมีขนาดเล็กกว่าขนาดของหน่วยความจำที่เหลืออยู่
-แต่ถ้าโปรแกรมของผู้ใช้มีขนาดใหญ่กว่า ไม่ว่าเราจะใช้วิธีการจัดการหน่วยความจำที่กล่าวมาแล้วชนิดใดก็ตามไม่สามารถจะทำงานได้
-ดังนั้นถ้าโปรแกรมของผู้ใช้มีขนาดใหญ่กว่าหน่วยความจำที่เหลือ เราแก้ปัญหาโดยใช้หน่วยความจำเสมือน (Virtual Memory)
-ใช้ในกรณีแบบหลายโปรแกรม
บทที่ 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)
*การจัดการหน่วยความจำจึงมีการแบ่งออกเป็น 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 จะข้ามงานนั้นไปทำให้กับงานอื่น ๆ ที่อยู่ถัดไป
- สำหรับงานที่ถูกข้ามก็จะต้องคอยอยู่ในคิว ซึ่ง OS จะกำหนดว่างานจะถูกมองข้ามได้ไม่เกินจำนวนครั้งที่กำหนด ถ้าเกินระบบจะต้องเลือกงานนั้นเข้าไปทำงาน
- ปรแกรมของผู้ใช้สามารถข้ามเข้าไปในขอบเขตของ OS ได้โดยผ่านทางคำสั่งเรียกระบบ
การแบ่งหน่วยความจำขนาดไม่คงที่(Variable partition multi-programming)
- จากปัญหาที่พบของการทำงานของการแบ่งหน่วยความจำขนาดคงที่ ผู้ออกแบบ OS จึงได้ทำการปรับปรุงการแบ่งหน่วยความจำให้ดีขึ้น- โดยระบบจะกำหนดให้มีการแบ่งหน่วยความจำตามความต้องการของงาน และไม่มีการจำกัดขอบเขตของหน่วยความจำหลัก
- การแบ่งหน่วยความจำแบบนี้เรียกว่า การแบ่งหน่วยความจำขนาดไม่คงที่
การจัดยุทธวิธีการวาง
-เมื่อมีโปรเซสถูกส่งเข้ามาในหน่วยความจำหลัก ซึ่งขณะนั้นหน่วยความจำหลักอาจมีช่องว่างเกิดขึ้นกระจายไปทั่ว
-การจะจัดว่าโปรเซสใดควรจะวางไว้ในช่องว่างใด มีวิธีการอยู่ 3 แบบดังนี้
-เลือกช่องว่างที่พบก่อน (First-Fit)
-เลือกช่องว่างที่เหมาะสม (Best-Fit)
-เลือกช่องว่างที่ใหญ่ที่สุด (Worst-Fit)
-การจะจัดว่าโปรเซสใดควรจะวางไว้ในช่องว่างใด มีวิธีการอยู่ 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)
-ใช้ในกรณีแบบหลายโปรแกรม
แหล่งที่มาของข้อมูล
-http://www.chantra.sru.ac.th/OS.html
- รับลิงก์
- X
- อีเมล
- แอปอื่นๆ