บทที่ 4 การจัดการหน่วยความจำ




บทที่ 4
การจัดการหน่วยความจำ
โดย นายวีรินทร์ เรือนก้อน  รหัสนักศึกษา 6031280063

ลำดับชั้นของหน่วยความ

          หน่วยความจำในระบบคอมพิวเตอร์  ถือเป็นทรัพยากร (Resource)  หนึ่งที่สำคัญซึ่งเมื่อกล่าวถึงหน่วยความจำในระบบคอมพิวเตอร์มักจะหมายถึงหน่วยความจำหลัก (MainMeory) หรือ หน่วยความจำแรมในไมโครคอมพิวเตอร์นั่นเอง

          ข้อบัญญัติข้อหนึ่งของ ดร. จอห์ ฟอน นอยมานน์ กล่าวว่าข้อมูลและชุดคำสั่ง (Data and Instruction) ต้องอยู่ในหน่วยความจำหลัก นั้นหมายถึงว่าโปรแกรมและข้อมูลต้องอยู่ในหน่วยความจำ ซึ่งหน่วยความจำนี้ซีพียูสารถเข้าถึง (Access) ได้โดยตรง และมีความเร็วสูงพอที่จะทำงานเคียงคู่กับความเร็วของซีพียูได้ ถึงแม้จะเทียบกับความเร็วของซีพียูไม่ได้ แต่ก็จะไม่เกิดความเหลื่อมล้ำกันมากนัก แต่อย่างไรก็ตามในปัจจุบันนี้ก็มีหน่วยความจำชนิดหนึ่งที่เรียกว่า หน่วยความจำแคช (Cache Memory) ซึ่งเป็นหน่วยความจำขนาดเล็กแต่มีความรวดเร็ว โดยนำมาใช้งานร่วมกับหน่วยความจำหลัก จึงมีผลให้การประมวลผลรวดเร็วยิ่งขึ้น



ลำดับชั้นของหน่วยความจำ (Memory Hierarchy)

          หน่วยความจำมีอยู่หลายชนิดด้วยกัน แต่ละชนิดต่างก็มีอัตราความเร็วที่แตกต่างกันรวมทั้งขนาดความจุและราคาที่แตกต่างกัน สาเหตุที่เป็นเช่นนั้นก็เพราะว่า เพื่อให้เราเลือกหน่วยความจำใช้งานได้อย่างเหมาะสมนั่นเอง

          หน่วยความจำลำดับบนสุดเป็นหน่วยความจำที่มีความเร็วสูง และลดหลั่นลงมาเรื่อย ๆ ก็จะมีความเร็วที่ต่ำลง ในขณะที่ลำดับบนสุดนั้นจะมีความจุน้อยและลดหลั่นลงมาเรื่อย ๆ ก็จะมีความจุที่มีขนาดใหญ่ขึ้น ในทำนองเดียวกัน หน่วยความจำที่มีขนาดใหญ่นั้นจะมีต้นทุนหรือราคาต่ำกว่าหน่วยความจำที่มีขนาดเล็ก

ลำดับชั้นหน่วยความจำ (Memory Hierarchy)

          จะเห็นได้ว่าหน่วยความจำยิ่งมีขนาดความจุสูงเท่าไร  จะมีการแอคเซสข้อมูมที่ชา และมีราคาถูก เทป ฮาร์ดดิสก์  ในขณะที่หน่วยความจำที่ยิ่งมีขนาดเล็กเท่าไรยอมมีความเร็วสูง เช่น รีสเตอร์ หน่วยความแคช หน่วยความจำหลัก แต่นั้นไมถึงราคาหรือต้นทุนที่ต้องเพิ่มสูงขึ้นด้วย


