แนะนำตัว
วันเสาร์ที่ 26 ตุลาคม พ.ศ. 2556
วันศุกร์ที่ 25 ตุลาคม พ.ศ. 2556
ระบบหน่วยความจำเสมือน
ระบบหน่วยความจำเสมือน
MagicInfo-VideoWall-47-8
MagicInfo-VideoWall-47-8
หน่วยความจำมโนทัศน์ เนื่องจากหน่วยความจำจริงมีจำกัด จึงเป็นการยากที่จะสร้างโปรแกรมและข้อมูลโดยอาศัยรูปลักษณ์ของหน่วยความจำจริง กลวิธีต่างๆ ที่ใช้ในการจัดการหน่วยความจำหลักในระบบหน่วยความจำจริงตามที่ได้กล่าวมาแล้วนั้น อาจพิจารณาได้ว่าเป็นการแปลง (map) รูปลักษณ์หน่วยความจำที่กำหนดขึ้นสำหรับโปรแกรมและข้อมูลไปเป็นรูปลักษณ์ของหน่วยความจำจริง เช่น การตัดตอนโปรแกรมออกเป็นสามส่วน คือส่วนคงตัวหนึ่งส่วน และส่วนทับซ้อนสองส่วน เพื่อการจัดการหน่วยความจำแบบทับซ้อนนั้น จะเห็นว่าต้องมีการแปลงเพื่อให้เกิดการทับซ้อนขึ้นได้โดยอาศัยบริเวณร่วมกัน (บริเวณทับซ้อน) แต่ใช้ต่างเวลากัน วิธีการแปลง ต่างๆ เหล่านี้ ขึ้นอยู่กับเทคนิคการใช้หน่วยความจำจริง และมีผลกระทบถึงผู้ใช้ เพราะต้องจัดโปรแกรมและข้อมูลให้อยู่ในรูปลักษณ์ที่สอดคล้องกับเทคนิคเหล่านั้น ด้วยเหตุนี้จึงมีการพัฒนาขั้นสำคัญในอันที่จะแยกรูปลักษณ์ของหน่วยความจำที่ผู้ใช้มองเห็นออกจากรูปลักษณ์ของหน่วยความจำจริงที่มีอยู่ในระบบ รูปลักษณ์ที่ผู้ใช้มองเห็นได้นี้เรียกว่า หน่วยความจำมโนทัศน์ (conceptual memory) หรือ หน่วยความจำเสมือน (virtual memory) ซึ่งถูกกำหนดให้มีลักษณ์ที่เหมาะสมกับการใช้งาน และมีขนาดใหญ่พอที่ผู้เขียนโปรแกรมจะไม่ต้องกังวลว่าโปรแกรมหรือข้อมูลจะใหญ่เกินไป จากนั้นก็เป็นหน้าที่ของผู้ออกแบบระบบที่จะกำหนดวิธีการแปลงหน่วยความจำมโนทัศน์นี้ให้เหมาะสมกับหน่วยความจำจริงที่มีอยู่ ด้วยหลักการนี้ ผู้เขียนโปรแกรมจึงมีหน่วยความจำที่มีรูปแบบที่เหมาะสมต่อการใช้งานแม้จะมั่นใจได้ว่าหน่วยความจำมโนทัศน์นี้สามารถใช้งานจริงในระบบได้โดยไม่ต้อง
อาศัยการจัดการใดๆจากผู้ใช้เลยการแยกหน่วยความจำมโนทัศน์ที่ใช้งานออกจากหน่วยความจำจริงอย่างเป็นเอกเทศนี้ยังได้ประโยชน์แอบแฝงอีกประการ
หนึ่งคือ สามารถออกแบบให้หน่วยความจำเสมือนมีขนาดใหญ่เพียงใดก็ได้ ซึ่งจุดนี้ใช้ในการโฆษณาสรรพคุณของระบบจัดการหน่วยความจำนี้เสมอมา ดังนั้นจึงต้องคำนึงด้วยว่า หน่วยความจำเสมือนไม่เพียงแต่ทำให้มีหน่วยความจำใช้งานสำหรับเขียนโปรแกรมใหญ่ๆ แต่เพียงประการเดียว
หัวใจของระบบหน่วยความจำเสมือนคือการแยก (disassociate) การอ้างอิงตำแหน่งที่ปรากฎในกระบวนการที่ดำเนินอยู่ออกจากตำแหน่งที่มีให้อยู่ในหน่วยความจำหลัก ตำแหน่งที่ถูกอ้างอิงในกระบวนการที่ดำเนินอยู่เรียกว่า ตำแหน่งเสมือน (virtual address) ส่วนตำแหน่งในหน่วยความจำหลักที่มีให้ไว้ในระบบเรียกว่า ตำแหน่งจริง (real address) ขอบเขตของตำแหน่งเสมือนที่กระบวนการสามารถอ้างอิงได้ เรียกว่า ปริภูมิ (หรือพื้นที่) ตำแหน่งเสมือน (virtual address space) ของกระบวนการนั้น และขอบเขตของตำแหน่งจริงของคอมพิวเตอร์เครื่องใดก็เรียกว่า ปริภูมิตำแหน่งจริง (real address space) ของเครื่องนั้น แม้ว่ากระบวนการจะอ้างอิงแต่ตำแหน่งเสมือนตามที่ปรากฎอยู่ในส่วนเนื้อความของโปรแกรม (program text) ของกระบวนการนั้น แต่กระบวนการต้องดำเนินอยู่ในระบบจริงและใช้หน่วยความจำจริง ดังนั้นตำแหน่งเสมือนจึงต้องถูกแปลงให้เป็นตำแหน่งจริงเมื่อตำแหน่งเสมือนนั้นถูกอ้างอิง
การแบ่งปล้อง
เนื่องจากหน่วยความจำเสมือนนี้แยกตัวเป็นเอกเทศจากหน่วยความจำจริง ดังนั้นผู้ออกแบบจะกำหนดรูปลักษณ์ของหน่วยความจำเสมือนอย่างไรก็ได้ ให้เหมาะสมกับการใช้งาน ระบบการแบ่งปล้อง (segmentation) เป็นการจัดการหน่วยความจำหลัก ซึ่งพิจารณาถึงการใช้หน่วยความจำในแง่มุมของผู้ใช้เป็นหลัก
หลักกการของการแบ่งปล้อง
โดยปกติโปรแกรมจะประกอบด้วยหลายๆ หน่วยทางตรรก (logical unit) เช่น โปรแกรมย่อยและข้อมูล ดังนั้นในระบบแบ่งปล้องนี้ เนื้อที่หน่วยความจำเสมือนจะถูกแบ่งออกเป็น ปล้อง (segment) ซึ่งสมนัยกับการแบ่งงานออกเป็นหน่วยทางตรรก โดยแต่ละปล้องจะมีขนาดใหญ่เท่ากับขนาดของหน่วยของงานหน่วยนั้นๆ ที่บรรจุอยู่ ปล้องหนึ่งๆ อาจบรรจุโปรแกรมย่อยหนึ่งของงานหรืออาจบรรจุข้อมูลชุดหนึ่งก็ได้
การอ้างอิงจุดใดๆ ในโปรแกรมหรือข้อมูล สามารถทำได้โดยอ้างถึงชื่อของปล้องที่บรรจุจุดนั้น และตำแหน่งของจุดนั้นเทียบกับจุดเริ่มต้นของปล้อง ด้วยเหตุนี้ปล้องต่างๆ ของโปรแกรมเดียวกัน ไม่จำเป็นต้องอยู่เรียงต่อกันในหน่วยความจำจริง หรือหากปล้องไหนไม่ได้ใช้ก็สามารถเก็บปล้องนั้นไว้ในหน่วยความจำรองได้ เพื่อเปิดทางให้กับปล้องของงานอื่น เข้าไปใช้หน่วยความจำจริงได้
เนื่องจากขนาดของปล้องนั้นไม่แน่นอน จึงจำเป็นต้องมีวิสัยเพื่อป้องกัน มิให้โปรแกรมอ้างอิงตำแหน่งที่อยู่นอกขอบเขตของปล้อง และจะเห็นได้ว่าการอ้างอิงตำแหน่งใดๆ ในหน่วยความจำเสมือน ต้องทำการอ้างอิงหน่วยความจำจริงสองครั้ง คืออ้างอิงตารางปล้องแล้งจึงอ้างอิงสารสนเทศที่ต้องการอีกทีหนึ่ง ดังนั้นในระบบความจำเสมือนนี้ต้องมีฮาร์ดแวร์เข้าช่วยในการแปลงตำแหน่งนี้เพื่อให้ทำงานได้รวดเร็ว สำหรับแฟล็กในรายการในตารางปล้องนั้นจะถูกตรวจสอบก่อนที่จะมีการแปลงใดๆ เพื่อดูว่าปล้องนั้นๆ อยู่ในหน่วยความจำหลักหรือไม่ ถ้าไม่อยู่เราเรียกว่าเกิดขาดปล้อง (segment fault) และระบบปฏิบัติการต้องนำปล้องที่ขาดไปนั้นเข้ามาจากหน่วยความจำรอง ซึ่งในการนำปล้องเข้ามานี้ ถ้าไม่มีเนื้อที่หน่วยความจำหลักเหลือมากพอ ระบบอาจต้องทำการย้ายปล้องที่ไม่ได้ใช้งานออกไปจากหน่วยความจำหลัก หรือในกรณีที่มีการขาดวิ่นของหน่วยความจำหลัก ระบบอาจต้องทำการกระชับหน่วยความจำหลักด้วย ในกรณีที่ระบบต้องการเปลี่ยนไปทำกระบวนการหรืองานอื่นสามารถทำได้โดยง่าย โดยการบรรจุตำแหน่งของตารางปล้องของกระบวนการนั้นลงในรีจิสเตอร์บ่งตารางปล้อง ก็จะเป็นการเปลี่ยนแปลงของการอ้างอิงจากกระบวนการหนึ่งไปยังอีกกระบวนการหนึ่งทันที
ข้อดีและข้อเสียของระบบปล้อง
ประการแรกคือ ผู้เขียนโปรแกรมไม่ต้องทำการตัดแบ่งโปรแกรมหรือข้อมูลเพื่อทำทับซ้อนเอง เพราะการทับซ้อนในระบบแบ่งปล้องทำโดยระบบปฏิบัติการนอกเหนือจากนั้น การทับซ้อนโดยอัตโนมัตินี้ยังสามารถทำได้ระหว่างโปรแกรมอีกด้วย คือปล้องที่ต้องการจากหน่วยความจำรองของกระบวนการหนึ่งสามารถเข้ามาไล่ที่ปล้องของกระบวนการอื่นที่ไม่ได้ใช้ในขณะนั้นได้ เพราะระบบได้ทำการบันทึกแฟล็กต่างๆ ไว้แล้วว่าปล้องใดอยู่ในหน่วยความจำแบบใด ข้อดีอีกประการหนึ่งคือ การแบ่งปล้องนั้นเป็นไปตามการแบ่งทางตรรกของงาน ดังนั้นปล้องจึงถือได้ว่าเป็นหน่วยของการเชื่อมส่วนต่างๆ ของงานเข้าด้วยกันที่เรียกว่า การเชื่อมโยง (linkging) ดังนั้นการเชื่อมโยงจึงสามารถทำได้โดยง่าย โดยกำหนดโปรแกรมผล เช่น โปรแกรมย่อยสำหรับหาค่า sine ให้เป็นปล้องหนึ่ง เนื่องจากการอ้างอิงตำแหน่งใดๆ ในโปรแกรมผลนี้เป็นการอ้างอิงแบบโยกย้ายได้ทั้งหมด จึงเป็นการง่ายสำหรับโปรแกรมระบบในการเชื่อมหน่วยต่างๆ เหล่านี้เข้าด้วยกัน เพราะเป็นการเชื่อมโยงในหน่วยความจำเสมือน ไม่ต้องใส่ใจกับ ตำแหน่งสัมบูรณ์ในหน่วยความจำจริง เพราะการแปลงให้เป็นตำแหน่งสัมบูรณ์เป็นหน้าที่ของระบบจัดการหน่วยความจำไปแล้ว โดยเหตุที่การอ้างอิงระหว่างปล้องนั้น กระทำในรูปลักษณ์ของหน่วยความจำเสมือน ดังนั้นจึงเป็นการง่ายที่จะใช้โปรแกรมย่อยร่วมกันในระหว่างโปรแกรมต่างๆ เพราะแต่ละโปรแกรมเพียงแต่ทราบถึงปล้องที่โปรแกรมย่อยนั้นอาศัยอยู่ ซึ่งหมายถึงการบรรจุข้อมูลเกี่ยวกับปล้องของโปรแกรมย่อยลงเป็นรายการหนึ่งในตารางปล้องของโปรแกรมนั้นๆ เท่านั้น แน่นอนว่าโปรแกรมย่อยนั้นต้องเป็นโปรแกรมแบบใช้ร่วมได้ (reentrant) และระบบต้องตรวจตราและเปลี่ยนแปลงทุกตารางปล้องที่อ้างอิงโปรแกรมร่วมนี้ เมื่อมีการโยกย้ายโปรแกรมร่วมไปมาในหน่วยความจำหลัก เนื่องจากหน่วยความจำเสมือนที่ผู้เขียนโปรแกรมใช้นั้น ถูกแยกออกเป็นอิสระจากหน่วยความจำหลักที่มีอยู่จริง ดังนั้นผู้ออกแบบระบบสามารถกำหนดหน่วยความจำเสมือนให้ใหญ่เพียงใดก็ได้ ทำให้ผู้เขียนโปรแกรมไม่ต้องคอยกังวลกับขนาดของโปรแกรม ข้อเสียของปล้องที่สำคัญคือการที่ปล้องต่างๆ มีขนาดไม่เท่ากัน และแต่ละปล้องต้องการเนื้อที่ที่ต่อเนื่องกันในหน่วยความจำจริง ทำให้เกิดปัญหาการจัดสรรในลักษณะการจักสรรแบบแปรตอน เช่น ทำให้เกิดสภาพหน่วยความจำหลักขาดวิ่น เป็นต้น
การแบ่งแผ่น
การจัดการหน่วยความจำหลักแบบแบ่งปล้องตามที่ได้กล่าวมาแล้วนั้น เป็นวิธีกำหนดหน่วยความจำมโนทัศน์ ซึ่งต้องอาศัยความต้องการของผู้ใช้ระบบหรือผู้เขียนโปรแกรมเป็นหลัก สำหรับวิธีการจัดการหน่วยความจำหลักที่จะกล่าวถึงนี้ เป็นวิธีการลดความซับซ้อนของการแปลงระหว่างหน่วยความจำมโนทัศน์หรือเสมือนกับหน่วยความจำจริง
หลักการของการแบ่งแผ่น
วิธีการนี้เรียกว่าการแบ่งแผ่น (paging) ซึ่งหน่วยความจำเสมือนจะถูกแบ่งออกเป็นส่วนๆ มีขนาดเท่ากัน เรียกว่า แผ่น (page) ส่วนหน่วยความจำจริงก็ถูกแบ่งออกเป็นส่วนๆ มีขนาดเท่ากับแผ่นเช่นเดียวกัน เรียกว่า ช่องใส่แผ่น (page frame) ดังนั้นโปรแกรมและข้อมูลที่บรรจุอยู่ในหน่วยความจำเสมือนจะถูกแบ่งออกตามการแบ่งเป็นแผ่นๆ ไปด้วย ดังนั้นสารสนเทศแต่ละแผ่นจะบรรจุลงในแต่ละช่องใส่แผ่นได้พอดี
และในทำนองเดียวกับระบบแบ่งปล้อง ในรายการของแต่ละแผ่นจะมีแฟล็กบอกว่าแผ่นนั้นอยู่ในหน่วยความจำหลักหรือไม่ หากอยู่ก็ทำการแปลงตำแหน่งดังกล่าวทันที แต่ถ้าไม่ ระบบปฏิบัติการต้องอ่านเอาแผ่นที่ต้องการเข้ามาจากหน่วยความจำรอง ลักษณะการที่แผ่นที่ต้องการไม่อยู่ ในหน่วยความจำหลักนี้เรียกว่า การขาดแผ่น (page fault) ในระบบแบ่งแผ่นจะมีมาตรการสองอย่างที่สำคัญคือ มาตรการในการนำเข้า (fetch policy) ซึ่งโดยปกติใช้แบบการนำเข้าตามต้องการ (demand paging) และมาตรการในการแทนที่ (replacement policy) เพื่อเลือกแผ่นที่จะถูกแทนที่โดยแผ่นที่ถูกนำเข้ามาจากหน่วยความจำรอง
ข้อดีข้อเสียของการแบ่งแผ่น
ข้อดีบางประการของการแบ่งแผ่นคล้ายคลึงกับการแบ่งปล้อง เช่น การทับซ้อนโดยอัตโนมัติ รวมถึงการแปลงตำแหน่งเสมือนไปเป็นตำแหน่งจริงโดยระบบทำให้เอง และการมีหน่วยความจำเสมือนที่ใหญ่กว่าของจริงได้ นอกเหนือจากนี้ การแบ่งแผ่นยังมีข้อดีอีกประการหนึ่ง คือ การที่แต่ละแผ่นเท่ากันหมด ดังนั้นในทางกายภาพ แผ่นใดจะสวมใส่อยู่ในช่องใส่แผ่นใดก็ได้ ทำให้ลดความซับซ้อนในการบรรจุแผ่นลงในหน่วยความจำหลัก และตัดปัญหาการขาดวิ่นของหน่วยความจำหลัก
ข้อเสียของการแบ่งแผ่นคือ เป็นลักษณะการแบ่งด้วยระบบอัตโนมัติ ซึ่งการแบ่งเช่นนี้ไม่เป็นไปตามตรรกการแบ่งหน่วยของโปรแกรมและข้อมูล ทำให้การเชื่อมโยงส่วนต่างๆ ของงานเดียวกันหรือระหว่างหลายงานซับซ้อนขึ้น
ระบบผนวก
ระบบแบ่งปล้องและแบ่งแผ่นที่ได้กล่าวแล้วนั้น ต่างก็มีข้อดีที่เสรมิสมรรถนะของระบบคอมพิวเตอร์ขึ้นมาก แต่ในแต่ละวิธีการนี้ยังมีข้อเสียอยู่ การกำจัดข้อเสียบางประการสามารถทำได้โดยผนวกวิธีการทั้งสองเข้าด้วยกัน การผนวกนี้กระทำได้ในสองลักษณะคือ การผนวกแบบแบ่งปล้องเป็นแผ่น และการผนวกแบบแบ่งปล้องตารางแผ่น
การผนวกแบบแบ่งเปล้องเป็นแผ่น
วิธีการผนวกระบบปล้องและแผ่นเข้าด้วยกัน แบบนี้เรียกว่า การผนวกแบบแบ่งปล้องเป็นแผ่น (paged segmentation) วิธีการนี้พยายามแก้ไขลักษณะสองประการที่ไม่ดีของปล้อง ประการแรกคือการที่ปล้องมีขนาดไม่เท่ากัน ทำให้ลำบากต่อการบรรจุโปรแกรมลงในหน่วยความจำหลัก ประการที่สองคือการที่โปรแกรมอาจใหญ่หรือรหัสส่วนมากในโปรแกรมไม่ค่อยได้ใช้ จึงไม่จำเป็นต้องนำเข้ามาหมดทั้งปล้อง แต่จะนำเฉพาะส่วนของปล้องที่ต้องการใช้เข้ามาเท่านั้น ด้วยเหตุนี้จึงใช้วิธีการแบ่งแผ่นมาแบ่งปล้องออกเป็นแผ่นมีขนาดเท่าๆ กัน ทำให้แก้ปัญหาทั้งสองที่เกิดขึ้นกับระบบปล้องนี้ได้
การผนวกแบบแบ่งปล้องตารางแผ่น ในระบบแบ่งแผ่นที่มีขนาดของหน่วยความจำเสมือนใหญ่มากๆ ขนาดของตารางแผ่นก็ใหญ่ตามไปด้วย เนื่องจากหน่วยความจำเสมือนที่มีขนาดใหญ่มากๆ โดยปกติถูกใช้เพียงส่วนน้อยเท่านั้น เนื้อที่ส่วนใหญ่จึงว่าง ดังนั้นรายการสำหรับแผ่นของบริเวณที่ว่างจะไม่มีความจำเป็น จึงสามารถตัดแบ่งตารางแผ่นออกเป็นส่วนหรือเป็นปล้อง โดยเก็บเฉพาะปล้องที่บรรจุรายการแผ่นที่ไม่ว่างเท่านั้น ลักษณะนี้เรียกว่าการผนวกแบบแบ่งปล้องตารางแผ่น (segmented paging)
การใช้สารสนเทศร่วมกัน
ในระบบสารสนเทศโดยทั่วไปแล้ว การใช้โปรแกรมหรือข้อมูลร่วมกันจะช่วยลดความซ้ำซ้อนและความลักลั่นระหว่างงานของผู้ใช้ต่างๆ กันได้ สำหรับในระบบมัลติโปรแกรมมิ่งแล้ว การใช้สารสนเทศร่วมกันยังหมายถึงการประหยัดเนื้อที่ในหน่วยความจำด้วย เช่น หากมีสามกระบวนการต้องการแปลโปรแกรมด้วยตัวแปลภาษาฟอร์แทรนในเวลาเดียวกัน หากไม่มีการใช้โปรแกรมร่วมกัน กระบวนการทั้งสามก็ต้องมีสำเนาของตัวแปลภาษาฟอร์แทรนไว้กระบวนการละชุด ทำให้สิ้นเปลืองกว่ามีตัวแปลภาษาฟอร์แทรนปรากฏอยู่ในระบบให้ดำเนินได้เพียงชุดเดียว แต่ทั้งนี้ในระบบหน่วยความจำเสมือน นอกจากว่าโปรแกรมที่ใช้ร่วมกันจะต้องเป็นแบบใช้ร่วมกันได้ (reentrant) แล้ว ยังมีปัญหาว่า แต่ละกระบวนการมีตารางสำหรับแปลงตำแหน่งเสมือนที่เป็นเอกเทศแยกจากตารางการแปลงของกระบวนการอื่น ดังนั้นจึงต้องมีหลักปฏิบัติเพื่อให้ การอ้างอิงในหน่วยความจำเสมือนของหลายกระบวนการสมนัยกับตำแหน่งจริงของสารสนเทศที่ใช้ร่วมกันนั้น
อาศัยการจัดการใดๆจากผู้ใช้เลยการแยกหน่วยความจำมโนทัศน์ที่ใช้งานออกจากหน่วยความจำจริงอย่างเป็นเอกเทศนี้ยังได้ประโยชน์แอบแฝงอีกประการ
หนึ่งคือ สามารถออกแบบให้หน่วยความจำเสมือนมีขนาดใหญ่เพียงใดก็ได้ ซึ่งจุดนี้ใช้ในการโฆษณาสรรพคุณของระบบจัดการหน่วยความจำนี้เสมอมา ดังนั้นจึงต้องคำนึงด้วยว่า หน่วยความจำเสมือนไม่เพียงแต่ทำให้มีหน่วยความจำใช้งานสำหรับเขียนโปรแกรมใหญ่ๆ แต่เพียงประการเดียว
หัวใจของระบบหน่วยความจำเสมือนคือการแยก (disassociate) การอ้างอิงตำแหน่งที่ปรากฎในกระบวนการที่ดำเนินอยู่ออกจากตำแหน่งที่มีให้อยู่ในหน่วยความจำหลัก ตำแหน่งที่ถูกอ้างอิงในกระบวนการที่ดำเนินอยู่เรียกว่า ตำแหน่งเสมือน (virtual address) ส่วนตำแหน่งในหน่วยความจำหลักที่มีให้ไว้ในระบบเรียกว่า ตำแหน่งจริง (real address) ขอบเขตของตำแหน่งเสมือนที่กระบวนการสามารถอ้างอิงได้ เรียกว่า ปริภูมิ (หรือพื้นที่) ตำแหน่งเสมือน (virtual address space) ของกระบวนการนั้น และขอบเขตของตำแหน่งจริงของคอมพิวเตอร์เครื่องใดก็เรียกว่า ปริภูมิตำแหน่งจริง (real address space) ของเครื่องนั้น แม้ว่ากระบวนการจะอ้างอิงแต่ตำแหน่งเสมือนตามที่ปรากฎอยู่ในส่วนเนื้อความของโปรแกรม (program text) ของกระบวนการนั้น แต่กระบวนการต้องดำเนินอยู่ในระบบจริงและใช้หน่วยความจำจริง ดังนั้นตำแหน่งเสมือนจึงต้องถูกแปลงให้เป็นตำแหน่งจริงเมื่อตำแหน่งเสมือนนั้นถูกอ้างอิง
การแบ่งปล้อง
เนื่องจากหน่วยความจำเสมือนนี้แยกตัวเป็นเอกเทศจากหน่วยความจำจริง ดังนั้นผู้ออกแบบจะกำหนดรูปลักษณ์ของหน่วยความจำเสมือนอย่างไรก็ได้ ให้เหมาะสมกับการใช้งาน ระบบการแบ่งปล้อง (segmentation) เป็นการจัดการหน่วยความจำหลัก ซึ่งพิจารณาถึงการใช้หน่วยความจำในแง่มุมของผู้ใช้เป็นหลัก
หลักกการของการแบ่งปล้อง
โดยปกติโปรแกรมจะประกอบด้วยหลายๆ หน่วยทางตรรก (logical unit) เช่น โปรแกรมย่อยและข้อมูล ดังนั้นในระบบแบ่งปล้องนี้ เนื้อที่หน่วยความจำเสมือนจะถูกแบ่งออกเป็น ปล้อง (segment) ซึ่งสมนัยกับการแบ่งงานออกเป็นหน่วยทางตรรก โดยแต่ละปล้องจะมีขนาดใหญ่เท่ากับขนาดของหน่วยของงานหน่วยนั้นๆ ที่บรรจุอยู่ ปล้องหนึ่งๆ อาจบรรจุโปรแกรมย่อยหนึ่งของงานหรืออาจบรรจุข้อมูลชุดหนึ่งก็ได้
การอ้างอิงจุดใดๆ ในโปรแกรมหรือข้อมูล สามารถทำได้โดยอ้างถึงชื่อของปล้องที่บรรจุจุดนั้น และตำแหน่งของจุดนั้นเทียบกับจุดเริ่มต้นของปล้อง ด้วยเหตุนี้ปล้องต่างๆ ของโปรแกรมเดียวกัน ไม่จำเป็นต้องอยู่เรียงต่อกันในหน่วยความจำจริง หรือหากปล้องไหนไม่ได้ใช้ก็สามารถเก็บปล้องนั้นไว้ในหน่วยความจำรองได้ เพื่อเปิดทางให้กับปล้องของงานอื่น เข้าไปใช้หน่วยความจำจริงได้
เนื่องจากขนาดของปล้องนั้นไม่แน่นอน จึงจำเป็นต้องมีวิสัยเพื่อป้องกัน มิให้โปรแกรมอ้างอิงตำแหน่งที่อยู่นอกขอบเขตของปล้อง และจะเห็นได้ว่าการอ้างอิงตำแหน่งใดๆ ในหน่วยความจำเสมือน ต้องทำการอ้างอิงหน่วยความจำจริงสองครั้ง คืออ้างอิงตารางปล้องแล้งจึงอ้างอิงสารสนเทศที่ต้องการอีกทีหนึ่ง ดังนั้นในระบบความจำเสมือนนี้ต้องมีฮาร์ดแวร์เข้าช่วยในการแปลงตำแหน่งนี้เพื่อให้ทำงานได้รวดเร็ว สำหรับแฟล็กในรายการในตารางปล้องนั้นจะถูกตรวจสอบก่อนที่จะมีการแปลงใดๆ เพื่อดูว่าปล้องนั้นๆ อยู่ในหน่วยความจำหลักหรือไม่ ถ้าไม่อยู่เราเรียกว่าเกิดขาดปล้อง (segment fault) และระบบปฏิบัติการต้องนำปล้องที่ขาดไปนั้นเข้ามาจากหน่วยความจำรอง ซึ่งในการนำปล้องเข้ามานี้ ถ้าไม่มีเนื้อที่หน่วยความจำหลักเหลือมากพอ ระบบอาจต้องทำการย้ายปล้องที่ไม่ได้ใช้งานออกไปจากหน่วยความจำหลัก หรือในกรณีที่มีการขาดวิ่นของหน่วยความจำหลัก ระบบอาจต้องทำการกระชับหน่วยความจำหลักด้วย ในกรณีที่ระบบต้องการเปลี่ยนไปทำกระบวนการหรืองานอื่นสามารถทำได้โดยง่าย โดยการบรรจุตำแหน่งของตารางปล้องของกระบวนการนั้นลงในรีจิสเตอร์บ่งตารางปล้อง ก็จะเป็นการเปลี่ยนแปลงของการอ้างอิงจากกระบวนการหนึ่งไปยังอีกกระบวนการหนึ่งทันที
ข้อดีและข้อเสียของระบบปล้อง
ประการแรกคือ ผู้เขียนโปรแกรมไม่ต้องทำการตัดแบ่งโปรแกรมหรือข้อมูลเพื่อทำทับซ้อนเอง เพราะการทับซ้อนในระบบแบ่งปล้องทำโดยระบบปฏิบัติการนอกเหนือจากนั้น การทับซ้อนโดยอัตโนมัตินี้ยังสามารถทำได้ระหว่างโปรแกรมอีกด้วย คือปล้องที่ต้องการจากหน่วยความจำรองของกระบวนการหนึ่งสามารถเข้ามาไล่ที่ปล้องของกระบวนการอื่นที่ไม่ได้ใช้ในขณะนั้นได้ เพราะระบบได้ทำการบันทึกแฟล็กต่างๆ ไว้แล้วว่าปล้องใดอยู่ในหน่วยความจำแบบใด ข้อดีอีกประการหนึ่งคือ การแบ่งปล้องนั้นเป็นไปตามการแบ่งทางตรรกของงาน ดังนั้นปล้องจึงถือได้ว่าเป็นหน่วยของการเชื่อมส่วนต่างๆ ของงานเข้าด้วยกันที่เรียกว่า การเชื่อมโยง (linkging) ดังนั้นการเชื่อมโยงจึงสามารถทำได้โดยง่าย โดยกำหนดโปรแกรมผล เช่น โปรแกรมย่อยสำหรับหาค่า sine ให้เป็นปล้องหนึ่ง เนื่องจากการอ้างอิงตำแหน่งใดๆ ในโปรแกรมผลนี้เป็นการอ้างอิงแบบโยกย้ายได้ทั้งหมด จึงเป็นการง่ายสำหรับโปรแกรมระบบในการเชื่อมหน่วยต่างๆ เหล่านี้เข้าด้วยกัน เพราะเป็นการเชื่อมโยงในหน่วยความจำเสมือน ไม่ต้องใส่ใจกับ ตำแหน่งสัมบูรณ์ในหน่วยความจำจริง เพราะการแปลงให้เป็นตำแหน่งสัมบูรณ์เป็นหน้าที่ของระบบจัดการหน่วยความจำไปแล้ว โดยเหตุที่การอ้างอิงระหว่างปล้องนั้น กระทำในรูปลักษณ์ของหน่วยความจำเสมือน ดังนั้นจึงเป็นการง่ายที่จะใช้โปรแกรมย่อยร่วมกันในระหว่างโปรแกรมต่างๆ เพราะแต่ละโปรแกรมเพียงแต่ทราบถึงปล้องที่โปรแกรมย่อยนั้นอาศัยอยู่ ซึ่งหมายถึงการบรรจุข้อมูลเกี่ยวกับปล้องของโปรแกรมย่อยลงเป็นรายการหนึ่งในตารางปล้องของโปรแกรมนั้นๆ เท่านั้น แน่นอนว่าโปรแกรมย่อยนั้นต้องเป็นโปรแกรมแบบใช้ร่วมได้ (reentrant) และระบบต้องตรวจตราและเปลี่ยนแปลงทุกตารางปล้องที่อ้างอิงโปรแกรมร่วมนี้ เมื่อมีการโยกย้ายโปรแกรมร่วมไปมาในหน่วยความจำหลัก เนื่องจากหน่วยความจำเสมือนที่ผู้เขียนโปรแกรมใช้นั้น ถูกแยกออกเป็นอิสระจากหน่วยความจำหลักที่มีอยู่จริง ดังนั้นผู้ออกแบบระบบสามารถกำหนดหน่วยความจำเสมือนให้ใหญ่เพียงใดก็ได้ ทำให้ผู้เขียนโปรแกรมไม่ต้องคอยกังวลกับขนาดของโปรแกรม ข้อเสียของปล้องที่สำคัญคือการที่ปล้องต่างๆ มีขนาดไม่เท่ากัน และแต่ละปล้องต้องการเนื้อที่ที่ต่อเนื่องกันในหน่วยความจำจริง ทำให้เกิดปัญหาการจัดสรรในลักษณะการจักสรรแบบแปรตอน เช่น ทำให้เกิดสภาพหน่วยความจำหลักขาดวิ่น เป็นต้น
การแบ่งแผ่น
การจัดการหน่วยความจำหลักแบบแบ่งปล้องตามที่ได้กล่าวมาแล้วนั้น เป็นวิธีกำหนดหน่วยความจำมโนทัศน์ ซึ่งต้องอาศัยความต้องการของผู้ใช้ระบบหรือผู้เขียนโปรแกรมเป็นหลัก สำหรับวิธีการจัดการหน่วยความจำหลักที่จะกล่าวถึงนี้ เป็นวิธีการลดความซับซ้อนของการแปลงระหว่างหน่วยความจำมโนทัศน์หรือเสมือนกับหน่วยความจำจริง
หลักการของการแบ่งแผ่น
วิธีการนี้เรียกว่าการแบ่งแผ่น (paging) ซึ่งหน่วยความจำเสมือนจะถูกแบ่งออกเป็นส่วนๆ มีขนาดเท่ากัน เรียกว่า แผ่น (page) ส่วนหน่วยความจำจริงก็ถูกแบ่งออกเป็นส่วนๆ มีขนาดเท่ากับแผ่นเช่นเดียวกัน เรียกว่า ช่องใส่แผ่น (page frame) ดังนั้นโปรแกรมและข้อมูลที่บรรจุอยู่ในหน่วยความจำเสมือนจะถูกแบ่งออกตามการแบ่งเป็นแผ่นๆ ไปด้วย ดังนั้นสารสนเทศแต่ละแผ่นจะบรรจุลงในแต่ละช่องใส่แผ่นได้พอดี
และในทำนองเดียวกับระบบแบ่งปล้อง ในรายการของแต่ละแผ่นจะมีแฟล็กบอกว่าแผ่นนั้นอยู่ในหน่วยความจำหลักหรือไม่ หากอยู่ก็ทำการแปลงตำแหน่งดังกล่าวทันที แต่ถ้าไม่ ระบบปฏิบัติการต้องอ่านเอาแผ่นที่ต้องการเข้ามาจากหน่วยความจำรอง ลักษณะการที่แผ่นที่ต้องการไม่อยู่ ในหน่วยความจำหลักนี้เรียกว่า การขาดแผ่น (page fault) ในระบบแบ่งแผ่นจะมีมาตรการสองอย่างที่สำคัญคือ มาตรการในการนำเข้า (fetch policy) ซึ่งโดยปกติใช้แบบการนำเข้าตามต้องการ (demand paging) และมาตรการในการแทนที่ (replacement policy) เพื่อเลือกแผ่นที่จะถูกแทนที่โดยแผ่นที่ถูกนำเข้ามาจากหน่วยความจำรอง
ข้อดีข้อเสียของการแบ่งแผ่น
ข้อดีบางประการของการแบ่งแผ่นคล้ายคลึงกับการแบ่งปล้อง เช่น การทับซ้อนโดยอัตโนมัติ รวมถึงการแปลงตำแหน่งเสมือนไปเป็นตำแหน่งจริงโดยระบบทำให้เอง และการมีหน่วยความจำเสมือนที่ใหญ่กว่าของจริงได้ นอกเหนือจากนี้ การแบ่งแผ่นยังมีข้อดีอีกประการหนึ่ง คือ การที่แต่ละแผ่นเท่ากันหมด ดังนั้นในทางกายภาพ แผ่นใดจะสวมใส่อยู่ในช่องใส่แผ่นใดก็ได้ ทำให้ลดความซับซ้อนในการบรรจุแผ่นลงในหน่วยความจำหลัก และตัดปัญหาการขาดวิ่นของหน่วยความจำหลัก
ข้อเสียของการแบ่งแผ่นคือ เป็นลักษณะการแบ่งด้วยระบบอัตโนมัติ ซึ่งการแบ่งเช่นนี้ไม่เป็นไปตามตรรกการแบ่งหน่วยของโปรแกรมและข้อมูล ทำให้การเชื่อมโยงส่วนต่างๆ ของงานเดียวกันหรือระหว่างหลายงานซับซ้อนขึ้น
ระบบผนวก
ระบบแบ่งปล้องและแบ่งแผ่นที่ได้กล่าวแล้วนั้น ต่างก็มีข้อดีที่เสรมิสมรรถนะของระบบคอมพิวเตอร์ขึ้นมาก แต่ในแต่ละวิธีการนี้ยังมีข้อเสียอยู่ การกำจัดข้อเสียบางประการสามารถทำได้โดยผนวกวิธีการทั้งสองเข้าด้วยกัน การผนวกนี้กระทำได้ในสองลักษณะคือ การผนวกแบบแบ่งปล้องเป็นแผ่น และการผนวกแบบแบ่งปล้องตารางแผ่น
การผนวกแบบแบ่งเปล้องเป็นแผ่น
วิธีการผนวกระบบปล้องและแผ่นเข้าด้วยกัน แบบนี้เรียกว่า การผนวกแบบแบ่งปล้องเป็นแผ่น (paged segmentation) วิธีการนี้พยายามแก้ไขลักษณะสองประการที่ไม่ดีของปล้อง ประการแรกคือการที่ปล้องมีขนาดไม่เท่ากัน ทำให้ลำบากต่อการบรรจุโปรแกรมลงในหน่วยความจำหลัก ประการที่สองคือการที่โปรแกรมอาจใหญ่หรือรหัสส่วนมากในโปรแกรมไม่ค่อยได้ใช้ จึงไม่จำเป็นต้องนำเข้ามาหมดทั้งปล้อง แต่จะนำเฉพาะส่วนของปล้องที่ต้องการใช้เข้ามาเท่านั้น ด้วยเหตุนี้จึงใช้วิธีการแบ่งแผ่นมาแบ่งปล้องออกเป็นแผ่นมีขนาดเท่าๆ กัน ทำให้แก้ปัญหาทั้งสองที่เกิดขึ้นกับระบบปล้องนี้ได้
การผนวกแบบแบ่งปล้องตารางแผ่น ในระบบแบ่งแผ่นที่มีขนาดของหน่วยความจำเสมือนใหญ่มากๆ ขนาดของตารางแผ่นก็ใหญ่ตามไปด้วย เนื่องจากหน่วยความจำเสมือนที่มีขนาดใหญ่มากๆ โดยปกติถูกใช้เพียงส่วนน้อยเท่านั้น เนื้อที่ส่วนใหญ่จึงว่าง ดังนั้นรายการสำหรับแผ่นของบริเวณที่ว่างจะไม่มีความจำเป็น จึงสามารถตัดแบ่งตารางแผ่นออกเป็นส่วนหรือเป็นปล้อง โดยเก็บเฉพาะปล้องที่บรรจุรายการแผ่นที่ไม่ว่างเท่านั้น ลักษณะนี้เรียกว่าการผนวกแบบแบ่งปล้องตารางแผ่น (segmented paging)
การใช้สารสนเทศร่วมกัน
ในระบบสารสนเทศโดยทั่วไปแล้ว การใช้โปรแกรมหรือข้อมูลร่วมกันจะช่วยลดความซ้ำซ้อนและความลักลั่นระหว่างงานของผู้ใช้ต่างๆ กันได้ สำหรับในระบบมัลติโปรแกรมมิ่งแล้ว การใช้สารสนเทศร่วมกันยังหมายถึงการประหยัดเนื้อที่ในหน่วยความจำด้วย เช่น หากมีสามกระบวนการต้องการแปลโปรแกรมด้วยตัวแปลภาษาฟอร์แทรนในเวลาเดียวกัน หากไม่มีการใช้โปรแกรมร่วมกัน กระบวนการทั้งสามก็ต้องมีสำเนาของตัวแปลภาษาฟอร์แทรนไว้กระบวนการละชุด ทำให้สิ้นเปลืองกว่ามีตัวแปลภาษาฟอร์แทรนปรากฏอยู่ในระบบให้ดำเนินได้เพียงชุดเดียว แต่ทั้งนี้ในระบบหน่วยความจำเสมือน นอกจากว่าโปรแกรมที่ใช้ร่วมกันจะต้องเป็นแบบใช้ร่วมกันได้ (reentrant) แล้ว ยังมีปัญหาว่า แต่ละกระบวนการมีตารางสำหรับแปลงตำแหน่งเสมือนที่เป็นเอกเทศแยกจากตารางการแปลงของกระบวนการอื่น ดังนั้นจึงต้องมีหลักปฏิบัติเพื่อให้ การอ้างอิงในหน่วยความจำเสมือนของหลายกระบวนการสมนัยกับตำแหน่งจริงของสารสนเทศที่ใช้ร่วมกันนั้น
อ้างอิงเว็บ
http://cptd.chandra.ac.th/selfstud/os1/page4.html
อ้างอิงเว็บภาพ
http://www.samsung.com/th/business-images/product/large-format-display-solutions/2012/MagicInfo-VideoWall/features/MagicInfo-VideoWall-47-0.jpg
งานซ่อม midterm
ข้อ 1
ลักษณะของระบบปฎิบัติการ mac os x lion
Mac App Store
เปิดให้ใช้งานกันมาได้ซักพักแล้วสำหรับ Mac App Store โดยจริงๆ แล้วนี่เป็นหนึ่งในของใหม่ที่จะมาใน Lion
แต่ด้วยความใจร้อน Steve Jobs อยากจะดันออกมาให้ชสวโลกได้สัมผัสกันก่อน เราจึงได้ใช้งานกันไปเป็นที่เรียบร้อยใน
Mac OS X 10.6.6 นั่นเองตัว Mac App Store ก็คงไม่มีอะไรต้องพูดถึงมาก โดยเป็นโปรแกรมสำหรับดาวน์โหลด
App ต่างๆ ลงเครื่องด้วย iTunes Account ที่เราใช้กันบน iOS นั่นเอง
เปิดให้ใช้งานกันมาได้ซักพักแล้วสำหรับ Mac App Store โดยจริงๆ แล้วนี่เป็นหนึ่งในของใหม่ที่จะมาใน Lion
แต่ด้วยความใจร้อน Steve Jobs อยากจะดันออกมาให้ชสวโลกได้สัมผัสกันก่อน เราจึงได้ใช้งานกันไปเป็นที่เรียบร้อยใน
Mac OS X 10.6.6 นั่นเองตัว Mac App Store ก็คงไม่มีอะไรต้องพูดถึงมาก โดยเป็นโปรแกรมสำหรับดาวน์โหลด
App ต่างๆ ลงเครื่องด้วย iTunes Account ที่เราใช้กันบน iOS นั่นเอง
Launchpad
Launchpad เป็นฟังก์ชั่นการทำงานที่เรียกได้ว่าถอดแบบมาจาก iOS แทบจะทุกประการ โดยเป็นการจำลองหน้าจอจัดเรียงไอคอนของโปรแกรมทั้งหมดที่มีอยู่ในเครื่อง ซึ่งลักษณะก็จะเหมือนกับบน iOS โดยเราสามารถเลื่อนหน้าจอไปหน้าอื่นๆ ได้ และสามารถจัดส่วนของโฟลเดอร์ต่างๆ ได้เหมือนบน iOS เป๊ะ เรียกได้ว่างานนี้ใครใช้ iOS มาก่อนสามารถปรับตัวเข้ากับ Mac OS X Lion ได้สบายๆ
Launchpad เป็นฟังก์ชั่นการทำงานที่เรียกได้ว่าถอดแบบมาจาก iOS แทบจะทุกประการ โดยเป็นการจำลองหน้าจอจัดเรียงไอคอนของโปรแกรมทั้งหมดที่มีอยู่ในเครื่อง ซึ่งลักษณะก็จะเหมือนกับบน iOS โดยเราสามารถเลื่อนหน้าจอไปหน้าอื่นๆ ได้ และสามารถจัดส่วนของโฟลเดอร์ต่างๆ ได้เหมือนบน iOS เป๊ะ เรียกได้ว่างานนี้ใครใช้ iOS มาก่อนสามารถปรับตัวเข้ากับ Mac OS X Lion ได้สบายๆ
โปรแกรมแบบ Full Screen
ใน Lion เราสามารถใช้งานโปรแกรมต่างๆ ในรูปแบบ Full Screen เต็มจอได้ (หากโปรแกรมนั้นรองรับ) ซึ่งเป็นสิ่งที่ผู้ใช้หลายๆ คนที่คุ้นเคยการใช้งานแบบเต็มจอบน Windows รอคอยกันมานาน โดยลักษณะการใช้งานคือจะมีไปคอนสำหรับขยายโปรแกรมนั้นๆ ให้เต็มหน้าจออยู่ทางด้านมุมขวาบนสุดของโปรแกรม ซึ่งสามารถกดเพื่อขยายโปรแกรมให้เต็มจอได้ทันที เรียกว่าคราวนี้แต่ละโปรแกรมจะดูสวยงามเต็มจอ และกำจัดบางส่วนที่รกสายตาออกไป ซึ่งก็น่าจะถูกใจกับใครหลายๆ คน
ใน Lion เราสามารถใช้งานโปรแกรมต่างๆ ในรูปแบบ Full Screen เต็มจอได้ (หากโปรแกรมนั้นรองรับ) ซึ่งเป็นสิ่งที่ผู้ใช้หลายๆ คนที่คุ้นเคยการใช้งานแบบเต็มจอบน Windows รอคอยกันมานาน โดยลักษณะการใช้งานคือจะมีไปคอนสำหรับขยายโปรแกรมนั้นๆ ให้เต็มหน้าจออยู่ทางด้านมุมขวาบนสุดของโปรแกรม ซึ่งสามารถกดเพื่อขยายโปรแกรมให้เต็มจอได้ทันที เรียกว่าคราวนี้แต่ละโปรแกรมจะดูสวยงามเต็มจอ และกำจัดบางส่วนที่รกสายตาออกไป ซึ่งก็น่าจะถูกใจกับใครหลายๆ คน
Mission Control
อีกหนึ่งในความสามารถชูโรงของ Lion นั่นก็คือ Mission Control โดยจะเป็นการรวมการทำงานของระบบ Expose และ Dashboard เข้าด้วยกัน โดยเราสามารถใช้ Mission Control ในการดูว่าเราเปิดโปรแกรมอะไรอยู่หรือจะดูว่าเปิด Finder ใว้กี่หน้าต่างก็ทำได้โดยจะมีการจัดหมวดหมู่ตามโปรแกรและจัดเรียงอย่างสวยงาม โดยด้านบนสุดเมื่อใช้งาน Mission Control ก็จะเป็นบรรดาโปรแกรมที่กำลังทำงานแบบเต็มหน้าจออยู่ รวมไปถึงสามารถเข้าถึงส่วนของ Dashboard ได้จากที่นี่เลยด้วย
อีกหนึ่งในความสามารถชูโรงของ Lion นั่นก็คือ Mission Control โดยจะเป็นการรวมการทำงานของระบบ Expose และ Dashboard เข้าด้วยกัน โดยเราสามารถใช้ Mission Control ในการดูว่าเราเปิดโปรแกรมอะไรอยู่หรือจะดูว่าเปิด Finder ใว้กี่หน้าต่างก็ทำได้โดยจะมีการจัดหมวดหมู่ตามโปรแกรและจัดเรียงอย่างสวยงาม โดยด้านบนสุดเมื่อใช้งาน Mission Control ก็จะเป็นบรรดาโปรแกรมที่กำลังทำงานแบบเต็มหน้าจออยู่ รวมไปถึงสามารถเข้าถึงส่วนของ Dashboard ได้จากที่นี่เลยด้วย
การใช้งาน Multi-Touch แบบใหม่ๆ
ใน Lion จะมีการเพิ่มการใช้งาน Multi-Touch รูปแบบใหม่ๆ เข้ามามากมาย ทั้งนี้ก็เพื่อให้สอดคล้องกับ Interface และลูกเล่นต่างๆ ที่เพิ่มเข้ามาเยอะไม่แพ้กัน ซึ่งคราวนี้เราจะสามารถใช้งาน Multi-Touch ระดับ 5 นิ้วได้แล้ว (สำหรับการเปิดการทำงาน Launchpad) หรือจะเป็นการใช้งาน 3 นิ้วรูปแบบต่างๆ ในหน้าจอต่างๆ ก็มีการเพิ่มเข้ามาเช่นกันรับรองได้ว่ามีอะไรให้เล่นกันเยอะมากๆ แน่นอน
ใน Lion จะมีการเพิ่มการใช้งาน Multi-Touch รูปแบบใหม่ๆ เข้ามามากมาย ทั้งนี้ก็เพื่อให้สอดคล้องกับ Interface และลูกเล่นต่างๆ ที่เพิ่มเข้ามาเยอะไม่แพ้กัน ซึ่งคราวนี้เราจะสามารถใช้งาน Multi-Touch ระดับ 5 นิ้วได้แล้ว (สำหรับการเปิดการทำงาน Launchpad) หรือจะเป็นการใช้งาน 3 นิ้วรูปแบบต่างๆ ในหน้าจอต่างๆ ก็มีการเพิ่มเข้ามาเช่นกันรับรองได้ว่ามีอะไรให้เล่นกันเยอะมากๆ แน่นอน
Auto Save
บอกลาระบบเซฟแบบเดิมๆ ไปได้เลย หลังจากนี้เราอาจจะลืมการกด cmd + s สำหรับการเซฟงานไปเลยก็เป็นได้ โดยระบบใหม่อย่างการเซฟอัตโนมัตใน Lion จะทำให้เราสามารถที่จะทำงานไปได้เรื่อยๆ โดยที่ตัวโปรแกรมที่เราทำงานอยู่จะคอยเซฟสถานะช่วงต่างๆ ให้ โดยไม่ได้เป็นการสร้างไฟล์ใหม่ขึ้นมาเรื่อยๆ แต่จะเป็นการจัดเก็บข้อมูลแค่บางส่วนที่เปลี่ยนแปลงไปเพื่อประหยัดพื้นที่ Harddisk ให้มากที่สุด โดยเราสามารถเลือกที่จะ “lock” การทำงานดังกล่าวเพื่อป้องกันไม่ให้เกิดการ Auto Save แบบไม่ได้ตั้งใจได้เช่นกัน
บอกลาระบบเซฟแบบเดิมๆ ไปได้เลย หลังจากนี้เราอาจจะลืมการกด cmd + s สำหรับการเซฟงานไปเลยก็เป็นได้ โดยระบบใหม่อย่างการเซฟอัตโนมัตใน Lion จะทำให้เราสามารถที่จะทำงานไปได้เรื่อยๆ โดยที่ตัวโปรแกรมที่เราทำงานอยู่จะคอยเซฟสถานะช่วงต่างๆ ให้ โดยไม่ได้เป็นการสร้างไฟล์ใหม่ขึ้นมาเรื่อยๆ แต่จะเป็นการจัดเก็บข้อมูลแค่บางส่วนที่เปลี่ยนแปลงไปเพื่อประหยัดพื้นที่ Harddisk ให้มากที่สุด โดยเราสามารถเลือกที่จะ “lock” การทำงานดังกล่าวเพื่อป้องกันไม่ให้เกิดการ Auto Save แบบไม่ได้ตั้งใจได้เช่นกัน
Versions
ระบบ Versions เป็นระบบการบันทึกความเปลี่ยนแปลงต่างๆ ในไฟล์เอกสารแล้วจัดเก็บย้อนหลัง โดยระบบจะบันทึกข้อมูลตอนที่เราเปิดไฟลืเอกสารหรือทุกๆ ชั่วโมงที่เราทำงานบนเอกสารนั้นๆ โดยเมื่อเราต้องการเรียกดูไฟล์เวอร์ชั่นเก่าๆ ที่เราเคยทำไปในช่วงที่ผ่านมา ก็สามารถเรียกดูได้ด้วยรูปแบบการใช้งานคล้ายๆ กับ Time Machine ซึ่งเราสามารถคลิกเลือกไฟล์เดียวกันนั้นแต่เป็นเวอร์ชั่นเก่าๆ เพื่อหยิบเอามาแทนที่เวอร์ชั่นปัจจุบัน หรือจะแค่เลือกก๊อปปี้บางส่วนในเอกสารเวอร์ชั่นเก่ามาใช้ในเอกสารเวอร์ชั่นล่าสุดก็ทำได้
ระบบ Versions เป็นระบบการบันทึกความเปลี่ยนแปลงต่างๆ ในไฟล์เอกสารแล้วจัดเก็บย้อนหลัง โดยระบบจะบันทึกข้อมูลตอนที่เราเปิดไฟลืเอกสารหรือทุกๆ ชั่วโมงที่เราทำงานบนเอกสารนั้นๆ โดยเมื่อเราต้องการเรียกดูไฟล์เวอร์ชั่นเก่าๆ ที่เราเคยทำไปในช่วงที่ผ่านมา ก็สามารถเรียกดูได้ด้วยรูปแบบการใช้งานคล้ายๆ กับ Time Machine ซึ่งเราสามารถคลิกเลือกไฟล์เดียวกันนั้นแต่เป็นเวอร์ชั่นเก่าๆ เพื่อหยิบเอามาแทนที่เวอร์ชั่นปัจจุบัน หรือจะแค่เลือกก๊อปปี้บางส่วนในเอกสารเวอร์ชั่นเก่ามาใช้ในเอกสารเวอร์ชั่นล่าสุดก็ทำได้
ทำงานไม่กลัวพังกับ Resume
เชื่อว่าหลายๆ คนคงจะเคยคิดแบบเดียวกัน เมื่อกำลังทำงานอะไรบางอย่างอยู่ หรือมีการเปิดโปรแกรมหลายๆ โปรแกรมค้างใว้แล้วจำเป็นที่จะต้องรีสตาร์ทเครื่อง Mac ของเรา เราจะรู้สึกไม่อยากรีสตาร์ทซักเท่าไหร่เพราะโปรแกรมต่างๆ ที่เปิดทิ้งใว้จะหายไปหมด และต้องกลับมาไล่เปิดระลึกชาติกันไปอย่างเมามันส์แต่ด้วยระบบ Resume ปัญหาดังกล่าวจะหมดไปโดยเราสามารถออกจากโปรแกรมใดๆ ได้ทันทีแล้วกลับมาเปิดโปรแกรมนั้นใหม่ด้วยสถานะเดิม หน้าตาแบบเดิมเหมือนที่เราได้ออกจากโปรแกรมมานั่นเอง
เชื่อว่าหลายๆ คนคงจะเคยคิดแบบเดียวกัน เมื่อกำลังทำงานอะไรบางอย่างอยู่ หรือมีการเปิดโปรแกรมหลายๆ โปรแกรมค้างใว้แล้วจำเป็นที่จะต้องรีสตาร์ทเครื่อง Mac ของเรา เราจะรู้สึกไม่อยากรีสตาร์ทซักเท่าไหร่เพราะโปรแกรมต่างๆ ที่เปิดทิ้งใว้จะหายไปหมด และต้องกลับมาไล่เปิดระลึกชาติกันไปอย่างเมามันส์แต่ด้วยระบบ Resume ปัญหาดังกล่าวจะหมดไปโดยเราสามารถออกจากโปรแกรมใดๆ ได้ทันทีแล้วกลับมาเปิดโปรแกรมนั้นใหม่ด้วยสถานะเดิม หน้าตาแบบเดิมเหมือนที่เราได้ออกจากโปรแกรมมานั่นเอง
รูปแบบใหม่ หน้าตาใหม่ของ Mail 5
ใน Lion จะรวมเอาโปรแกรม Mail เวอร์ชั่นใหม่ล่าสุดก็คือเวอร์ชั่น 5 มาให้ด้วย โดยมีการออกแบบหน้าตาใหม่หมดซึ่งดูแล้วก็คล้ายๆ กับ iPad อีกแล้ว โดย Apple บอกว่าเป็นการใช้ประโยชน์จากหน้าจอ Widescreen ให้เป็นประโยชน์ ซึ่งสำหรับใครที่ไม่ชอบหรือไม่ค่อยคุ้นกับหน้าตาแบบใหม่ของ Mail 5 ก็สามารถกลับไปใช้ Classic Layout ได้เช่นกัน นอกจากนี้ใน Mail 5 ยังมีรูปแบบการจัดหน้าตาอีเมลในรูปแบบบทสนทนา (หรือ Conversation) ที่ดียิ่งขึ้น ซึ่งดูแล้วก็สวยงามน่าใช้มากกว่าเดิมเยอะ
ใน Lion จะรวมเอาโปรแกรม Mail เวอร์ชั่นใหม่ล่าสุดก็คือเวอร์ชั่น 5 มาให้ด้วย โดยมีการออกแบบหน้าตาใหม่หมดซึ่งดูแล้วก็คล้ายๆ กับ iPad อีกแล้ว โดย Apple บอกว่าเป็นการใช้ประโยชน์จากหน้าจอ Widescreen ให้เป็นประโยชน์ ซึ่งสำหรับใครที่ไม่ชอบหรือไม่ค่อยคุ้นกับหน้าตาแบบใหม่ของ Mail 5 ก็สามารถกลับไปใช้ Classic Layout ได้เช่นกัน นอกจากนี้ใน Mail 5 ยังมีรูปแบบการจัดหน้าตาอีเมลในรูปแบบบทสนทนา (หรือ Conversation) ที่ดียิ่งขึ้น ซึ่งดูแล้วก็สวยงามน่าใช้มากกว่าเดิมเยอะ
โยนไฟล์ผ่าน Wi-Fi ง่ายๆ ด้วย AirDrop
อีกหนึ่งสุดยอดฟีเจอร์ชูโรงอีกตัวของ Lion ได้แก่ Airdrop โดยเป็นรบบการส่งไฟล์หากันระหว่าง Mac ที่ใช้งาน Lion โดยที่ทั้งสองเครื่องไม่จำเป็นต้องต่อสายใดๆ , ไม่ต้องอยู่วง LAN เดียวกัน, และไม่ต้องใช้ Internet เลยด้วย การทำงานของ AirDrop ก็ง่ายๆ เพียงทั้งสองเครื่องที่ต้องการจะแชร์ไฟล์หากันต้องเข้าไปที่ไอคอน AirDrop ที่อยู่ใน Finder แล้วทั้งสองเครื่องก็จะสแกนหากันโดยจะค้นหาผ่านสัญญาณWi-Fi ของทั้งคู่ จากนั้นเราก็จะสามารถโยนไฟล์หากันผ่าน Wi-Fi ได้เลย โดยไม่จำเป็นต้องต่อเข้า Network หรือต้องอยู่ใกล้กันใดๆ ทั้งสิ้น
อีกหนึ่งสุดยอดฟีเจอร์ชูโรงอีกตัวของ Lion ได้แก่ Airdrop โดยเป็นรบบการส่งไฟล์หากันระหว่าง Mac ที่ใช้งาน Lion โดยที่ทั้งสองเครื่องไม่จำเป็นต้องต่อสายใดๆ , ไม่ต้องอยู่วง LAN เดียวกัน, และไม่ต้องใช้ Internet เลยด้วย การทำงานของ AirDrop ก็ง่ายๆ เพียงทั้งสองเครื่องที่ต้องการจะแชร์ไฟล์หากันต้องเข้าไปที่ไอคอน AirDrop ที่อยู่ใน Finder แล้วทั้งสองเครื่องก็จะสแกนหากันโดยจะค้นหาผ่านสัญญาณWi-Fi ของทั้งคู่ จากนั้นเราก็จะสามารถโยนไฟล์หากันผ่าน Wi-Fi ได้เลย โดยไม่จำเป็นต้องต่อเข้า Network หรือต้องอยู่ใกล้กันใดๆ ทั้งสิ้น
Lion Server รวมมาให้ใน Lion ธรรมดาเลย
จากนี้ดูเหมือน Apple จะเลิกทำ OS X เวอร์ชั่น Server โดยเฉพาะแล้ว ซึ่งใน OS X Lion จะมีการรวมตัว OS เวอร์ชั่น Server มาให้ด้วยเลยในตัว ซึ่งหลังจากนี้ก็คงไม่ต้องไปเสียเวลาซื้อแยกกันอีกต่อไป
Finder ใหม่ และลูกเล่นต่างๆ ตอนดูไฟล์
ใน Lion มีการปรับหน้าตาของ Finder ไปพอประมาณ โดยที่ด้านซ้ายจะมีเมนูอย่าง AirDrop และอื่นๆ เพิ่มเข้ามาด้วยซึ่งการใช้งานในโหมดต่างๆ ดูจะเปลี่ยนไปพอสมควร โดยสิ่งที่แตกต่างจากเดิมแบบเห็นได้ชัดก็ได้แก่ Scroll Bar ที่กลายเป็นแบบเดียวกับ iOS ซึ่งจะจางหายไปเมื่อเราไม่ได้ใช้งาน หรือหน้าตาของ Quick Look ก็เปลี่ยนไปด้วย
จากนี้ดูเหมือน Apple จะเลิกทำ OS X เวอร์ชั่น Server โดยเฉพาะแล้ว ซึ่งใน OS X Lion จะมีการรวมตัว OS เวอร์ชั่น Server มาให้ด้วยเลยในตัว ซึ่งหลังจากนี้ก็คงไม่ต้องไปเสียเวลาซื้อแยกกันอีกต่อไป
Finder ใหม่ และลูกเล่นต่างๆ ตอนดูไฟล์
ใน Lion มีการปรับหน้าตาของ Finder ไปพอประมาณ โดยที่ด้านซ้ายจะมีเมนูอย่าง AirDrop และอื่นๆ เพิ่มเข้ามาด้วยซึ่งการใช้งานในโหมดต่างๆ ดูจะเปลี่ยนไปพอสมควร โดยสิ่งที่แตกต่างจากเดิมแบบเห็นได้ชัดก็ได้แก่ Scroll Bar ที่กลายเป็นแบบเดียวกับ iOS ซึ่งจะจางหายไปเมื่อเราไม่ได้ใช้งาน หรือหน้าตาของ Quick Look ก็เปลี่ยนไปด้วย
การจัดการเวลา cpu
1. หลักความต้องการพื้นฐาน
2. ข้อพิจารณาในการจัดเวลา
3. Algorithm ของการจัดเวลา
4. การจัดเวลาของ Multiple-Processor
5. การจัดการเวลาแบบ Real-Time
6. การคัดเลือก Algorithm สำหรับการจัดเวลา CPU
2. ข้อพิจารณาในการจัดเวลา
3. Algorithm ของการจัดเวลา
4. การจัดเวลาของ Multiple-Processor
5. การจัดการเวลาแบบ Real-Time
6. การคัดเลือก Algorithm สำหรับการจัดเวลา CPU
หลักความต้องการพื้นฐาน
• เพื่อให้มีการใช้งาน cpu ได้อย่างเต็มที่ในการรันโปรแกรมหลายๆโปรแกรม
• การทำงานของ process ประกอบด้วยหนึ่งรอบของการทำงานของ cpu และการรอคอยอุปกรณ์ I/O
• เวลาในการใช้งานของ cpu
• เพื่อให้มีการใช้งาน cpu ได้อย่างเต็มที่ในการรันโปรแกรมหลายๆโปรแกรม
• การทำงานของ process ประกอบด้วยหนึ่งรอบของการทำงานของ cpu และการรอคอยอุปกรณ์ I/O
• เวลาในการใช้งานของ cpu
ช่วงเวลา Input/Output และช่วงเวลาใช้ CPU
ความสำคัญของการจัดเวลาของ cpu นั้น ขึ้นอยู่กับคุณลักษณะของ process โดยทั่วๆไป การ execute process จะประกอบด้วยเวลาที่ใช้ cpu และเวลาที่ต้องคอยอุปกรณ์ I/O ในขณะที่มีการ execute process จะมีการสลับการทำงานระหว่าง 2 ช่วงเวลานี้เท่านั้น และจะเกิดไม่พร้อมกัน การ execute มักจะเริ่มจากการใช้ cpu แล้วก็จะตามด้วยการคอย Input/Output เมื่อจบการรอคอย ก็จะตามมาด้วยเวลาของ cpu สลับกันไปเรื่อยๆ จนกว่าจะจบการ execute ซึ่งการสิ้นสุดการ execute นี้มักจะเป็นการใช้เวลา cpu เพื่อทำการจบหรือสิ้นสุด process มากกว่าการรอคอย Input/Output
ความสำคัญของการจัดเวลาของ cpu นั้น ขึ้นอยู่กับคุณลักษณะของ process โดยทั่วๆไป การ execute process จะประกอบด้วยเวลาที่ใช้ cpu และเวลาที่ต้องคอยอุปกรณ์ I/O ในขณะที่มีการ execute process จะมีการสลับการทำงานระหว่าง 2 ช่วงเวลานี้เท่านั้น และจะเกิดไม่พร้อมกัน การ execute มักจะเริ่มจากการใช้ cpu แล้วก็จะตามด้วยการคอย Input/Output เมื่อจบการรอคอย ก็จะตามมาด้วยเวลาของ cpu สลับกันไปเรื่อยๆ จนกว่าจะจบการ execute ซึ่งการสิ้นสุดการ execute นี้มักจะเป็นการใช้เวลา cpu เพื่อทำการจบหรือสิ้นสุด process มากกว่าการรอคอย Input/Output
ตัวจัดการเวลา CPU
เมื่อใดก็ตามที่ cpu ว่าง ระบบปฏิบัติการจะต้องเข้ามาเลือก process ตัวใดตัวหนึ่งที่คอยอยู่ในคิวเข้ามาใช้งาน cpu การเลือก process เพื่อเข้ามาใช้ cpu นี้ จะถูกจัดการด้วยส่วนที่เรียกว่า ตัวจัดการเวลาช่วงสั้น หรือ ตัวจัดการเวลา cpu ตัวจัดการเวลานี้จะเลือก process ที่อยู่ในหน่วยความจำที่พร้อมในการ execute ที่สุด เพื่อให้ครอบครองเวลา cpu และทรัพยากรที่เกี่ยวข้องกับ process นั้น
เมื่อใดก็ตามที่ cpu ว่าง ระบบปฏิบัติการจะต้องเข้ามาเลือก process ตัวใดตัวหนึ่งที่คอยอยู่ในคิวเข้ามาใช้งาน cpu การเลือก process เพื่อเข้ามาใช้ cpu นี้ จะถูกจัดการด้วยส่วนที่เรียกว่า ตัวจัดการเวลาช่วงสั้น หรือ ตัวจัดการเวลา cpu ตัวจัดการเวลานี้จะเลือก process ที่อยู่ในหน่วยความจำที่พร้อมในการ execute ที่สุด เพื่อให้ครอบครองเวลา cpu และทรัพยากรที่เกี่ยวข้องกับ process นั้น
การให้สิทธิการจัดเวลา
การตัดสินใจของ cpu ในการเลือก execute process ใดๆ ขึ้นอยู่กับสถานการณ์ดังนี้
1. เมื่อมีการเปลี่ยนสถาะของ process จากสถานะรัน ไปเป็นสถานะคอย
2. เมื่อมีการเปลี่ยนสถานะของ process จากสถานะรัน เป็นสถานะพร้อม
3. เมื่อมีการเปลี่ยนสถานะของ process จากสถานะคอย เป็นสถานะพร้อม
4. เมื่อ process เสร็จสิ้นไปแล้ว
การตัดสินใจของ cpu ในการเลือก execute process ใดๆ ขึ้นอยู่กับสถานการณ์ดังนี้
1. เมื่อมีการเปลี่ยนสถาะของ process จากสถานะรัน ไปเป็นสถานะคอย
2. เมื่อมีการเปลี่ยนสถานะของ process จากสถานะรัน เป็นสถานะพร้อม
3. เมื่อมีการเปลี่ยนสถานะของ process จากสถานะคอย เป็นสถานะพร้อม
4. เมื่อ process เสร็จสิ้นไปแล้ว
Despatcher
คอมโพเนนต์ที่สำคัญอีกตัวหนึ่งที่เกี่ยวข้องกับฟังก์ชันในการจัดเวลา cpu ก็คือสิ่งที่เรียกว่า Dispatcher ซึ่งเป็นโมดูลที่ทำหน้าที่ควบคุมการครอบครองเวลา cpu ของ process ฟังก์ชันนี้ประกอบด้วย
• การย้าย Context
• การย้ายไป user mode
• กระโดดไปยังตำแหน่งที่เหมาะสมของโปรแกรม เพื่อที่จะเริ่มรันโปรแกรมนั้นใหม่อีกครั้ง
คอมโพเนนต์ที่สำคัญอีกตัวหนึ่งที่เกี่ยวข้องกับฟังก์ชันในการจัดเวลา cpu ก็คือสิ่งที่เรียกว่า Dispatcher ซึ่งเป็นโมดูลที่ทำหน้าที่ควบคุมการครอบครองเวลา cpu ของ process ฟังก์ชันนี้ประกอบด้วย
• การย้าย Context
• การย้ายไป user mode
• กระโดดไปยังตำแหน่งที่เหมาะสมของโปรแกรม เพื่อที่จะเริ่มรันโปรแกรมนั้นใหม่อีกครั้ง
Dispatcher นี้ควรมีการทำงานที่เร็วที่สุดเท่าที่จะทำได้ เพราะว่ามันจะต้องทำงานทุกครั้งที่มีการย้าย process ซึ่งเวลาที่ถูกใช้ไปกับการทำเช่นนี้เราเรียกว่า Dispatch Latency
ข้อพิจารณาในการจัดการเวลา
• CPU Utilization คือคำนึงถึงการใช้ประโยชน์จาก cpu อย่างสูงสุด
• Throughput ถ้าหากว่า cpu ทำงานตลอดเวลา ก็หมายความว่างานก็กำลังถูกทำงานให้เสร็จ ซึ่งเราสามารถที่จะวัดออกมาได้เป็นจำนวนงานที่เสร็จต่อหน่วยเวลา
• Turnaround Time คือช่วงเวลาทั้งหมดที่ใช้ในการทำงานใดงานหนึ่งตั้งแต่เริ่มต้นเข้าไปในระบบ จนงานถูกทำจนเสร็จเรียบร้อย
• Waiting Time คือช่วงเวลาที่งานใดงานหนึ่งต้องรอการทำงานของตัวจัดเวลา โดยไม่รวมเวลาของการใช้ cpu และเวลาของการติดต่อ Input/Output ส่วนใหญ่คือเวลาที่งานต้องคอยอยู่ในคิวนั่นเอง
• Response Time คือเวลาที่วัดระหว่างเวลาที่มีการร้องขอการกระทำใดๆ ต่อระบบแล้วมีการตอบรับกลับออกมา
• CPU Utilization คือคำนึงถึงการใช้ประโยชน์จาก cpu อย่างสูงสุด
• Throughput ถ้าหากว่า cpu ทำงานตลอดเวลา ก็หมายความว่างานก็กำลังถูกทำงานให้เสร็จ ซึ่งเราสามารถที่จะวัดออกมาได้เป็นจำนวนงานที่เสร็จต่อหน่วยเวลา
• Turnaround Time คือช่วงเวลาทั้งหมดที่ใช้ในการทำงานใดงานหนึ่งตั้งแต่เริ่มต้นเข้าไปในระบบ จนงานถูกทำจนเสร็จเรียบร้อย
• Waiting Time คือช่วงเวลาที่งานใดงานหนึ่งต้องรอการทำงานของตัวจัดเวลา โดยไม่รวมเวลาของการใช้ cpu และเวลาของการติดต่อ Input/Output ส่วนใหญ่คือเวลาที่งานต้องคอยอยู่ในคิวนั่นเอง
• Response Time คือเวลาที่วัดระหว่างเวลาที่มีการร้องขอการกระทำใดๆ ต่อระบบแล้วมีการตอบรับกลับออกมา
Algorithm ของการจัดเวลา
หน้าที่ของตัวจัดคิวคือ คัดเลือกโปรเซสซึ่งรออยู่ในสถานะพร้อมที่เหมาะสมที่สุดให้เข้าไปอยู่ในสถานะ รัน (ได้ครอบครองซีพียู) โดยแท้จริงแล้วการส่งโปรเซสที่ถูกเลือกแล้วให้เข้าไปอยู่ในสถานะรัน เป็นหน้าที่ของโปรเซสของ OS ที่ชื่อตัวส่ง (dispatcher) ใน แง่การทำงานแล้วตัวจัดคิวจะเป็นผู้คัดเลือกโปรเซสและเรียกให้ตัวส่งส่งโปรเซ สที่ถูกเลือกแล้วเข้าไปในสถานะรันเป็นความรับผิดชอบของตัวจัดคิว
หน้าที่ของตัวจัดคิวคือ คัดเลือกโปรเซสซึ่งรออยู่ในสถานะพร้อมที่เหมาะสมที่สุดให้เข้าไปอยู่ในสถานะ รัน (ได้ครอบครองซีพียู) โดยแท้จริงแล้วการส่งโปรเซสที่ถูกเลือกแล้วให้เข้าไปอยู่ในสถานะรัน เป็นหน้าที่ของโปรเซสของ OS ที่ชื่อตัวส่ง (dispatcher) ใน แง่การทำงานแล้วตัวจัดคิวจะเป็นผู้คัดเลือกโปรเซสและเรียกให้ตัวส่งส่งโปรเซ สที่ถูกเลือกแล้วเข้าไปในสถานะรันเป็นความรับผิดชอบของตัวจัดคิว
1. การจัดเวลาแบบมาก่อนได้ก่อน (FCFS : First-come First-served Scheduling)
การจัดคิวแบบ FCFS (first-come-first-served) วิธีการคัดเลือกแบบ FCFS นี้ เป็นวิธีที่ง่ายที่สุด คือ โปรเซสไหนเข้ามารอในคิวก่อนจะได้ครอบครองซีพียูก่อน ตามลำดับเวลาของการเข้ามาอยู่ในคิว คือ “มาก่อนได้ก่อน” โปรเซสที่ได้ครอบครองซีพียูจะทำงานไปจนเสร็จ ไม่มีระยะเวลาควอนตัมซึ่งจำกัดเวลาการครอบครองซีพียู แต่ถ้าโปรเซสมีการเรียกใช้งานอุปกรณ์อินพุต-เอาต์พุต หรือรอเหตุการณ์บางอย่าง โปรเซสนั้นต้องปลดปล่อยซีพียู และออกจากสถานะรันไปอยู่ในสถานะติดขัด เมื่อใดที่งานเสร็จสิ้นลงหรือเกิดเหตุการณ์ที่กำลังรออยู่ โปรเซสนั้นจึงค่อยกลับเข้าไปอยู่ต่อท้ายคิวของสถานะพร้อมใหม่อีกครั้ง เราอาจแสดงการเปลี่ยนสถานะของโปรเซสโดยใช้การจัดคิวแบบ FCFS ซึ่ง จะเห็นว่าแตกต่างกับรูปแสดงการเปลี่ยนสถานะของโปรเซสที่เคยกล่าวมาคือ ไม่มีการเปลี่ยนสถานะของโปรเซสจากสถานะรันมายังสถานะพร้อมโดยตรง
การจัดคิวแบบ FCFS (first-come-first-served) วิธีการคัดเลือกแบบ FCFS นี้ เป็นวิธีที่ง่ายที่สุด คือ โปรเซสไหนเข้ามารอในคิวก่อนจะได้ครอบครองซีพียูก่อน ตามลำดับเวลาของการเข้ามาอยู่ในคิว คือ “มาก่อนได้ก่อน” โปรเซสที่ได้ครอบครองซีพียูจะทำงานไปจนเสร็จ ไม่มีระยะเวลาควอนตัมซึ่งจำกัดเวลาการครอบครองซีพียู แต่ถ้าโปรเซสมีการเรียกใช้งานอุปกรณ์อินพุต-เอาต์พุต หรือรอเหตุการณ์บางอย่าง โปรเซสนั้นต้องปลดปล่อยซีพียู และออกจากสถานะรันไปอยู่ในสถานะติดขัด เมื่อใดที่งานเสร็จสิ้นลงหรือเกิดเหตุการณ์ที่กำลังรออยู่ โปรเซสนั้นจึงค่อยกลับเข้าไปอยู่ต่อท้ายคิวของสถานะพร้อมใหม่อีกครั้ง เราอาจแสดงการเปลี่ยนสถานะของโปรเซสโดยใช้การจัดคิวแบบ FCFS ซึ่ง จะเห็นว่าแตกต่างกับรูปแสดงการเปลี่ยนสถานะของโปรเซสที่เคยกล่าวมาคือ ไม่มีการเปลี่ยนสถานะของโปรเซสจากสถานะรันมายังสถานะพร้อมโดยตรง
2. การจัดเวลาแบบงานสั้นทำก่อน (SJF : Short-Job-First Scheduling)
การจัดคิวแบบ SJN (shortest job next) การ คัดเลือกโปรเซสด้วยวิธีนี้ จะคัดเลือกเอาโปรเซสที่ต้องการเวลาในการทำงานน้อยที่สุด ทำให้โปรเซสที่ต้องการเวลาในการทำงานน้อยจบออกไปได้เร็วขึ้น จำนวนโปรเซสในระบบที่รออยู่ในคิวมีก็จะมีจำนวนลดลง และทำให้เวลาโดยเฉลี่ยในการทำงาน 1 งานเสร็จหรือเวลาครบงาน (turnaround time) น้อยลงแต่การจัดคิวแบบนี้เป็นผลเสียต่อโปรเซสที่ต้องการเวลาในการทำงานนาน
การจัดคิวแบบ SJN (shortest job next) การ คัดเลือกโปรเซสด้วยวิธีนี้ จะคัดเลือกเอาโปรเซสที่ต้องการเวลาในการทำงานน้อยที่สุด ทำให้โปรเซสที่ต้องการเวลาในการทำงานน้อยจบออกไปได้เร็วขึ้น จำนวนโปรเซสในระบบที่รออยู่ในคิวมีก็จะมีจำนวนลดลง และทำให้เวลาโดยเฉลี่ยในการทำงาน 1 งานเสร็จหรือเวลาครบงาน (turnaround time) น้อยลงแต่การจัดคิวแบบนี้เป็นผลเสียต่อโปรเซสที่ต้องการเวลาในการทำงานนาน
3. การจัดเวลาตามลำดับความสำคัญ (Priority Scheduling)
การจัดคิวแบบลำดับความสำคัญ (priority queue) คิว แบบลำดับความสำคัญมีลักษณะแตกต่างกับคิวธรรมดา ภายในคิวจะมีการจัดเรียงลำดับของโปรเซสต่าง ๆ ตามลำดับความสำคัญของโปรเซสนั้น โปรเซสที่อยู่ต้นคิวจะมีลำดับความสำคัญมากที่สุด และลดลงเรื่อย ๆ โปรเซสที่อยู่ท้ายคิวคือโปรเซสที่มีลำดับความสำคัญต่ำสุด การคัดเลือกโปรเซสจะเอาโปรเซสที่อยู่ต้นคิว (มีลำดับความสำคัญสูงสุด) เข้าไปครอบครองซีพียูก่อน ดังนั้นถึงแม้ว่าโปรเซสที่เข้าคิวทีหลังแต่มีลำดับความสำคัญสูงกว่าก็อาจได้ เข้าไปครอบครองซีพียูก่อน โปรเซส E เข้าคิวเป็นโปรเซสหลังสุด แต่จะได้ครอบครองซีพียูก่อนโปรเซส C และ D
การจัดคิวแบบลำดับความสำคัญ (priority queue) คิว แบบลำดับความสำคัญมีลักษณะแตกต่างกับคิวธรรมดา ภายในคิวจะมีการจัดเรียงลำดับของโปรเซสต่าง ๆ ตามลำดับความสำคัญของโปรเซสนั้น โปรเซสที่อยู่ต้นคิวจะมีลำดับความสำคัญมากที่สุด และลดลงเรื่อย ๆ โปรเซสที่อยู่ท้ายคิวคือโปรเซสที่มีลำดับความสำคัญต่ำสุด การคัดเลือกโปรเซสจะเอาโปรเซสที่อยู่ต้นคิว (มีลำดับความสำคัญสูงสุด) เข้าไปครอบครองซีพียูก่อน ดังนั้นถึงแม้ว่าโปรเซสที่เข้าคิวทีหลังแต่มีลำดับความสำคัญสูงกว่าก็อาจได้ เข้าไปครอบครองซีพียูก่อน โปรเซส E เข้าคิวเป็นโปรเซสหลังสุด แต่จะได้ครอบครองซีพียูก่อนโปรเซส C และ D
4. การจัดเวลาแบบวนรอบ (RR : Round-Robin Scheduling)
การจัดคิวแบบ RR (round-robin) การจัดคิวแบบ RR อาจเรียกว่าเป็นการจัดคิวแบบมีการวนรอบ ลักษณะการคัดเลือก โปรเซสในคิวจะเป็นแบบ FCFS คือ “มาก่อนได้ก่อน” แต่ต่างกันนิดหน่อยตรงที่การครอบครองซีพียูของโปรเซสในสถานะรันจะถูกจำกัด เวลาไว้ด้วยระยะเวลาควอนตัม ทำให้โปรเซสที่ต้องการเวลาในการทำงานนานจะต้องเปลี่ยนสถานะหมุนระหว่างสถานะ พร้อมและสถานะรัน การจัดคิวแบบ RR สามารถ แก้ปัญหาการคอยนานของโปรเซสที่ต้องการเวลาทำงานน้อย ๆ ได้ลองกลับไปพิจารณาเหตุการณ์สมมติซึ่งกล่าวไว้ในหัวข้อที่แล้ว ถ้าระบบกำหนดเวลาควอนตัมเป็น 1 วินาที โปรเซส A ต้องมีการวนรอบเปลี่ยนสถานะระหว่างสถานะรันและสถานะพร้อม 15 ครั้ง โปรเซส B 1 ครั้ว โปรเซส C 10 ครั้ง เมื่อโปรเซส A เข้าไปอยู่ในสถานะรันครั้งแรกและกลับออกมา โปรเซส B จะได้ครอบครองซีพียูได้และ ทำงานเสร็จโปรเซส B จบและออกจากระบบไปเลยเหลือเพียง 2 โปรเซสที่อยู่ในคิวของสถานะพร้อม โปรเซสถัดไปที่จัดได้ครอบครองซีพียูคือ C โปรเซส C และ A จะสลับกันครอบครองซีพียูกันโปรเซสละ 1 วินาที จนกระทั่งโปรเซส C จบ เหลือโปรเซส A เพียงโปรเซสเดียว เป็นแผนภาพแสดงการสลับกันทำงานของโปรเซสทั้ง 3 และเป็นผลที่เกิดขึ้นจากการจัดคิวแบบ RR
การจัดคิวแบบ RR (round-robin) การจัดคิวแบบ RR อาจเรียกว่าเป็นการจัดคิวแบบมีการวนรอบ ลักษณะการคัดเลือก โปรเซสในคิวจะเป็นแบบ FCFS คือ “มาก่อนได้ก่อน” แต่ต่างกันนิดหน่อยตรงที่การครอบครองซีพียูของโปรเซสในสถานะรันจะถูกจำกัด เวลาไว้ด้วยระยะเวลาควอนตัม ทำให้โปรเซสที่ต้องการเวลาในการทำงานนานจะต้องเปลี่ยนสถานะหมุนระหว่างสถานะ พร้อมและสถานะรัน การจัดคิวแบบ RR สามารถ แก้ปัญหาการคอยนานของโปรเซสที่ต้องการเวลาทำงานน้อย ๆ ได้ลองกลับไปพิจารณาเหตุการณ์สมมติซึ่งกล่าวไว้ในหัวข้อที่แล้ว ถ้าระบบกำหนดเวลาควอนตัมเป็น 1 วินาที โปรเซส A ต้องมีการวนรอบเปลี่ยนสถานะระหว่างสถานะรันและสถานะพร้อม 15 ครั้ง โปรเซส B 1 ครั้ว โปรเซส C 10 ครั้ง เมื่อโปรเซส A เข้าไปอยู่ในสถานะรันครั้งแรกและกลับออกมา โปรเซส B จะได้ครอบครองซีพียูได้และ ทำงานเสร็จโปรเซส B จบและออกจากระบบไปเลยเหลือเพียง 2 โปรเซสที่อยู่ในคิวของสถานะพร้อม โปรเซสถัดไปที่จัดได้ครอบครองซีพียูคือ C โปรเซส C และ A จะสลับกันครอบครองซีพียูกันโปรเซสละ 1 วินาที จนกระทั่งโปรเซส C จบ เหลือโปรเซส A เพียงโปรเซสเดียว เป็นแผนภาพแสดงการสลับกันทำงานของโปรเซสทั้ง 3 และเป็นผลที่เกิดขึ้นจากการจัดคิวแบบ RR
5. การจัดเวลาแบบคิวหลายระดับ (Multilevel Queue Scheduling)
เพื่อ ให้การจัดคิวเป็นไปอย่างมีประสิทธิภาพ จึงมีการนำหลาย ๆ เทคนิคมาประยุกต์เข้าด้วยกัน เป็นการจัดคำแบบวนรอบ ที่คำนึงถึงความสำคัญของงาน ทำให้งานที่มีความสำคัญเหมือนกันอยู่ในคิวเดียวกัน และให้งานสำคัญน้อย ๆ อยู่ในคิวที่สำคัญน้อยเช่นกัน
เพื่อ ให้การจัดคิวเป็นไปอย่างมีประสิทธิภาพ จึงมีการนำหลาย ๆ เทคนิคมาประยุกต์เข้าด้วยกัน เป็นการจัดคำแบบวนรอบ ที่คำนึงถึงความสำคัญของงาน ทำให้งานที่มีความสำคัญเหมือนกันอยู่ในคิวเดียวกัน และให้งานสำคัญน้อย ๆ อยู่ในคิวที่สำคัญน้อยเช่นกัน
การจัดเวลาของ Multiple-Processor
การทำงานในลักษณะที่มี cpu หลายตัวต่างก็มีระบบการจัดเวลาของตัวเอง จะต้องมีการออกแบบอย่างระมัดระวังในเรื่องของการที่ process แต่ละ process อาจจะต้องการใช้ข้อมูลในฐานข้อมูลในเวลาเดียวกัน รวมทั้งต้องระวังไม่ให้ cpu ว่างงานพร้อมกัน
ในระบบคอมพิวเตอร์บางระบบที่มีการพัฒนาเพื่อให้ได้ประสิทธิภาพสูงสุด ได้มีการใช้ cpu แยกต่างหากระหว่างงานภายในของระบบ และกับงานที่เป็นของผู้ใช้ซึ่งการทำงานแยกกันของ cpu แบบนี้ ทำให้การออกแบบระบบปฏิบัติการมีความซับซ้อนน้อยลงมาก เนื่องจากมี cpu เพียงตัวเดียวที่จะเข้าไปใช้ข้อมูลของระบบปฏิบัติการ เพราะว่า cpu ตัวอื่นๆ ไม่ว่าจะกี่ตัวก็ตาม จะเข้าถึงได้เฉพาะข้อมูลของผู้ใช้ภายนอกเท่านั้น
การทำงานในลักษณะที่มี cpu หลายตัวต่างก็มีระบบการจัดเวลาของตัวเอง จะต้องมีการออกแบบอย่างระมัดระวังในเรื่องของการที่ process แต่ละ process อาจจะต้องการใช้ข้อมูลในฐานข้อมูลในเวลาเดียวกัน รวมทั้งต้องระวังไม่ให้ cpu ว่างงานพร้อมกัน
ในระบบคอมพิวเตอร์บางระบบที่มีการพัฒนาเพื่อให้ได้ประสิทธิภาพสูงสุด ได้มีการใช้ cpu แยกต่างหากระหว่างงานภายในของระบบ และกับงานที่เป็นของผู้ใช้ซึ่งการทำงานแยกกันของ cpu แบบนี้ ทำให้การออกแบบระบบปฏิบัติการมีความซับซ้อนน้อยลงมาก เนื่องจากมี cpu เพียงตัวเดียวที่จะเข้าไปใช้ข้อมูลของระบบปฏิบัติการ เพราะว่า cpu ตัวอื่นๆ ไม่ว่าจะกี่ตัวก็ตาม จะเข้าถึงได้เฉพาะข้อมูลของผู้ใช้ภายนอกเท่านั้น
การจัดเวลาแบบ Real-Time
Hard real-time คือระบบที่สามารถทำงานใดงานหนึ่งให้เสร็จตามเวลาที่กำหนดได้ ซึ่งงานที่จะรับเข้ามาแต่ละงานนั้นจะมีความต้องการของเวลาที่ต้องการให้ เสร็จมาด้วย ดังนั้นตัวจัดเวลาจะต้องเป็นตัวตัดสินใจว่าจะรับงานเข้ามาทำหรือไม่
Soft real-time คือระบบที่แบ่งเวลาธรรมดาที่มีการให้ระดับความสำคัญแก่งานบางประเภท หรืองานที่ถูกเลือกไว้ล่วงหน้าว่าเป็นงานเร่งด่วน ซึ่งอาจทำให้เกิดปัญหาของการทำงานในระดับต่ำๆ อาจไม่ได้รับเวลาของ cpu เลย
Hard real-time คือระบบที่สามารถทำงานใดงานหนึ่งให้เสร็จตามเวลาที่กำหนดได้ ซึ่งงานที่จะรับเข้ามาแต่ละงานนั้นจะมีความต้องการของเวลาที่ต้องการให้ เสร็จมาด้วย ดังนั้นตัวจัดเวลาจะต้องเป็นตัวตัดสินใจว่าจะรับงานเข้ามาทำหรือไม่
Soft real-time คือระบบที่แบ่งเวลาธรรมดาที่มีการให้ระดับความสำคัญแก่งานบางประเภท หรืองานที่ถูกเลือกไว้ล่วงหน้าว่าเป็นงานเร่งด่วน ซึ่งอาจทำให้เกิดปัญหาของการทำงานในระดับต่ำๆ อาจไม่ได้รับเวลาของ cpu เลย
การคัดเลือก Algorithm สำหรับการจัดเวลา cpu
Deterministic Modeling
วิธีนี้เป็นวิธีการคัดเลือกที่เรียกว่า analytic evaluation ซึ่งจะนำเอา Algorithm ชนิดต่างๆ และลักษณะของงานมาสร้างสูตร เพื่อใช้ในการคำนวณหาตัวเลขของประสิทธิภาพที่สามารถวัดและเปรียบเทียบได้
วิธีนี้เป็นวิธีการคัดเลือกที่เรียกว่า analytic evaluation ซึ่งจะนำเอา Algorithm ชนิดต่างๆ และลักษณะของงานมาสร้างสูตร เพื่อใช้ในการคำนวณหาตัวเลขของประสิทธิภาพที่สามารถวัดและเปรียบเทียบได้
Queuing Models
ลักษณะของงานที่เข้ามาในระบบคอมพิวเตอร์นั้นมักจะมีลักษณะที่ไม่แน่นอน ในแต่ละวันที่มีการใช้ระบบคอมพิวเตอร์นั้น งานต่างๆที่เข้ามาอาจมีลักษณะที่ไม่ซ้ำกันเลย อย่างไรก็ตามมีสิ่งหนึ่งที่เราอาจจะสามารถทำนายหรือกำหนดได้ ก็คือ การกระจายของเวลาในการใช้ cpu และของการใช้ Input/Output ซึ่งเราสามารถที่จะกำหนดแบบคร่าวๆได้ ซึ่งก็เช่นเดียวกันกับเวลาของการมาถึงระบบของงานต่างๆที่เราก็สามารถกำหนด ไว้แบบการกระจายเช่นกัน
ลักษณะของงานที่เข้ามาในระบบคอมพิวเตอร์นั้นมักจะมีลักษณะที่ไม่แน่นอน ในแต่ละวันที่มีการใช้ระบบคอมพิวเตอร์นั้น งานต่างๆที่เข้ามาอาจมีลักษณะที่ไม่ซ้ำกันเลย อย่างไรก็ตามมีสิ่งหนึ่งที่เราอาจจะสามารถทำนายหรือกำหนดได้ ก็คือ การกระจายของเวลาในการใช้ cpu และของการใช้ Input/Output ซึ่งเราสามารถที่จะกำหนดแบบคร่าวๆได้ ซึ่งก็เช่นเดียวกันกับเวลาของการมาถึงระบบของงานต่างๆที่เราก็สามารถกำหนด ไว้แบบการกระจายเช่นกัน
Simulations
วิธีการจำลองระบบ การที่เราจะเลือกวิธีการ หรือเลือก Algorithm ที่ถูกต้องต่อระบบใดๆ อย่างเป็นจริงเป็นจังแล้ว เราสามารถใช้วิธีการของการจำลองระบบ ซึ่งวิธีการนี้จะสามารถคำนวณตัวเลขต่างๆ ออกมาได้อย่างเที่ยงตรงมากขึ้น การทำการจำลองระบบในที่นี้จะเกี่ยวข้องกับการใช้โปรแกรมคอมพิวเตอร์ ซึ่งจะต้องมีการเขียนโปรแกรมเพื่อใช้เป็นตัวแทนหรือหุ่นจำลองของระบบต่างๆ ในคอมพิวเตอร์ นอกจากนี้ยังต้องมีการเขียนโปรแกรมเพื่อเป็นตัวแทนของสิ่งแวดล้อมที่เกี่ยว ข้องกับระบบคอมพิวเตอร์นั้นๆอีกด้วย
วิธีการจำลองระบบ การที่เราจะเลือกวิธีการ หรือเลือก Algorithm ที่ถูกต้องต่อระบบใดๆ อย่างเป็นจริงเป็นจังแล้ว เราสามารถใช้วิธีการของการจำลองระบบ ซึ่งวิธีการนี้จะสามารถคำนวณตัวเลขต่างๆ ออกมาได้อย่างเที่ยงตรงมากขึ้น การทำการจำลองระบบในที่นี้จะเกี่ยวข้องกับการใช้โปรแกรมคอมพิวเตอร์ ซึ่งจะต้องมีการเขียนโปรแกรมเพื่อใช้เป็นตัวแทนหรือหุ่นจำลองของระบบต่างๆ ในคอมพิวเตอร์ นอกจากนี้ยังต้องมีการเขียนโปรแกรมเพื่อเป็นตัวแทนของสิ่งแวดล้อมที่เกี่ยว ข้องกับระบบคอมพิวเตอร์นั้นๆอีกด้วย
Implementation
วิธีการสร้างขึ้นมาจริงๆ อย่างไรก็ตามการสร้างแบบจำลอง ก็ยังคงเป็นการจำลองแบบที่ไม่มีทางจะเหมือนจริงได้ สิ่งที่ดีกว่าก็คือ การสร้าง Algorithm ชนิดต่างๆ เพื่อทดลองใช้กับโปรแกรมขัดการระบบจริงๆในระบบคอมพิวเตอร์ที่ใช้งานในสิ่ง แวดล้อมจริง
วิธีการสร้างขึ้นมาจริงๆ อย่างไรก็ตามการสร้างแบบจำลอง ก็ยังคงเป็นการจำลองแบบที่ไม่มีทางจะเหมือนจริงได้ สิ่งที่ดีกว่าก็คือ การสร้าง Algorithm ชนิดต่างๆ เพื่อทดลองใช้กับโปรแกรมขัดการระบบจริงๆในระบบคอมพิวเตอร์ที่ใช้งานในสิ่ง แวดล้อมจริง
วีดีโออเพิ่มเติม
Memory Management
Memory Management
การจัดหน่วยความจำ เป็นงานอย่างหนึ่งของโอเอส ถ้าหน่วยความจำมีปริมาณมาก ขีดความสามารถในการทำงานก็จะเพิ่มขึ้นด้วย โปรแกรมที่มีความสลับซับซ้อนและมีความสามารถมากก็ต้องการหน่วยความจำมาก จึงจำเป็นต้องใช้หน่วยความจำที่มีอยู่ให้เกิดประโยชน์สูงสุด หน้าที่ของโอเอสเช่น ดูว่าโปรแกรมใหม่จะถูกนำไปวางไว้ในหน่วยความจำตรงที่ใด? เมื่อใด? หน่วยความจำไหนควรถูกใช้ก่อนหรือหลัง? โปรแกรมไหนจะได้ใช้หน่วยความจำก่อน?
การจัดหน่วยความจำของโอเอส มีวิธีการจัดอยู่ 3 อย่างคือ
1. วิธีการเฟตช์ (fecth strategy)
2. วิธีการวาง (placement strategy)
3. วิธีการแทนที่ (replacement strategy)
การจัดหน่วยความจำของโอเอส มีวิธีการจัดอยู่ 3 อย่างคือ
1. วิธีการเฟตช์ (fecth strategy)
2. วิธีการวาง (placement strategy)
3. วิธีการแทนที่ (replacement strategy)
การจัดสรรหน่วยความจำ
ทุกโปรแกรมมีความจำเป็นต้องใช้หน่วยความจำในระบบ จะใช้มากหรือน้อยขึ้นอยู่กับการทำงานและขนาดของโปรแกรม โปรแกรมจะทำงานได้ก็ต่อเมื่อมันได้ถูกนำไปวาง (Load) ไว้ในหน่วยความจำแล้วเท่านั้น การที่โปรแกรมได้เข้าไปใช้หน่วยความจำของระบบเป็นเพราะการจัดสรรหน่วยความจำ(Memory allocation) ของโอเอส
- การจัดสรรหน่วยความจำแบบต่อเนื่อง คอมฯยุคก่อนครอบครองหน่วยความจำให้โปรแกรมต่าง ๆ จะเป็นแบบต่อเนื่องทั้งสิ้น คือ โปรแกรมหนึ่ง ๆ จะถูกโหลดลงหน่วยความจำได้ก็ต่อเมื่อมีหน่วยความจำขนาดใหญ่พอที่วางโค้ดของโปรแกรมนั้นลงไปทั้งโปรแกรม นั่นคือโปรแกรมจะอยู่ติดต่อกันในหน่วยความจำผืนเดียวกัน ถ้าหากไม่มีที่ว่างโปรแกรมก็จะทำงานไม่ได้จนกว่าจะมีพื้นที่เหลือพอ
- การจัดสรรหน่วยความจำแบบไม่ต่อเนื่อง การครอบครองหน่วยความจำแบบนี้ ตัวโปรแกรมจะถูกแบ่งออกเป็นกลุ่มหรือส่วนย่อย ๆ หลายส่วน เมื่อโปรแกรมถูกรัน แต่ละส่วนจะถูกโหลดลงสู่หน่วยความจำตรงไหนก็ได้ที่มีพื้นที่ว่างพอ แต่ละส่วนไม่จำเป็นต้องเรียงเป็นผืนแผ่นเดียว
ทุกโปรแกรมมีความจำเป็นต้องใช้หน่วยความจำในระบบ จะใช้มากหรือน้อยขึ้นอยู่กับการทำงานและขนาดของโปรแกรม โปรแกรมจะทำงานได้ก็ต่อเมื่อมันได้ถูกนำไปวาง (Load) ไว้ในหน่วยความจำแล้วเท่านั้น การที่โปรแกรมได้เข้าไปใช้หน่วยความจำของระบบเป็นเพราะการจัดสรรหน่วยความจำ(Memory allocation) ของโอเอส
- การจัดสรรหน่วยความจำแบบต่อเนื่อง คอมฯยุคก่อนครอบครองหน่วยความจำให้โปรแกรมต่าง ๆ จะเป็นแบบต่อเนื่องทั้งสิ้น คือ โปรแกรมหนึ่ง ๆ จะถูกโหลดลงหน่วยความจำได้ก็ต่อเมื่อมีหน่วยความจำขนาดใหญ่พอที่วางโค้ดของโปรแกรมนั้นลงไปทั้งโปรแกรม นั่นคือโปรแกรมจะอยู่ติดต่อกันในหน่วยความจำผืนเดียวกัน ถ้าหากไม่มีที่ว่างโปรแกรมก็จะทำงานไม่ได้จนกว่าจะมีพื้นที่เหลือพอ
- การจัดสรรหน่วยความจำแบบไม่ต่อเนื่อง การครอบครองหน่วยความจำแบบนี้ ตัวโปรแกรมจะถูกแบ่งออกเป็นกลุ่มหรือส่วนย่อย ๆ หลายส่วน เมื่อโปรแกรมถูกรัน แต่ละส่วนจะถูกโหลดลงสู่หน่วยความจำตรงไหนก็ได้ที่มีพื้นที่ว่างพอ แต่ละส่วนไม่จำเป็นต้องเรียงเป็นผืนแผ่นเดียว
ระบบโปรแกรมเดี่ยว (Single program)
คอมพิวเตอร์ระบบนี้จะสามารถรันโปรแกรมของผู้ใช้ได้เพียงครั้งละ 1 โปรแกรมเท่านั้น สามารถแบ่งส่วนของหน่วยความจำออกเป็น 2 ส่วนคือ
1. ส่วนของโอเอส คือหน่วยความจำที่ถูกครอบครองโดยโอเอส อย่างที่ทราบกันว่าโอเอสก็เป็นโปรแกรมเช่นกัน โอเอสจะครอบครองหน่วยความจำที่ริมด้านใดด้านหนึ่งหรือทั้ง 2 ด้าน เพื่อให้พื้นที่เหลือยาวต่อเนื่องเป็นผืนใหญ่ผืนเดียว
2. ส่วนของผู้ใช้ (User area) คือส่วนที่สามารถนำโปรแกรมของผู้ใช้ไปวางได้ ดังนั้นในส่วนนี้คือหน่วยความจำที่เหลือจากส่วนของโอเอส
คอมพิวเตอร์ระบบนี้จะสามารถรันโปรแกรมของผู้ใช้ได้เพียงครั้งละ 1 โปรแกรมเท่านั้น สามารถแบ่งส่วนของหน่วยความจำออกเป็น 2 ส่วนคือ
1. ส่วนของโอเอส คือหน่วยความจำที่ถูกครอบครองโดยโอเอส อย่างที่ทราบกันว่าโอเอสก็เป็นโปรแกรมเช่นกัน โอเอสจะครอบครองหน่วยความจำที่ริมด้านใดด้านหนึ่งหรือทั้ง 2 ด้าน เพื่อให้พื้นที่เหลือยาวต่อเนื่องเป็นผืนใหญ่ผืนเดียว
2. ส่วนของผู้ใช้ (User area) คือส่วนที่สามารถนำโปรแกรมของผู้ใช้ไปวางได้ ดังนั้นในส่วนนี้คือหน่วยความจำที่เหลือจากส่วนของโอเอส
ระบบหลายโปรแกรม
การทำงานของโปรแกรมส่วนมากจะเสียเวลาไปกับการทำงานด้าน Input-Output ซึ่งเป็นงานที่ไม่ต้องใช้Cpu ดังนั้นเวลาที่ใช้ซีพียูจริง ๆ นั้นมีน้อยมากในระบบโปรแกรมเดี่ยว ช่วงเวลาที่รอการทำงานของ routine ทางอินพุต-เอาต์พุต ซีพียูจะอยู่เฉย (idle) ไม่ได้ทำงาน ดังนั้นในช่วงเวลานี้เราอนุญาติให้นำโปรแกรมอื่นเข้ามาใช้ซีพียูได้มันจึงคุ้มค่า แนวคิดนี้จึงสร้างคอมพิวเตอร์ที่สามารถรันได้หลาย ๆ โปรแกรมในเวลาเดียวกัน เรียกระบบนี้ว่าระบบหลายโปรแกรม (Multiprogramming) เมื่อคอมฯสามารถรันได้หลายโปรแกรมพร้อม ๆ กันจึงจำเป็นต้องแบ่ง partition หน่วยความจำออกเป็นส่วน ๆ สำหรับแต่ละโปรแกรมเพื่อไม่ให้ปะปนกัน และเพื่อให้รันโปรแกรมได้หลายโปรแกรม
วิธีที่ทำให้คอมพิวเตอร์สามารถทำงานได้หลายโปรแกรมมีหลายแบบ อาจจัดประเภทได้ดังนี้
1. ระบบหลายโปรแกรมแบบแบ่งหน่วยความจำ (partition multiprogramming) ในหน่วยความจำจะมีโปรแกรมหลาย ๆ โปรแกรมอยู่พร้อมกันโดยแบ่งหน่วยความจำเป็นส่วน ๆ ไป ส่วนหนึ่ง ๆ จะมีโปรแกรมเพียงโปรแกรมเดียว โปรแกรมต่าง ๆ จะครอบครองหน่วยความจำแบบต่อเนื่องในส่วนที่มันครอบครองระบบอาจแบ่งแยกได้อีก 2 ประเภทคือ 1. การแบ่งหน่วยความจำขนาดคงที่ (Fixed partition multiprogramming) และการแบ่งหน่วยความจำขนาดไม่คงที่ (Variable partition multiprogramming)
2. ระบบหลายโปรแกรมแบบสลับหน่วยความจำ (Multiprogramming with storage swaping)
การทำงานของโปรแกรมส่วนมากจะเสียเวลาไปกับการทำงานด้าน Input-Output ซึ่งเป็นงานที่ไม่ต้องใช้Cpu ดังนั้นเวลาที่ใช้ซีพียูจริง ๆ นั้นมีน้อยมากในระบบโปรแกรมเดี่ยว ช่วงเวลาที่รอการทำงานของ routine ทางอินพุต-เอาต์พุต ซีพียูจะอยู่เฉย (idle) ไม่ได้ทำงาน ดังนั้นในช่วงเวลานี้เราอนุญาติให้นำโปรแกรมอื่นเข้ามาใช้ซีพียูได้มันจึงคุ้มค่า แนวคิดนี้จึงสร้างคอมพิวเตอร์ที่สามารถรันได้หลาย ๆ โปรแกรมในเวลาเดียวกัน เรียกระบบนี้ว่าระบบหลายโปรแกรม (Multiprogramming) เมื่อคอมฯสามารถรันได้หลายโปรแกรมพร้อม ๆ กันจึงจำเป็นต้องแบ่ง partition หน่วยความจำออกเป็นส่วน ๆ สำหรับแต่ละโปรแกรมเพื่อไม่ให้ปะปนกัน และเพื่อให้รันโปรแกรมได้หลายโปรแกรม
วิธีที่ทำให้คอมพิวเตอร์สามารถทำงานได้หลายโปรแกรมมีหลายแบบ อาจจัดประเภทได้ดังนี้
1. ระบบหลายโปรแกรมแบบแบ่งหน่วยความจำ (partition multiprogramming) ในหน่วยความจำจะมีโปรแกรมหลาย ๆ โปรแกรมอยู่พร้อมกันโดยแบ่งหน่วยความจำเป็นส่วน ๆ ไป ส่วนหนึ่ง ๆ จะมีโปรแกรมเพียงโปรแกรมเดียว โปรแกรมต่าง ๆ จะครอบครองหน่วยความจำแบบต่อเนื่องในส่วนที่มันครอบครองระบบอาจแบ่งแยกได้อีก 2 ประเภทคือ 1. การแบ่งหน่วยความจำขนาดคงที่ (Fixed partition multiprogramming) และการแบ่งหน่วยความจำขนาดไม่คงที่ (Variable partition multiprogramming)
2. ระบบหลายโปรแกรมแบบสลับหน่วยความจำ (Multiprogramming with storage swaping)
การแบ่งหน่วยความจำขนาดคงที่ วิธีนี้หน่วยความจำถูกแบ่งออกเป็นหลายส่วน แต่ละส่วนมีขนาดคงที่และมีโปรแกรมอยู่โปรแกรมเดียว ดังนั้นจำนวนโปรแกรมที่จะทำงานได้พร้อมกันจะเท่ากับจำนวนของส่วนย่อยของหน่วยความจำ
- การแปลงและโหลดด้วยค่าสัมบูรณ์ (Absolute translation and loading) งานหรือโปรแกรมของผู้ใช้ถูกแปลเป็นภาษาเครื่องด้วยค่าแอดเดรสสัมบูรณ์ ก็เพื่อให้รันได้ในส่วนที่กำหนดเท่านั้น ค่าแอดเดรสสัมบูรณ์คือค่าแอดเดรสจริง ๆ ในหน่วยความจำ เช่นคำสั่งกระโดดไปที่แอดเดรส 5000 ค่า 5000 นี้จะเป็นแอดเดรส 5000 ในหน่วยความจำจริง ๆ สำหรับการกำหนดว่าโปรแกรมจะไปอยู่ส่วนใดขึ้นอยู่กับขนาดของโปรแกรมและขนาดของส่วนย่อยให้หน่วยความจำด้วย เช่น ส่วนที่1 มีขนาด 5 kb ส่วนที่2 มีขนาด 10 kb ส่วนที่3 มีขนาด 50 kb โปรแกรมที่มีขนาดเล็กกว่า 50 kb แต่ใหญ่กว่า 10 kbจะถูกจัดลงในส่วนที่ 3 โปรแกรมที่มีขนาดเล็กกว่า 10 kb แต่ใหญ่กว่า 5 kb จะถูกจัดลงในส่วนที่ 2 และโปรแกรมที่มีขนาดเล็กกว่า 5 kb จะถูกจัดลงในส่วนที่ 1 ข้อเสียของวิธีนี้คือ ถ้าโปรแกรมที่พร้อมจะรันแล้ว แต่ละส่วนของหน่วยความจำที่มันจะถูกโหลดไปกำลังถูกใช้โดยโปรแกรมอื่น มันต้องรอจนกว่าโปรแกรมนั้นจะเสร็จ ถึงแม้ว่าส่วนอื่นยังว่างอยู่ก็ตาม
- การแปลงและโหลดด้วยค่าสัมพัทธ์ (Relocatable translation and loading) เพื่อแก้ปัญหาที่เกิดขึ้นของการแปลงและโหลดด้วยค่าสัมบูรณ์ โปรแกรมจะถูกแปลงเพื่อให้ได้แอดเดรสที่เป็นค่าสัมพัทธ์กับจุดเริ่มต้นของโปรแกรม จุดเริ่มต้นของโปรแกรมคือแอดเดรส 0 ถ้ามีคำสั่งกระโดดไปที่แอดเดรส 50 ค่า 50 นี้จะหมายถึงแอดเดรสที่ห่างจากจุดเริ่มต้น 50 ไบต์ สมมติว่าโปรแกรมถูกโหลดลงที่แอดเดรสเริ่มต้นที่ 5000 ในหน่วยความจำ กระโดดไปที่แอดเดรส 50 จะหมายถึงการกระโดดไปที่แอดเดรส 5050 ในหน่วยความจำ การแปลงและการโหลดด้วยค่าสัมพัทธ์ทำให้โปรแกรมถูกโหลดลงส่วนใดก็ได้ของหน่วยความจำ(แต่ต้องมีขนาดมากกว่าหรือเท่ากับขนาดของโปรแกรมนั้น)
การจัดแบ่งพื้นที่ในหน่วยความจำไม่ว่าจะใช้วิธีใดก็ตามย่อมต้องเกิดส่วนที่ไม่ถูกใช้งาน เรียกว่าเกิดการแตกกระจาย (Fragmentation) ในการจัดการแบบแบ่งหน่วยความจำขนาดคงที่ การแตกกระจายเกิดขึ้นได้ 2 กรณีคือกรณีส่วนที่ถูกแบ่งของหน่วยความจำไม่ได้ถูกใช้งานเรียกว่าเป็น การแตกกระจายภายนอก(External fragmentation) และกรณีที่โปรแกรมของผู้ใช้ ใช้เนื้อที่ในส่วนย่อยไม่เต็มเรียกว่าเป็นการแตกกระจายภายใน(Internal fragmentation)
- การแปลงและโหลดด้วยค่าสัมบูรณ์ (Absolute translation and loading) งานหรือโปรแกรมของผู้ใช้ถูกแปลเป็นภาษาเครื่องด้วยค่าแอดเดรสสัมบูรณ์ ก็เพื่อให้รันได้ในส่วนที่กำหนดเท่านั้น ค่าแอดเดรสสัมบูรณ์คือค่าแอดเดรสจริง ๆ ในหน่วยความจำ เช่นคำสั่งกระโดดไปที่แอดเดรส 5000 ค่า 5000 นี้จะเป็นแอดเดรส 5000 ในหน่วยความจำจริง ๆ สำหรับการกำหนดว่าโปรแกรมจะไปอยู่ส่วนใดขึ้นอยู่กับขนาดของโปรแกรมและขนาดของส่วนย่อยให้หน่วยความจำด้วย เช่น ส่วนที่1 มีขนาด 5 kb ส่วนที่2 มีขนาด 10 kb ส่วนที่3 มีขนาด 50 kb โปรแกรมที่มีขนาดเล็กกว่า 50 kb แต่ใหญ่กว่า 10 kbจะถูกจัดลงในส่วนที่ 3 โปรแกรมที่มีขนาดเล็กกว่า 10 kb แต่ใหญ่กว่า 5 kb จะถูกจัดลงในส่วนที่ 2 และโปรแกรมที่มีขนาดเล็กกว่า 5 kb จะถูกจัดลงในส่วนที่ 1 ข้อเสียของวิธีนี้คือ ถ้าโปรแกรมที่พร้อมจะรันแล้ว แต่ละส่วนของหน่วยความจำที่มันจะถูกโหลดไปกำลังถูกใช้โดยโปรแกรมอื่น มันต้องรอจนกว่าโปรแกรมนั้นจะเสร็จ ถึงแม้ว่าส่วนอื่นยังว่างอยู่ก็ตาม
- การแปลงและโหลดด้วยค่าสัมพัทธ์ (Relocatable translation and loading) เพื่อแก้ปัญหาที่เกิดขึ้นของการแปลงและโหลดด้วยค่าสัมบูรณ์ โปรแกรมจะถูกแปลงเพื่อให้ได้แอดเดรสที่เป็นค่าสัมพัทธ์กับจุดเริ่มต้นของโปรแกรม จุดเริ่มต้นของโปรแกรมคือแอดเดรส 0 ถ้ามีคำสั่งกระโดดไปที่แอดเดรส 50 ค่า 50 นี้จะหมายถึงแอดเดรสที่ห่างจากจุดเริ่มต้น 50 ไบต์ สมมติว่าโปรแกรมถูกโหลดลงที่แอดเดรสเริ่มต้นที่ 5000 ในหน่วยความจำ กระโดดไปที่แอดเดรส 50 จะหมายถึงการกระโดดไปที่แอดเดรส 5050 ในหน่วยความจำ การแปลงและการโหลดด้วยค่าสัมพัทธ์ทำให้โปรแกรมถูกโหลดลงส่วนใดก็ได้ของหน่วยความจำ(แต่ต้องมีขนาดมากกว่าหรือเท่ากับขนาดของโปรแกรมนั้น)
การจัดแบ่งพื้นที่ในหน่วยความจำไม่ว่าจะใช้วิธีใดก็ตามย่อมต้องเกิดส่วนที่ไม่ถูกใช้งาน เรียกว่าเกิดการแตกกระจาย (Fragmentation) ในการจัดการแบบแบ่งหน่วยความจำขนาดคงที่ การแตกกระจายเกิดขึ้นได้ 2 กรณีคือกรณีส่วนที่ถูกแบ่งของหน่วยความจำไม่ได้ถูกใช้งานเรียกว่าเป็น การแตกกระจายภายนอก(External fragmentation) และกรณีที่โปรแกรมของผู้ใช้ ใช้เนื้อที่ในส่วนย่อยไม่เต็มเรียกว่าเป็นการแตกกระจายภายใน(Internal fragmentation)
การแบ่งหน่วยความจำไม่คงที่
ผู้สร้างโอเอสได้ตระหนักถึงข้อเสียของการแบ่งหน่วยความจำขนาดคงที่ จึงคิดว่าควรปรับปรุงการแบ่งหน่วยความจำให้ดีขึ้น จึงเปลี่ยนวิธีแบ่งหน่วยความจำใหม่คือ โอเอสจะยอมให้โปรแกรมครอบครองหน่วยความจำมากเท่าที่โปรแกรมต้องการ ไม่มีการจำกัดขอบเขตของส่วนย่อย ๆ ที่แน่นอนอีกต่อไป วิธีการนี้จึงเรียกว่าการแบ่งหน่วยความจำขนาดไม่คงที่
ระบบหลายโปรแกรมประเภทแบ่งหน่วยความจำขนาดไม่คงที่ยังคงเป็นการจัดสรรหน่วยความจำแบบต่อเนื่อง เราสามารถรันโปรแกรมขนาดใหญ่เท่าใดก็ได้ ถ้าไม่ใหญ่เกินกว่าขนาดของหน่วยความจำในส่วนของผู้ใช้ ถ้าโปรแกรมต่าง ๆ มีขนาดเล็กคอมพิวเตอร์ก็สามารถรันได้หลายงานมากขึ้นแต่ถ้าโปรแกรมมีขนาดใหญ่คอมพิวเตอร์ก็จะรันโปรแกรมได้จำนวนน้อยลง ถึงแม้ว่าการแบ่งหน่วยความจำชนิดนี้จะวางโปรแกรมให้ติดกันเพื่อไม่ให้เกิดพื้นที่ว่าง การสูญเสียเนื้อที่ในหน่วยความจำเนื่องจากไม่ได้ถูกใช้งานก็ยังเกิดขึ้นได้ กรณีแรกเกิดจากพื้นที่เหลือในส่วนสุดท้ายอาจเหลือเพียงเล็กน้อยไม่เพียงพอสำหรับโปรแกรมใด ๆ อีกกรณีหนึ่งคือ เมื่อโปรแกรมใดเสร็จสิ้น โปรแกรมออกจากระบบต้องคืนพื้นที่หน่วยความจำที่มันครอบครองอยู่ให้กับระบบ ดังนั้นจึงเกิดเป็นเนื้อที่ว่างขึ้น เนื้อที่ว่างเหล่านี้เรียกว่าช่องโหว่หรือโฮล (Hole)
ผู้สร้างโอเอสได้ตระหนักถึงข้อเสียของการแบ่งหน่วยความจำขนาดคงที่ จึงคิดว่าควรปรับปรุงการแบ่งหน่วยความจำให้ดีขึ้น จึงเปลี่ยนวิธีแบ่งหน่วยความจำใหม่คือ โอเอสจะยอมให้โปรแกรมครอบครองหน่วยความจำมากเท่าที่โปรแกรมต้องการ ไม่มีการจำกัดขอบเขตของส่วนย่อย ๆ ที่แน่นอนอีกต่อไป วิธีการนี้จึงเรียกว่าการแบ่งหน่วยความจำขนาดไม่คงที่
ระบบหลายโปรแกรมประเภทแบ่งหน่วยความจำขนาดไม่คงที่ยังคงเป็นการจัดสรรหน่วยความจำแบบต่อเนื่อง เราสามารถรันโปรแกรมขนาดใหญ่เท่าใดก็ได้ ถ้าไม่ใหญ่เกินกว่าขนาดของหน่วยความจำในส่วนของผู้ใช้ ถ้าโปรแกรมต่าง ๆ มีขนาดเล็กคอมพิวเตอร์ก็สามารถรันได้หลายงานมากขึ้นแต่ถ้าโปรแกรมมีขนาดใหญ่คอมพิวเตอร์ก็จะรันโปรแกรมได้จำนวนน้อยลง ถึงแม้ว่าการแบ่งหน่วยความจำชนิดนี้จะวางโปรแกรมให้ติดกันเพื่อไม่ให้เกิดพื้นที่ว่าง การสูญเสียเนื้อที่ในหน่วยความจำเนื่องจากไม่ได้ถูกใช้งานก็ยังเกิดขึ้นได้ กรณีแรกเกิดจากพื้นที่เหลือในส่วนสุดท้ายอาจเหลือเพียงเล็กน้อยไม่เพียงพอสำหรับโปรแกรมใด ๆ อีกกรณีหนึ่งคือ เมื่อโปรแกรมใดเสร็จสิ้น โปรแกรมออกจากระบบต้องคืนพื้นที่หน่วยความจำที่มันครอบครองอยู่ให้กับระบบ ดังนั้นจึงเกิดเป็นเนื้อที่ว่างขึ้น เนื้อที่ว่างเหล่านี้เรียกว่าช่องโหว่หรือโฮล (Hole)
ภาวะติดตาย หรือDeadlock
คือ สภาวะที่โปรเซสบางตัวหรือทุกตัวไม่สามารถทำงานต่อไปได้ ส่วนใหญ่เกิดจากการใช้ทรัพยากรร่วมกัน แล้วมีการแย่งทรัพยากรกัน เช่น ทรัพยากรในระบบ
-เวลาของ CPU (CPU time)
-Address Space
-File
-I/O
-เวลาของ CPU (CPU time)
-Address Space
-File
-I/O
ตัวอย่าง
- วงกลม แทนโปรเซส
- สี่เหลี่ยม แทนทรัพยากรแต่ละประเภท และจะใช้ จุดแทนทรัพยากรแต่ละ Instance
- ลูกศร แทนการใช้ทรัพยากร
- วงกลม แทนโปรเซส
- สี่เหลี่ยม แทนทรัพยากรแต่ละประเภท และจะใช้ จุดแทนทรัพยากรแต่ละ Instance
- ลูกศร แทนการใช้ทรัพยากร
การหลีกเหลี่ยงการติดตาย
เป็นการป้องกันวงจรอับไม่ให้เกิดขึ้น โดยการสร้างข้อกำหนดในการร้องขอทรัพยากร เพื่อให้แน่ใจว่าเงื่อนไขเพียงข้อใดขึ้นหนึ่งจะไม่เกิดขี้นอย่างแน่นอน
เป็นการป้องกันวงจรอับไม่ให้เกิดขึ้น โดยการสร้างข้อกำหนดในการร้องขอทรัพยากร เพื่อให้แน่ใจว่าเงื่อนไขเพียงข้อใดขึ้นหนึ่งจะไม่เกิดขี้นอย่างแน่นอน
การตรวจสอบ
คือการประเมินเหตุการล่วงหน้าว่าจะเกิด dead lock ขึ้นหรือไม่ ถ้าไม่เกิด OS จะยอมให้ Resource แก่ process นั้น ถ้าในระบบปฏิบัติการไม่มีการป้องกันหรือหลีกเลี่ยงวงจรอับแล้ว ในที่สุดระบบก็อาจจะตกอยู่ในสถานะวงจรอับได้
คือการประเมินเหตุการล่วงหน้าว่าจะเกิด dead lock ขึ้นหรือไม่ ถ้าไม่เกิด OS จะยอมให้ Resource แก่ process นั้น ถ้าในระบบปฏิบัติการไม่มีการป้องกันหรือหลีกเลี่ยงวงจรอับแล้ว ในที่สุดระบบก็อาจจะตกอยู่ในสถานะวงจรอับได้
แนะนำตัว
ชื่อ นายวิชัย เจริญท้าว
เกิดเมื่อ 9 ธันวาคม 1994
เบอร์โทรศัพท์ 092 161 4609
วันเกิด |
9 ธันวาคม 1994
|
---|---|
เพศ |
ชาย
|
สถานะความสัมพันธ์ |
โสด
จบจาก โรงเรียนโนนกุงวิทยาคม
|
สมัครสมาชิก:
บทความ (Atom)