บทที่ 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
Post a Comment