วันจันทร์ที่ 29 มกราคม พ.ศ. 2561

บทที่7 การจัดการอุปกรณ์ Device Management

บทที่7
การจัดการอุปกรณ์
Device Management
จัดทำโดย นาย สราวุฒิ เช้ือกสิกรรม รหัสนักศึกษา 6031280064

การจัดการอุปกรณ์อินพุต/เอาท์พุต
I/O Devices manager
การจัดการอุปกรณ์ต่าง ๆ ที่ติดต่อและเกี่ยวข้องกับคอมพิวเตอร์เป็นหน้าที่ของ OS
อุปกรณ์อินพุต/เอาท์พุต (I/O Devices) แบ่งออกเป็น 3 ประเภท
บล็อกดีไวซ์ (Block devices)
คาร์เรกเตอร์ดีไวซ์ (Character device)
อุปกรณ์พิเศษ

1.บล็อกดีไวซ์ (Block devices)
หมายถึงอุปกรณ์ที่สามารถจัดเก็บข้อมูลได้โดยทำการเก็บเป็นบล็อก เช่น Floopy disk, Harddisk, Tape
ขนาดของบล็อกมีตั้งแต่ 512-32,768 ไบต์
สามารถอ่าน/เขียนข้อมูลลงในแต่ละบล็อกได้โดยอิสระ
แบ่งเป็น 2 แบบ
อุปกรณ์ที่มีการเข้าถึงข้อมูลโดยตรง (Direct access storage device) ได้แก่ ดิสก์ประเภทต่าง ๆ
อุปกรณ์ที่มีการเข้าถึงข้อมูลแบบเรียงลำดับ (Serial access storage device) ได้แก่ เทป

2.คาร์เรกเตอร์ดีไวซ์ (Character devices)
หมายถึงอุปกรณ์ที่รับและส่งข้อมูลเป็นสาย โดยมีบัฟเฟอร์ (Buffer) ทำหน้าที่จัดเก็บข้อมูล
ข้อมูลที่ส่งเข้ามาหรือส่งออกจะเรียงมาเป็นลำดับก่อนหลัง
อุปกรณ์ประเภทนี้ได้แก่
คีย์บอร์ด
เครื่องพิมพ์
เม้าท์
โมเด็ม

3.อุปกรณ์พิิเศษ
มีอุปกรณ์บางประเภทอื่นที่ไม่เข้าข่ายทั้ง 2 ประเภทดังที่กล่าวมา
การจัดการอุปกรณ์ประเภทนี้ OS ต้องใช้วิธีจัดการโดยเฉพาะ ขึ้นอยู่กับลักษณะการรับส่งข้อมูลของอุปกรณ์นั้น ๆ
เช่น จอภาพ (Monitor) ในการส่งข้อมูลหรือตัวอักษรไปแสดงบนจอภาพนั้น จะต้องส่งไปยังตำแหน่งที่ถูกต้อง โดยที่จอภาพจะมีแอดเดรสบอกตำแหน่งต่าง ๆ บนจอ ดังนั้นถ้าต้องการส่งข้อมูลขึ้นไปบนจอต้องส่งตำแหน่งบนจอภาพไปด้วย แล้ว OS จะนำข้อมูลไปปรากฏอยู่บนจอภาพในตำแหน่งที่ระบุ
ดังนั้นจะเห็นว่าการส่งข้อมูลไปให้จอภาพไม่จำเป็นต้องมีลำดับการส่งข้อมูลที่ถูกต้อง

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

ตัวขับอุปกรณ์ (Device drivers)
อุปกรณ์แต่ละชนิดย่อมมีลักษณะที่แตกต่างกันออกไปในหลาย ๆ อย่าง ทั้งการติดต่อรับส่งข้อมูล การควบคุมการทำงานภายในอุปกรณ์
ถ้าเราให้ OS เป็นผู้ควบคุมทุกอุปกรณ์ ตัว OS จะต้องรู้การทำงานของอุปกรณ์แต่ละชนิดอย่างละเอียด รวมทั้งกรณีที่มีการพัฒนาอุปกรณ์ใหม่ ๆ ขึ้นมาก็จะต้องมีการแก้ไขให้ OS รู้จักอุปกรณ์ตัวใหม่อยู่ตลอดเวลา
ด้วยความไม่สะดวกดังกล่าวผู้ออกแบบ OS จึงได้ทำการแยกเอาส่วนควบคุมอุปกรณ์ทั้งหมดออกจากระบบ โปรแกรมที่แยกตัวออกมานั้นมีหน้าที่ควบคุมการติดต่อกับอุปกรณ์เหล่านั้นเราเรียกว่า ตัวขับอุปกรณ์ (Device drivers)

หน้าที่ของ OS ในการจัดการอุปกรณ์
ติดตามสถานะของอุปกรณ์ทุกชิ้น โดยจะมี UCB (Unit control block) สำหรับอุปกรณ์แต่ละชิ้นเพื่อเก็บข้อมูลที่สำคัญต่าง ๆ ของอุปกรณ์นั้น ๆ
กำหนดการให้ใช้งานเมื่อมีการร้องขออุปกรณ์โดยมีเทคนิคอยู่ 3 ประการ
    การยกให้ (Dedicated device) เป็นการกำหนดให้อุปกรณ์ถูกใช้ได้โดยโปรเซสเพียงโปรเซสเดียว โปรเซสอื่น ๆ จะเข้ามาใช้อุปกรณ์ตัวนี้ไม่ได้
    การแบ่งปัน (Shared device) เป็นการกำหนดให้อุปกรณ์ถูกใช้ได้โดยหลายโปรเซสร่วมกัน ไม่เป็นของโปรเซสใดโปรเซสหนึ่ง
    การปลอม (Virtual device) เป็นการจำลองอุปกรณ์ชิ้นหนึ่งให้เป็นอุปกรณ์อีกชิ้นหนึ่ง

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

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

              การรับส่งข้อมูลแบบนี้เป็นไปได้ช้าและเปลืองเวลาของ CPU