การจัดการหน่วยความจำ

          การจัดการหน่วยความจำจัดเป็นหน้าที่หนึ่งของระบบปฎิบัติการ หน่วยความจำนี้เป็นองค์ประกอบหนึ่งในการพิจารณาขีดความสามารถของเครื่องคอมพิวเตอร์ด้วย  กล่าวคือถ้าหากคอมพิวเตอร์มีความจำมาก  นั้นหมายถึงขีดความสามารถในการทำงานก็จะเพิ่มขึ้นโปรแกรมที่มีสลับซับซ้อนและมีสมรรถนะสูง มักจะเป็นโปรแกรมที่ต้องการหน่วยความจำสูง แต่ก็เป็นที่ทราบแล้วว่าหน่วยความจำมีราคาแพง (เปรียบเทียบราคาฮาร์ดดิสก์ประมาณ 5,000 บาท สามารถได้ความจุถึง 10 GB ขึ้นไป แต่ถ้าเป็นแรมได้ความจุเพียงหน่วย MB เท่านั้น) ดังนั้นระบบปฎิบัติการที่ดีจะต้องมีการจัดการหน่วยความจำที่มีอยู่จำกัด ให้สามารถรองรับงานต่างๆ ที่จำเป็นต้องใช้หน่วยความจำจำนวนมากได้




การจัดสรรหน่วยความจำ

        ดังที่กล่าวไว้แล้วโปรแกรมต่างๆ ที่ใช้งานจะต้องโหลดเข้าไปในหน่วยความจำ และหน่วยความจำนี้ ซีพียูสามารถเข้าถึงได้โดยตรงการที่โปรมแกรมได้เข้าไปใช้หน่วยความจำของระบบได้เพราะการจัดสรรหน่วยความจำ (Memory allocation) ของระบบปฎิบัติการนั่นเอง

การจัดสรรหน่วยความจำ สามารถแบ่งออกได้เป็น 2 ประเภทคือ

1. การจัดสรรหน่วยความจำแบบต่อเนื่อง (continuous Memory allocation)
          คอมพิวเตอร์ในยุคก่อนๆ นั้นจะมีการครอบครองหน่วยความจำให้โปรแกรมต่างๆ ในลักษณะต่อเนื่องทั้งสิ้น กล่าวคือโปรแกรมหนึ่งๆ จะถูกโหลดลงในหน่วยความจำได้ต่อเมื่อมีหน่วยความจำขนาดใหญ่พอที่จะวางโปรแกรมนั้นลงไปทั้งหมดได้ การจัดการในลักษณะนี้หากมีหน่วยความจำที่ต่อเนื่องกันมีขนาดไม่เพียงพอสำหรับโปรแกรมทั้งโปรแกรมที่จะลงไปได้โปรแกรมนั้นก็จะทำงานไม่ได้ต้องรอจนกว่าจะมีหน่วยความจำเหลือพอที่จะวางโปรแกรมทั้งโปรแกรมนั้นลงไปได้

2. การจัดสรรหน่วยความจำแบบไมต่อเนื่อง (Non-Continuous Allocation)
          การจัดสรรหน่วยความจำลักษณะนี้มักใช้ในระบบปฏิบัติการในปัจจุบัน  กล่าวคือในการครอบครองหน่วยความจำนี้  โปรแกรมจะถูกแบ่งออกเป็นส่วนๆ  หลายๆ  ส่วนด้วยกันเมื่อจะทำการรันโปรแกรม  ก็จะโหลดโปรแกรมลงในหน่วยความจำส่วนไหนก็ได้ที่มีที่ว่างพอและที่ความสำคัญในแต่ละส่วนที่โหลดลงไปในหน่วยความจำนั้น  ไม่จำเป็นต้องเรียงต่อกันอย่างแบบแรก  ดังนั้นการจักสรรหน่วยความจำในลักษณะนี้จะสามารถใช้งานความจำได้เต็มที่กว่าแบบแรก  โดยไม่ต้องรอว่าจะต้องมีหน่วยความจำที่ติดต่อกันทั้งหมดมีขนาดใหญ่เพียงพอกับโปรแกรมทั้งหมดหรือไม่  แต่การจัดสรรหน่วยงานความจำแบบนี้  ตัวระบบปฏิบัติการก็จะต้องมีกระบวนการจัดการที่ยุ่งยากซับซ้อนเพิ่มขึ้น


