(อาจารย์พิเชนทร์) คราวนี้ดูบทที่ 4 นะคะ การจัดการหน่วยความจำ บทที่แล้วนะครับ เราพูดถึง CPU นะคะ การจัดการ CPU บทนี้เราก็จะพูดถึงการการหน่วยความจำนะครับ หน่วยความจำเป็นอุปกรณ์ตัวหนึ่งที่มีส่วนสำคัญในคอมพิวเตอร์ของเรานะครับ เราจะดูว่าเครื่องคอมพิวเตอร์เครื่องไหนมีขีดความสามารถมากกว่ากัน เราก็จะดูได้จากหน่วยความจำนะคะ แต่ทั้งนี้ทั้งนั้นนะครับ ไม่ได้ตอบได้เสมอว่าเครื่องที่มีหน่วยความจำมาก ทำงานได้ดีกว่านะครับ ในการจัดการหน่วยความจำนั้นก็เป็นขีดความสามารถอันหนึ่งของระบบปฏิบัติการของเราด้วย ถ้าระบบปฏิบัติการของเราจัดการหน่วยความจำไม่ดีนะคะ ประสิทธิภาพในการใช้งานด้อยลงนะครับ คราวนี้เรามาดูว่ามันจัดการอย่างไรนะครับ การจัดการหน่วยความจำมีอยู่ 3 แบบนะครับ มีอยู่ 3 Face วาง แทนที่ ครับ มีอยู่ 3 ลักษณะซึ่งเราค่อยดูว่าทำอย่างไรนะครับ ตอนนี้มาดูการจัดสรรหน่วยความจำนะคะ โปรแกรมทุกโปรแกรมที่ใช้งานในคอมพิวเตอร์ของเรานะครับ จำเป็นจะต้องการใช้หน่วยความจำนะครับ จะมากจะน้อยก็แล้วแต่โปรแกรมนะครับ โปรแกรมเกมอาจจะใช้เยอะ โปรแกรมพิมพ์งานอาจจะใช้น้อยอะไรประมาณนี้ครับ คราวนี้เรามาดูว่าถ้าเกิดในการจัดสรรหน่วยความจำนะครับ จะมีสามารถแบ่งออกได้เป็น 2 ประเภทนะครับ ก็คือการจัดสรรแบบต่อเนื่อง แล้วก็แบบไม่ต่อเนื่องนะครับ การจัดสรรหน่วยความจำแบบต่อเนื่อง ก็คือหมายความว่าหน่วยความจำจะต้องว่างต่อกันนะครับ พื้นที่ว่างต้องต่อเนื่องกันนะครับ ขาดช่วงอะไรไม่ได้นะครับ แล้วก็ต้องมีขนาดใหญ่พอนะครับ ถึงจะสามารถเข้าไปทำงานได้นะครับ ส่วนไม่ต่อเนื่องนะครับ ก็คือเข้าไปครอบครองด้วยความจำแล้ว หน่วยความจำอาจจะอยู่คนละที่อยู่คนละแบบนะครับ อยู่คนละที่ แต่ก็ต้องมีเนื้อที่เพียงพอ ที่โปรแกรมจะใช้งานนะครับ ตอนนี้มาดูในระบบโปรแกรมเดี่ยวโปรแกรมเดี่ยว Single Program นะครับ ก็คือคอมพิวเตอร์มีผู้ใช้งานแค่โปรแกรมเดียวการจัดสรรหน่วยความจำจะไม่ยุ่งยากนะครับ ซึ่งเราสามารถแบ่งพื้นที่ของหน่วยความจำเป็น 2 ส่วนนะครับ ก็คือส่วนแรกเป็นส่วนของระบบปฏิบัติการนะครับ และเป็นส่วนที่จำเป็นต้องมีพื้นที่ว่างยาวติดต่อกันเป็นผืนใหญ่ผืนเดียวเลยนะครับ นี่ OS นะครับ จะต้องมีเนื้อที่หน่วยความจำของมันด้วยนะครับ และต้องเป็นพื้นที่ยาวต่อเนื่องกันนะครับ 2. ส่วนของผู้ใช้นะครับ ก็คือเหลือจาก OS ก็คือกลายเป็นส่วนของผู้ใช้นะครับ ในระบบโปรแกรมเดียวนะครับ เมื่อหน่วยความจำถูกแบ่งออกเป็น 2 ส่วนนะครับ 2 ส่วน ตัวของระบบปฏิบัติการเองต้องมีการป้องกัน ไม่ให้ตัวมันเองโดนลุกล้ำเข้ามานะครับ วิธีการป้องกัน ก็คือการใช้ Register ขอบเขตนะครับ Register ขอบเขตคืออะไร ก็คือส่วนที่ป้องกันระหว่างระวังอะไรครับ OS กับส่วนของผู้ใช้ ไม่ให้เข้ามายุ่งเกี่ยวกันนะครับ ดังนั้นการเขียนโปรแกรมไวรัสคอมพิวเตอร์ตัวหนึ่ง ก็คือเจาะตัวนี้ล่ะครับ เจาะ Register ขอบเขต เจาะเข้าไปนี่นะครับ ถ้ามีการรุกล้ำ Register ขอบเขต ก็จะแจ้งเตือนนะครับ เอานี้มาดูระบบหลายโปรแกรมนะครับ ระบบหลายโปรแกรม การทำงานของระบบหลายโปรแกรมนั้น ส่วนมากนะครับ ส่วนมากจะเกิดขึ้นก็คือการไปทำงาน input output ก็คือการไปการที่มันไม่ได้ครอบครอง CPU ง่าย ๆ เราเรียกระบบนี้ว่าระบบ Multi programming ระบบ Programming นี้นะครับ ก็คือระบบการทำงานที่มีโปรแกรมมากกว่าหนึ่งโปรแกรมทำงานในเวลาเดียวกัน 2 3 4 5 6 7 นะครับ การทำงานของระบบหลายโปรแกรมนั้นแบ่ง partition ของหน่วยความจำออกเป็นส่วน ๆ ส่วนนะครับ ซึ่งการแบ่งหน่วยความจำนะครับ ระบบหลายโปรแกรมก็ยังสามารถแบ่งได้เป็น 2 ประเภทนะครับ ก็คือระบบ หลายโปรแกรมแบบคงที่และไม่คงที่ การจำแบบหน่วยคงที่และก็ไม่คงที่ ในระบบหลายโปรแกรมสละหน่วยความจำครับ แปลงหน่วยความจำนะครับ แล้วก็สลับหน่วยความจำ คราวนี้เรามาดูประเภทที่ 1 นะครับ การแบ่งหน่วยความจำขนาดคงที่นะครับ เห็นไหมครับ โปรแกรมส่วนที่ 1 ส่วนที่ 2 ส่วนที่ 3 มีขนาดที่เท่ากันนะครับ ที่เท่ากัน และการแบ่งหน่วยความจำขนาดคงที่ยังแบ่งได้เป็น 2 ประเภทนะครับ เป็น 2 แบบได้แก่การแปลงและโหลดด้วยค่าสัมบูรณ์นะครับ ดูรูปนี้ประกอบนะครับ โปรแกรมส่วนที่ 1 เห็นไหมครับ ส่วนที่ 1ออส่วนส่วนที่ 1 และส่วนที่ 2 เข้าส่วนที่ 2 ส่วนที่ 3 กิโลกรัมส่วนที่ 1ส่วนที่ 2 ส่วนที่ 3 จะมีขนาดที่เท่ากันนะครับ พอมันเท่ากันปุ๊บนะครับ โปรแกรมส่วนที่ 1 โปรแกรมที่ 10 ที่ 2 ส่วน 3 เท่ากับ 10 นะครับ โปรแกรมส่วนที่ 1 ถ้าแปรงเสร็จแล้วหลุดเข้าไปมีค่าไม่เกิน 10 จะเข้าในส่วนที่ 1 นะครับ แต่ถ้าโปรแกรมส่วนที่ 2 จะต้องมีค่าตั้งแต่ 11 จนถึง 20 ถึงจะเข้าสวนที่ 2 ครับ แต่ถ้าบังเอิญว่าโปรแกรมส่วนที่ 1 โปรแกรมวีโปรแกรม A โปรแกรม B โปรแกรมC เมื่อแปลงแล้วโหลดแล้วค่าสัมบูรณ์แล้วมีค่าไม่เกิน 10 จะเข้าไปอยู่ที่คิวที่ 1 อย่างเดียวนะครับ นี่คือข้อเสียของมันนะครับ เห็นไหมคะ มันจะว่างเลยส่วนที่ 2 ส่วนที่ 3 ส่วนที่ 4 5 6 7 ดังนั้นก็เลยมีการแก้ปัญหานะครับ เป็นการโหลดด้วยค่าสัมพัทธ์ครับ เพื่อแก้ปัญหาเมื่อดีนะครับ ก็คือมีคิวเดียวเลยนะครับ มีคิวเดียวคิวเดียวเสร็จแล้ว ก็คือส่วนที่ 1 2 3 4 หมายความว่าโปรแกรมจะโดนโหลดมาตรงนี้ที่คิว โดยมีแค่คิวเดียวนะครับ แปลงเสร็จปุ๊บมีค่าเท่ากับ 19 ส่วนที่ 1 แปเสร็จปุ๊บได้ค่าเท่ากับ 10 เอาบวกเข้าไปอีกเดือน 12ส่วนที่ 2แปลงและโหลดเสร็จได้ 15เราไม่ได้ส่องไม่ได้ + 6 + 7 +สิบเข้าไปเข้าในส่วนที่ 2 3 4 5 ไปเรื่อย ๆ นะครับ ดังนั้นการป้องกันนะครับ ถ้าเป็นนายระบบโปรแกรมเดี่ยวใช้ Register ขอบเขตในการป้องกันแต่ถ้าในระบบหลายโปรแกรมวิธีที่นิยมใช้ ก็คือคือขอบเขตบนและขอบเขตล่าง ในการป้องกันไม่ให้โปรแกรมเข้ามานะครับ เห็นไหมครับ ขอบเขตล่าง ขอบเขตบน ขอบเขตล่างขอบเขตล่างครับ ส่วนตัวของระบบปฏิบัติการใช้ตัวของวิจิตรเตอร์ขอบเขตนะครับ ในการป้องกัน คราวนี้ในการแบ่งหน่วยความจำแล้วว่าจะใช้วิธีการใดก็แล้วแต่นะครับ เรียกว่าการแตกกระจายนะครับ การแตกกระจายนะครับ ก็คือส่วนของหน่วยความจำที่ไม่ถูกใช้งาน ในระบบแบ่งหน่วยความจำนะครับ แบ่งหน่วยความจำ ซึ่งเราเรียกการแตกกระจายนี้ออกเป็น 2 กรณีการมีการแตกกระจายภายนอกและการกระจายภายในนะครับ การแตกกระจายภายนอกเป็นอย่างไรครับ มาดูนะครับ ส่วนที่ 1 การแตกกระจายภายนอก หมายถึง ส่วนของหน่วยความจำที่ไม่ถูกใช้งานในระบบแบ่งหน่วยความจำขนาดคงที่ ไม่ถูกใช้งานเลยเห็นไหมครับ ส่วนที่ 1 ไม่ถูกใช้งาน ส่วนการแตกกระจายภายในดูนะครับ ภายในหมายถึงส่วนของจำที่ถูกใช้งานที่ถูกใช้งานแต่ใช้งานไม่หมดใช้ไม่หมดนะครับ นาฬิกาหน่วยความจำขนาดคงที่ ต่างกันนะครับ การแพร่กระจายภายนอกก็คือส่วนที่ว่างไม่ถูกใช้งานเลย ส่วนการแตกกระจายภายใน คือ ส่วนหน่วยความจำว่างถูกใช้แล้วใช้ไม่หมดนะครับ คราวนี้มันถูกการแบ่งหน่วยความจำขนาดคงที่ ขนาดไม่คงที่ เมื่อกี้เป็นขนาดคงที่นะคะ ผู้ออกแบบระบบปฏิบัติการได้ถึงมีข้อจำกัดก็เลยคิดค้นวิธีการที่การแบ่งหน่วยความจำที่ขนาดไม่คงที่ เห็นไหมครับ ผู้ใช้ A ต้องการใช้ 10 ก็เข้าไปเลย 11 Kเลยเอาไปเลย 10 Kนะครับ ผู้ใช้ D ต้องการ 30 มาเข้าไปขนาดไม่คงที่ครับ ขอให้มีพื้นที่ว่างเพียงพอก็สามารถจัดการหน่วยความจำได้เลยนะครับ ระบบหลายโปรแกรมแบบแบ่งหน่วยความจำแบบไม่คงที่นะครับ สามารถรันได้หลายโปรแกรมนะครับ ดูนะครับ ถึงแม้ว่าการแบ่งหน่วยความจำขนาดไม่คงที่นะครับ ก็ยังมีส่วนที่ไม่ถูกใช้งานเหมือนกันนะครับ เหมือนเดิมถ้าเป็นขนาดคงที่เรียกว่าการแตกกระจายนะครับ ส่วนถ้าเกิดในในกรณีในพื้นที่ที่ไม่ถูกใช้งาน ในการแบ่งหน่วยความจำขนาดไม่คงที่ เราเรียกว่าช่องโหว่นะครับ หรือ Hole Hole เกิดขึ้นได้อย่างไรครับ โปรแกรม A โปรแกรม B โปรแกรม C Program a เกิดขึ้นแล้วข้างล่างสุดช่องว่างช่องโหว่สักระยะหนึ่งโปรแกรม B จบ คืoหน่วยความจำให้ระบบเห็นไหมครับ ช่องโหว่เกิดขึ้นแล้ว สักพักหนึ่งโปรแกรมดีจบคือหน่วยความจำให้ระบบเปิดช่องโหว่ขึ้นแล้วนะครับ เมื่อกี้เกิด Hole ขึ้น ก็มีวิธีการเอาโปรแกรมใหม่ลงไปวางแทนนะครับ ซึ่งมีอยู่ 3 วิธีการ 1. เลือกเซลล์ที่พบก่อนและมีขนาดใหญ่พอที่จะวางโปรแกรมใหม่ลงไปวิธีการที่ 2 เลือก Hole ที่เหมาะสมเมื่อเลือกโหมดที่เหมาะสมที่สุด ก็คือเอาเข้าไปแล้วเหลือหน่วยความจำเหลือ 6ใหม่น้อยที่สุดนะครับ 3. เลือก Hole ที่ใหญ่ที่สุดนะครับ ที่ใหญ่ที่สุดมาดูนะครับ วิธีการในแต่ละวิธีเป็นยังไงดูรูปนะครับ วิธีการที่ 1 เจอก่อนพบก่อน แต่ต้องมีเงื่อนไขว่าจะต้องมีเงื่อนไขพื้นที่ของ Home ได้เพียงพอนะครับ 1396 ได้ไหมครับ ได้มาก่อนเลยพบก่อนเลยเจอก่อนเอาไปวางก่อนเลยนะคะ 2. เหมาะสมที่สุดเข้าไปวางเสร็จแล้ว Hole ใหม่ที่เกิดขึ้นมีขนาดเหลือน้อยที่สุด ถ้าเข้า 16 เหลือ 3 ถ้าเข้า 14 เหลือ 1 ถ้าเข้า 5 เข้าไม่ได้ ถ้าเข้า 30 เหลือ 17 เห็นไหมครับ เหมาะสมที่สุดเรื่อง Hole ที่เข้าไปแล้วที่ทำให้เกิด Hole ใหม่น้อยที่สุด ซึ่งแบบที่ 3 วิธีการแบบที่ 3 ก็คือ Hole ที่ใหญ่ที่สุด 30 ใหญ่กว่าเพื่อน คราวนี้ในกรณีที่มี Hole เกิดขึ้นพื้นที่ติดกัน ติดกันนะครับ ติดกัน ถ้า OS มีความสามารถนะครับ มันจะต้องมีความสามารถในการจับรวม Hole เข้าไปด้วยกันเลย ลักหลับ นึกออกไหมครับ เมื่อมี Hole ติดกันวางติดกัน จับยุบรวมกันนะคะ อีกวิธีการหนึ่งการอัดหน่วยความจำหน่วยความจำก็คือมี Hole ว่างเกิดขึ้น ติดกันก็ได้ ไม่ติดก็ได้นะครับ วิธีการอัดหน่วยความจำ ก็คือระบบจะหยุดการทำงานแล้วก็เช็คดูระบบ และการไปเอาหน่วยความจำที่ว่าง ๆ อยู่มาจับรวมกัน เพื่อให้ได้หน่วยความจำที่ใหญ่ขึ้นนะครับ เราเรียกว่าการรวบรวมขยะนะครับ เหมือนโปรแกรม DeflacFlash ปลอยากไปเรียนปฏิบัตินะครับ เราจะเห็นว่าโปรแกรม defrag ทำงานยังไงมาทีหลังทำไมไม่เอาแบบฝึกหัด เข้ามาเมื่อกี้ มาเอาแบบฝึกหัด แล้วทำอะไรอยู่ นี่ดูวิธีการรวบรวมนะครับ อัดหน่วยความจำนะครับ เห็นไหมครับ ใช้งาน 1 2 3 Hole Hole Hole นะครับ พออัดหน่วยความจำเกิดช่องว่างขึ้นกว้างขึ้นใหญ่ขึ้นนี่ คือ วิธีการอัดหน่วยความจำคราวนี้มาดูระบบหลายโปรแกรมแบบสลับโปรแกรมเมื่อกี้เป็นแบบแบ่งหน่วยความจำนะครับ หน่วยความจำก็มีตอนทำคงที่กับไม่คงที่นะครับ ก็คือ หลักการก็คือเมื่อโปรแกรมถูกใช้งานเราเรียกว่าการสลับเข้านะครับ เข้ามา เข้ามา เข้ามา