ดังนั้นถ้าสามารถส่งข้อมูลได้โดยไม่ต้องผ่าน CPU ก็จะทำให้การรับส่งข้อมูลเร็วขึ้น และยังสามารถใช้ CPU สำหรับรันโปรเซสอื่นได้ต่อไป
วิธีการนี้เรียกว่า การทำ DMA (Direct Memory Access)
การรับส่งข้อมูลแบบ DMA จำเป็นต้องใช้ ตัวควบคุม DMA (DMA Controller)
DMA Controller จะทำหน้าที่แทน CPU เมื่อต้องการรับส่งข้อมูลแบบ DMA
เมื่อต้องการส่งข้อมูล DMA Controller จะส่งสัญญาณไปบอกให้ CPU รับรู้ เมื่อ CPU ได้รับคำขอ CPU จะสั่งให้ DMA Controller ทำงานควบคุมการรับส่งข้อมูลต่อไป ส่วน CPU จะไปทำงานอื่น
เมื่อทำงานเสร็จ DMA Controller จะส่งสัญญาณไปบอกให้ CPU รับรู้ว่าการรับส่งข้อมูลเสร็จสิ้นแล้ว

อ้างอิง
http://www.ict.up.ac.th/worrakits/OS.files/PDF/%E0%B8%9A%E0%B8%97%E0%B8%97%E0%B8%B5%E0%B9%88%204%20Input%20and%20Output%202_2551.pdf


บทที่6 การจัดการไฟล์ File Management

บทที่6
การจัดการไฟล์
File Management
จัดทำโดย นาย สราวุฒิ เชื้อกสิกรรม รหัสนักศึกษา 6031280064

การจัดการไฟล์ File Management 
               หมายถึง การทำงานในระบบคอมพิวเตอร์ทั้งหมดจำเป็นต้องมีการเก็บและนำ ข้อมูลไปใช้งานขณะที่โปรเซสกำลังทำงานข้อมูลจะเก็บไว้ในหน่วยความจำ ถ้าเครื่องคอมพิวเตอร์ดับไม่ว่าด้วยสาเหตุใดก็ตามข้อมูลทั้งหมดจะสูญหายไป
        ดังนั้นจึงจำเป็นต้องจัดเก็บข้อมูลเหล่านี้ไว้ในหน่วยจัดเก็บข้อมูลสำรอง ซึ่งอาจจะเป็นแผ่นดิสก์เก็ต ฮาร์ดดิสก์ หรืออุปกรณ์อื่น ๆในการจัดเก็บข้อมูลเหล่านี้มีจุดประสงค์เพื่อนำมาใช้งานต่อไป จึงจำเป็นต้องมีการกำหนดชื่อเพื่อแทนกลุ่มข้อมูล นอกจากนี้ถ้าเราจัดเก็บข้อมูลไม่เป็นระเบียบจะทำให้การค้นหาไฟล์ข้อมูลที่ต้องการได้ยากหรือช้า ดังนั้นถ้าเราจัดหมวดหมู่ให้กับไฟล์ข้อมูลก็จะทำให้การค้นหาไฟล์ทำได้สะดวกหรือรวดเร็วขึ้นการจัดให้ไฟล์เป็นหมวดหมู่ก็คือการจัดเก็บในไดเร็กทอรี่ (Directory) หรือโฟลเดอร์ (Folder)
File 
กำหนดชื่อให้กับแฟ้มขอมูลใดใดเพื่อให้ผู้ใช้อ้างถึงแฟ้มขอมูลนั้นๆได้สะดวกผู้ใช้ ไม่จำเป็นต้องรู้ว่าข้อมูลถูกเก็บอย่างไรในอุปกรณ์ต่างๆ ชนิดกัน(ไม่จำเป็นต้องรู้Physical Address แค่สามารถระบุชื่อทางตรรกะของ แฟ้มขอมูล Logical File Name)  มFile Directory ใช้สำหรับแบ่งกลุ่มของข้อมูล

File Operation
การสร้างแฟ้มข้อมูล
 - หาที่ว่างในแฟ้มข้อมูล
 - ช่องวางของแฟ้มข้อมูลใหม่ต้องถูกสร้างใน Directory
การเขียนแฟ้มข้อมูล
 - ระบบจะค้นหา Directory เพื่อหาตำแหน่งของแฟ้มข้อมูล
 - ระบบจะเก็บ  Write pointer เพื่อระบุตำแหน่งถัดไปที่ต้องการจะเขียน
การอ่านแฟ้มขอมูล 
 - ระบบจะค้นหา Directory เพื่อหาตำแหน่งของแฟ้มข้อมูล
 - ระบบจะเก็บRead pointer เพื่อระบุตำแหน่งถัดไปที่ต้องการจะอ่าน
 - “ ตัวชี้ ตำแหน่งแฟ้มปัจจุบัน  (Current-file-position pointer) ” เป็น pointer ที่ใช้ได้ ทั้งอ่านและเขียน  
การย้ายตำแหน่งภายในแฟ้มข้อมูล 
 - ระบบจะค้นหาDirectory เพื่อหาตำแหน่งของแฟ้มขอมูล 
 - กำหนดค่าให้pointer ปัจจุบัน
การลบแฟ้มข้อมูล  
 - ระบบจะค้นหา Directory เพื่อหาตำแหน่งของแฟ้มข้อมูลที่จะลบ 
 - ปลดปล่อยที่ว่างทั้งหมดของแฟ้มนั้นและทาการลบข้อมลในแฟ้ม
 การตัดแฟ้มข้อมูลให้สั้นลง
 - ผู้ใช้ต้องการให้แฟ้มข้อมูลมีคุณสมบัติ เหมือนเดิม แต่ต้องการลดเนื้อหา ของแฟ้มขอมูลนั้นลง
วิธีการเข้าถึงแฟ้มข้อมูล(Access Methods)
1.       การเข้าถึงข้อมูลแบบเรียงลำดับ (Access Methods)
   - ตัวอ่านจะอ่านส่วนถัดไปของแฟ้ม แล้วเปลี่ยนค่า pointer โดยอัตโนมัติตามตำแหน่งของ I/O
2.       การเข้าถึงแฟ้มข้อมูลโดยตรง (Direct Access)
   - แฟ้มข้อมูลถูกสร้างขึ้นเป็น Logical record ที่มีความยาวคงที่
   - อนุญาตให้โปรแกรมอ่านหรือเขียนอย่างรวดเร็วดดยไม่มีลำดับเป็นพื้นฐานของ  Disk
3.       การเข้าถึงข้อมูลแบบอื่น (Other Access)
   - มีการสร้าง index ให้กับแฟ้มข้อมูล
   - จะใช้ index ในการค้นหาแฟ้มข้อมูลดดยตรง
   - ในกรณีที่แฟ้มข้อมูลมีขนาดใหญ่ จะมีการสร้าง
