คราวนี้มาดูบทที่ 4 นะครับ การจัดการหน่วยความจำ เราพูดถึง บทนี้เราก็จะพูดถึงการจัดการหน่วยความจำเตือนความจำก็เป็นอุปกรณ์ตัวหนึ่งที่มีส่วนสำคัญในคอมพิวเตอร์ของเรานะครับ เราจะรู้ว่าเครื่องคอมพิวเตอร์เครื่องไหนมีขีดความสามารถมากกว่ากัน เราก็อาจจะดูได้จากหน่วยความจำนะครับ แต่ทั้งนี้ทั้งนั้นนะครับ ไม่ได้ตอบได้เสมอว่า เครื่องที่มีหน่วยความจำมากทำงานได้ดีกว่านะครับ ในการจัดการหน่วยความจำนั้นก็เป็นขีดความสามารถอันหนึ่งของระบบปฏิบัติการของเราด้วยนะครับ ระบบปฏิบัติการของเราจัดการหน่วยความจำไม่ดีนะครับ ประสิทธิภาพในการใช้งานก็จะด้อยลงนะครับ คราวนี้เรามาดูว่ามันจัดการอย่างไรนะครับ การจัดการหน่วยความจำมีอยู่ 3 แบบ มีอยู่ 3 แบบ เฟส วาง แทนที่นะครับ หรือ 3 ลักษณะ เรามาดูว่าทำอย่างไรนะครับ วันนี้มาดูการจัดสรรหน่วยความจำนะครับ โปรแกรมทุกโปรแกรมที่เราใช้งานในคอมพิวเตอร์ของเรานั้น จำเป็นต้องใช้หน่วยความจำนะครับ จะมากจะน้อยก็แล้วแต่โปรแกรมนะครับ โปรแกรมเกมอาจจะใช้เยอะ โปรแกรมพิมพ์งานอาจจะใช้น้อย อะไรประมาณนี้นะครับ คราวนี้เรามาดูว่า ถ้าเกิด ในการจัดสรรหน่วยความจำนะครับ จะมีสามารถแบ่งออกเป็น 2 ประเภทนะครับ ก็คือบ้านจัดสรรแบบต่อเนื่อง แล้วก็แบบไม่ต่อเนื่องนะครับ การจัดสรรหน่วยความจำแบบต่อเนื่อง ก็คือหมายความว่าหน่วยความจำจะต้องว่างต่อกันนะครับ พื้นที่ว่างต่อเนื่องกันครับ ขาดช่วงอะไรไม่ได้นะครับ แล้วก็ต้องมีขนาดใหญ่พอนะครับ ถึงจะสามารถเข้าไปทำงานได้นะครับ ส่วนไม่ต่อเนื่องนะครับ ก็คือเข้าไปครอบครองหรือความจำแล้ว หน่วยความจำอาจจะอยู่คนละที่อยู่คนละแบบ อยู่คนละที่นะครับ แต่ก็ต้องมีเนื้อที่เพียงพอนะครับ ที่โปรแกรมจะใช้งานนะครับ คราวนี้มาดูในระบบโปรแกรมเดียว โปรแกรมเดี่ยว Single Program นะครับ ก็คือคอมพิวเตอร์มีผู้ใช้งานแค่โปรแกรมเดียว การจัดสรรหน่วยความจำจะไม่ยุ่งยากครับ ซึ่งเราสามารถแบ่งพื้นที่ของหน่วยความจำออกเป็น 2 ส่วนนะครับ ก็คือส่วนแรก เป็นส่วนของระบบปฏิบัติการนะครับ และเป็นส่วนที่จำเป็นจะต้องมีพื้นที่ว่างยาวติดต่อกัน เป็นผืนใหญ่ผืนเดียวเลยนะครับ นี่ OS นะครับ ต้องมีพื้นที่หน่วยความจำของมันด้วย และต้องเป็นพื้นที่ยาวต่อเนื่องกันนะครับ 2. ส่วนของผู้ใช้นะครับ ก็คือเหลือจาก OS ก็กลายเป็นส่วนของผู้ใช้นะครับ ในระบบโปรแกรมเดียวนะครับ เมื่อหน่วยความจำถูกแบ่งเป็น 2 ส่วนนะครับ 2 ส่วน ตัวของระบบปฏิบัติการก็จำเป็นจะต้องป้องกันให้ตัวมันเอง ไม่ให้โดนรุกล้ำเข้ามา วิธีการป้องกันก็คือการใช้ register ขอบเขตนะครับ Register ขอบเขตคืออะไร ก็คือส่วนที่ป้องกันระหว่างระหว่างอะไรครับ OS นะครับ กับส่วนของผู้ใช้ไม่ให้เข้ามายุ่งเกี่ยวกันนะครับ ดังนั้น การเขียนโปรแกรม ไวรัสคอมพิวเตอร์ตัวหนึ่ง ก็คือเจาะ register ขอบเขต เจาะเข้าไป นี่นะครับ ถ้ามีการรุกล้ำ register ขอบเขต ก็จะแจ้งเตือนนะครับ คราวนี้มาดูระบบหลายโปรแกรมนะครับ ระบบหลายโปรแกรม การทำงานของระบบหลายโปรแกรมนั้น ส่วนมากนะครับ ส่วนมากจะเกิดขึ้น ก็คือการไปทำงาน input output ก็คือการไป ก็คือการที่มันไม่ได้ครอบครอง CPU ว่าง่าย ๆ ไม่ได้เข้าไปครอบครองหน่วยความจำ แล้วเรียกระบบนี้ว่าระบบ Multi programming ระบบ multi programming นี้นะครับ ก็คือการทำงานที่มีโปรแกรมมากกว่า 1 โปรแกรมทำงานในเวลาเดียวกัน 2 3 4 5 6 7 นะครับ การทำงานของระบบไหลโปรแกรมนั้น ก็จะแบ่ง partition ของหน่วยความจำ แบ่ง partition ของหน่วยความจำไปสวนเป็นส่วน ๆ นะครับ ซึ่งการแบ่งหน่วยความจำนะครับ ระบบ หลาย Program แบ่งหน่วยความจำ ก็ยังสามารถแบ่งได้เป็น 2 ประเภทนะครับ ก็คือระบบ หลายโปรแกรมแบบแบ่งหน่วยความจำ แบบคงที่แล้วก็ไม่คงที่นะครับ ในระบบหลายโปรแกรมแบบสลับหน่วยความจำนะครับ แบ่งหน่วยความจำนะครับ แล้วก็สลับหน่วยความจำ คราวนี้เรามาดูประเภทที่ 1 นะครับ การแบ่งหน่วยความจำขนาดคงที่นะครับ เห็นไหมครับ โปรแกรมส่วนที่ 1 ส่วนที่ 2 ส่วนที่ 3 มีขนาดที่เท่ากันนะครับ ที่เท่ากัน และการแบ่งหน่วยความจำแบบคงที่ ก็ยังสามารถแบ่งได้ 2 ประเภทนะครับ 2 แบบ ได้แก่ การแปลงและโหลดด้วยค่าสมบูรณ์นะครับ ดูรูปนี้ประกอบนะครับ โปรแกรมส่วนที่ 1 เห็นไหมครับ ส่วนที่ 1 เข้าส่วนที่ 1 ส่วนที่ 2 เข้าส่วนที่ 2 ส่วนที่ 3 เข้าส่วนที่ 3 ส่วนที่ 1 ที่ 2 ที่ 3 จะเห็นว่ามีขนาดที่เท่ากันนะครับ ที่เท่ากัน พอมันเท่ากันปุ๊บ โปรแกรมส่วนที่ 1เช่นเรากำหนดว่าส่วนที่ 1 ส่วนที่ 2 ส่วนที่ 3 = 4โปรแกรมตรวจที่ 1ถ้าแปลงเสร็จแล้ว โหลดเข้าไปมีค่าไม่เกิน 10 เข้าไปในส่วนที่ 1 นะครับ แต่ถ้าโปรแกรมส่วนที่ 2 จะต้องมีค่าตั้งแต่ 11 จนถึง 20ร มันถึงจะเข้าส่วนที่ 2 นะครับ แต่ถ้าบังเอิญว่าโปรแกรมส่วนที่ 1 โปรแกรม a โปรแกรม B โปรแกรม C เมื่อแปลงแล้วโหลดด้วยค่าสัมบูรณ์เสร็จแล้วมีค่าไม่เกิน 10 มันจะเข้าคิวที่ 1 อย่างเดียวนะครับ นี่คือข้อเสียของมันนะครับ เห็นไหมครับ มันจะว่างเลย ส่วนที่ 2 ที่ 3 ที่ 4 ที่ 5 6 7 นะครับ ดังนั้นก็เลยมีการแก้ปัญหานะครับ เป็นการแปลงและโหลดด้วยค่าสัมพัทธ์นะครัย เพื่อแก้ปัญหาเมื่อกี้นะครับ ก็คือมีคิวเดียวเลยนะครับ มีคิวเดียว คิวเดียวเสร็จแล้ว ส่วนที่ 1 2 3 4 หมายความว่าเตรียมจะโดนโหลดมาตรงนี้ที่คิว โดยมีคิวแค่คิวเดียวนะครับ แปลงเสร็จปุ๊บ ได้ค่าเท่ากับ 10 เข้าส่วนที่ 1 แปลงเสร็จปุ๊บ มีค่าเท่ากับ 10 เอาบวกเข้าไปอีก 2 เข้าส่วนที่ 2 และแปลงเสร็ได้ 15เข้าไม่ได้ข้อ 2 ไม่ได้7 + 10 เข้าไปนะครับ เพื่อให้เข้าในส่วนที่ 2 ที่ 3 ที่ 4 ที่ 5 ไปเรื่อย ๆ นะครับ ดังนั้น การป้องกันถ้าเป็นในระบบโปรแกรมเดี่ยว ใช้ Register ขอบเขต ในการป้องกันถ้าในระบบหลายโปรแกรม ประเภทหน่วยความจำนะครับ วิธีที่นิยมใช้ก็คือใช้ register ขอบเขตบนและขอบเขตล่าง ในการป้องกันไม่ให้โปรแกรมเข้ามาครับ เห็นไหมครับ ขอบเขตล่าง ขอบเขตบน เขตล่าง ขอบเขตบนนะครับ ส่วนตัวของระบบปฏิบัติการ ใช้ตัวของ register ขอบเขตนะครับ ในการป้องกันนะครับ คราวนี้การแบ่งหน่วยความจำ ไม่ว่าจะใช้วิธีการใดก็แล้วแต่ ถ้าเกิดไม่ถูกใช้งานเราเรียกว่า "การแตกกระจาย" การแตกกระจาย ก็คือส่วนของหน่วยความจำที่ไม่ถูกใช้งาน ในระบบแบ่งหน่วยความจำนะครับ แบ่งหน่วยความจำ ซึ่งเราเรียกการแตกกระจายนี้ออกเป็น 2 กรณีนะครับ ว่ามีการแตกกระจายภายนอก แล้วก็ตามกระจายภายในนะครับ การแตกกระจายภายนอกเป็นอย่างไรครับ ดูครับ ส่วนที่ 1 การแตกกระจายภายนอก หมายถึง ส่วนของหน่วยความจำที่ไม่ถูกใช้งานในระบบแบ่งหน่วยความจำขนาดคงที่ ไม่ถูกใช้งานเลยเห็นไหมครับ ส่วนที่ 1 ไม่ถูกใช้งานการแตกกระจายภายใน ภายใน หมายถึง ส่วนของหน่วยความจำที่ถูกใช้งานนะครับ ที่ถูกใช้งาน แต่ใช้งานไม่หมด นะครับ ใช้ไม่หมดนะครับ ในการแบ่งหน่วยความจำขนาดคงที่ ต่างกันนะครับ การแตกกระจายภายนอก ก็คือส่วนที่ว่างไม่ถูกใช้งานเลย ส่วนการแตกกระจายภายใน คือ ความจำว่าง โดนใช้แล้วใช้ไม่หมดนะครับ คราวนี้มาดูความจำขนาดคงที่ขนาดไม่คงที่นะครับ เมื่อกี้เป็นขนาดคงที่นะครับ ผู้ออกแบบระบบปฏิบัติการได้ตระหนักถึงข้อเสียของการแบ่งขนาดคงที่ไว้ มีข้อจำกัด ก็เลยคิดค้นวิธีการที่เรียกว่า "การแบ่งหน่วยความจำขนาดไม่คงที่" ขึ้น ดังตัวอย่างนะครับ เห็นไหมครับ ผู้ใช้ A ต้องการใช้ 10 ก็เข้าไปเลย 10K นะครับ ผู้ใช้ D ต้องการใช้ 10 เดี๋ยวเข้าไปขนาดไม่คงที่นะครับ ที่ว่าเพียงพอก็สามารถจัดการหน่วยความจำได้เลยนะครับ ระบบหลายโปรแกรม แบบแบ่งหน่วยความจำแบบไม่คงที่นะครับ สามารถ Run ได้หลายโปรแกรมนะครับ ดูนะครับ ถึงแม้ว่าการแบ่งหน่วยความจำขนาดไม่คงที่นะครับ ก็ยังมีส่วนที่ไม่ถูกใช้งานนะครับเหมือนกันนะครับ เหมือนเดิม ถ้าเป็นแบบขนาดคงที่เรียกว่า "การแตกกระจายนะครับ" ถ้าเกิดขึ้นในกรณีที่พื้นที่ที่ไม่ถูกใช้งาน ในการแบ่งหน่วยความจำขนาดไม่คงที่ เราเรียกว่า "ช่องโหว่นะครับ" หรือ hole hole เกิดขึ้นได้อย่างไรครับ โปรแกรม A โปรแกรม B โปรแกรม C Program D เห็นไหมครับ เกิดขึ้นแล้วข้างล่างสุดข้างล่างช่องโหว่ สักระยะหนึ่งโปรแกรม โปรแกรม B คือหน่วยความจำให้ระบบเห็นไหมคะ ช่องโหว่เกิดขึ้นแล้วสักพักนึงโปรแกรมดี คืนหน่วยความจำให้ระบบเกิดขึ้นแล้ว เมื่อเกิด hole ขึ้น ก็มีวิธีการเอาโปรแกรมใหม่ลงไปวางแทนนะครับ ซึ่งมีอยู่ 3 วิธีการนะครับ 1. เรื่อง hole ที่พบก่อน และมีขนาดใหญ่พอที่จะวางโปรแกรมใหม่ลงไปนะครับ วิธีการที่ 2 เลือก hole ที่เหมาะสม เลือก hole ที่เหมาะสมที่สุด ก็คือเหลือหน่วยความจำเหลือ hole น้อยที่สุด 3. เลือก hole ที่ใหญ่ที่สุดนะครับ ที่ใหญ่ที่สุด มาดูนะครับ ว่าวิธีแต่ละวิธีเป็นอย่างไรดูรูปนะครับ วิธีการที่ 1 เจอก่อนพบก่อน แต่ต้องมีเงื่อนไขว่าจะต้องมีพื้นที่ของ hole ใหญ่เพียงพอนะครับ 13 เข้า 16 ได้ไหมครับ ได้ มาก่อนเลยพบก่อนเลย เจอก่อนเข้าไปวางก่อนเลยครับ 2. เหมาะสมที่สุดเมื่อเข้าไปวัดเสร็จแล้วโทรใหม่ที่เกิดขึ้นขนาดเหลือน้อยที่สุด 16 เหลือ 3 ถ้าเข้า 14 เหลือ 1 ถ้าเข้า 5 เข้าไม่ได้ ถ้าเข้า 30 เหลือ 17 เห็นไหมครับ เหมาะสมที่สุด ก็คือเลือก hole ที่ เมื่อเข้าไปแล้วทำให้เกิด hole ใหม่น้อยที่สุด ส่วนแบบที่ 3 นะครับ วิธีการที่ 3 ก็คือเลือก hole ที่ใหญ่ที่สุดใช่ครับ 30 ใหญ่กว่าเพื่อน คราวนี้ในกรณีที่มี hole เกิดขึ้น พื้นที่ติดกันนะครับ ติดกัน ถ้า OS มีความสามารถนะครับ มันจะต้องมีความสามารถในการจัดรวม hole เข้าไปด้วยกันเลยครับ นึกออกไหมครับ เมื่อมี hole อยู่ติดกัน ว่างติดกัน จับยุบรวมกันนะครับ อีกวิธีการหนึ่ง การอัดหน่วยความจำ หน่วยความจำ ก็คือถ้าเกิดมี hole เกิดว่างขึ้น ติดกันก็ได้ไม่ติดก็ได้นะครับ วิธีการอัดหน่วยความจำ ก็คือระบบจะหยุดการทำงาน แล้วก็เช็กดูระบบ แล้วก็ไปเอาหน่วยความจำว่าง ๆ อยู่ มาจัดรวมกัน เพื่อให้ได้หน่วยความจำที่ใหญ่ขึ้นนะครับ เราเรียกว่า "การรวบรวมขยะ" นะครับ เปิดโปรแกรม degrag เดี๋ยวพอเราเรียกไปเรียนปฏิบัติเราจะเห็นว่าโปรแกรม defrag ทำงานทำงานอย่างไร มาทีหลังทำไมไม่เอาแบบฝึกหัด เพิ่งเข้ามาเมื่อกี้น่ะ มาเอาแบบฝึกหัด แล้วทำอะไรอยู่ นี่ดูวิธีการรวบรวมนะครับ อัดหน่วยความจำนะครับ เห็นไหมครับ นี่ ใช้งาน 1 2 3 hole hole hole นะครับ พออัดหน่วยความจำ เกิดช่องว่างเกิดช่องว่างขึ้นใหญ่ขึ้นนี่คือวิธีการอ่านหน่วยความจำคำนี้มาดูระบบหลายโปรแกรมแบบ... โปรแกรม เมื่อกี้เป็นแบบแบ่งโปรแกรมแบ่งหน่วยความจำนะครับ เข้าใจว่ามีแบบคงที่จะไม่คงที่ทีนี้มาดูกันโปรแกรมแบบสลับหน่วยความจำ ก็คือหลักการก็คือเมื่อโปรแกรมถูกใช้งานเราเรียกว่า "สลับเข้า" นะครับ เข้ามา เข้ามา