ระบบโปรแกรมเดี่ยว
          ระบบโปรแกรมเดี่ยว  หมายถึงการรันโปรแกรมที่ใช้เพียง 1 โปรเซสเท่านั้นซึ่งมักใช้งานกับคอมพิวเตอร์ขนาดเล็ก และตัวระบบปฎิบัติการก็มีการจัดการหน่วยความจำที่ค่อนข้างง่าย ไม่สลับซับซ้อน



 สามารถแบ่งส่วนของหน่วยความจำออกเป็น 2 ส่วนด้วยกัน  คือ

1.ส่วนของระบบปฎิบัติการ (โอเอส )
         เป็นหน่วยความจำถูครอบคองโดยระบบปฎิบัติการ  ซึ่งระบบปฎิบัติการจัดเป็นซอฟต์แวร์ต้องโหลดอยู่ในหน่วยความจำตลอดเวลา  โดยระบบปฎิบัติการถูกจัดเก็บลงในตำแหน่งแอดเดรสที่ 0 ถึง a ในหน่วยความจำ

2. ส่วนโปรแกรมของผู้ใช้
          ในส่วนนี้จะเป็นโปรแกรมของผู้ใช้(User Area) ที่อยู่ในความจำ โดยในที่นี้ส่วนโปรแกรมถูกจัดเก็บไว้ในตำแหน่งแอดเดรสที่ a ถึง b ในหน่วยความจำ ส่วนตำแหน่งแอดเดรสที่ b ถึง c เป็น


ตำแหน่งที่ว่างที่มิได้ถูกใช้งาน
          เมื่อพิจารณาแล้ว  โอกาสที่โหลดเข้ามาในหน่วยความจำนั้นสามารถที่จะรุกร้ำหรือทับหน่วยความจำปฎิบัติการได้หรือไม่  กล่าวคือถ้าโปรแกรมผู้ใช้โหลดลงมาทับหน่วยความจำที่ระบบปฎิบัติการครอบครองอยู่  ก็อาจจะทำหลายโปรแกรมของระบบปฎิบัติการเสียหายได้  ดังนั้นจึงจำเป็นต้องมีวิธีในการจัดการไม่ให้โปรแกรมเหล่านี้มาทำหลายส่วนหน่วยความจำของระบบปฎิบัติการได้ วิธีหนึ่งที่นิยมใช้กันคือสร้างรีจิสเตอร์ขึ้นมาตัวหนึ่งในซีพียูซึ่งเรียกว่า รีจิสเตอร์(Boundary Register) ซึ่งจะทำการเก็บค่าแอดเดรสที่เป็นช่วงต่อระหว่างส่วนของระบบปฎิบัติการและส่วนของผู้ใช้ โดยพิจารณาจากรูป 3.3 แอดเดรส a เป็นแอดเดรสสิ้นสุดของระบบปฎิบัติการ และโปรแกรมผู้ใช้งานสามารถโหลดต่อจากแอดเดรสนี้ได้ แต่ถ้ารืมีคำสั่งผู้ใช้ให้กระโดดเข้าไปทำงานในแอดเดรสที่น้อยกว่า a และหากมีเหตุการณ์นี้เกิดขึ้น ระบบจะหยุดการทำงานของโปรแกรมผู้ใช้ และจะแสดงข้อความผิดพลาดให้ทราบ และผู้ใช้ก็ต้องตรวจสอบแก้ไขโปรแกรมของตนเองต่อไป

          และในส่วนของระบบปฎิบัติการที่โหลดอยู่ในหน่วยความจำนี้  ก็จะมีรูทีน (Routine) ที่แยกไว้ต่างหาก ซึ่งเป็นฟังก์ชันในการจัดการอุปกรณ์อินพุต/เอาต์พุต ที่เรียกว่า Kernel l/O Subsystem    โดยในนี้ส่วนระบบปฎิบัติการก็จะมีการป้องกันมิให้โปรแกรมใดๆ   เขามาลุกล้ำหน่วยความจำส่วนนี้ได้เช่นกัน   แต่จะยอมให้เรียกฟังช์ชันการจัดการอุปกรณ์ได้ด้วยการผ่านคำสั่งเรียกระบบมาใช้งานได้ หรือเรียกผ่านทาง  System call  นั้นเอง


