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