Index file
Primary index file
Secondary index file 
ไดเร็กทอรี (Directory)
ระบบปฎิบัติการทุกตัวจะต้องมีสารบัญที่รวบรสมรายชื่อของไฟล์ต่างๆทั่งหมดไว้ที่เดียวกัน เพื่อให้ผู้ใช้สามารถตรวจสอบดูไฟล์ต่างๆได้ สิ่งที่ทำหน้าที่จัดเก็บเรียกว่า “ไดเร็กทอรี” (Directory ในตำราบางเล่มใช้ชื่อว่า Folders) ตัวไดเร็กทอรีเองถือว่าเป็นไฟล์อีกประเภทหนึ่งเช่นเดียวกัน โครงสร้างในตัวมันเองจะประกอบไปด้วยหน่วยย่อยหลายๆหน่วย ในแต่ละหน่วยก็อาจจะมีโครงสร้างเดียวกับมันก็ได้ หรืออาจประกอบด้วยไฟล์เดี่ยวย่อยๆ อยู่ภายในก็ได้ คุณสามารถแบ่งไดเร็กทอรีออกเป็นลักษณะต่างๆดังต่อไปนี้

ระบบไดเร็กทอรี่ดี่ยว (Single-Level Directory Systems)
ระบบไดเร็กทอรี่เดี่ยวเป็นระบบที่มีโครงสร้างที่ง่ายที่สุด ภายในระบบจะมีอยู่เพียงไดเร็กทอรีเดียวและรวบรวมไฟล์ทุกไฟล์ว้ที่เดียวกัน โดยทุกไฟล์จะจัดเก็บอยู่ในระดับเดียวกัน เนื่องจากการจัดเก็บในลักษณะนี้ทำให้ไม่สะดวกสำหรับผู้ใช้หลายๆคนแต่ละคนมีหลายไฟล์ ไฟล์หลายชนิดต้องปะปนกันทำให้ไม่สะดวกในการค้นหา นอกจากนั้นในกรณีที่มีการสร้างไฟล์ให้มีชื่อเดียวกันกับที่มีอยู่ก่อนนั้นอาจทำให้ไฟล์เก่าถูกเขียนทับลงไปโดยตั้งใจ ทำให้ข้อมูลสูญหายได้ ปัญหาต่างๆ เหล่านี้สามารถแก้ไขได้โดยการใช้ไดเร็กทอรีที่กล่าวถึงต่อไป

ระบบไดเร็กทอรี 2 ระดับ (Two-Level Directory Systems) 
โครงสร้างระบบไดเร็กทอรีแบบนี้สามารถแก้ไขปัญหาของระบบไดเร็กทอรีแบบแรกได้แต่ไม่ได้เต็มร้อยเปอร์เซ็นต์ การจัดโครงสร้างไดเร็กทอรี 2 ระดับ จะกำหนดให้ผู้ใช้แต่ละคนสามารถสร้างไดเร็กย่อยของตนได้เรียกว่า “สับไดเร็กทอรี” ( Sub-directory) หรือไดเร็กทอรีย่อย ในแต่ละสับไดเร็กทอรี จะอยู่ภายใต้ไดเร็กทอรีรากเดียวกัน (root directory) ภายในสับไดเร็กทอรีผู้ใช้สามารถกำหนดชื่อไฟล์ได้ตามใจโดยไม่ต้องไปกังวลว่าจะไปซ้ำกับชื่อของใครเพราะแม้นว่าตั้งชื่อซ้ำกับชื่อไฟล์ในไดเร็กทอรีอื่นก็จะไม่เกิดปัญหาการเขียนทับที่ทำให้ข้อมูลสูญหาย อย่างไรก็ตามระบบไดเร็กทอรีแบบนี้ก็ยังคงมีปัญหาอย่างอื่นอีก คือ ในกรณีที่ผู้ใช้มีไฟล์หลายประเภทจะไม่สามารถแยกประเภทของไฟล์ต่างๆ ได้ตามต้องการ ยกตัวอย่างเช่น นักเรียนแต่ละคนมีวิชาเรียนหลายวิชา ไม่สามารถแยกรายวิชาเรียนต่างๆ ในการจัดเก็บลงในสับไดเร็กทอรีได้ ทำให้งานต่างๆถูกปะปนอยู่ในไดเร็กทอรีเดียวกัน

ระบบไดเร็กทอรีหลายระดับ (Hierarchical Directory System)
เพื่อแก้ปัญหาระบบไดเร็กทอรีทั้ง 2 ระบบดังกล่าวข้างต้นระบบปฏิบัติการจึงยอมให้มีการสร้างโครงสร้างไดเร็กแบบนี้ขึ้นมา ระบบโครงสร้างไดเร็กทอรีแบบนี้เรียกอย่างหนึ่งว่า “โครงสร้างต้นใจ” (Tree structure) ผู้ใช้สามารถสร้างไดเร็กทอรีขึ้นมาได้โดบไม่จำกัดอยู่ในไดเร็กทอรีเดียวกัน ระบบไฟล์ในปัจจุบันใช้โครงสร้างไดเร็กทอรีแบบนี้ เพราะสามารถแก้ปัญหาที่มีอยู่ได้ทั้งหมด