โอเวอร์เลย์

           ในระบบโปรแกรมเดี่ยว  ในกรณีโปรแกรมที่ต้องการรันในหน่วยความจำมีขนาดใหญ่โตกว่าหน่วยความอจำที่มีอยู่  จะต้องมีหลักการจัดการหน่วยความจำเหล่านี้เพื่อให้สามารถรันโปแกรมที่มีขนาดใหญ่กว่าหน่วยความจำได้  ด้วยการทำโอเวอร์เลย์

          โอเวอร์เลย์นี้จะเป็นส่วนของผู้เขียนโปรแกรมจัดกันเอง  ระบบปฎิบัติการไม่มีส่วนบริการในส่วนนี้การทำโอเวอร์เลย์ผู้เขียนโปแกรมการเขียนโปรแกรมแบ่งออกเป็นส่วนย่อย ๆหลาย ๆ ส่วนด้วยกัน คือ ส่วนที่จะต้องอยู่หน่วยความจำตลอดการทำงาน  และ อีกส่วนหนึ่งคือโปแกรมที่รัน เมื่อโปรแกรมทำการรันไปเรื่อย ๆ จนไม่พบโปรแกรมที่มันต้องการ ก็จะมีกระบวนการทำงานเช่นไปเรื่อย ๆ กล่าวคือจะมีโปแกรมส่วนหนึ่งที่จำเป็นต้องอยู่ในหน่วยความจำไปจนเสร็จสิ้นกระบวนการทำงานเพราะต้องทำการควบคุมการโหลดโปรแกรมส่วนต่าง ๆ และส่วนที่สองคือส่วนโปรแกรมต่าง ๆ ที่ต้องการเรียกใช้งาน โดยส่วนที่สอถูกทับด้วยโปรแกรมส่วนใหม่นั้น จะไม่สามารถใช้งานได้อีก  แต่ถ้าต้องการเรียกใช้งานส่วนเดิมก็สามารถเรียก ใช้งานเข้ามาใหม่ได้




 ระบบหลายโปรแกรม(Multipramming)
          ในระบบคอมพิวเตอร์  ซีพียูถือว่าเป็นหน่วยที่แพงที่สุด  สำคัญที่สุด   และต้องการใช้งานซีพียูให้คุ้มค่ามากที่สุด  ดังนั้นจึงได้คิดค้นวิธีการต่าง ๆ เพื่อสามารถใช้งานซีพียูคุ้มค่ายิ่งขึ้น ระบบโปรแกรมเดี่ยว (Single   program) ซีพียูแทบจะใช้งานน้อยมากกล่าวคือ เมื่อมีการติดต่ออุปกรณ์อินพุต/เอาต์พุต ซึ่งพื้นฐานของการทำงานอุปกรณ์เหล่านั้นเป็นแบบ Machanics ไม่ใช้แบบ Electtronics  เหมือนกับหน่วยความจำหลัก ดังนั้นการทำงานย่อยช้ากว่าซีพียูมาก  ในช่วงขณะที่ซีพียูจัดการกับอุปกรณ์อินพุต/เอาต์ว่าได้สูญเสียค่าใช้จ่ายในการใช้งานซีพียูใดไม่ได้ประโยชน์ใด ๆ และไม่คุ้มกับความสามารถและราค่าของซีพียูเลย จากความคิดนี้จึงได้มีการสร้างคอมพิวเตอร์ที่สามารถทำการรันงานหรือโปรแกรมต่าง ๆ ได้หลาย ๆ โปรแกรมหลายโปรแกรมจากความคิดการรันงานหลาย ๆ โปรแกรมพร้อม ๆ กันนี้ จึงต้องมีความจำเป็นที่ต้องทำแบ่งหน่วยความจำออกเป็นส่วน ๆ เพื่อเก็บโปรแกรมต่าง ๆ มิให้ปะบนกัน  และ เพื่อรันโปรแกรมได้หลาย ๆ โปรแกรม นั่นหมายถึงว่าจะต้องมีขนาดของหน่วยความจำเพิ่มขึ้นด้วย  หลักการทำงานของระบบปฎิบัติการนั้น  ก็จะต้องมีความยุงยากสลับซับซ้อนยิ่งขึ้น  และการทำงานของซีพีนั้นสามารถทำงานเพียงงานเดียวในช่วงเวลาหนึ่ง  ดังนั้นซีพียูก็จะทำงานการสับหลีกโปรแกรมหนึ่งเพื่อไปทำงานอีกโปรแกรมหนึ่ง  เปรียบเสมือนกับการทำงานหลาย ๆ งานในคณะเดียว  และที่สำคัญระบบปฎิบัติการจะต้องมีการป้องกันตัวเองจากโปรแกรมของผู้ใช้แล้ว  ยังต้องปกป้องกันโปรแกรมหนึ่งจากโปรแกรมอื่น ๆ ที่ใช้ในระบบด้วย


