--- title: ฝึก Revoice + PE (ห้องเรียนสกลฯ ห้อง 5041 ) ระบบปฏิบัติการและเทคโนโลยีฯ วันที่ 1 ก.ย. 2565 นาโน subtitle: date: วันพุธที่ 16 พฤษจิกายน 2565 เวลา 09.00 น. --- (ข้อความสดจากระบบถอดความเสียงพูดทางไกล) ตัวพูด CPU วันนี้เราจะพูดถึงการจัดการหน่วยความจำนะครับ หน่วยความจำก็เป็นอุปกรณ์ตัวหนึ่งที่มีความสำคัญในคอมพิวเตอร์ของเรานะครับ เราจะดูว่าคอมพิวเตอร์เครื่องไหนมีขีดความสามารถมากกว่ากันเราก็อาจจะดูได้จากหน่วยความจำนะครับ แต่ทั้งนี้ทั้งนั้นนะครับ ไม่ได้ตอบได้เสมอว่าเครื่องที่มีหน่วยความจำมากทำงานได้ดีกว่านะครับ ในการจัดการหน่วยความจำนั้นก็เป็นขีดความสามารถอันหนึ่งของในระบบปฏิบัติการด้วยถ้าระบบปฏิบัติการของเราหน่อยความจำไม่ดีนะครับ ประสิทธิภาพในการทำงานก็จะด้อยลงนะครับ คราวนี้เรามาดูว่าการจัดการมันจัดการอย่างไรครับ การจัดการหน่วยความจำมีอยู่ 3 แบบนะครับ มีอยู่ 3 เฟสวางแทนที่มี 3 ลักษณะนะครับ ซึ่งเราค่อยดูว่ามีลักษณะอย่างไรนะครับ คราวนี้เรามาดูการจัดสรรหน่วยความจำของเรานะครับ โปรแกรมที่เราใช้งานจำเป็นจะต้องใช้หน่วยความจำนะครับ มากจะน้อยก็แล้วแต่โปรแกรมนะครับ โปรแกรมเกมอาจจะใช้เยอะโปรแกรมพิมพ์งานอาจจะใช้น้อยนะครับ แต่คราวนี้เรามาดูว่าถ้าเกิดในการจัดสรรหน่วยความจำนะครับ จะมีสามารถการแบ่งเป็น 2 ประเภทก็คือการจัดสรรแบบต่อเนื่องแล้วก็แบบไม่ต่อเนื่องนะครับ การจัดสรรหน่วยความจำแบบต่อเนื่องก็คือหมายความว่าหน่วยความจำจะต้องว่างต่อกันนะครับ พื้นที่ว่างต้องต่อเนื่องกันนะครับ ขาดช่วงอะไรไม่ได้นะครับ แล้วก็ต้องมีขนาดใหญ่พอนะครับ ถึงจะสามารถเข้าไปทำงานได้นะครับ ส่วนไม่ต่อเนื่องนะครับ ก็คือเข้าไปครอบครองหน่วยความจำแล้วหน่วยความจำอาจจะอยู่คนละที่อยู่คนละแบบนะครับ อยู่คนละที่แต่ก็ต้องมีเนื้อที่เพียงพอนะครับ ที่โปรแกรมจะใช้งานนะครับ คราวนี้มาดูในระบบโปรแกรมเดียวนะครับ โปรแกรมเดี่ยว Single Program ก็คือคอมพิวเตอร์มีผู้ใช้งานแค่โปรแกรมเดียวการจัดสรรความจำจะไม่ยุ่งยากนะครับ ซึ่งเราสามารถแบ่งพื้นที่ของหน่วยความจำออกเป็น 2 ส่วนนะครับ ก็คือส่วนแรกเป็นส่วนของระบบปฏิบัติการนะครับ และเป็นส่วนที่จำเป็นจะต้องมีพื้นที่ว่างยาวติดต่อกันเป็นผืนใหญ่ผืนเดียวเลยนะครับ นี่ OS นะครับ ต้องมีพื้นที่หน่วยความจำของมันด้วยนะครับ และต้องเป็นพื้นที่ยาวต่อเนื่องกันนะครับ 2 ส่วนของผู้ใช้นะครับ ก็คือเหลือจาก OS ก็กลายเป็นของผู้ใช้นะครับ ในระบบโปรแกรมเดียวนะครับ หน่วยความจำถูกแบ่งออกเป็น 2 ส่วนนะครับ 2 ส่วนตัวระบบปฏิบัติการเองจำเป็นจะต้องป้องกันไม่ให้ตัวของมันเองโดนรุกล้ำเข้ามาวิธีการป้องกันก็คือการใช้ register ขอบเขตนะครับ register ขอบเขตคืออะไร ก็คือส่วนที่ป้องกันระหว่างระหว่างอะไรครับ OS นะครับ กับส่วนของผู้ใช้ไม่ให้เข้ามายุ่งเกี่ยวกันนะครับ ดังนั้นการเขียนโปรแกรมไวรัสคอมพิวเตอร์ตัวหนึ่งก็คือเจาะนะครับ เจาะ register ขอบเขตเจาะเข้าไปนี่นะครับ ถ้ามีการรุกล้ำ register ขอบเขตก็จะแจ้งเตือนนะครับ คราวนี้มาดูระบบหลายโปรแกรมนะครับ ระบบหลายโปรแกรมการทำงานของระบบหลายโปรแกรมนั้นส่วนมากนะครับ ส่วนมากจะเกิดขึ้นก็คือการไปทำงาน input output การที่มันไม่ได้ครอบครอง CPU ว่าง ๆ ๆ ไม่ได้ครอบครองหน่วยความจำนะครับ เราเรียกระบบนี้ว่าระบบมัลติโปรแกรมมิ่งนะครับ ระบบโปรแกรมวิ่งนี้นะครับ ก็คือการทำงานที่มากกว่าหนึ่งโปรแกรมทำงานในเวลาเดียวกัน 2 3 4 5 6 7 นะครับ การทำงานของระบบหลายโปรแกรมนั้นเขาจะแบ่ง partition ของหน่วยความจำนะครับ แบ่ง portition ของหน่วยความจำเป็นส่วนส่วนนะครับ ซึ่งการแบ่งหน่วยความจำนะครับ ระบบหลายโปรแกรมแบ่งหน่วยความจำนะครับ ก็ยังสามารถแบ่งได้เป็น 2 ประเภทนะครับ ก็คือระบบหลายโปรแกรมแบบแบ่งหน่วยความจำแบบคงที่แล้วก็ไม่คงที่นะครับ ในระบบหลายโปรแกรมแบบสลับหน่วยความจำนะครับ แบ่งหน่วยความจำนะครับ แล้วก็สลับหน่วยความจำนะครับ คราวนี้เรามาดูประเภทที่ 1 นะครับ การแบ่งหน่วยความจำขนาดคงที่นะครับ เห็นไหมครับ โปรแกรมส่วนที่ 1 ส่วนที่ 2 ส่วนที่ 3 มีขนาดที่เท่ากันนะครับ ขนาดที่เท่ากันและการแบ่งหน่วยความจำขนาดคงที่ก็ยังแบ่งเป็นได้ 2 ประเภทนะครับ 2 แบบ แก่การแปลงและโหลดด้วยค่าสัมบูรณ์นะครับ ดูรูปนี้ประกอบนะครับ โปรแกรมส่วนที่ 1 เห็นไหมคะ ส่วนที่ 1 ส่วนที่ 1 เข้าส่วนที่ 1 ส่วนที่ 2 ส่วนที่ 2 ส่วนที่ 3 เข้าส่วนที่ 3 โปรแกรมส่วนที่ 1 ที่ 2 ที่ 3 มีขนาดที่เท่ากันนะครับ มีเท่ากันมันเท่ากันดูนะครับ โปรแกรมส่วนที่ 1 เช่นเรากำหนดส่วนที่ 1 ส่วนที่ 2 ส่วนที่ 3 มีขนาดเท่ากับ 10 เท่ากับ 10 นะครับ โปรแกรมส่วนที่ 1 ถ้าแปลงเสร็จแล้วโหลดเข้าไป มีค่าไม่เกิน 10 จะเข้าไปในส่วนที่ 1ครับ แต่ถ้าโปรแกรมจะต้องมีค่าตั้งแต่ 11 จนถึง 20 มันถึงจะเข้าส่วนที่ 2 นะครับ แต่ถ้าบังเอิญว่าโปรแกรมส่วนที่ 1โปรแกรม a Program B โปรแกรม โปรแดรม C เมื่อแปลงแล้วหยดด้วยค่าสมบูรณ์เสร็จแล้วมันจะเข้าคิวที่ 1 อย่างเดียวนะครับ นี่คือข้อเสียของมันนะครับ เห็นไหมครับ มันจะว่างเลยถึงส่วนที่ 2 ส่วนที่ 3 ส่วนที่ 4 ส่วนที่ 5 ส่วนที่ 6 ส่วนที่ 7 นะครับ ดังนั้นก็เลยมีการแก้ปัญหานะครับ โดยการแปลงและโหลดด้วยค่าสัมพัทธ์นะครับเพื่อแก้ปัญหาเมื่อกี้นะครับ ก็คือมีคิวเดียวเลยนะครับ มีคิวเดียวอยู่เดียวเสร็จแล้วก็คือส่วนที่ 1 2 3 4 หมายความว่าโปแกรมจะโดนโหลดมาตรงนี้ที่คิวโดยมีคิวแค่คิวเดียวนะครับ แปรงฟันได้ค่าเท่ากับ 10 เข้าสวนที่ 1 แรงเสร็จปุ๊บได้ค่าเท่ากับ 10 เอาบวกเข้าไปอีก 12 เข้าสวนที่ 2 แปลงและหลุด 7 5 เข้าไม่ได้ 2 ไม่ได้ + 6 + 7 + 10 เข้าไปนะครับ เข้าด้วยคนที่ 2 3 4 5 เข้าไปเรื่อย ๆ นะครับ ดังนั้นการป้องกันนะครับ ถ้าเป็นในระบบโปรแกรมเดี่ยวใช้ register ขอบเขตในการป้องกัน แต่ถ้างานในระบบหลายโปรแกรมแบบแบ่งหน่วยความจำนะครับ วิธีที่นิยมใช้ก็คือ register ขอบเขตบนและขอบล่างในการไม่ให้โปรแกรมเข้ามานะครับ เห็นไหมครับ ขอบเขตล่างขอบเขตบนขอบเขตล่างขอบเขตบนนะครับ ส่วนตัวของระบบปฏิบัติการใช้ตัวของ register ขอบเขตนะครับ ในการป้องกันคราวนี้การแบ่งหน่วยความจำไม่ว่าจะใช้วิธีการใดก็แล้วแต่นะครับ เกิดพื้นที่ที่ไม่ถูกการใช้งานเราเรียกว่าการแตกกระจายนะครับ การแตกกระจายก็คือส่วนของหน่วยความจำที่ไม่ถูกใช้งานในระบบแบ่งหน่วยความจำนะครับ แบ่งหน่วยความจำซึ่งเราเรียกการแตกกระจายนี้ออกเป็น 2 กรณีนะครับ ต้องมีการแตกกระจายภายนอกแล้วก็การแตกกระจายภายนอกการแตกกระจายภายนอกเป็นอย่างไรครับ ดูนะครับ ส่วนที่ 1 การแตกกระจายภายนอกหมายถึงส่วนของ หน่วยความจำที่ไม่ถูกใช้งานในระบบในระบบแบ่งหน่วยความจำขนาดคงที่ไม่ถูกใช้งานคืออะไร ครับ ส่วนที่ 1 ไม่ถูกใช้งานส่วนการแตกกระจายภายในดูนะครับ ภายในหมายถึงส่วนของหน่วยความจำที่ถูกใช้งานนะครับ ที่ถูกใช้งานแต่ใช้งานไม่หมดนะครับ ใช้ไม่หมดนะครับ ในการแบ่งหน่วยความจำขนาดคงที่ต่างกันนะครับ การแตกกระจายภายนอกก็คือส่วนที่ว่างไม่ถูกใช้งานเลย ส่วนการแตกกระจายภายในคือหน่วยความจำว่างโดนใช้แล้วใช้ไม่หมดนะครับ คราวนี้มาดูการแบ่งหน่วยความจำขนาดคงที่ขนาดไม่คงที่นะครับ เมื่อกี้เป็นขนาดคงที่นะครับ ผู้ออกแบบระบบปฏิบัติการได้ตระหนักถึงข้อเสียขนาดคงที่ไว้นะครับ มีข้อจำกัดก็เลยคิดค้นวิธีการที่เรียกว่าการแบ่งหน่วยความจำขนาดไม่คงที่ขึ้นนะครับ หนังตัวอย่างนะครับ เห็นไหมครับ ผู้ใช้ A ต้องการใช้สิทธิ์ เข้าไปเลย 10 K นะครับ ผู้ใช้ D ต้องการ 30 ก็เข้าไปนะครับ ขนาดไม่ครบพี่นะครับ เขาให้มีพื้นที่ว่างเพียงพอก็สามารถจัดการหน่วยความจำได้เลยนะครับ ระบบหลายโปรแกรมแบบแบ่งหน่วยความจำแบบไม่คงที่นะครับ สามารถ Run ได้หลายโปรแกรมนะครับ ดูนะครับ ถึงแม้ว่าการแบ่งหน่วยความจำขนาดไม่คงที่นะครับ ก็ยังมีส่วนที่ไม่ถูกใช้งานเหมือนกันนะครับ เหมือนเดิมถ้าเป็นแบบขนาดคงที่เรียกว่าการแตกกระจายนะครับ ส่วนถ้าเกิดขึ้นในกรณีที่พื้นที่ที่ไม่ถูกใช้งานในการแบ่งหน่วยความจำในขนาดไม่คงที่เราเรียกว่าช่องโหว่นะครับ หรือ Hollครงเกิดขึ้นได้อย่างไรครับ Program a Program B Program C G D เห็นไหมครับ Home เกิดขึ้นแล้วข้างล่างสุดช่องว่างช่องโหว่นะครับ หักระยะหนึ่งโปรแกรม Beetalkคือหน่วยความจำให้ระบบเห็นไหมครับ เกิดช่องโหว่ขึ้นแล้ว Hulk 1โปรแกรมดีเจคือหน่วยความจำให้ระบบเกิด Hollขึ้นแล้วนะครับ เมื่อเกิดโฮขึ้นนะครับ พอมีวิธีการเอาโปรแกรมใหม่ไปวางแทนนะครับ ซึ่งมีอยู่ 3 วิธีการนะครับ 1 เลือกที่พบก่อนและมีขนาดใหญ่พอที่จะวางโปรแกรมใหม่ลงไปนะครับ วิธีการที่ 2 เลือก ที่เหมาะสมเมื่อโลกเลือกโหดที่เหมาะสมที่สุดก็คือเอาเข้าไปแล้วหรือโฮใหม่น้อยที่สุด3เลือกโฮที่ใหญ่ที่สุดนะครับ ที่ใหญ่ที่สุดมาดูนะครับ วิธีแต่ละวิธีเป็นอย่างไรดูรูปนะครับ วิธีการที่ 1 เจอก่อนพบก่อนแต่ต้องมีเงื่อนไขว่าต้องมีพื้นที่ของโฮใหญ่เพียงพอนะครับ 13 เข้า 16 ได้ไหมครับ ได้มาก่อนเลยพบก่อนเลยเจอก่อนนะครับ เข้าไปวางก่อนเลยนะครับ 2 เหมาะสมที่สุดเมื่อเข้าไปวางเสร็จแล้วโฮใหม่ที่เกิดขึ้นมา มีขนาดเหลือน้อยที่สุด96เหลือ 3ถ้าเข้า 14 เ หลือ 1 ถ้าเข้า 5 เ อาไม่ได้ค่าเข้า 30เหลือ 17Minecraft ของที่สุดเลือกโคที่เข้าไปแล้วทำให้เกิดโฮใหญ่น้อยที่สุดนะครับ สวนแบบที่ 3 นะครับ วิธีการแบบที่ 3 ก็คือเลือกโคที่ใหญ่ที่สุดเห็นไหมครับ 30 ใหญ่กว่าเพื่อนนะครับ คราวนี้ในกรณีที่มีโฮ เกิดขึ้นพื้นที่ติดกันติดกันนะครับ ติดกันถ้า OS มีความมีความสามารถนะครับ มันจะต้องมีความสามารถในการจัดรวม โฮเข้าไปด้วยกันด้วยเลยนะครับ นึกออกไหมครับ เมื่อมีโฮอยู่ติดกันว่างติดกันกับยุบรวมกันนะครับ อีกวิธีการหนึ่งการอัดหน่วยความจำนะครับ อัดหน่วยความจำก็คือถ้าเกิดมีโฮว่างเกิดขึ้นติดกันก็ได้ไม่ติดก็ได้นะครับ วิธีการอัดหน่วยความจำก็คือระบบจะหยุดการทำงานแล้วก็เช็คดูระบบแล้วก็เอาหน่วยความจำที่ว่าง ๆ อยู่มาจับรวมกันเพื่อให้ได้หน่วยความจำที่ใหญ่ขึ้นนะครับ เราเรียกว่าการรวบรวมขยะนะครับ เหมือนโปรแกรม reflex เดี๋ยวพอเราแยกไปเรียนปฏิบัตินะครับ เราจะเห็นว่าโปรแกรม Reflex ทำงานอย่างไรนะครับ มาทีหลังทำไมไม่เอาแบบฝึกหัดเข้ามาเมื่อกี้มาเอาแบบฝึกหัดแล้วทำอะไรอยู่ นี่ดูวิธีการรวบรวมนะครับ รหัสหน่วยความจำนะครับ เห็นไหมครับ นี่ ใช้งาน 1 2 3 นะครับ โฮ โฮ โฮ โฮ เพราะอัดหน่วยความจำเกิดช่องว่างขึ้นเกิดว่างขึ้นใหญ่ขึ้นนะครับ นี่คือวิธีการอัดหน่วยความจำนะครับ คราวนี้มาดูระบบหลายโปรแกรมแบบสลับความจำเมื่อกี้เป็นแบบแบ่งหน่วยความจำนะครับ แบ่งหน่วยความจำแบ่งหน่วยความจำก็มีขนาดคงที่กับไม่คงที่คราวนี้มาดูแบบหน่วยความจำก็คือเมื่อโปรแกรมถูกใช้งานเราเรียกว่าสลับเข้านะครับ