โครงสร้างไดเร็กทอรี (Implementing Dierctory)
หน้าที่ของไดเร็กทอรีนั้นใช้เป็นที่รวบรวมไฟล์จำนวนต่างๆเข้าไว้ด้วยกันดังนั้นก่อนที่คุณจะเปิดไฟล์ทำการใดๆจะต้องทราบว่าไฟล์ต่างๆเหล่านั้นเก็บอยู่ที่ใด หรือในไดเร็กทอรีใด ผู้ใช้จะต้องระบุพาธของไดเรกทอรีนั้นเสียก่อนการกำหนดพาธของไดเรกทอรีที่มีไฟล์นั้นบรรจุอยู่ เป็นการระบุล็อกต่างๆ ที่เก็บไว้ในไดเรกทอรีนั้นแต่ละไฟล์ที่เก็บในไดเรกทอรีสามารถเข้าถึงล็อกต่างๆของไฟล์โดยการอ้างชื่อไฟล์ ดังนั้นไฟล์หนึ่งๆจะมีชื่อเรียกได้เพียงชื่อเดียว หรือไม่ก็ใช้นามสกุลเป็นการแยกประเภทของไฟล์ ในการสร้างไฟล์จะจัดสรรเนื้อที่บนดิสก์ให้กบไฟล์นั้น ซึ่งไดเรกทอรีจำเป็นจะต้องรู้และสามารถตรวจสอบได้ว่าไฟล์ในไดเรกทอรีของตัวเองนั้นเก็บอยู่ที่ใด ดังนั้นไดเรกทอรีจำเป็นจะต้องมีตารางบันทึกไฟล์ต่างๆเอาไว้ภายในตารางไดเรกทอรีจะประกอบไปด้วยชื่อไฟล์ และคุณลักษณะไฟล์ (File attribute) ว่าเป็นไฟล์ประเภทใด เก็บอยู่ในบล็อกใด
สำหรับรูปแบบการเก็บชื่อไฟล์ และคุณลักษณะไฟล์ สามารถทำการเก็บได้ สองวิธี วิธีแรกให้เก็บขื่อไฟล์ และบอกคุณลักษณะไฟล์ไว้ด้วยกัน ภายในตารางแต่ละไฟล์ที่มีขนาดตามที่กำหนดไว้ขนาดหนึ่ง เช่นในระบบ MS-DOS ความยาวของชื่อจะกำหนดไว้ไม่เกิน 8 ตัวอักษรและตามด้วยส่วนขยายที่เรียกว่านามสกุลอีกไม่เกิน 3 ตัว ต่อจากชื่อไฟล์จะตามด้วยคุณลักษณะไฟล์จะบอกถึงบล๊อกต่างๆ ที่ใช้เก็ไฟล์มีจำนวนบล๊อกเท่าไร จะถูกระบุลงไปในตารางด้วยกัน จากรูปจะพบว่าไฟล์ยิ่งมีขนาดใหญ่ จำนวนชองบล๊อกที่ใช้ยิ่งเพิ่มขึ้นตามขนาดของไฟล์ จึงเกิดปัญหาว่าจะกำหนดขนาดของตารางนี้อย่างไร ปัญหาจากการเก็บชื่อไฟล์ และคุณลักษณะไฟล เข้าไว้ด้วยกันจึงแก้ไขได้ด้วยวิธีที่ 2
วิธีที่สอง ใช้วิธีเก็บข้อมูลชื่อไฟล์และพอยเตอร์ของไฟล์ไปยังบล๊อกต่างๆไว้ด้วยกัน วิธีนี้ทำให้ขนาดของข้อมูลในตาราง File attribute มีขนาดคงที่ พอยเตอร์ในตารางจะชี้ไปยังเนื้อหาอีกส่วนหนึ่งที่ใช้เก็บบล๊อกต่างๆ ของไฟล์เอาไว้ เรียกเนื้อที่บริเวณนี้ว่า “ฮีพ” (heap) ด้วยวิธีการนี้ ขนาดของไฟล์ สามารถใหญ่ดท่าใดก็ได้ ซึ่งจะไม่มีผลต่อการจัดเก็บในตาราง เนื้อที่บริเวณฮีพเป็นการจองเนื้อที่แบบไดนามิกเนื้อที่บริเวณนี้จะมีการจองและคืนเนื้อที่อยู่ตลอดเวลา
จากโครงสร้างไดเร็กทอรีที่อธิบายไปจะพบว่ากรณีที่ขนาดของไดเร็กทอรีมีขนาดใหญ่การค้นหาไฟล์ตามลำดับ จะทำให้หาตำแหน่งของบล๊อกต่างๆ ก็ยื่งใช้เวลามากขึ้น ดังนั้นคุณสามารถใช้ตาราง hash table เข้ามาประกอบกับการใช้หน่วยความจำแคช ทำให้การอ่านไฟล์ได้รวดเร็วยื่งขึ้น

