Important Announcement
PubHTML5 Scheduled Server Maintenance on (GMT) Sunday, June 26th, 2:00 am - 8:00 am.
PubHTML5 site will be inoperative during the times indicated!

Home Explore ระบบปฎิบัติการ ปวส

ระบบปฎิบัติการ ปวส

Published by พุฒิพงศ์ ลือเมือง, 2018-10-03 05:58:50

Description: บทที่ 6 การจัดการหน่วยความจำ2

Search

Read the Text Version

บทท่ี 6 การจัดการหน่วยความจา (Memory Management)

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

หนว่ ยความจา (Memory)หน่วยความจาภายใน (Internal Memory)• หน่วยความจาภายใน หรือ หน่วยความจาแคช (Cache Memory) ประกอบด้วยรีจีสเตอร์ความเร็วสูง โดยหน่วยความจาส่วนน้ีถูกใช้สาหรับเก็บ คาสั่ง และข้อมูลทต่ี ้องการทางานดว้ ยความเรว็ สูงมาก และเป็นหน่วยความจาท่ี ซพี ยี ูสามารถเข้าถึงไดโ้ ดยตรงและรวดเรว็

หน่วยความจา (Memory)หน่วยความจาหลกั (Main Memory)• หน่วยความจาหลัก เป็นหน่วยความจาความเร็วสูง ใช้สาหรับเก็บคาสั่ง และ ข้อมูลระหว่างการทางาน โดยเปน็ หนว่ ยความจาท่ซี พี ียสู ามารถเข้าถึงได้โดยตรง และรวดเรว็หนว่ ยความจาสารอง (Secondary Memory)• หน่วยความจาสารอง เป็นหน่วยความจาท่ีมีความเร็วน้อยกว่าหน่วยความจา สองประเภทแรก ใช้สาหรับเก็บข้อมูลท่ีมีขนาดใหญ่ และเป็นข้อมูลที่ยังไม่ ตอ้ งการนามาประมวลผล

การจดั การหนว่ ยความจาหลกั• หนา้ ทีข่ องระบบปฏิบัติการในการจัดการกับหนว่ ยความจาหลกั มี 4 ประการ o ควบคุมดแู ลสถานะของแตล่ ะตาแหนง่ ของหน่วยความจาหลกั o ตัดสินว่าควรจัดสรรหน่วยความจาหลักขนาดเท่าไร ให้กับงานใด ณ ตาแหนง่ ใดของหน่วยความจาหลกั o จัดสรรหน่วยความจาหลกั ใหง้ านท่ไี ด้เลอื กแลว้ o ปลดปล่อยหน่วยความจาหลักใหว้ า่ ง เมือ่ ทางานเสร็จแลว้

การจดั การหนว่ ยความจาหลัก• ในการทางานแต่ละคาส่ังของโปรแกรมตามรอบคาสั่งเคร่อื ง ซีพียทู าหนา้ ที่ดงั น้ี o อ่านคาสัง่ (Fetch) จากหนว่ ยความจาหลัก o ถอดรหสั คาสัง่ (Decoding) o แปลความหมาย (Compile) o สร้างสัญญาณควบคุม (Control signal) เพ่ือส่ังให้ซีพียูทาการ ประมวลผล (Execute)• หลังจากประมวลผลเสร็จแล้ว อาจมีผลลัพธ์ท่ีจาเป็นต้องเก็บไว้ในหน่วยความจาหลัก โดยท่ีในการเข้าถึงหน่วยความจาหลัก จาเป็นต้องมีการระบุตาแหน่งของหน่วยความจาหลกั ด้วย

การกาหนดตาแหน่ง• การกาหนดตาแหน่ง (Address Binding) การเขียนโปรแกรมระยะแรก มีการกาหนดตาแหน่งของหน่วยความจา หลักด้วยเลขที่อยู่สัมบูรณ์ คือ มีการระบุตาแหน่งของหน่วยความจาที่ โปรแกรมจะต้องถกู โหลดเพ่ือนาไปใชง้ าน เชน่ ตาแหนง่ ที่ 100 ซง่ึ จะเกดิ ปญั หาในกรณีท่ีตาแหน่งที่ระบไุ ว้ไมว่ า่ ง จะทาให้ไมส่ ามารถใชง้ าน โปรแกรมได้ ทาให้ขาดความยืดหย่นุ ในการใช้งาน และขาดคุณสมบตั ิการย้ายท่ี อยู่ (relocate)

