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