การทำงานของระบบไฟล์ (File system implementation)
มุมมองในระบบไฟล์คุณสามารถมองได้เป็น 2 มุมมองด้วยกันคือ ในมุมมองแรกเป้นมุมมองของผู้ใช้ ในมุมมองนี้ผู้ใช้รู้แต่เพียงว่าจะตั้งชื่อไฟล์อย่างไร มีข้อกำหนดอย่างไรบ้างในการตั้งชื่อ ซึ่งผู้ใช้จะต้องรู้ว่าแต่ละระบบปฏิบัติการมีข้อกำหนดในการตั้งชื่อไฟล์ที่เหมือนกัน ผู้ใช้จะต้องรู้คำสั่งต่างๆ (Operations)ของไฟล์ว่ามีคำสั่งอะไรบ้าง โครงสร้างของไดเร็กทอรีของแต่ละระบบไฟลืเป็นอย่างไร ผู้ใช้รู้เพียงเท่านี้ก็เพียงพอกัยการทำงานในระบบไฟล์แล้วสำหรับในมุมมองแรก
ในอีกมุมมองหนึ่งเป็นของผู้สร้างระบบไฟล์ที่จะต้องรู้และเข้าใจว่าไฟล์และไดเร็กทอรีต่างๆ ที่สร้างขึ้นมาถูกจัดเก็บลงบนดิสก์อย่างไร จะมีวิธีจัดสรรเนื้อที่ดิสก์อย่งไร ให้สามารถจัดเก็บข้อมูลได้มากที่สุดและคงประสิทธิภาพสูงสุด รวมไปถึงการสร้างความเชื่อมันให้กับผู้ใช้ ว่าข้อมูลที่มีการบันทึกใส่ลงบนดิสก์แล้วจะไม่สูญหายไปไหน ซึ่งสิ่งต่างๆ เหล่านี้ในมุมมองของผู้สร้างจะต้องวิเคราะห์เพื่อจะหาจุดที่เหมาะสมในหารสร้างระบบแต่ละระบบที่มีตัวแปรต่างๆ ซึ่งไม่เหมือนกัน
โครงสร้างของระบบไฟล์(File system layout)
ระบบไฟล์ทุกๆ ระบบจำเป็นต้องมีการจัดเก็บข้อมูลลงบนสื่อต่างๆ ที่ใช้เก็บข้อมูล ในปัจจุบันสื่อเหล่านี้มีหลายชนิดได้แก่ แผ่นดิสก์ เทป ซีดีรอม เป็นต้น แต่สื่อที่เป็นที่นิยมแพร่หลาย และมีราคาถูก ได้แก่ ดิสก์ โครงสร้างของระบบดิสก์สนับสนุนการแอ็กเซสข้อมูลแบบสุ่ม (Random access) โคงสร้างดิสก์สามรถแบ่งพาร์ติชันในการเก็บข้อมูลได้ แต่ละพาร์ติชันมีความเป็นอิสระต่อกัน อีกทั้งยังสามารถกำหนดให้แต่ละพาร์ติชันมีระบบปฏิบัติการที่ต่างกันได้อีกด้วย
ภายในดิสก์จะถูกแบ่งออกเป็ฯเซ็กเตอร์(Sector)เริ่มต้นจากเซ็กเตอร์ 0 ซึ่งถือว่าเป็น Master Boot Record (MBR) เซ็กเตอร์วึ่งเป็นเซ็กเตอร์ที่ใช้เบค่าเริ่มต้นของระบบปฎิบัติการสำหรับการบูตเครื่องคอมพิวเตอร์เมื่อเริ่มต้นใช้งาน ในต้อนท้ายของเซ็กเตอร์นี้ยังประกอบด้วบตารางพาร์ติชัน (Partition table) ซึ่งจะเก็บแอ็ดเดรสเริ่มต้น และแอ็กเดรสสุดท้ายของแต่ละพารืติชันเอาไว้ ในแต่ละพาร์ติชันจะประกอบไปด้วย Boot block โปรแกรมใน Boot block จะทำหน้าที่ในหารดาวโหลดระบบปฏิบิตการในพาร์ติชันออกมาทำงาน ทุกๆ การ์ติชันจะมี Boot block เป็ฯของตัวเอง แต่ว่าในพาร์ติชันอาจจะไม่มีระบบปฏิบิตการก็ได้ โครงสร้างภายในแต่ละพาร์ติชันจะแตกต่างกันขึ้นอยู่กับระบบปฏิบิตการที่ใช้อยู่ซึ่งจะกำหนดโครงสร้างของไฟล์ในดิสก์ในขณะที่ทารฟอร์แมตดิสก์
วิธีจัดเก็บข้อมูลไฟล์ (Implementation file) 
สิ่งสำคัญสำหรับการจัดเก็บไฟล์ข้อมูลลงบนสื่อเก็บข้อมูลคือ จะต้องทราบว่าแต่ละไฟล์มีการเก็บอย่างไรเก็บไว้ที่ไหน และสามารถเรียกออกมาใช้งานได้อย่างไร ไฟล์ต่างๆ เหล่านั้นมีการจัดเก็บทั้งไฟล์ หรือ แต่ละไฟล์ถูกแยกเก็บเป็ยบล็อก และบล็อกต่างๆ เหล่านั้นจัดเรียงกันอย่างไร ซึ่งวิธีการเหล่านี้จะได้ศึกษารายละเอียดกันดังต่อไปนี้
การจัดเก็บข้อมูลแบบต่อเนื่อง (Contiguous allocation)
เป็นวิธีการจัดเก็ยข้อมูลของไฟล์แบบง่ายที่สุด แต่ละๆฟล์จะถูกบ่างออกเป็นบล็อก แต่ละบล็อกมีขนาดเท่าๆ กัน เพื่อง่ายในการบริหารและการเก็บข้อมุล วิธีการนี้ไหล์ข้อมูลแบ่งออกเป็นบล็อกออกเป้นบล็อกจะถูกเก็บลงบนดิสก์อย่างต่อเนื่องทั้งไฟล์ ตัวอย่างเช่น ถ้ากำหนดขนาดของบล็อกบนดิสก์ไว้เท่าๆ กัน เท่ากับ 1 กิโลไบต์ (1 KB) ในขณะที่ไฟล์ข้อมูล A มีขนาดเท่ากับ 50 กิโลไบต์ ดังนั้นสำหรับไฟล์ข้อมูล A จะต้องใช้จำนวนบล็อกเท่ากับ 50/1 เท่ากับ 50 บล็อก ในหารเบไฟล์ข้อมุล A ด้วยวิธีการเก็บข้อมูลแบบต่อเนื่อง ถ้าเริ่มจากบล็อกที่ 1 เป็นบล็อกแรกบล็อกสุดท้ายจะเป็นบล็อที่ 50 ซึ่งเรยงติดต่อกัน
อีกตัวอย่งหนึ่งถ้าคุณมีจำนวนไฟล์ข้อมูลหลายๆ ไฟล์เพื่อนำมาเก็บแบบต่อเนื่อง สมมุติถ้าคุณมีเนื้อที่ดิสก์ขนาด 1 MB เนื้อที่ดิสก์ขนาดนี้สามารถสร้างจำนวนบล็อกได้เท่ากับ 1024 บล็อก ถ้าไฟล์ข้อมูล A มีขนาด 4.5 KB และเริ่มเก็บบล็อกแรกที่บล็อก 1 บล็อกสุดท้ายจะเป็นบล็อก 5 ถ้าไฟล์ข้อมูล B มีขนาด 22.01 KB และเริ่มเก็บบล็อกแรกที่บล็อก 6 บล็อกสุดท้ายจะเป็นบล็อกที่ 28 ถ้าไฟล์ข้อมูล C มีขนาด 2.91 KB และเริ่มเก็บบล็อกแรกที่บล็อก 29 บล็อกสุดท้ายจะเป็ฯบล็อกที่ 31 เป็นต้น
สำหรับข้อดีในการเก็บข้อมูลแบบต่อเนื่องที่สำคัญมีอยู่ 2 ประการ ตือ ประการแรกเป็นการจัดเก็บข้อมูลแบบที่ง่ายที่สุด และสระดวกที่สุดเนื่องจากการจัดเก็บข้อมูลแบบนี้ไม่จำเป็ฯต้องบันทึกทุกๆ บล็อกจัดเก็บลงบนดิสก์ด้วยวิธีดังนี้ ระบบสามารถบันทึกการเก็บข้อมูลด้วยการบันทึกบล็อกแรก และบล็อกสุดท้ายก็เพียงพอแล้ว แต่ละบล็อกที่อยู่ภายในสามารถติดต่อกันด้วยตำแหน่งที่จัดเรียงกันอยู่ภายนอยู่แล้ว
ประการที่ 2 สำหรับวิธีจัดเก็บข้อมูลแบบต่อเนื่อง สามารถสร้างประสิทธิภาพได้สูงสุดในการค้นหาข้อมูล เนื่องจากการจัดเก็บบล็อกข้อมูลเรียงต่อเนื่องจึงไม่เสียเวลาในการค้นหาบล็อกทุกๆ บล็อกเพียงแต่หาบล็อกแรกพบก็สามารถอ่านข้อมูลได้ทั้งไฟล์แล้ว
สำหรับข้อเสียของการเก็บข้อมูลแบบต่อเนื่องก็มีความสำคัญเช่นเดียวกันเพราะวธีการเก็บข้อมูลวิธีนี้จำเป็นต้องอาศัยการเก็บข้อมูลที่ต่อเนื่องเมือจำนวนำฟล์ข้อมูลเพิ่มจำนวนมากขึ้น ประกอบกับขนาดของข้อมูลเมื่อมีการแก้ไขขนาดใหญ่ขึ้น ทำให้ไม่สามารถหาเนื้อที่ในการบรรจุไฟล์ข้อมูลดังกล่าวได้