การกาหนดตาแหน่ง จึงได้มีการพัฒนาการเขียนโปรแกรมให้มีการใช้เลขท่ีอยู่เชิงสัญลักษณ์ด้วยการกาหนดตัวระบุ เช่น ชื่อตัวแปร หรือซับรูทีน และมีการอ้างถึงหน่วยความจาหลักด้วยเลขท่ีอยู่สัมพัทธ์ ซงึ่ ชว่ ยแก้ปัญหาของการเขียนโปรแกรมได้• โปรแกรมสามารถโหลดลงตาแหนง่ ใดกไ็ ด้ในหน่วยความจาหลัก• เป็นหน้าท่ีของโหลดเดอร์ ซ่ึงเป็นซอฟต์แวร์ระบบที่จะนาโปรแกรมท่ีต้องการเขา้ มาบรรจบุ นหน่วยความจาหลกั• โดยโหลดเดอร์ต้องติดต่อกับระบบปฏิบัติการ เพ่ือให้ระบบปฏิบัติการหาพ้ืนท่ีวา่ งของหนว่ ยความจาหลัก ท่ีมขี นาดมากพอที่จะบรรจุโปรแกรมได้

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

การกาหนดตาแหนง่• การกาหนดตาแหน่ง สามารถทาได้ในช่วงเวลาต่างๆ ของการทางานของโปรแกรม ดังนี้ o เวลาแปลโปรแกรม (Compile Time) o เวลาโหลดโปรแกรม (Load Time) o เวลากระทาการ (Execution Time)

การกาหนดตาแหนง่• เวลาแปลโปรแกรม (Compile Time) เม่ือนาโปรแกรมต้นฉบับท่ีมีการระบุตาแหน่งของหน่วยความจาหลักด้วยเลขที่อยู่สัมบูรณ์มาผ่านการแปลด้วยคอมไพเลอร์ จะได้ออบเจ็กโปรแกรมที่มีการอ้างถงึ ตาแหน่งของหน่วยความจาหลักด้วยเลขทอี่ ยู่สมั บรู ณ์ เม่ือต้องการให้โปรแกรมส่วนน้ีทางาน ระบบสามารถเรียกโหลดเดอร์สมั บูรณ์ (absolute loader) เพ่อื ทาหนา้ ท่ี โหลดโปรแกรมขึ้นมาทางานเพียงอย่างเดยี ว

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

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

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

วธิ กี ารซอ้ นทบั

วธิ ีการสบั เปลยี่ น (Swapping)• เนื่องจากหน่วยความจาหลักมีขนาดจากัด บางครั้งระบบมีพ้ืนท่ีหน่วยความจาหลักไม่เพียงพอกับการใช้งาน ทาให้ระบบจาเป็นต้องนาบางโปรเซสออกจากหน่วยความจาหลักก่อน เพ่ือให้หน่วยความจาหลักมีพ้ืนท่ีว่างมากเพียงพอท่ีจะบรรจโุ ปรเซสอืน่ เปน็ การสับเปล่ียน (Swap) ใหโ้ ปรเซสอน่ื ทางาน ระบบที่มีการจดั ลาดับการทางานของโปรเซส

วธิ กี ารสบั เปลย่ี น (Swapping)• ตัวอย่างเช่น ระบบที่มีการจัดลาดับการทางานของโปรเซส โดยใช้ลาดับความสาคัญ ที่กาหนดให้โปรเซสที่มีลาดับความสาคัญสูง สามารถทางานก่อนโปรเซสท่มี ลี าดับความสาคญั ต่ากว่า• ดังนั้นถ้าโปรเซส P1 กาลังทางาน (อยู่ในหน่วยความจาหลัก) แต่มีโปรเซสP2 ซ่ึงมีลาดับความสาคัญสูงกว่าต้องการทางาน ระบบปฏิบัติการต้องนาโปรเซสP1 ออกจากหน่วยความจาหลักไปเก็บไว้ในหน่วยความจาสารอง เรียกว่าสับเปลย่ี นออก (swap out)• และนาเอาโปรเซส P2 จากหน่วยความจาสารองเข้ามาบรรจุที่หน่วยความจาหลกั เรยี กว่า สับเปลี่ยนเข้า (swap in)

