More Related Content
More from Nu Mai Praphatson
More from Nu Mai Praphatson (12)
B6
- 2. หน่วยความจาหลัก (MainMemory)
หน่วยความจาหลัก เป็นพื้นที่ที่ใช้เก็บข้อมูลในการ
ประมวลผล โดยหน่วยความจาหลักจะมี ลักษณะการจัดเก็บ
ข้อมูลเป็นไบต์ (Bite) หรือจัดเก็บเป็นตัวอักขระ ซึ่งข้อมูลแต่ละ
ไบต์จะมีหมายเลขตาแหน่ง (Address) ระบุไว้ หน่วยความจาที่ดี
ต้องมีความเร็วสูง และมีเสถียรภาพ ปัจจุบันนี้การใช้ งาน
คอมพิวเตอร์ยังมีข้อจากัดในเรื่องขนาดของหน่วยความจาหลัก
ดังนั้นเพื่อประสิทธิภาพในการทางาน จึงจาเป็นต้องมีการบริหาร
จัดการหน่วยความจาที่ดี
- 6. การย้ายตาแหน่ง (Relocation)
การทางานหลาย ๆ โปรแกรมพร้อมกันจะต้องมีการใช้ทรัพยากร
ต่างๆ ร่วมกันด้วย และเมื่อมีการนาโปรเซสเข้าไปยังหน่วยความจาหลายๆ
งานพร้อมกันจะต้องมีการจัดการที่ดี เพราะจะมีการนางานเข้าและออก
จากหน่วยความจาบ่อยครั้ง ซึ่งการน่าโปรเซสเข้านั้นไม่สามารถคาดเดาได้
ว่า โปรเซสนั้นจะใช้หน่วยความจาไปเท่าใดเพราะบางครั้งหลังจากที่นา
โปรเซสเข้าไปในหน่วยความจาแล้ว อาจมีโปรเซสของโปรแกรมเดิมเข้ามา
เพิ่มเติมอีก
ดังนั้นระบบจึงต้องมีการจัดการว่าโปรเซสใดเข้ามาที่ตาแหน่งใด
และโปรเซสใดออกไปแต่ยังทางานไม่เสร็จ และโปรเซสนั้นทางานได้แค่ไหน
แล้ว
- 8. 2. Load Time
ในขณะที่แปลโปรแกรมไม่ทราบว่าโปรแกรมจะทางานที่ตาแหน่ง
ใดในหน่วยความจาหลัก ตัวแปลภาษาจะต้องกาหนดตาแหน่งเป็นแบบย้าย
ได้ (Relocatable Code) และตาแหน่งจริงจะถูก กาหนดขึ้นเมื่อนา
โปรแกรมลงสู่หน่วยความจา และถ้ามีการเปลี่ยนตาแหน่งเริ่มตัน ทาไดโดย
การนา โปรแกรมนั้นลงสู่หน่วยความจาใหม่
3. Execution Time
กรณีที่โปรเซสสามารถย้ายตาแหน่งได้ในขณะทางาน ดังนั้นจึงไม่
สามารถกาหนดตาแหน่ง ค่าจริงได้ การกาหนดตาแหน่งต้องทาในขณะ
ทางานเท่านั้น ซึ่งการกาหนดตาแหน่งวิธีนี้จะต้องมีอุปกรณ์พิเศษช่วยในการ
ทางาน
- 9. การใช้พื้นที่ร่วมกัน (Sharing)
ถึงแม้จะมีการป้ องกันพื้นที่ แต่ยังมีงานบางอย่างที่
อาจจะอนุญาตให้โปรเซสอื่นเข้ามาเรียกใช้ข้อมูลได้เพราะใน
บางครั้งอาจมีโปรเซสหลายโปรเซสที่มีการทางาน หรือมีหน้าที่
คล้ายๆ กัน ดังนั้นการที่จะใช้โปรเซสที่เหมือนทันมาเพียงโปรเซส
เดียว แล้วให้โปรเซสที่จะเรียกใช้มาเรียกใช้จากโปรเซสนี้ร่วมทัน
ทาให้ประหยัดเนื้อที่หน่วยความจาไปได้ แต่การที่โปรเซสใช้พื้นที่
ร่วมทัน ไม่ควรมีการเข้าไปแก้โขโปรเซสเพราะจะส่งผลให้โปรเซส
อื่นทางานผิดพลาดได้
- 11. ข้อดีของการจัดการแบ่งโปรแกรมย่อย คือ
1. หากโปรแกรมย่อยใดไม่ถูกใช้งานจะไม่ถูกนาไปเก็บใน
หน่วยความจา ทาให้ประหยัดเนื้อที่ และใช้หน่วยความจาน้อยกว่าขนาด
โปรแกรมทั้งหมด
2. แต่ละโปรแกรมย่อยสามารถเรียกใช้ และคอมไพล์แยกกันได้
3. แต่ละโปรแกรมย่อย จะมีการป้ องกันที่แตกต่างกันได้ เช่น การ
อ่าน เขียน ร่วมกัน
4. โปรแกรมหลักสามารถเรียกใช้โปรแกรมย่อยเหล่านี้ร่วมกันได้
เครื่องมือที่ใช้ในการจัดการเกี่ยวกับการทางานของโปรแกรมย่อยนี้คือ การ
แบ่งเป็นเซ็กเมนต์ (Segmentation) ซึ่งเป็นเทคนิคหนึ่งของการจัดการ
หน่วยความจา
- 15. เป็นการแบ่งหน่วยความจาออกเป็นส่วน ๆ ที่มีขนาดคงที่
เรียกว่า พาร์ติชั่น (Partition) เมื่อมีการน่าโปรเซสเข้าไปเก็บใน
หน่วยความจา ระบบปฏิบัติการจะเลือกส่วนที่มีขนาดพอดีกับ
โปรเซสนั้นมากที่สุด แต่วิธีนี้จะทาให้เกิดพื้นที่ว่างในแต่ละส่วน
บางครั้งพาร์ติชันขนาดใหญ่อาจจะถูกนามาใช้กับงานขนาดเล็กๆ
ทาให้สูญเสียเนื้อที่ในหน่วยความจา และบางงานมีขนาดเล็กมาก
ๆ จะไม่ยอมให้นาไปเก็บในหน่วยความจาที่มีขนาดใหญ่ โดยจะมี
การมองข้ามไปทาให้งานนั้นอาจไม่มีโอกาสทางานเลย
- 21. บิตที่ใช้แทนค่าแต่ละยูนิตในหน่วยความจานี้เรียกว่าบิตแมพ มีค่าที่
เป็นไปได้ คือ 0 และ 1 ถ้ายูนิตใดมีข้อมูลอยู่ บิตของยูนิตนั้นจะมีค่า
เป็น 1 ถ้ายูนิตนั้นว่างบิตของยูนิตนั้นจะมีค่าเป็น 0 การจัดการแบบ
นี้จะตรวจสอบง่าย เพราะมีจานวนบิตคงที่ แต่จะมีข้อเสียคือ
1. เกิดการสูญเสียพื้นที่ภายในยูนิตสุดท้ายของโปรเซสได้
2. เกิดการสูญเสียพื้นที่ภายนอก สามารถดูได้จากค่า 0 ที่
กระจายอยู่ในตารางบิตแมพ
3. การนาโปรเซสขนาด n ยูนิตเข้าไปเก็บในหน่วยความจา
ระบบจะต้องทาการค้นหาบิตที่เป็น 0ติดต่อกัน n บิตให้ได้ก่อน ซึ่ง
ทาให้เสียเวลาในการค้นหา
- 23. การจัดการแบบลิงค์ลิสต์ (Memory ManagementwithLink
List)
การจัดการแบบลิงค์ลิสต์ ทาได้โดยใช้ลิงค์ลิสต์เก็บข้อมูล
ของพาริติชันในหน่วยความจาที่ว่าง หรือหน่วยความจาที่ถูกใช้
งาน จะมีการระบุการใช้พื้นที่หน่วยความจาว่า แต่ละโปรเซส
เริ่มต้นอยู่ที่ ตาแหน่งใด และมีความยาวของโปรเซสเท่าใด โดยมี
รูปแบบการจัดเก็บข้อมลในลิงค์ลิสต์ ดังนี้
เมื่อมีการนาโปรเซสเข้าไปเก็บในหน่วยความจา จะมีการ
เลือกว่าโปรเซสใดควรจะเข้าไปอยู่ใน พื้นที่ว่างส่วนใด
- 24. โดยมีวิธีในการตัดเลือก ดังนี้
* ในส่วนแรก หากเป็นพื้นที่วางจะแสดงด้วยตัวอักษร H (Hold)
ถ้าเป็นช่วงที่มีโปรเซสจะ ขึ้นต้นด้วย p (Process)
* ส่วนที่ 2 จะบอกแอดเดรสที่ส่วนนั้น (ที่ว่าง หรือโปรเซส) เริ่มต้น
*ส่วนที่ 3 เป็นความยาวของพื้นที่
*ส่วนที่ 4 เป็นส่วนที่ชี้ไปยังข้อมูลของพื้นที่ส่วนต่อไป
รูป แสดงการเก็บข้อมูลในลิงค์ลิสต์
- 27. 4. Worst Fit
ทาการค้นหาพื้นที่ว่างที่มีทั้งหมด แล้วเลือกใช้พื้นที่ว่างมาก
ที่สุดเพื่อหลีกเลี่ยงการเกิดปัญหาช่องว่างๆ เล็ก แต่ก็มีข้อเสียเหมือน
วิธี Best Fit
5. QuickFit
เป็นการสร้างลิงค์ลิสต์ขึ้นมามากกว่า 1 ลิงค์ลิสต์ โดยแต่ละ
ลิงค์ลิสต์จะมีขนาดของโหนด แตกต่างกัน แต่ภายในลิงค์ลิสต์
เดียวกันจะมีขนาดเท่ากัน เมื่อมีโปรเซสเข้ามาจะดูว่าโปรเซสนั้นมี
ขนาดเท่าใด จากนั้นจึงนาโปรเซสนั้นไปใส่ลงในลิงค์ลิสต์ที่มีขนาด
โหนดเหมาะสมที่สุด
- 29. หน่วยความจาเสมือน (VirtualMemory)
หน่วยความจาเสมือน หมายถึง การนาหน่วยความจา
สารองเข้ามาทาหน้าที่เหมือนกับเป็น หน่วยความจาหลัก เช่น การ
นาพื้นที่บางส่วนของฮาร์ดดิสก์มาทางานเป็นหน่วยความจาหลัก
วิธีการเช่นนี้ทาให้ระบบมีพื้นที่หน่วยความจาเพิ่มขึ้นกว่าปกติ
สามารถท่างานได้มากขึ้น แต่มีข้อจากัดคือ ความเร็วในการอ่าน
ข้อมูลจากหน่วยความจาเสมือนจะช้ากว่าหน่วยความจาหลัก
เพราะเป็นการอ่าน จากฮาร์ดดิสก์
- 34. ตารางหน้า (Page Table)
เพื่อความสะดวกในการค้นหาหน้า จึงต้องมีการแมพหน้าทั้งหมด โดย
สร้างตารางหน้า (Page Table) ขึ้นมา ในตารางหน้าจะมีข้อมูล ดังนี้
1. Page Frame Number
เป็นส่วนที่สาคัญที่สุดจะเก็บข้อมูลว่าหน้านี้ไปอยู่ที่เฟรมหมายเลข
อะไรในหน่วยความจาหลัก
2. Present /Absent
มีขนาด 1 บิต ใช้บอกว่าหน้าปัจจุบัน อยู่ (Present) หรือไม่อยู่
(Absent) ในหน่วยความ จาหลัก ถ้าอยู่จะมีค่าเป็น 1 ถ้าไม,อยู่จะมีค่าเป็น 0
3. Protection
เก็บข้อมูลการป้ องกัน เซ่น กาหนดว่าให้อ่านได้อย่างเดียว อ่านและ
เขียนได้ หรือประมวล ผลได้ (Execute) โดยจะใช้เพียง 3 บิต คือบิตการอ่าน
เขียน
และประมวลผล (R, W, E)
- 35. การสับเปลี่ยนหน้า (Page Replacement Algorithm)
เมื่อมีหน้า (Page) ที่ต้องการน่าเช้ามาในหน่วยความจาหลัก แต่ภายใน
หน่วยความจาหลักมี พื้นที่ว่างไม่พอสาหรับหน้านั้น จึงต้องมีการสลับกับหน้าเดิม
ที่อยู่ในหน่วยความจาหลัก ซึ่งในการ ลับเปลี่ยนหน้ามีวิธีการตัดสินใจหลายวิธี
ดังนี้
1. วิธีสับเปลี่ยนแบบมาก่อน-ออกก่อน (First In-First Out Algorithm:
FIFO)
2. วิธีสับเปลี่ยนแบบให้โอกาสครั้งที่สอง (Second Chance Page
Replacement Algorithm)
- 36. 3. วิธีการสับเปลี่ยนแบบวงรอบนาฬิกา (Clock Page
Replacement Algorithm)
4. วิธีสับเปลี่ยนแบบดีทีสุด (Optimal Page Replacement
Algorithm)
5. วิธีลับเปลี่ยนแบบที่ไม่ได้ใช้งาน -ออกก่อน (Not Recently Used:
NRU)
6. การทางานแบบใช้งานน้อยที่สุด-ออกก่อน (Least Recently
Used: LRU)
- 37. วิธีสับเปลี่ยนแบบมาก่อน-ออกก่อน (First In-FirstOut
Algorithm: FIFO)
* เป็นการพิจารณาลับเปลี่ยนกับหน้าที่อยู่ในหน่วยความจา
หลักนานที่สุด
* การพัฒนาการใช้งาน ทาได้เลยการสร้างคิวแบบมาก่อนออก
ก่อน (FIFO) สาหรับเก็บ หมายเลขหน้าที่อยู่ในหน่วยความจาหลัก
* เมื่อมีการลับเปลี่ยนหน้าให้น่าหมายเลขหน้าที่อยู่หัวคิวออก
จากหน่วยความจา และน่า หมายเลขหน้าใหม่ที่ต้องการนาไปเก็บ
ในหน่วยความจาไปต่อที่ปลายคิว
- 38. วิธีสับเปลี่ยนแบบให้โอกาสครั้งที่สอง (SecondChance Page
Replacement Algorithm)
* วิธีนี้ได้รับการปรับปรุงมาจากวิธีแบบมาก่อน-ออกก่อน เพื่อเป็นการป้ องกัน
การเปลี่ยน หน้าที่ถูกเรียกใช้งานบ่อยออกไปจากหน่วยความจา
* ขั้นตอนการทางาน โดยการตรวจสอบที่ Referenced Bit
* ถ้า Referenced Bit มีค่าเป็น 0 แสดงว่าหน้านั้นเข้ามานานและไม่ถูก
เรียกใช้งาน ระบบ สามารถทาการสับเปลี่ยนหน้าได้ทันที
- 39. * ถ้า Referenced Bit มีค่าเป็น 1 แสดงว่าหน้านั้นเคยถูกเรียกใช้
งาน ให้เปลี่ยนค่า Referenced Bit เป็น 0 แล้วน่าหน้านั้นกลับไปต่อคิว
ใหม่ พร้อมทั้งเปลี่ยนค่าเวลาการเข้าสู่หน่วยความจาหลัก ใหม่เสมือนว่า
หน้านั้นเพิ่งเข้าสู่หน่วยความจาหลัก
* ทาการค้นหาหน้าที่จะถูกลับเปลี่ยนหน้าโดยวิธีแบบมา
ก่อน-ออกก่อนต่อไป
- 40. วิธีการสับเปลี่ยนแบบวงรอบนาฬิกา (Clock Page Replacement
Algorithm)
* วิธีนี้มีการทางานคล้ายวิธีให้โอกาสคงที่สอง ต่างกันที'มีการจัด
เฟรมให้อยู่ในลักษณะเป็น วงกลม มีการกาหนดตัวชี้ที่เหมือนเข็มนาฬิกา
* ถ้าเข็มนี้ชี้ไปที่เฟรมใด จะมีการตรวจสอบ Reference Bit ว่าหน้า
นั้นมีการเรียกใช้หรือไม่ ถ้ามีค่า 0 (ไม่เคยถูกเรียกใช้) ให้สับเปลี่ยนหน้านั้น
ออกไปและนาหน้าใหม่เข้ามาแทนที่ในตาแหน่ง เดิม แล้วเลื่อนเข็มไปอีก 1
ตาแหน่ง
* ถ้า Referenced Bit มีค่าเป็น 1 ให้ทาการเปลี่ยนคาขอ)
Referenced Bit เป็น 0 แล้ว เลื่อนเข็มไปอีก 1 ตาแหน่ง
- 41. วิธีสับเปลี่ยนแบบที่ไม่ได้ใช้งาน-ออกก่อน (Not RecentlyUsed
: NRU)
วิธีนี่คล้ายกับวิธีการลับเปลี่ยนแบบวงรอบนาฬิกา แต่มีการเพิ่มส่วน
เก็บข้อมูลการใช้งาน หน้าต่างๆ เพิ่มขึ้นมา โดยส่วนนี้จะเก็บข้อมูลว่าหน้านั้นๆ
ถูกเรียกใช้งาน และมีการเปลี่ยนแปลง มากแค่ไหน โดยแบ่งออกได้ 4 กลุ่ม
กลุ่ม 0 : ไม่ถูกเรียกใช้งาน และไม่มีการเปลี่ยนแปลงค่า
กลุ่ม 1 : ไม่ถูกเรียกใช้งาน แต่มีการเปลี่ยนแปลงค่า
กลุ่ม 2 : ถูกเรียกใช้งาน แต่ไม'มีการเปลี่ยนแปลงค่า
กลุ่ม 3 : ถูกเรียกใช้งาน และมีการเปลี่ยนแปลงค่า
การเรียกใช้งานจะพยายามเรียกหน้าที่อยู่ในกลุ่มแรกๆมาใช้ก่อน ซึ่งวิธีแบบนี้
เข้าใจง่ายและทางานได้ดี (แต่ไม่เท่าแบบวิธีแบบดีที่สุด)
- 42. วิธีสับเปลี่ยนแบบดีที่สุด (Optimal Page Replacement Algorithm)
เป็นการเลือกลับเปลี่ยนหน้า โดยเสือกหน้าที่ไม่ถูกเรียกใช้งาน และมี
เวลารอการเรียกใช้ งานนานที่สุดวิธีนี้เป็นวิธีที่มีประสิทธิภาพมากที่สุด
การทางานแบบใช้งานน้อยที่สุด-ออกก่อน ( Least Recently Used: LRU)
เป็นการตรวจสอบว่ามีหน้าใดในหน่วยความจาหลักที่ไม่ถูกใช้งานนาน
ที่สุดเมื่อมีการสับเปลี่ยนหน้าจะลับเปลี่ยนกับหน้าที่ไม่ถูกใช้งานนานที่สุดวิธีนี้ต้อง
มีการเพิ่มส่วนการเก็บข้อมูลการเรียกใช้งานในหน่วยความจาหลัก
- 46. 3. การแบ่งเป็นเซ็กเมนต์จะอนุญาตให้มีการแบ่งปันข้อมูล
ระหว่างโปรเซสหลาย ๆ โปรเซสเช่น โปรแกรมเมอร์สามารถนาโปรแกรมยู
ทีลิตี้หรือข้อมูลที่เป็นประโยชน์ ใส่ลงไปในส่วนของ เซ็กเมนต์หนึ่งๆ ที่
สามารถถูกอ้างอิงโดยโปรเซสอื่นๆได้
4. การแบ่งพื้นที่ลักษณะนี้อนุญาตให้มีการป้ องกันข้อมูลด้วย
ตัวเองได้เพราะส่วนของเซ็กเมนต์หนึ่ง ๆ นั้นจะถูกสร้างขึ้นมาเพื่อใส่
โปรแกรมหรือข้อมูลที่ได้รับการนิยามมาอย่างดีแล้ว ซึ่งโปรแกรมเมอร์ที่
เป็นผู้ดูแลระบบสามารถกาหนดสิทธิในการเข้าถึงข้อมลในส่วนนั้นได้
- 49. วิธีที่จะทาให้โปรแกรมที่มีขนาดใหญ่กว่าขนาดหน่วยความจารัน
ได้ ในระบบคือการทา โอเวอร์เลย์ (Overlay) การทาโอเวอร์เลย์ นี้เป็น
หน้าที่ของผู้เขียนโปรแกรม ระบบปฏิบัติการไม่ได้จัดการให้วิธีการทาอาจ
แตกต่างกันไปบ้างแต่มีหลักการทาที่คล้ายๆ กันคือ ผู้เขียนโปรแกรมแบ่ง
โปรแกรม ออกเป็นส่วนย่อยหลายส่วน แต่ละส่วนจะต้องมีขนาดเล็กกว่า
ขนาดของหน่วยความจา อาศัยหลักที่ว่าโปรแกรมจะทางานเป็นส่วน ๆ ไป
ไม่ได้ทาพร้อมกันหมดทั้งโปรแกรม ผู้เขียนโปรแกรมจะใช้หลักการนี้เป็น
แนวทางในการแบ่งส่วนของโปรแกรม เมื่อเริ่มรันโปรแกรมบางส่วนของ
โปรแกรมจะ ถูกโหลดเข้าไปในหน่วยความจา
- 50. ส่วนที่ถูกโหลดเข้าไปนี้จะถูกแบ่งแยกออกเป็น 2 ส่วน คือ ในส่วนแรกจะ
เป็นส่วนของโปรแกรมที่อยู่ในหน่วยความจาตลอดไปตั้งแต่แรกจนกระทั่งเสร็จสิ้น
การทางานของโปรแกรม เมื่อโปรแกรมรันไปจนถึงส่วนที่ไม่ได้อยู่ในหน่วยความจา
(ไม่ได้ถูกโหลดเข้ามา) ตัว โปรแกรมเองจะจัดการโหลดเอาส่วนที่มันต้องการเข้ามา
ในหน่วยความจา โดยไปทับเอาส่วนที่ 2 ที่ อยู่ในหน่วยความจาและรันต่อ นั้นคือ
ส่วนที่ 2 นี้จะเป็นบริเวณที่มีการโหลดเอาส่วนย่อยต่าง ๆ ของ โปรแกรมเข้ามา
เพื่อให้โปรแกรมทางานได้ ส่วนที่ถูกโหลดเข้ามาเป็นส่วนที่โปรแกรมต้องการใช้งาน
และส่วนที่ถูกทับนี้เป็นส่วนที่ไม่มีความจาเป็นต้องใช้แล้ว แต่ถ้าต้องการใช้อีกก็
สามารถโหลดเข้ามา ใหม่ได้ ซึ่งโปรแกรมเป็นผู้จัดการเอง ดังนั้นส่วนแรกของ
โปรแกรมในหน่วยความจา ซึ่งอยู่ตั้งแต่ เริ่มโปรแกรมจนกระทั่งจบโปรแกรมนั้น
จะต้องมีส่วนควบคุมการโหลดส่วนย่อยอื่น ๆ ของ โปรแกรมไปกับอีกส่วนหนึ่งของ
โปรแกรมในหน่วยความจา