การจัดเก็บข้อมูลแบบลิงค์ลิสต์(Link List Allocation)
การจัดเก็บข้อมูลแบบลิงค์ลิสต์ เป็ฯอีกวิธีหนึ่งที่นิยมใช้กัน วิธีการนี้มีการแบ่งไฟล์ออกเป็นบล็อกๆ เช่นเดียวกัน แต่จะจัดเก็บเนื้อที่ของแต่ละบล็อกจะไม่ต่อเนื่องเหมือนวิธีการจัดเรียงกันอย่างต่อเนื่องแต่ละบล็อกจะถูกเชื่อมโยงกันด้วยพอยเตอร์ ตั้งแต่บล็อกจะไม่ตอ่เนือ่งเหมือนวิธีการจัดเรยงกันอย่างต่อเนื่อง แต่ละบล็อกจะถูกเชื่อมโยงกันด้วยพอยเตอร์ ตั้งแต่บล็อกแรกจนกระทั้งบล็อกสุดท้ายของไฟล์ข้อมูลนั้นๆ ด้วยวิธีการจัดเก็บข้อมูลแบบนี้ทำให้ไม่เสียเนิ้อที่ว่างถายในดิสก์ ยกเว้นแต่จะมีเนื้อที่ว่างในแต่ละบล็อก ซึ้งจะมีมากน้อยเพียงไดก็ขึ้นอยู่กับการหาขนาดที่เหมาะสมของบล็อกข้อมูล และจะเกิดกับบล็อกสุดท้ายของแต่ละไฟล์ข้อมูลเท่านั้น วิธีการจัดเก็บข้อมูลแบบลิงค์ลิสต์นี้มี่ข้อเสียที่สำคัญอีกเช่นกันตรงที่จะเสียเวลากับการค้นหาแต่ละบล็อกข้อมูล เนื่องจากแต่ละบล็อกอยู่กระจัดกระจายทั่วไปนบดิสก์ วิธีการเก็บข้อมูลแบบนี้ยังเสียเนื้อที่ไปกับพยเตอร์ที่ทำหน้าที่ชี้ไปยังบล็อกต่างๆ อีกด้วย นอกจากนั้นในขณะที่ระบบทำการอ่านข้อมุลระบบจะต้องทำการก็อปปี้ตารางบันทึกการจัดเก็บไฟล์ที่เรียกว่า FAT (File Allocation Table) ลงบนหน่วยความจำก่อนที่จะทำการอ่านข้อมูลจากดิสก์ สมมติขนาดของฮาร์ดดิสก์เท่ากับ 20 GB ในขณะที่ขนาดของบล๊อกเท่ากับ 1 KB ดังนั้นฮาร์ดดิสก์ตัวนี้สามารถเก็บข้อมูลจำนวนบล๊อกได้เท่ากับ 20 ล้านบล๊อก จำนวนบล๊อกขนาดนี้ จำเป็นต้องใช้เนื้อที่ 3 ไบต์ในลิงค์ลิสต์ เพื่อการเก็บบล็อกต่างๆเอาไว้ (3 ไบต์ = 2 สามารถแสดงความแตกต่างได้ ประมาณ 20 ล้านตัวอย่าง) ขนาดของตาราง FAT จะใหญ่ถึง 60 MB ซึ่งนับว่ามีขนาดใหญ่มากทีเดียว แต่โดยทั่วไปแล้วการจองเนื้อที่เพื่อเก็บขนาดของลิงค์ลิสต์ มักจะจองขนาดเป็นเลขฐานสองยกกำลัง เช่น 2,4,8,…เป็นต้น ดังนั้น จำนวนบล็อกขนาด 20 ล้านบล็อก จะใช้ขนาดเป็นเลขฐานสอง ยกกำลัง 2 ซึ่งเท่ากับ 4 ไบต์ 

การใช้ไฟล์ร่วมกัน (Shared file) 
ไฟล์บางไฟล์ในระบบอาจถูกใช้โดยผู้ใช้หลายๆคน ดังนั้นจะต้องทำการก๊อปปี้ไฟล์ต่างๆ เหล่านี้ไว้กับทุกๆคน วิธีการนี้ดูแลแล้วไม่สะดวกและทำให้เปลืองเนื้อที่การจัดเก็บเป็นอย่างมาก ถ้าผู้ใช้คนใดคนหนึ่งจ้องการแก้ไข้ไฟล์นี้ ก็จะต้องไปบอกกับทุกๆคนให้ทำการแก้ไขตามไปด้วยหรือไม่ก็ก๊อปปี้ไฟล์นี้ไปใหม่ ซึ่งนอกจากจุยุ่งยากแล้วยังเสียเวลาอีกด้วย เกิดความลำบากในการทำงาน ถ้าไม่ประสานงานกันให้ดีจะทำให้เกิดข้อผิดพลาดและเกิดความเสียหายได้วิธีแก้ปัญหาที่ตรงนี้คือถ้าคุณมีไฟล์ที่ใช้งานร่วมกัน และมีแยกอัพไฟล์นั้นๆ อยู่เพียงแห่งเดียวแต่ชื่อไฟล์สามารถปรากฎอยู่ในไดเร็กทอรีของทุกคนที่ต้องการใช้ไฟล์ร่วมกันจะสะดวกและประหยัดกว่าไฟล์เหล่านี้ ไฟล์ที่นำมาใช้งานลักษณะนี้เรียกว่า “ไฟล์ร่วม” (Shared filed) ดังตัวอย่างการใช้งาน
ไฟล์ในไดเร็กทอรี A และ ในไดเร็กทอรี B จะถูกใช้งานร่วมกันด้วยการเชื่อมต่อระหว่างไดเร็กทอรี A และไฟล์ในไดเร็กทอรี B เรียกการลิงค์ทำให้โครงสร้างของระบบไดเร็กทอรีเปลี่ยนไปไม่เป็นเป็นแบบต้นไม้อีกแล้ว แต่จะเปลี่ยนเป็นโครงสร้างที่เรียกว่า direct acyclic graph วิธีการลิงค์ขึ้นอยู่กับโครงสร้างไดเร็กทอรีของระบบไฟล์  จะพบว่าค่า Count ในไอโหนดจะเพิ่มขึ้นตามจำนวนลืงค์ที่เชื่อมมายังไฟล์นั้น