หน่วยความจาหลกั จริง (Real Memory)• หน่วยความจาหลักจริง หมายถึง หน่วยความจาหลักที่มีอยู่จริงในระบบคอมพิวเตอร์ และด้วยราคาท่ีสูงทาให้ระบบคอมพิวเตอร์ต้องบรรจุหน่วยความจาหลักเขา้ กับระบบในขนาดทจ่ี ากัด (เพยี งพอแก่การใชง้ านเท่าน้ัน)• ดังนั้นระบบจาเป็นต้องมีการจัดสรรการใช้หน่วยความจาหลักอย่างมีประสทิ ธิภาพ โดยวธิ กี ารจัดการหนว่ ยความจาหลกั จริงมี 5 วิธี คือ o การจัดการหน่วยความจาหลกั สาหรบั งานเดยี ว o การจดั การหนว่ ยความจาหลกั แบบพารต์ ชิ นั่ o การจัดการหน่วยความจาหลกั แบบพาร์ตชิ ่ันยา้ ยทอี่ ยู่ o การจัดการหน่วยความจาหลกั แบบเพจ o การจัดการหน่วยความจาหลกั แบบเซกเมนต์

หนว่ ยความจาหลกั จรงิ (Real Memory)• การจัดการหน่วยความจาหลักสาหรับงานเดียว, แบบพาร์ติช่ัน และแบบพาร์ตชิ ั่นย้ายท่ีอยู่ เปน็ การจดั การโดยมขี อ้ จากัด 2 ประการคือ o ทงั้ โปรแกรมหรือทั้งโปรเซสตอ้ งถูกบรรจใุ นหนว่ ยความจาหลกั o ต้องถูกบรรจุในหน่วยความจาในบรเิ วณท่ตี ดิ กนั เท่านั้น• การจัดการหน่วยความจาหลักแบบเพจ และแบบเซกเมนต์ เป็นการจัดการท่ีพยายามแกป้ ัญหาท่หี นว่ ยความจาต้องถกู บรรจุในบรเิ วณทีต่ ดิ กนั เปน็ ผลให้ o ทัง้ โปรแกรมหรอื ท้งั โปรเซสตอ้ งถกู บรรจใุ นหนว่ ยความจาหลกั o ไม่จาเปน็ ตอ้ งถูกบรรจใุ นหน่วยความจาในบรเิ วณติดกัน

การจดั การหนว่ ยความจาหลกั สาหรบั งานเดยี ว• คอมพิวเตอร์ในยุคแรก จะสามารถทางานได้เพียงครั้งละ 1 งาน การจัดการหน่วยความจาหลกั สามารถทาไดง้ า่ ย• โดยหนว่ ยความจาหลักจะถูกแบ่งออกเป็น 3 ส่วน คอื o สว่ นที่หน่งึ (0-a) สาหรบั บรรจุโปรแกรมระบบปฏบิ ตั กิ าร o ส่วนทสี่ อง (a-b) สาหรบั บรรจุงานท่กี าลงั กระทาการ (execute) o สว่ นท่สี าม (b-c) สว่ นท่เี หลือจากการใชง้ าน• จะเห็นว่าส่วนที่สามเป็นส่วนท่ีระบบต้องปล่อยทิ้งให้ว่าง ไม่ถูกใช้งาน หากโปรแกรมที่บรรจุในหน่วยความจาหลักมีขนาดเล็ก จะทาให้มีพื้นที่ของหนว่ ยความจาหลักถูกท้งิ ไปจานวนมาก (เหลือวา่ งจานวนมาก)

การจดั การหนว่ ยความจาหลกั สาหรับงานเดยี ว• แต่ถ้าโปรแกรมมีขนาดใหญ่เกินไป ระบบจะไม่สามารถบรรจุโปรแกรมน้ันในหน่วยความจาหลักได้ ดังนั้นการจัดการหน่วยความจาหลักวิธีน้ี โปรแกรมต้องมีขนาดน้อยกว่าหรือเท่ากับขนาดของหน่วยความจาหลัก (ขนาดของโปรแกรมถูกจากัดด้วยขนาดของหนว่ ยความจาหลกั )

การจดั การหนว่ ยความจาหลักสาหรบั งานเดยี ว• การจัดการหน่วยความจาหลักนี้ไม่จาเป็นต้องใช้ฮาร์ดแวร์พิเศษ แต่ต้องมีการป้องกันไม่ให้ผู้ใช้เข้าไปใช้พื้นที่หนว่ ยความจาหลักบรเิ วณทเี่ กบ็ ระบบปฏิบตั กิ าร• สามารถทาได้โดยการใช้รีจีสเตอร์แบบแบ่งเขต (Bounds register) บรรจุตาแหน่งของหนว่ ยความจาหลักทผ่ี ใู้ ช้ไม่สามารถเขา้ ถงึ ได้

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

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

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