การทำให้คอมพิวเตอร์รันโปรแกรมได้หลายโปรแกรม

          วิธีการทำคอมพิวเตอร์สามารถรันโปรแกรมหลาย ๆ โปรแกรมมีอยู่ 2 วิธีคือ วิธี การแบ่งพารทิชั่นและวิธีสลับหน่วยความจำ

1. วิธีการแบ่งพาร์ทิชั่น   (Partition)
          การทำงานในวีธีนี้จะมีการแบ่งหน่วยความจำเป็นส่วน ๆ เพื่อให้โปรแกรมใช้งานต่าง ๆ โดยจะมีเพียโปรแกรมเดียวเท่านั้นที่สามารถครอบครองพาร์ทิชั่นส่วนนั้น  ซึ่งในวิธีนี้ก็แบ่งออกเป็น 2 ประเภทด้วยกัน คือ

          ๐ การแบ่งหน่วยความจำขนาดคงที่  ( Fixed Partition Multiprogramming )
          วิธีการแบ่งหน่วยความจำขนาดคงที่นี้ หน่วยความจำจะถูกแบ่งออกเป็นหลายๆส่วน ที่เรียกว่าพาร์ทิชั่น  ( Partition ) โดะแต่ละส่วนจะมีขนาดที่คงที่แน่นอน และในแต่ละส่วนนั้นจะมีพียงโปรแกรมเดียวที่ครอบครองหน่วยความจำในส่วนนั้น ดังนั้นจำนวนโปรแกรมที่รันพร้อม ๆ กันจะเท่ากับจำนวนส่วนขอหน่วยความจำที่แบ่งไว้



          หน่วยความจำถูกแบ่งออกเป็น 3 พาร์ทิชั่นด้วยกัน คือส่วนที่ 1,2,3 ตามลำดับ ดังนั้นจึงสามารถการรันโปรแกรมในขณะเดียวกันเพียง 3 โปณแกรมเท่านั้น ซึ่งจะไม่สามารถเปลี่ยนแปลงได้อีก การจัดแบ่งหน่วยความจำในวิธีนี้เป็นหลักการหน่วยความจำในยุคก่อนๆ

          ๐ การแบ่งหน่วยความจำขนาดไม่คงที่  ( Variable Partition Multiprogramming )
          เนื่องจากเกิดข้อเสียในการแบ่งหน่วยความจำขนาดคงที่ ดังนั้นจึงได้มีการออกแบบระบบปฏิบัติการหรือโอเอสนี้จะยอมให้โปรแกรมครอบครองหน่วยความจำมากเท่าที่ต้องการ โดยไม่มีการจำกัดขนาดของหน่วยความจำแบบคงที่ด้วยการแบ่งออกเป็นส่วนย่อย ๆ ที่แน่นอนอีกต่อไปดังนั้นจึงเรียกวิธีนี้ว่าการแบ่งหน่วยความจำไม่คงที่




          การแบ่งหน่วยความจำขนาดไม่คงที่นั้น ถ้าโปรแกรมมีขนาดเล็กก็สามารถรันโปรแกรมได้หลายๆโปรแกรม ซึ่งการแบ่งหน่วยความจำขนาดไม่คงที่นี้ยังเป็นการจัดสรรหน่วยความจำแบบต่อเนื่องอยู่ คือสามารถรันโปรแกรมขนาดใหญ่เท่าใดก็ได้ถ้าไม่เกินหน่วยความจำมนส่วนของผู้ใช้ แต่ถ้าโปรแกรมที่รันนั้นมีขนาดใหญ่ นั่นหมายถึงว่าอาจมีได้เพียงโปรแกรมหรืองานเดียวเท่านั้นที่รันอยู่ในหน่วยความจำเพาระไม่มีเนื้อที่เหลือพอให้กับโปรแกรมอื่นๆ
         
          การแบ่งหน่วยความจำขนาดคงที่นี้จะวางโปรแกรมให้ติด ๆ กันเพื่อมิให้เกิดพื้นที่ว่าง ต่างก็ยังเกิดปัญหาการสูญเสียเนื้อที่หน่วยความจำได้  กล่าวคืออาจจะมีโปรแกรมในหน่วยความจำบางโปรแกรมทำงานเสร็จสิ้นก่อน  ซึ่งทำให้เกิดช่องว่างหรือช่องโหว่ขึ้น เรียกว่าโฮล (Hole)

          ตัวอย่างเช่น หากโปรแกรม B และโปรแกรม C ทำการประมวลผลเสร็จแล้ว ก็ทำการคือหน่วยความจำให้แก่ระบบ ขณะระบบอื่นๆ ที่รันอยู่ยังไม่เสร็จสิ้น ดังนั้นจึงเกิดโฮลในหน่วยความจำขึ้นหรืออีกกรณีหนึ่งคือหน่วยความจำทีเหลื่ออยู่นั้นไม่สามารถรันงานอีกหนึ่งได้ เพราะมีขนาดของหน่วยความจำที่เหลือน้อยกว่าโปรแกรมที่ต้องการเข้ามาใช้งาน





          เมื่อมีโปรแกรมใหม่ถูกส่งเข้ามาในระบบเพื่อทำการประมวมผล ก็จะมีการวางโปรแกรมใหม่เหล่านี้ไว้บนโฮลไหนดี เพราะมีโฮลกระจายอยู่ไปทั่วในพื้นที่หน่วยความจำ ระบบปฎิบัติการจะต้องตัดสินใจในการเลือกโฮลเหล่านี้อย่างไร โดยมียุทธวิธีการวาง (Placement Strategy) อยู่ 3 วิธีด้วยกัน คือ

          ๐เลือกโฮลที่พบก่อน(First-Fit)
          ระบบปฏิบัติการจะทำการตรวจค้นโฮลต่างๆ  ในหน่วยความจำ  และเพพื่อพบโฮลที่มีขนาดใหญ่เพียงพอกับโปรแกรมที่วางลงไป  ก็จะเลือกโฮลนั้นเพื่อว่างโปรแกรม

          ๐ เลือกโฮลที่เหมาะสมที่สุด (Best-fit)
          วิธีนี้ระบบปฏิบัติการจะตรวจสอบโฮลทั้งหมดที่มีอยู่ในหน่วยความจำ  จากนั้นจะทำการเลือกโฮลที่เมื่อวางโปรแกรมใหม่ลงไปแล้ว  จะเกิดโฮลใหม่ที่เกขึ่นขนาดเล็กที่สุด

          ๐ เลือกโฮลที่ใหญ่ที่สุด (Woret-fit)
          วิธีนี้จะตรงกันข้ามกับวิธี Best-Fit  กล่าวคือ ระบบปฏิบัติตรวจสอบโฮลที่ขนาดใหญ่ที่สุด  และทำการวางโปรแกรมใหม่ลงไป  โดยมีเหตุผลว่าการทำเช่นนี้นั้นจะลดการเกิดโฮลขนาดเล็ก  ๆ   ในหน่วยความจำได้เพราะโฮลเล็ก  ๆ  หรือส่วนย่อย  ๆ  เหล่านั้นส่วนใหญ่มักไม่สามารถใช้งานได้  เนื่องจากมีขนาดเล็กเกิน  ดังนั้นวิธีการนี้สามารถลดปัญหาเหล่านี้ได้คือ จะเกิดโฮลใหม่ที่มีขนาดใหญ่เพียงพอและมีโอกาสที่จะวางโปรแกรมใหม่ลงไปได้





          ๐ วิธี First-Fit
         จะเลือก Hole 1 เพราะว่าพบก่อน

          ๐ วิธี Best-Fit
          จะเลือก Hole 2 เพราะว่ามีขนาดที่เล็กที่สุด

          ๐ วิธี Worst-Fit
          จะเลือก  Hole 3 เพราะว่าจะได้โฮลใหม่ที่มีพื้นที่ขนาดใหญ่

          ๐ การรวมช่องโหว่หรือรวมโฮล  (Coalescing Hole)
          โฮลต่างๆ ที่อยู่ในหน่วยความจำอาจเป็นโฮลที่มีขนาดเล็กเรียงถัดกันไป  ดังนั้นระบบปฏิบัติการที่ดีควรจะทำการรวมโฮลที่อยู่ติดกันได้  กล่าวคือระบบปฏิบัติกีควรมีความสามารถในการรวมโฮลที่อยู่ติดกันมารวมกันเป็นเพียงโลเดียว  ซึ่งเรยกกระบวนการนี้ว่า การรวมโฮล(Coalescing Hole)โดยจะทำให้โฮลมีขนาดใหญ่ขึ้น  จากรูป 3.8 หากมีโปรแกรมขนาด 21K ซึ่งในหน่วยความจำจะไม่มีพื้นที่พียงพอต่อโปรแกรมนี้ ดังนั้นจึงไม่สามารถรันโปรแกรมนี้ได้ แต่ถ้าระบบปฏิบัติการสามารถทำการรวมโฮล 1 และ2เข่ากันเป็นโฮลเดียว ก็ทำให้สามารถรันโปรแกรมนี้ได้พอดี





          ๐ การอัดหน่วยความจำ
          การรวมโฮลสามารถนำโฮลที่เรียกต่อกันมารวมกันเพื่อให้สามารถรันโปรแกรมขนาดใหญ่ได้ก็จริงอยู่  และก็มีโฮลหลาย ๆโฮลด้วยกระจัดกระจ่ายโดยไม่ได้เรียงต่อกันดังนั้นหากมีวิธีการทีสามมารทำการรวมโฮลเล็ก ๆ ที่อยู่กระจัดกระจายเหล่านั้นมารวมกันก็สามารถโฮลขนาดใหญ่ที่รันโปรแกรมเพิ่มอีกหนึ่งโปรแกรมก็เป็นได้

          วิธีการอัดหน่วยความจำนี้ จะทำโดยการโยกย้ายหน่วยความจำที่ใช้อยู่ไปอยู่ชิดติดกันที่ด้านใดด้านหนึ่งของหน่วยความจำ ดังนั้นจึงทำให้เกิดโฮลขนาดใหญ่เพียงโฮลเดียว แต่อย่างไรก็ตามการอันหน่วยความจำนี้ก็มีผลเสียเช่นกัน คือจะต้องหยุดการทำงามของโปรแกรมทุกโปรแกรมไว้ชั่วขณะหนึ่ง  เพื่อทำการอัดหน่วยความจำใหม่ อาจจำเป็นต้องใช้เวลามากซึ่งก็จัดเป็นค่าใช้จ่ายของระบบ(Overhead) และไม่เหมาะสมอย่างยิ่งกับระบบโต้ตอบฉับลัน(Real Time System)