การจัดการเนื้อที่ว่างภายในดิสก์ ( Disk Space Management )
การจัดการเนื้อที่ว่างภายในดิสก์เป็นสิ่งสำคัญสำหรับการออกแบบระบบการเก็บ ข้อมูล คุณสามารถจัดเก็บข้อมูลที่อยู่ในรูปไฟล์ ได้ 2 วิธีด้วยกันคือ เก็บไฟล์ทั้งหมดไว้ในเนื้อที่เดียวกัน กับวิธีที่สองคือแบ่งออกเป็นบล็อกๆ ละเท่าๆ กันแล้วเก็บกระจายทั่วไปในดิสก์ กรณีที่เก็บทั้งไฟล์ไว้ด้วยกันมักเกิดปัญหาการขยายเนื้อที่เมื่อไฟล์มีขนาด ใหญ่ขึ้นไม่สามารถเก็บไว้ตำแหน่งเดิมไว้ ไฟล์ที่อยู่ข้างเคียงไม่สามารถเคลื่อนย้ายได้ ดังนั้นการแบ่งไฟล์ออกเป็นบล็อกย่อมจะสะดวกกว่าสำหรับการขยายเมื่อไฟล์ใหญ่ ขึ้น
ขนาดของบล็อกจึงเป็นสิ่งจำเป็นในการเพิ่มประสิทธิภาพของคอมพิวเตอร์ และทำให้การใช้เนื้อที่ในดิสก์ เกิดความคุ้มค่าที่สุด ขนาดของบล็อกที่ใหญ่เกินไปในขณะที่ไฟล์ข้อมูลมีเพียงไม่กี่ไบต์จะทำให้สิ้น เปลืองเนื้อที่มากเพราะในการเก็บข้อมูลแต่ละครั้งจะต้องใช้เนื้อที่ทั้ง บล็อก สมมติว่าบล็อกมีขนาด 1 กิโลไบต์ ในขนาดที่ไฟล์ข้อมูลมีเพียง 100 ไบต์ กรณีนี้จะเสียเนื้อที่ว่างภายในดิสก์ไปกว่า 90 เปอร์เซ็นต์
ในทำนองกลับกัน ถ้าบล็อกมีขนาด 1 กิโลไบต์ แต่ในขนาดที่ไฟล์ข้อมูลมีถึง 50 กิโลไบต์ จำทำให้ใช้เนื้อที่ ในการเก็บข้อมูลถึงไฟล์ละ 50 บล็อก แต่ละบล็อกไม่ได้จัดเรียงในที่เดียวกันจึงทำให้เสียเวลาในการหา (seek time) ของข้อมูลในแต่ละบล็อกเป็นอย่างมาก
จะพบว่าการกำหนดขนาดของบล็อกที่เหมาะสมจะเพิ่มประสิทธิภาพของคอมพิวเตอร์ และทำให้การใช้เนื้อที่ในดิสก์เกิดความคุ้มค่า อย่างยิ่ง จากการสำรวจขนาดของไฟล์พบว่าจำนวนครึ่งหนึ่งของไฟล์ข้อมูลมีขนาดมากว่า 1680 ไบต์ 

การเก็บรวบรวมเนื้อที่ว่างภายในดิสก์
หลังจากที่คุณกำหนดของบล็อกได้แล้ว สิ่งสำคัยอีกประการหนึ่งคือการจัดเตรียมบล็อกที่ว่างภายในดิสก์ไว้สำหรับ เก็บไฟล์ข้อมูลที่ต้องการ วิธีใช้ในการรวบรวมบล็อกว่างภายในดิสก์คือการใช้ลิงค์ลิสต์ ( link list ) เนื้อที่ว่างดังกล่าวจะถูกรวบรวมเป็นสายเพื่อจัดเตรียมให้ระบบปฏิบัติการนำ ไปจัดสรรให้ไฟล์ต่างๆ นำไปใช้เก็บข้อมูล สมมติคุณแบ่งขนาดของบล็อกไว้เป็นขนาดเท่า ๆ กันบล็อกละ 1 KB และกำหนดขนาดของหมายเลขประจำบล็อกไว้เท่ากับ 2 ไบต์ ทำให้ในเนื้อที่ แต่ละบล็อกใช้เก็บหมายเลขบล็อกได้ 1024/2 เท่ากับ 512 บล็อกในจำนวนนี้กรณีที่มีจำนวนบล็อกมากกว่า 512 บล็อกจะต้องใช้บล็อกเก็บหมายเลขมีมากกว่า 1 บล็อก ดังนั้นแต่ละบล็อกที่ใช้เก็บหมายเลขเพียง 511 หมายเลข ส่วนในหมายเลขสุดท้ายจะใช้เก็บบล็อกหมายเลขถัดไป




อ้างอิง
http://www.ict.up.ac.th/worrakits/OS.files/PDF/%E0%B8%9A%E0%B8%97%E0%B8%97%E0%B8%B5%E0%B9%88%208%20File%20Management%202_52.pdf

https://prezi.com/jbl75liy5up9/file-management/

http://csnon04.blogspot.com/2008/03/6.html

บทที่5 หน่วยความจำเสมือน Virtual Memory

บทที่5
หน่วยความจำเสมือน
Virtual Memory
จัดทำโดย
นาย สราวุฒิ เชื้อกสิกรรม รหัสนักศึกษา6031280064

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

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