การจดั การหน่วยความจาหลักแบบพารต์ ชิ น่ั• โดยวิธีพื้นฐาน คือ การแบ่งหน่วยความจาหลักออกเป็นส่วนย่อยๆ หรือพาร์ติชั่น (partition) แตล่ ะพารต์ ิชั่นถกู ใชส้ าหรับงาน 1 งาน ดังนั้นจานวนงานที่สามารถทางานได้พรอ้ มกันจะถกู กาหนดดว้ ยจานวนพาร์ติชนั่• การแบ่งหนว่ ยความจาออกเป็นพาร์ตชิ ัน่ ทาได้ 2 วิธี คือ o การกาหนดขนาดพาร์ตชิ ่นั คงที่ (Static Partition) o การกาหนดขนาดของพาร์ติช่ันให้เปล่ียนแปลงได้ (Dynamic Partition)

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

การกาหนดขนาดพารต์ ชิ น่ั คงท่ีพื้นท่ีวา่ ง ขนาด ตาแหนง่ สถานะ หน่วยความจาหลกั 312 1 8K 312K ไม่วา่ ง พารต์ ชิ น่ั ที่ 1 320 2 32K 320K ไมว่ า่ ง พาร์ตชิ น่ั ท่ี 2 352 3 32K 352K ว่าง พาร์ติชน่ั ที่ 3 384 4 120K 384K ว่าง พารต์ ชิ น่ั ท่ี 4 504 5 520K 504K ไมว่ ่าง พาร์ตชิ น่ั ที่ 5โปรเซส ขนาด พาร์ตชิ น่ั สว่ นทสี่ ญู เสยี หน่วยความจาหลักท่ถี กู ใช้ 1 1K 1 7K หน่วยความจาหลกั ท่วี า่ ง 2 9K 2 23K 3 9K 3 23K 4 83K 4 87K 5 121K 5 399K

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

การกาหนดขนาดพาร์ตชิ น่ั ใหเ้ ปลยี่ นแปลงได้ว่าง (32K)ว่าง (384K)

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

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

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

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

การจดั การหน่วยความจาหลกั แบบเพจ• วิธีหนึ่งที่ช่วยลดการแตกกระจาย คือ การจัดการหน่วยความจาหลักด้วยการแบ่งเพจ ซึ่งแบ่งพื้นท่ีของหน่วยความจาหลักเป็นส่วนๆ มีขนาดเท่ากัน เรียกว่าบล็อก หรือเฟรม ในขณะเดียวกันจะแบ่งโปรเซสออกเป็นเพจ (page) โดยให้ขนาดของเพจมคี วามสมั พนั ธ์กับขนาดของเฟรม• การบรรจุแต่ละโปรเซสลงบนหน่วยความจาหลัก จะใช้ตารางเพจ (PageTable: PT) เข้ามาช่วยในการทางาน ซ่ึงเป็นตารางสาหรับเก็บข้อมูลท่ีระบุว่าเพจใดของโปรเซสจะถกู นาไปบรรจลุ งบนเฟรมใดของหน่วยความจาหลัก• วิธีนี้เพจต่างๆ ของแต่ละโปรเซสจะดูเสมือนว่าอยู่ติดต่อกัน แต่ในความเป็นจริงแต่ละเพจของโปรเซสไมจ่ าเป็นต้องถูกบรรจุในหน่วยความจาหลักบรเิ วณตดิ กนั

การจดั การหนว่ ยความจาหลักแบบเพจ• เม่ือต้องการใช้งานโปรเซสใดโปรเซสหนึ่ง ระบบจะต้องหาเฟรมว่างเพื่อใช้ในการบรรจุโปรเซส โดยไม่จากัดวา่ แต่ละเฟรมน้ันจะต้องอยตู่ ิดกัน 0 เพจที่ 1 เพจที่ 1 1 เพจที่ 2 เพจที่ 3 2 เพจที่ 4หนว่ ยความจาตรรกะ เพจที่ เฟรมที่ เพจท่ี 3 3 11 เพจท่ี 2 4 24 5 33 47 6 ตารางเพจ เพจที่ 4 7 หนว่ ยความจากายภาพ


Like this book? You can publish your book online for free in a few minutes!
Create your own flipbook