2. วิธีการสลับหน่วยความจำ (Swapping)
          วิธีการข้างต้นที่กล่าวมานั้นเป็นวิธีต่าง ๆ ในการจัดระบบการทำงานหลายโปรแกรมโดยโปรแกรมใช้งานนั้นต้องอยู่ในหน่วยความจำจนกระทั่งเสร็จสิ้นกระบวนการทำงาน แต่วิธีการสลับหน่วยความจำนี้จะมีลักษณะแตกต่างจากวิธีดังกล่าว กล่าวคือในช่วงเวลาหนึ่งจะมีโปรแกรมเพียงโปรแกรมเดียวที่ทำงานอยู่ในหน่วยความจำ โดยโปรมแกรมโหลดเข้าไปในหน่วยความจำ เราเรียกกระบวนการนี้ว่า Swppaed In (สลับเข้า) เมื่อโปรแกรมนี้ทำงานและอยู่ในหน่วยความจำจนครบวงเวลาแล้ว (Quantum Time ) ระบบปฎิบัติการก็จะนำโปรแกรมนี้ออกจากหน่วยความจำ เราเรียกโปรแกรมนี้ว่า Swapped Out (สลับออก) ระบบปฎิบัติการจะทำเช่นนี้กับโปรแกรมทุกโปรแกรมทีกำลังทำงานอยู่ในขณะนั้น ดังนั้นโปรแกรมต่าง ๆ ที่รออยู่ในคิวก็จะวกกลับมาเข้าและออกหน่วยความจำตลอดสิ้นสุดการทำงาน ซึ่งโปรแกรมที่ถูกสลับออกจากหน่วยความจำนี้ ระบบปฎิบัติการจะนำไปเก็บไว้ในหน่วยความจำสำรองชั่วคราว





          การรันงานหลาย ๆ งานในยุคต้น ๆ นั้นยังไม่มีประสิทธิภาพเพียงพอ กล่าวคือในระบบปฎิบัติการบางตัวนั้นไม่การกำหนด Quantum Time เมื่อโปรแกรมมีการเรีกยใช้งานอุปกรณ์อินพิต/เอาต์พุต ก็จะต้องรออุปกรณ์นั้นซีพียูว่าง และยะระเวลาที่โปรแกรมหนึ่ง ๆ ได้ถูกสลับออกจากหน่วยความจำ กว่าโปรแกรมนั้นจะถูกสลับเข้ามาในหน่วยความจำอีกนั้นใช้เวลานานมาก ซึ่งเป็นเทคนิคการแบ่งปันกันใช้เวลา (Time Stsring ) ในยุคต้น ๆ ที่ผู้ใช้งานส่วนใหญ่นั้นไม่เป็นที่พึ่งพอใจนัก


อ้างอิงที่มา : https://sites.google.com/site/operatingsytemsyvc/kar-thahi-khxmphiwtexr-ran-porkaerm-di-hlay-porkaerm

Comments