หลักการ
หาก RAM พอก็ใช้ RAM หากเต็มก็ใช้ Disk
วิเคราะห์
ลองวิเคราะห์เหตุการณ์ดังนี้ ว่าจะเกิดอะไรขึ้น
1. มี RAM มากและเปิดโปรแกรมมาน้อย
2. มี RAM มากและเปิดโปรแกรมมาก
3. มี RAM น้อยและเปิดโปรแกรมมาก
Logical Address
เป็นมุมมองที่โปรเซสมองเห็น Address ของตนเอง จะใช้หลักการของ Paging โดยจะเริ่ม Page แรกที่ Page 0
Page Table
เก็บข้อมูลว่า Page แต่ละ Page นั้น Valid หรือไม่
Valid = อยู่ใน Physical Memory แล้ว
Invalid = ไม่อยู่ใน Physical 

Page Fault
Memorเป็นหลักการที่บอกว่า “ขณะนี้ Page นี้ไม่อยู่ใน RAM”
จะมีการส่งสัญญาณ Interrupt ไปที่ CPU เพื่อโหลดข้อมูลที่ต้องการนั้นลงไป

ยามปกติ
ข้อมูลทั้งหมดของโปรเซสจะอยู่ใน Disk ก่อนการ Run ในลักษณะของ Page แต่ละ Page มีขนาดที่เท่ากัน (ขนาดเท่ากับเฟรม)

เมื่อถูกเรียกให้ทำงาน
จะเริ่ม Run ที่ Page แรกก่อน ใน Logical Address ซึ่งจริงๆแล้วอยู่ใน Disk ดังนั้น Page แรกก็จะเกิด Page Fault ทันที
จะโหลด Page แรกมาอยู่ใน RAM และทำงานต่อไปหากมี Page Fault ก็จะทำแบบเดิม
ในความเป็นจริง งานไม่จำเป็นต้องเรียงลำดับของ Page เช่น    0->1->2 เพราะอาจมีการกระโดดข้ามเพจได้ หรือบางเพจอาจไม่ถูกเรียกเลยก็ได้
หาก RAM เต็ม
จะทำการเลือกหา “พื้นที่” (Victim)เพื่อทำการแทนที่ Page นั้น(Page Replacement)

อัลกอริธึมของการหาพื้นที่
จากที่กล่าวมาแล้วว่า หาก RAM เต็มจะต้องทำการแทนที่ Page นั้น เราจะมีวิธีการใดบ้างในการเลือกเพจพื้นที่ที่จะถูกแทนที่
1. FIFO
2. LRU

3. Optimal
อัลกอริธึม FIFO
ย่อมาจาก First-in First-outหรือ มาก่อน ออกก่อนเพจใดเข้ามาใน RAM ก่อน เมื่อ RAM เต็มก็ต้องออกจาก RAM ก่อนเช่นกัน
อัลกอริธึม LRU
ย่อมาจาก Least Recently Usedเป็นอัลกอริธึมที่เหมาะสมที่สุด ในทางปฏิบัติหลักการ => ที่ผ่านมาเพจใดถูกเรียกใช้เป็นปัจจุบันน้อยที่สุด 
จะต้องกลายเป็นพื้นที่
อัลกอริธึม Optimal
เป็นอัลกอริธึมที่ดีที่สุดในทางอุดมคติแต่ในทางปฏิบัติทำได้ยากหลักการ => เพจใดจะใช้อีกในอนาคตอันใกล้ ก็จะเก็บเพจนั้นไว้
ภาวะ Thrashing
เป็นภาวะที่ระบบหยุดการทำงานไปชั่วขณะเกิดจากมี Page Fault เกิดขึ้นตลอดเวลา ทำให้มีการ Swap in และ Swap out เป็นจำนวนมาก
 สาเหตุของการเกิด Thrashing
                             การทำงานของโปรแกรมจะมีธรรมชาติของมันอย่างที่กล่าวมาแล้วว่าโปรแกรมสามารถกระโดดไป-มาได้เมื่อกระโดดไป-มา หากข้อมูลของโปรเซสนั้นไม่อยู่ใน RAM ก็ต้อง Swap in เข้ามาส่วนใหญ่แล้ว พื้นที่ไหนถูกเรียกก็จะทำงานอยู่ในบริเวณใกล้ๆกันเรียกว่า การอ้างถึงใกล้ๆ (Locality of Reference)
ดังนั้น ถ้าเรารู้ Locality of Reference ของแต่ละโปรเซสเราก็สามารถ 
Working Set Model
เป็นวิธีการที่จะหาขอบเขตการทำงานของกลุ่มย่อยๆ (Locality of Reference) ภายในโปรเซสเริ่มโดยการเขียน Reference String 
Reference String ก็คือหมายเลขของ Page ทั้งหมดที่โปรเซสจะเรียกใช้เรียงตามลำดับ
ตัวอย่าง 2 6 1 5 7 7 7 7 5 1 6 2 3 4 1 2 3 4 1 2 3 4 4 4 3 4 4 4 4 1 3 2
หลังจากนั้น มองหา Working Set2 6 1 5 7 7 7 7 5 1 6 2 3 4 1 2 3 4 1 2 3 4 4 4 3 4 4 4 4 1 3 2
Plan การใช้งาน RAM ของมันได้
Demand Segmentation
                                                         

เป็นการพัฒนาจาก Demand Pagingหลักการ => แบ่งโปรเซสออกเป็น Segmentเริ่มทำงานที่ Main Segmentเมื่อเกิด Segment Fault ก็จะ Swap in เอา Segment ที่ต้องการเข้ามาใน RAMหลังจากนั้นจะทำงานต่อไปวิธีนี้จะใช้ RAM มากกว่าแบบ Demand Paging แต่การ Thrashing จะเกิดขึ้นได้ยาก
อ้างอิง
https://sites.google.com/site/pee7492/hnwy-khwam-ca-semuxn-virtual-memory
https://www.google.co.th/url?sa=t&rct=j&q=&esrc=s&source=web&cd=11&cad=rja&uact=8&ved=0ahUKEwiEw7vWl_zYAhUBaI8KHSz4DaIQFghaMAo&url=http%3A%2F%2Fweb.chandra.ac.th%2Frawin%2Fos2%2Fvirtual_mem.ppt&usg=AOvVaw2rPEQD-IG4raE0c_3-AZoB