วันพฤหัสบดีที่ 6 มีนาคม พ.ศ. 2551

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

บทที่ 6การจัดการไฟล์(File Management)
แอปพลิเคชันของคอมพิวเตอร์ทั้งหมดจำเป็นต้องมีการเก็บและนำข้อมูลไปใช้งาน ในขณะโปรเซส ข้อมูลจะเก็บอยู่ในพื้นที่จำกัดในแอ็ดเดรส เฉพาะของหน่วยความจำเพื่อการใช้งานที่รวดเร็ว ข้อจำกัดอีกประการหนึ่งคือหน่วยความจำที่เก็บข้อมูลเหล่านี้จำเป็นต้องมีไฟหล่อเลี้ยง นั่นหมายความว่า ถ้าคุณดับเครื่องข้อมูลเหล่านี้จะสูญหายไป ดังนั้นในการเก็บข้อมูลเหล่านี้ จำเป็นต้องมีสื่อที่ใช้ในการจัดเก็บข้อมูล ซึ่งอาจจะเป็นแผ่นดิสเก็ต ฮาร์ดดิสก์ หรืออื่นๆก็ตาม (ระบบปฏิบัติการจะจัดการกับสื่อเก็บข้อมูลอย่างไรนั้น คุณสามารถศึกษาได้จากบทที่ 8 ) ในการจัดเก็บข้อมูลเหล่านี้ลงในสื่อที่กล่าวถึง เพื่อนำไปใช้งานต่อไปนั้นจำเป็นต้องกำหนดชื่อเพื่อแทนกลุ่มข้อมูลที่คุณจัดเก็บ ชื่อที่ว่านี้ก็คือชื่อไฟล์นั่นเอง นอกจากนี้ถ้าคุณจัดเก็บข้อมูลไม่เป็นระเบียบก็จะทำให้การใช้งานทำได้ดีขึ้น การจัดไฟล์เป็นหมวดหมู่ก็คือการจัดเก็บในไดเร็กทอรี ซึ่งทั้งไฟล์และไดเร็กทอรี่ นี่เองที่จะกล่าวถึงในบทนี้ นอกจากนี้ผู้เขียนยังแนะนำระบบไฟล์ที่ใช้งานกันมากๆ ทั้ง Windows 98 และ UNIX อีกด้วย

6.1ไฟล์ข้อมูล
ไฟล์ข้อมูล(file) หมายถึงสื่งที่บรรจุข้อมูลต่างๆไว้ด้วยกัน อาจหมายถึงโปรแกรมหรืออะไรก็ตามที่คุณต้องการที่จะเก็บไว้ด้วยกัน ในการอ้างถึงไฟล์ข้อมูลต่างๆ ภายในโปรแกรม คุณไม่ต้องอ้างถึงแอ็ดเดรสของไฟล์นั้นๆโดยตรง ปล่อยให้เป็นหน้าที่ของระบบปฏิบัติการเป็นตัวการ ในระบบปฏิบัติการจะมีโอเปอร์เรชันที่เรียกว่า System call เป็นตัวจัดการที่เกี่ยวข้องไฟล์ เช่นการสร้างไฟล์ การลบไฟล์ การอ่าน/การเขียนไฟล์ เป็นต้น โดยที่ System call สามารถที่จะจัดการกับงานที่เกี่ยวข้องกับไฟล์ลงไปถึงแอ็ดเดรสของไฟล์นั้นๆ

6.1.1 การตั้งชื่อไฟล์
จุดประสงค์ในการออกแบบระบบปฏิบัติการอย่างหนึ่งคือต้องการที่จะให้เป็นผู้ใช้เป็นอิสระจากอุปกรณ์ใดๆ (device independent) ดังนั้นในการแอ็กเซสไฟล์ข้อมูลไชใดๆ จะต้องมีรูปแบบเดียวกัน นอกจากนั้นวิธีการในการแอ็กเซสไฟล์ข้อมูลใดๆ คุณไม่จำเป็นต้องกำหนดรายละเอียดให้ยุ่งยากวุ่นวายถึงแอ็ดเดรส เพียงแค่คุณระบุชื่อและนามสกุลของไฟล์ให้ถูกต้องก็เพียงพอแล้ว
ในการกำหนดชื่อไฟล์ ในแต่ละระบบปฏิบัติการนั้นมีความแตกต่างกันอยู่บ้าง แต่ส่วนใหญ่แล้วจะมีข้อกำหนดที่ใกล้เคียงกัน ระบบปฏิบัติการบางตัวกำหนดให้การตั้งชื่อโดยขึ้นต้นด้วยอักษร และตามด้วยตัวเลข หรือตัวอักษรไม่เกิน 8 ตัว ระบบปฏิบัติการบางตัวกำหนดให้ตั้งชื่อได้โดยอิสระไม่เกิน 255 ตัว
ในระบบปฏิบัติการบางระบบกำหนดการตั้งชื่อด้วยตัวอักษรตัวใหญ่ตัวเล็กไม่เหมือนกัน เช่นใน UNIX การตั้งชื่อถ้าเป็นตัวใหญ่ จะต้องอ้างถึงด้วยตัวใหญ่เช่นกัน ถ้าอ้างอิงด้วยตัวเล็กจะถือว่าเป็นคนละชื่อกัน ตัวอย่างเช่น Name, NAME, name, กรณี UNIX จะถือว่าไฟล์อยู่ 3 ไฟล์ที่แตกต่างกัน เป็นต้น แต่สำหรับ MS-DOS จะถือว่าเป็นชื่อเดียวกันใน Windows 95, Windows 2000 และ Windows NT ฏ้ยังคงใช้ระบบไฟล์แบบเดียวกับ MS-DOS
ในระบบปฎิบัติการส่วนใหญ่แล้วชื่อไฟล์จะประกอบด้วยสองส่วนด้วยกันคือส่วนที่เป็นชื่อหลัก ละส่วนขยาย ( file extension) ทั้งสองส่วนนี้จะถูกขั้นด้วยจุด (period) ในระบบ MS-DOS ส่วนที่เป็นชื่อหลักจะประกอบด้วยตัวอักษร 1 ถึง 8 ตัวด้วยกันแล้วตามด้วยส่วนขยายอีกไม่เกิน 3 ตัว เป็นต้น แต่สำหรับในระบบของ UNIX อาจมีส่วนขยายได้มากกว่า 1 ส่วนก็ได้ เช่น prog.c.z

6.1.2 โครงสร้างไฟล์
การจัดโครงสร้างไฟล์ที่ใช้กันโดยทั่วไปมี 3 วิธีดังรูป 6.1 วิธีการแรก (รูป 6.1 ก) มีการเก็บเป็นไบต์เรียงติดกันต่อไป ดังเช่นระบบปฎิบัติการของ UNIX และ Windows การเก็บไฟล์ในลักษณะนี้เป็นแบบที่ไม่มีโครงสร้างในการจัดเก็บ ไฟล์ที่ถูกสร้างใหม่จะถูกนำมาเรียนต่อกันไปเรื่อยๆจนเต็มเนื้อที่ โดยที่ตัวระบบปฎิบัติการเองแทบจะไม่ได้ทำหน้าที่อะไรเลย วิธีที่สอง (รูป 6.1 ข) เก็บเป็นเรกคอร์ด โดยทีขนาดของเรกดอร์ดคงที่ ในแต่ละไฟล์จะถูกเก็บอยู่ในรูปของเรกคอร์ดจัดเรียงกันไปตามลำดับจนถึงเรกคอร์ดสุดท้าย ซึ่งในเรกคอร์ดสุดท้ายอาจจะไม่เต็มเรกคอร์ดก็ได้ ในการอ่านเขียนจะทำไปที่ละเรกคอร์ด ในระบบปฎิบัติการบางระบบอาจกำหนดให้แต่ละเรกคอร์ดมีขนาดเท่ากับ 80 ตัวอักษร ซึ่งเท่ากับ 1 บรรทัดพอดี วิธีนี้ใช้ในระบบปฎิบัติการ CP/M ส่วนวิธีที่สาม (รูป 6.1 ค) เก็บเป็นแบบต้นไม้หรือทรี (tree) ของบล็อก แต้บล็อกจะประกอบไปด้วยเรกคอร์ด โดยมีขนาดของเรกคอร์ดขึ้นอยู่กับปัจจัยหลายประการ เช่น ขนาดไฟล์ข้อมูล เวลาที่ใช้ในการแอ็กเซสข้อมูล (Access time) เป็นต้น วิธีนี้ใช้ในระบบปฎิบัติการหลายเครื่องด้วยกัน


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

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

6.2.2 ระบบไดเร็กทอรี 2 ระดับ (Two-Level Directory Systems)
โครงสร้างระบบไดเร็กทอรีแบบนี้สามารถแก้ไขปัญหาของระบบไดเร็กทอรีแบบแรกได้แต่ไม่ได้เต็มร้อยเปอร์เซ็นต์ การจัดโครงสร้างไดเร็กทอรี 2 ระดับ จะกำหนดให้ผู้ใช้แต่ละคนสามารถสร้างไดเร็กย่อยของตนได้เรียกว่า “สับไดเร็กทอรี” ( Sub-directory) หรือไดเร็กทอรีย่อย ในแต่ละสับไดเร็กทอรี จะอยู่ภายใต้ไดเร็กทอรีรากเดียวกัน (root directory) ภายในสับไดเร็กทอรีผู้ใช้สามารถกำหนดชื่อไฟล์ได้ตามใจโดยไม่ต้องไปกังวลว่าจะไปซ้ำกับชื่อของใครเพราะแม้นว่าตั้งชื่อซ้ำกับชื่อไฟล์ในไดเร็กทอรีอื่นก็จะไม่เกิดปัญหาการเขียนทับที่ทำให้ข้อมูลสูญหาย อย่างไรก็ตามระบบไดเร็กทอรีแบบนี้ก็ยังคงมีปัญหาอย่างอื่นอีก คือ ในกรณีที่ผู้ใช้มีไฟล์หลายประเภทจะไม่สามารถแยกประเภทของไฟล์ต่างๆ ได้ตามต้องการ ยกตัวอย่างเช่น นักเรียนแต่ละคนมีวิชาเรียนหลายวิชา ไม่สามารถแยกรายวิชาเรียนต่างๆ ในการจัดเก็บลงในสับไดเร็กทอรีได้ ทำให้งานต่างๆถูกปะปนอยู่ในไดเร็กทอรีเดียวกัน
6.2.3 ระบบไดเร็กทอรีหลายระดับ (Hierarchical Directory System)
เพื่อแก้ปัญหาระบบไดเร็กทอรีทั้ง 2 ระบบดังกล่าวข้างต้นระบบปฏิบัติการจึงยอมให้มีการสร้างโครงสร้างไดเร็กแบบนี้ขึ้นมา ระบบโครงสร้างไดเร็กทอรีแบบนี้เรียกอย่างหนึ่งว่า “โครงสร้างต้นใจ” (Tree structure) ผู้ใช้สามารถสร้างไดเร็กทอรีขึ้นมาได้โดบไม่จำกัดอยู่ในไดเร็กทอรีเดียวกัน ระบบไฟล์ในปัจจุบันใช้โครงสร้างไดเร็กทอรีแบบนี้ เพราะสามารถแก้ปัญหาที่มีอยู่ได้ทั้งหมด
6.2.4 ชื่อพาธ (Path name)
ในการอ้างถึงไฟล์ใดๆ ก็ตามจำเป็นต้องระบุที่อยู่ของไฟล์นั้นๆ ให้ถูกต้อง ว่าอยู่ในไดเร็กทอรี หรือสับไดเร็กทอรีใด ในการกำหนดที่อยู่หรือเส้นทางที่จะเข้าถึงไฟล์นั้นๆ คุณเรียนว่า “พาธ” (path) เพื่อให้ระบบได้รู้ว่าคุณต้องการอ้างถึงไฟล์ใดในดิสก์จำเป็นอย่างยิ่งที่คุณจะต้องบอกพาธให้ถูกต้อง เพราะถ้าคุณกำหนดแค่ชื่อไฟล์ที่ต้องการอย่างเดียวนั้นคงไม่เพียงพอที่จะเข้าไปถึงไฟล์นั้นได้ จงอย่าลืมว่าคุณสามารถสร้างชื่อไฟล์ซ้ำกันได้ในกรณีที่ไฟล์เหล่านั้นอยู่ต่างไดเร็กทอรีกัน การบอกพาธจะทำให้ระบบทราบว่าคุณกำลังอ้างถึงไฟล์ใดและอยู่ที่ไหนในระบบวิธีอ้างถึงชื่อไฟล์นั้นมีอยู่ 2 วิธี วิธีแรก เป็นการอ้างชื่อไฟล์แบบสัมบูรณ์ (absolute path name) และการอ้างชื่อแบบสัมพัทธ์ ( relative path name )
การอ้างชื่อไฟล์แบบสัมบูรณ์ เป็นการอ้างชื่อไฟล์โดยเริ่มต้นจากราก ( root ) เสมอตามด้วยชื่อสับไดเร็กทอรีย่อยต่างๆไล่ลงมาตามลำดับชั้นของไดเร็กทอรีที่สร้างขึ้นจนกระทั่งถึงไดเร็กทอรีที่ไฟล์บรรจุอยู่ และจบลวด้วยชื่อไฟล์นั้น ยกตัวอย่าง คุณมีระบบไดเร็กทอรี ดังรูป 6.2 ถ้าต้องการอ้างถึงไฟล์ชื่อ dict.doc คุณสามารถอ้างถึงได้โดย
ในระบบปฏิบัติการ Windows(MS DOS) \user\lib\dict.doc
ในระบบปฏิบัติการ UNIX /user/lib/dict.doc
ในระบบปฏิบัติการ MULTICS lib>dict.doc

จะเห็นได้ว่าในแต่ละระบบปฏิบัติการนั้นมีวิธีในการอ้างถึงไฟล์ต่างๆ ในดิสก์ที่คล้ายกัน ดังนั้นถ้าคุณมีความเข้าใจในระบบปฎิบัติการอย่างใดอย่างหนึ่งอย่างท่องแท้แล้ว คุณสามารถเรียนรู้และทำความเข้าใจในระบบปฎิบัติการอื่นๆได้โดยไม่ยาก
ส่วนการอ้างถึงไฟล์แบบสัมพันธ์นั้นจะต้องทำความเข้าใจเกี่ยวกับระบบไดเรคทอรีปัจจุบัน (currint directory) ให้เข้าใจเสียก่อน ผู้ใช้สามารถอ้างถึงไฟล์ใดๆจากไดเรกทอรีปัจจุบันได้โดยตรงและยังสามารถย้ายการทำงานจากไดเร็กทอรีปัจจุบันไปยังไดเร็กทอรีใดๆของดิสก์ได้ วิธีการอ้างชื่อพาธแบบสัมพันธ์จะเริ่มต้นจากไดเร็กทอรีปัจจุบันไล่ไปตามลำดับของไดร็กทอรีที่ไฟล์นั้นอยู่และจบลงด้วยชื่อไฟล์นั้นๆ สมมุติว่าไดเร้กทอรีปัจจุบันคือ usr (ตามรูป 6.2) ถ้าต้องการอ้างถึงไฟล์ dict.doc จะต้องอ้างด้วย lib\dict.doc โดยตรงได้เลย
ในกรณีที่ไฟล์ที่คุณต้องการอ้างถึงไฟล์ที่อยู่คนละแขนงของทรีจำเป็นตองใช้สัญลักษณ์.. เข้ามาช่วย เช่นถ้าต้องการอ้างถึงไฟล์ math.h ในขณะที่ไดเรกทอรีปัจจุบันอยู่ที่ไดเร็กทอรี lib คุณสามารถอ้างได้ด้วย ..\..\bin\math.h สัญลักษณ์ .. ในกรณีนี้หมายถึงไดเร็กทอรีที่อยู่เนือขึ้นไปหนึ่งระดับ นอกจากนี้ยังมีสัญลักษณ์อีกอย่างหนึ่งคือ . จะหมายถึงไดเรกทอรีปัจจุบัน ตัวอย่างการใช้ได้แก่กรณีที่คุณต้องการก็อปปี้ไฟล์ math.h มาเก็บไว้ในไดเร็กทอรี lid ชื่อเป็นไดเร็กทอรีปัจจุบันคุณสามารถใช้คำสั่งได้ดังนี้ copy \bin\math.h.
ข้อแตกต่างของพาธที่คุณอ้างถึงสังเกตได้จากการใช้สัญลักษณ์ที่เป็นเครื่องหมายราก ถ้าเราอ้างถึงไฟล์ที่ขึ้นต้นด้วยเครื่องหมาย ” / ” หรือ ” / ” เป็นการอ้างแบบสัมบูรณ์ แต่ถ้าเป็ฯการอ้างแบบสัมพันธ์ จะขึ้นต้นด้วยไดเร็กทอรีย่อย หรือชื่อไฟล์โดยตรง
6.2.5 คำสั่งของไดเร็กทอรี (Directory Operations)
คำสั่งต่างที่ใช้ เกี่ยวกับไดเร็กทอรีมีอยู่มากมาย หลายคำสั่ง ทั้งนี้ก็ขึ้นอยุ่กับแต่ละระบบปฎิบัติการ ตัวอย่างของตำสั่งต่างๆ เหล่านั้น จะใช้คำสั่งที่มีชื่อคล้ายๆ กัน เช่น ในระบบปฎิบัติการ UNIX มีคำสั่งต่างๆ ที่เกี่ยวกันไดเร็กทอรีดังนี้
1. Create
2. Delete
3. Opendir
4. Closedir
5. Readdir
6. Rename
7. Link
6.3 กรทำงานของระบบไฟล์ (File system implementation)
มุมมองในระบบไฟล์คุณสามารถมองได้เป็น 2 มุมมองด้วยกันคือ ในมุมมองแรกเป้นมุมมองของผู้ใช้ ในมุมมองนี้ผู้ใช้รู้แต่เพียงว่าจะตั้งชื่อไฟล์อย่างไร มีข้อกำหนดอย่างไรบ้างในการตั้งชื่อ ซึ่งผู้ใช้จะต้องรู้ว่าแต่ละระบบปฏิบัติการมีข้อกำหนดในการตั้งชื่อไฟล์ที่เหมือนกัน ผู้ใช้จะต้องรู้คำสั่งต่างๆ (Operations)ของไฟล์ว่ามีคำสั่งอะไรบ้าง โครงสร้างของไดเร็กทอรีของแต่ละระบบไฟลืเป็นอย่างไร ผู้ใช้รู้เพียงเท่านี้ก็เพียงพอกัยการทำงานในระบบไฟล์แล้วสำหรับในมุมมองแรก
ในอีกมุมมองหนึ่งเป็นของผู้สร้างระบบไฟล์ที่จะต้องรู้และเข้าใจว่าไฟล์และไดเร็กทอรีต่างๆ ที่สร้างขึ้นมาถูกจัดเก็บลงบนดิสก์อย่างไร จะมีวิธีจัดสรรเนื้อที่ดิสก์อย่งไร ให้สามารถจัดเก็บข้อมูลได้มากที่สุดและคงประสิทธิภาพสูงสุด รวมไปถึงการสร้างความเชื่อมันให้กับผู้ใช้ ว่าข้อมูลที่มีการบันทึกใส่ลงบนดิสก์แล้วจะไม่สูญหายไปไหน ซึ่งสิ่งต่างๆ เหล่านี้ในมุมมองของผู้สร้างจะต้องวิเคราะห์เพื่อจะหาจุดที่เหมาะสมในหารสร้างระบบแต่ละระบบที่มีตัวแปรต่างๆ ซึ่งไม่เหมือนกัน
6.3.1 โครงสร้างของระบบไฟล์(File system layout)
ระบบไฟล์ทุกๆ ระบบจำเป็นต้องมีการจัดเก็บข้อมูลลงบนสื่อต่างๆ ที่ใช้เก็บข้อมูล ในปัจจุบันสื่อเหล่านี้มีหลายชนิดได้แก่ แผ่นดิสก์ เทป ซีดีรอม เป็นต้น แต่สื่อที่เป็นที่นิยมแพร่หลาย และมีราคาถูก ได้แก่ ดิสก์ โครงสร้างของระบบดิสก์สนับสนุนการแอ็กเซสข้อมูลแบบสุ่ม (Random access) โคงสร้างดิสก์สามรถแบ่งพาร์ติชันในการเก็บข้อมูลได้ แต่ละพาร์ติชันมีความเป็นอิสระต่อกัน อีกทั้งยังสามารถกำหนดให้แต่ละพาร์ติชันมีระบบปฏิบัติการที่ต่างกันได้อีกด้วย
ภายในดิสก์จะถูกแบ่งออกเป็ฯเซ็กเตอร์(Sector)เริ่มต้นจากเซ็กเตอร์ 0 ซึ่งถือว่าเป็น Master Boot Record (MBR) เซ็กเตอร์วึ่งเป็นเซ็กเตอร์ที่ใช้เบค่าเริ่มต้นของระบบปฎิบัติการสำหรับการบูตเครื่องคอมพิวเตอร์เมื่อเริ่มต้นใช้งาน ในต้อนท้ายของเซ็กเตอร์นี้ยังประกอบด้วบตารางพาร์ติชัน (Partition table) ซึ่งจะเก็บแอ็ดเดรสเริ่มต้น และแอ็กเดรสสุดท้ายของแต่ละพารืติชันเอาไว้ ในแต่ละพาร์ติชันจะประกอบไปด้วย Boot block โปรแกรมใน Boot block จะทำหน้าที่ในหารดาวโหลดระบบปฏิบิตการในพาร์ติชันออกมาทำงาน ทุกๆ การ์ติชันจะมี Boot block เป็ฯของตัวเอง แต่ว่าในพาร์ติชันอาจจะไม่มีระบบปฏิบิตการก็ได้ โครงสร้างภายในแต่ละพาร์ติชันจะแตกต่างกันขึ้นอยู่กับระบบปฏิบิตการที่ใช้อยู่ซึ่งจะกำหนดโครงสร้างของไฟล์ในดิสก์ในขณะที่ทารฟอร์แมตดิสก์

6.3.2 วิธีจัดเก็บข้อมูลไฟล์ (Implementation file)
สิ่งสำคัญสำหรับการจัดเก็บไฟล์ข้อมุลลงบนสื่อเก็บข้อมุลคือ จะต้องทราบว่าแต่ละๆฟล์มีการเก็บอย่างไรเก็บไว้ที่ไหน และสามารถเรียกออกมาใช้งานได้อย่างไร ไฟล์ต่างๆ เหล่านั้นมีการจักเก็บทั้งไฟล์ หรือ แต่ละไฟล์ถูกแยกเก็บเป็ยบล็อก และบล็อกต่างๆ เหล่านั้นจัดเรียงกันอย่างไร ซึ่งวิธีการเหล่านี้จะได้ศึษารายละเอียกกันดังต่อไปนี้
3.3.2.1 การจัดเก็บข้อมูลแบบต่อเนื่อง (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 สำหรับวิธีจัดเก็บข้อมูลแบบต่อเนื่อง สามารถสร้างประสิทธิภาพได้สูงสุดในการค้นหาข้อมูล เนื่องจากการจัดเก็บบล็อกข้อมูลเรียงต่อเนื่องจึงไม่เสียเวลาในการค้นหาบล็อกทุกๆ บล็อกเพียงแต่หาบล็อกแรกพบก็สามารถอ่านข้อมูลได้ทั้งไฟล์แล้ว
สำหรับข้อเสียของการเก็บข้อมูลแบบต่อเนื่องก็มีความสำคัญเช่นเดียวกันเพราะวธีการเก็บข้อมูลวิธีนี้จำเป็นต้องอาศัยการเก็บข้อมูลที่ต่อเนื่องเมือจำนวนำฟล์ข้อมูลเพิ่มจำนวนมากขึ้น ประกอบกับขนาดของข้อมูลเมื่อมีการแก้ไขขนาดใหญ่ขึ้น ทำให้ไม่สามารถหาเนื้อที่ในการบรรจุไฟล์ข้อมูลดังกล่าวได้

ขนาดไฟล์มรขนาดไหญ่ขึ้น จึงจำเป็นต้องถูกย้ายออกไปเก็บที่อื่น ด้วยเหตุนี้เองจึงทำให้มีเนื้อที่ที่ซึ่งไม่ต่อเนื่องเกิดขึ้นระบบปฏิบิตการจำเป็นจะต้องจัดสรรเนื้อที่บริเวณนี้ให้กับไฟล์อื่นซึ่งมีขนาดที่ไม่ใหญ่กว่าเนื้อที่เดิม ด้วยเหตุนี้เองการจัดเก็บข้อมูลแบบนี้จึงทำหเกิดเนื้อที่ว่างมากมายระหว่างไฟล์ข้อมูลบนดิสก์ เมื่อมีการเก็บข้อมูลกระจายจนเต็มดิสก์ทำให้เกิดปัญหาสำหรับไฟล์ข้อมูลขนาดใหญ่ไม่สามารถหาเนื้อที่ว่างในการเก็บข้อมูลได้แม้จะมีเนื้อที่เหลือมากพอแต่ไม่สามารถเรียกใช้ได้เพราะเนื้อที่เหล่านั้นอยู่กระจัดกระจายกันทั่วทั้งดิสก์
อย่างไรก็ตาม ปัญหาดังกล่าวตามที่ได้อธิบายไปนั้นสามารถแก้ปัญหาได้กับสื่อข้อมูลประเภทซีดีรอมเพราะเสื่อประเภทนี้มีการจัดเก็บข้อมูลเพียงครั้งเดียว(Read Memory)จึงไม่เป็นปัญหาสำหรับสื่อประเภทนี้และเป็นวิธีที่เหมาะสมที่สุดสำหรับซีดีรอม
6.3.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 ไบต์
6.3.2.3 ไอโหนด (I-nodes หรือ Index node)
เป็นวิธีการที่ใช้กันในระบบปฏิบัติการของ UNIX โดยการสร้างตารางเล็กเรียกว่า “ไอโหนด” (I-node) ให้กับแต่ละไฟล์ไอโหนดจะเก็บข้อมูลต่างๆที่เกี่ยวข้องกับไฟล์เอาไว้ ภายในไอโหนดจะมีหมายเลขบล็อกแบบ direct 10 หมายเลข, แบบ single direct1
หมายเลข,แบบ double direct1 หมายเลข และแบบ triple direct1 หมายเลข หมายเลข บล็อกแบบ direct 10 หมายเลข หมายถึงแต่ละหมายเลขจะเก็บหมายเลขของแต่ละบล็อกไว้ 10 บล็อก สมมุติแต่ละบล็อก มีขนาด 1 KB ทั้ง 10 หมายเลข จะเก็บข้อมูลได้ 10KB ถ้าขนาดไฟล์ข้อมูลไม่เกิน 10 KB จะสามารถใช้ ไอโหนดแบบ direct ก็เพียงพอแล้ว
ถ้าขนาดของไฟล์ใหญ่กว่า 10 KB แต่ไม่เกิน 266 KB (10+256 KB) ภายในไดโอดจะมีหมายเลขบล็อกแบบ direct 10 หมายเลข และแบบ single direct 1 หมายเลข แบบ direct 10 หมายเลข สามารถอ้างจำนวนบล็อกได้ 10 บล็อก บวกกับ single direct สมมุติว่า 1 หมายเลขของ single direct มีขนาด1 KB (1024 byte) แต่ละบล็อกใช้พอยเตอร์ 4 ไบต์ ในกรเชื่อมโยงแต่ละบล็อกเป็นลิงก็ลิสต์ของไฟล์ข้อมูลเข้าด้วยกัน ดังนั้น ในแต่ละบล็อกสามารถเก็บลิงค์ลิสต์ได้เท่ากับ 1024/4 = 256 หมายเลข
ในกรณีที่ขนาดไฟล์ใหญ่เกินกว่า 266 KB แต่ไม่เกิน 65802 KB (10+256+(256*256)KB)ภายในไอโหนดจะมีหมายเลขบล็อกแบบ direct 10หมายเลข แบบ single direct 1 หมายเลข และแบบ double direct 1 หมายเลข สำหรับแบบ double direct สามารถใช้เก็บจำนวนบล็อกได้ถึง 256*256 บล็อก
สุดท้ายสำหรับกรณีที่ขนาดของไฟล์ใหญ่เกินกว่า 65802 KB จำเป็นจะต้องใช้ไอโหนด triple direct 1 หมายเลข นั้นหมายถึงสามารถเพิ่มจำนวนบล็อกได้อีก 256*256*256 ซึ่งจะเท่ากับ 16 GB

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


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



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

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

รูป 6.7 เส้นทึบ (สเกลด้านซ้าย) ให้อัตราการถ่ายโอนข้อมูลของดิสก์ ส่วนเส้นประ (สเกลด้านขวา) แสดงประสิทธิภาพของเนื้อที่ว่างดิสก์ ที่ไฟล์ทั้งหมดมีขนาด 2 KB (MOS:P412)
เมื่อพิจารณาหมายเลขบล็อกที่มีขนาด 2 ไบต์ จะพบว่าสามารถอ้างถึงจำนวนบล็อกได้เพียง 216 เท่ากับ 65536 บล็อกเท่านั้น ถ้าแต่ละบล็อกมีขนาด 1 KB นั้นแสดงว่าขนาดของฮาร์ดดิสก์สูงสุดไม่เกิน 64 MB (26 * 216 *210) ดังนั้น ถ้าต้องการเก็บหมายเลขของบล็อกได้มากกว่านี้จะต้องกำหนดขนาดของหมายเลขไว้ เป็น 4 ไบต์ หรือ 8 ไบต์ (ใช้เป็นเลขฐานสองยกกำลังเพื่อความเร็วในการจัดการข้อมูล) สมมติว่ากำหนดของหมายเลขไว้ 4 ไบต์ เท่ากับ 232 (22*210*210*210)
สำหรับอีกวิธีหนึ่งใสการเก็บรวบรวมบล็อกว่างในดิสก์ คือการใช้ "บิตแม็ป" (bit map) ในดิสก์จะถูกแบ่งออกเป็น n บล็อก จะใช้จำนวนบิตเท่ากับ n บิต เรียงกันเพื่อการตรวจสอบการใช้งานของบล็อกต่าง ๆ ในดิสก์ถ้าบล็อกใดว่าง จะถูกเซตให้บิตของบล็อกนั้นเป็น 1 ส่วนบล็อกที่ใช้เก็บไฟล์แล้วจะถูกเซตให้เป็น 0 ถ้าเปรียบเทียบทั้งสองวิธีจะพบวาวิธีที่สองสามรถประหยัดเนื้อที่ในการเก็บ หมายเลขบล็อกได้มากกว่าเมื่อเทียบกับวิธีการแรกในดิสก์ขนาด 20 MB ถ้ากำหนดขนาดของบล็อกไว้ เท่ากับ 1 KB ดังนั้นในดิสก์จะมี 20 กิโลไบต์บล็อก ถ้าใช้บิตแม็ปเพื่อเก็บเนื้อที่ว่างในดิสก์ จะต้องเสียเนื้อที่ในดิสก์ 20 KB กิโลบิต หรือเท่ากับ 2.5 KB แต่ถ้าใช้ลิงค์ลิสต์ จะใช้เนื้อที่ในดิสก์ถึง 16 เท่า ในกรณีที่กำหนดขนาดของพอยเตอร์ไว้ที่ 2 ไบต์

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

6.3.7 การทำแบ็คอัพข้อมูล (Backups)
การทำแบ็คอัพข้อมูลมีความสำคัญมากสำหรับไฟล์ข้อมูลที่สำคัญๆ หลายคนคิดว่าการทำแบ็คอัพข้อมูลจะทำให้เสียเวลา ถ้าลองพิจารณาอย่างรอบคอบ การเสียเวลาในการก้อปปี้ข้อมูลจะดีกว่าถ้าข้อมูลต่างๆ ของคุณสูญหายไป การทำแบ็คอัคข้อมูลจะทำบ่อยขนาดไหนนั้นขึ้นอยู่กับความสำคัญของข้อมูล และการแก้ไขข้อมูลให้ทันสมัยอยู่ตลอดเวลาหรือไม่ การทำแบ็คอัคข้อมูลไม่จำเป็นต้องใช้สื่อเก็บข้อทมูลราคาแพงเหมือนดิสก์ คุณสามารถใช้สื่อเก็บข้อมูลประเภทเทปก็ได้ ซึ่งราคาของเทปถูกกว่า เพียงแต่จะเสียเวลามากเท่านั้นเอง
คุณสามารถใช้เทปในการทำแบ็คอัพข้อมูลเพื่อจุดประสงค์ 2 ประการหลัก ๆ คือ ประการแรก เพื่อป้องกันความเสียหายที่เกิดจากตัวเครื่องถูกทำลายเนื่องมาจากสาเหตุต่าง ๆ นานัปการ เช่น ไฟไหม้ น้ำท่วม เครื่องตกกระแทกพื้น อันทำให้เกิดความเสียหายกับตัวเครื่องโดยตรง และเป็นความเสียหายขั้นรุนแรงถึงกับทำให้เครื่องใช้งานไม่ได้ การทำแบ็คอัพไฟล์ข้อมูลเอาไว้ ทำให้ข้อมูลต่าง ที่อยู่ในตัวเครื่องไม่ได้ถูกทำลายไปพร้อมกับตัวเครื่องคุณสามารถซื้อ เครื่องใหม่มาแทนเครื่องเก่าที่ถูกทำลายไปได้ แล้วนำไฟล์ที่สำเนาเอาไว้มา ลงในเครื่องใหม่เท่านี้คุณก็สามารถใช้งานคอมพิวเตอร์ได้ตามเดิม
ประการที่สองคุณสามารถใช้เทปแม่เหล็กในการทำแบ็คอัพข้อมูลเพื่อป้องกันการลบ ข้อมูลโดยมิได้ตั้งใจ หรือโดยไม่ทันคิดว่าข้อมูลดังกล่าวสามารถนำไปใช้ประโยชน์ได้ในอนาคต การทำแบ็คอัพข้อมูลเก่าจัดเก็บลงในเทปทำให้ประหยัดงบประมาณค่าใช้จ่าย คุณสามารถนำข้อมูลดังกล่าวมาใช้ในอนาคต โดยเฉพาะข้อมูลทางด้านสถิติ ข้อมูลเหล่านี้สามารถใช้ในการพยาการณ์อนาคตให้กับบริษัท ได้โดยเฉพาะการวางแผนช่วยให้ผู้บริหารตัดสินใจได้ง่ายขึ้น
การทำแบ็คอัพข้อมูลอาจใช้เวลา และงบประมาณในการซื้ออุปกรณ์เพิ่มเติมบางอย่าง ดังนั้นการทำให้การแบ็คอัพข้อมูลง่ายขึ้นใช้เงินให้น้อยที่สุดนั้นน่าจะเป็น ทางออกที่ดี การทำระบบแบ็คอัพข้อมูลให้มีประสิทธิภาพจะช่วยให้คุณประหยัดเวลาลงได้มาก สิ่งสำคัญอีกประการหนึ่งของระบบการแบ็คอัพข้อมูลคือการทำสำเนาเฉพาะข้อมูล ที่มีการเปลี่ยนแปลงอยู่ตลอดเวลา โดยเฉพาะระบบธนาคารที่ข้อมูลมีการเปลี่ยนแปลงตลอดเวลาจะต้องแบ็คอัพข้อมูล ไว้ทุกวัน สำหรับตัวโปรแกรมซึ่งสามารถหาได้จากบริษัท หรือจากแผ่นโปรแกรมนั้นไม่จำเป็นต้องทำแบ็คอัพไว้เมื่อข้อมูลถูกทำลายคุณ สามารถติดตั้งซอฟต์แวร์ได้จากแผ่นโดยตรง
การบีบอัดข้อมูลก่อนการแบ็คอัพก็สามารถช่วยให้ประหยัดเวลาได้เหมือนกัน ปัจจุบันเครื่องมือที่ช่วยอำนวยความสะดวกในการอัดโปรแกรมให้เล็กลงก่อนการ จัดเก็บ และสามารถขยายให้ใหญ่ขึ้นก่อนการใช้งาน อีกทั้งโปรแกรมดังกล่าวก็ใช้เนื้อที่ไม่มากและมีประสิทธิภาพสูงด้วย ข้อสำคัญที่ควรระวังก็คือ จะต้องเลือกเครื่องมือที่เชื่อถือได้ทุกครั้งที่ข้อมูลถูกอัดให้เล็กลงจะ ต้องมั่นใจว่าข้อมูลดังกล่าวสามารถขยายและนำมาใช้งานใหม่ได้เหมือนเดิม
ประการต่อไปสำหรับการแบ็คอัพข้อมูลลงเทป จะไม่สามารถกระทำได้ขณะข้อมูลกำลังมีการแก้ไขอยู่จะต้องรอไปจนกว่าข้อมูล นั้นแก้ไขจนเสร็จ ถึงจะทำการแบ็คอัพข้อมูลได้ ตัวอย่างในระบบธนาคารจะพบว่าในแต่ละวันธนาคารจะทำการสำรองข้อมูลในขณะเลิก งานของแต่ละวัน เพื่อจะได้ข้อมูลที่ทันสมัยที่สุดของแต่ละวันการแบ็คอัพข้อมูลในแต่ละวันอาจ ใช้เวลานานนับชั่วโมงซึ่งก็ไม่จำเป็นจะต้องเฝ้าอยู่ตลอดเวลา ปล่อยของระบบเป็นตัวจัดการเอง
สุดท้ายสำหรับระบบการแบ็คอัพข้อมูลจะดีเพียงใดก็ตามถ้าปราศจากการรักษาความ ปลอดภัยที่ดี ข้อมูลที่ทำการสำเนาจัดเก็บไว้ถูกขโมยไป ก็ไม่มีประโยชน์ดังนั้นข้อมูลที่สำเนาไว้แล้วควรเก็บในที่ ๆ ปลอดภัย และป้องกันการเกิดภัยจากอุบัติเหตุต่าง ๆ เช่น ไฟไหม้ น้ำท่วม ได้ด้วย เป็นต้น
กลวิธีในการแบ็คอัพข้อมูลจากดิสก์ลงบนเทป สามารถทำได้ด้วยวิธีการหลัก สองประการ วิธีการแรกโดยการแบ็คอัพข้อมูลด้วยวิธีทางกายภาพ ด้วยวิธีการนี้จะทำแบ็คอัพข้อมูลตั้งแต่บล็อกแรกไปตามลำดับจนถึงบล็อกสุด ท้ายของดิสก์แล้วจัดเก็บลงในเทป วิธีนี้เป็นวิธีการที่สะดวกและง่ายในการทำแบ็คอัพแต่ทำให้เกิดผลเสียที่ตาม มาหลายประการด้วยกันคือ ประการแรกทำให้เสียเวลาเป็นอย่างมากโดยเฉพาะถ้าข้อมูลไม่เต็มแผ่นดิสก์ เพราะเนื้อที่ว่างภายในดิสก์ จะเสียเวลาถูกทำแบ็คอัพไปด้วย ประการที่สองถ้ามีบล็อกเสียเป็นจำนวนมาก บล็อกเสียเหล่านั้นทำให้เกิดปัญหาสำหรับระบบปฏิบัติการในการอ่านข้อมูล
วิธีที่สองการแบ็คอัพข้อมูลด้วยวิธีทางตรรกภาพ (logical dump) วิธีการแบ็คอัพข้อมูลวิธีนี้จะเลือกเฉพาะไฟล์ หรือไดเร็กทอรี ที่ต้องการแบ็คอัพเท่านั้น โดยปกติแล้วทำการแบ็คอัพข้อมูลจะทำเฉพาะข้อมูลที่มีการเปลี่ยนแปลงเท่านั้น โดยสังเกตได้จากวันที่ และเวลาที่ได้บันทึกไว้ล่าสุด ด้วยวิธีการนี้ จะขอยกตัวอย่างในระบบ UNIX ซึ่งใช้วิธีเก็บบล็อกต่าง ๆ ของไฟล์ข้อมูลแบบไอโหนดโดยแบ่งออกเป็นขั้นตอนดังนี้ ในขั้นตอนแรกเริ่มตรวจสอบจากไดเร็กทอรีราก ระบบปฏิบัติการตั้งสมมุติฐานว่าทุกไฟล์จะถูกแบ็คอัพไว้ทั้งหมด และตรวจสอบทีละไฟล์ไปตามลำดับ ลงไปในแต่ละไดเร็กทอรี เพื่อดูวันที่ล่าสุดของไฟล์ เมื่อพบว่าไฟล์ใดเป็นวันที่ล่าสุดก็จะจำวันที่นั้นไว้ ส่วนวันที่ก่อนหน้านั้น จะถูกข้ามไปแล้ววนกลับมาเช็คใหม่ในขั้นตอนที่สอง หลังจากการตรวจสอบในรอบผ่านไประบบจะทราบได้โดยทันทีว่าไฟล์ข้อมูลใดมีการ บันทึกเป็นไฟล์ล่าสุด (เพราะได้เช็ควันที่ของไฟล์ไป 1 รอบแล้ว) ดังนั้นในรอบที่สองระบบจะยกเลิกบางไฟล์ที่ตรวจสอบวันที่ดูแล้วปรากฏเป็นวัน ที่ก่อนหน้า หลังจากที่ตรวจสอบผ่านไปในรอบที่สอง ระบบก็จะได้ไฟล์ข้อมูลที่มีการอัปเดทล่าสุดและทำการแบ็คอัพข้อมูลที่ต้องการ ไว้ทั้งหมด


รูป 6.8 ระบบไฟล์ที่แบ็คอัพ สี่เหลี่ยมหมายถึงไดเร็กทอรี ส่วนวงกลมหมายถึงไฟล์ ส่วนที่แรเงาคือส่วนที่มีการแก้ไขตั้งแต่แ บ็คอัพครั้งสุดท้าย แต่ละไดเร็กทอรีและไฟล์กำหนดโดยหมายเลขไอโหนด [MOS:P419]
วิธีการแบ็คอัพข้อมูลด้วยวิธีทางตรรกภาพ (logical dump) สามารถช่วยแก้ปัญหาต่าง ๆ ได้หลายประการ สามารถลดเนื้อที่ของสื่อที่ใช้ทำแบ็คอัพข้อมูลได้จำนวนมาก เพราะวิธีนี้จะสำเนาเฉพาะที่เป็นบล็อกของไฟล์ข้อมูลที่ต้องการเท่านั้น ส่วนเนื้อที่ว่างที่มีเป็นจำนวนมากในตัวที่สื่อต้นฉบับจะไม่ถูกก็อบปี้ลงใน ระบบ UNIX สาทารถนำไฟล์ทีแบ็คอัพมาจัดใหม่ ให้เป็นระเบียบกว่าเดิม โดยทำการเชื่อมต่อระหว่างบล็อกเสียใหม่ ไม่ให้กระจัดกระจายจนเกินไป ก็จะช่วยทำให้ค้นหาข้อมูลได้เร็วขึ้น

6.3.8 ประสิทธิภาพของระบบไฟล์ (File System performance)
ถ้าพิจารณาจากการอ่านข้อมูลจากฮาร์ดดิสก์ กับแผ่นฟล็อปปี้ดิสก์จะพบว่ามีความแตกต่างกันโดยสิ้นเชิงสาเหตุที่เป็นเช่น นี้ เพราะการอ่านข้อมูลจากฮาร์ดดิสก์ จะใช้เวลาเพียง10 MB/sec ในขณะที่อ่านข้อมูลจากฟล็อปปี้ดิสก์จะต้องเสียเวลาในการค้นหาบล็อกข้อมูลที่ ต้องการ การเคลื่อนหัวอ่านไปยังบล็อก การส่งข้อมูลต่างๆเหล่านี้ล้วนกินเวลามากกว่าฮาร์ดดิสก์หลายสิบเท่า ดังนั้นหลายๆ ระบบจึงมีการออกแบบให้ระบบมีประสิทธิภาพสูงสุดด้วยวิธีการที่ต่างๆ กันดังต่อไปนี้

6.3.8.1 การใช้แคช (Caching)
การใช้แคชเป็นเทคนิคที่ใช้ในการลดเวลาที่ใช้ในการอ่านข้อมูล แทนที่จะใช้อ่านข้อมูลจแผ่นดิสก์โดยตรง แต่กลับให้ไปอ่านจากหน่วยความจำแทน คำว่า แคช (Caching) เป็นคำมาจากภาษาฝรั่งเศสว่า cacher แปลว่า หลบซ่อน หรือหลุมดัก ในทางคอมพิวเตอร์จะใช้เป็นที่รวบรวมบล็อกต่าง ๆ ที่ใช้เป็นประจำรวมไว้ด้วยกันในหน่วยความจำแคช เมื่อโปรแกรมต้องการอ่านข้อมูลจะมาตรวจสอบที่แคชก่อนซึ่งทำได้เร็วมาก ถ้าไม่พบจึงจะไปอ่านจากดิสก์มาเก็บลงในแคชเป็นอันดับแรก แล้วจึงนำข้อมูลนั้นไปใช้ต่อไป
การนำตาราง Hash Table มาใช้เป็นเทคนิคอันหนึ่งที่ใช้ได้ผล เนื่องจากข้อมูลชุดหนึ่ง ๆ ที่ต้องการไม่สามารถจัดเก็บให้อยู่ภายในบล็อกเดียวกันได้ การอ่านข้อมูลชุดหนึ่งจึงจะประกอบด้วยจำนวนบล็อกตางกัน บางชุดลิงค์ของข้อมูลแต่ละชุด จึงทำให้การอ่านข้อมูลทำได้ง่าย และรวดเร็ว เพราะไม่ต้องเสียเวลาในการหาบล็อกที่ต่อเนื่องกัน


รูป 6.9 โครงสร้างของหน่วยความจำแคช [MOS:P425]

จากรูป 6.9 บล็อกที่มักจะเรียนใช้เป็นประจำมักจะอยู่ทางด้านท้ายของหน่วยความจำแคช บริเวณนี้เองที่ถูกเรียกว่า MRU (Most Recently Used block) ส่วนบล็อกที่ถูกอ่านเข้ามาใหม่จะเก็บไว้ทางวด้านหน้า หรือบล็อกที่ไม่ค่อยได้ถูกใช้งาน ก็จะเก็บไว้บริเวณด้านหน้านี้เช่นกัน ซึ่งมีชื่อเรียกว่า LRU (Least Recently Used block)
การใช้หน่วยความจำแคชทำให้เกิดปัญหาบางประการได้แก่ ในกรณีข้อมูลที่เรียกครั้งแรกและมีการแก้ไขข้อมูลดังกล่าวภายในบล็อกนั้น ๆ อาจถูกย้ายออกจากหน่วยความจำแคชทันที โดยไม่ได้บันทึกข้อมูลล่าสุดกลับลงดิสก์ก่อน เพราะข้อมูลภายในบล็อกนั้นใช้เพียงครั้งเดียว และตำแหน่งของบล็อกนั้นเป็นตำแหน่งแรกพร้อมที่จะถูกย้ายออกไป เมื่อมีบล็อกใหม่ถูกอ่านเข้ามาแทน ในหน่วยความจำแคชทำให้เกิดปัญหาความน่าเชื่อถือของระบบไฟล์ลดลงไป
การแก้ปัญหาในเรื่องความน่าเชื่อถือของระบบไฟล์ลดลง สามารถใช้วิธีการเก็บข้อมูลในหน่วยความจำแคชให้นานขึ้น หรือเก็บข้อมูลไว้ในหน่วยความจำแคช จนกระทั่งปิดเครื่อง วิธีการนี้อาจจะไม่ได้ผลเพราะขนาดของหน่วยความจำแคชมีน้อยมากเมื่อเทียบกับ หน่วยความจำที่มีอยู่ นอกจากวิธีแก้ปัญหาวิธีนี้แล้ว ยังมีวิธิอื่นอีกคือการเขียนข้อมูลล่าสุดที่แก้ไขแล้วลงในดิสก์ทันที ซึ่งเป็นการแก้ไขปัญหานี้ได้ดีที่สุด และมีใช้ในระบบปฏิบัติการหลาย ๆ ระบบ เชน ในระบบของ UNIX และ MS-DOS

6.3.8.2 การอ่านบล็อกข้อมูลไว้ล่วงหน้า ( Block Read Ahead )
การอ่านบล็อกข้อมูลไว้ล่วงหน้าเป็นอีกเทคนิคหนึ่งที่ใช้ ในการเพิ่มประสิทธิภาพให้กับระบบ ด้วยวิธีการนี้อาศัยสมมุติฐานข้อมูลที่ต้องการมักจะถูกเก็บอยู่ในหลายๆ บล็อกที่ต่อเนื่องกัน ด้วยวิธีการเก็บข้อมูลแบบเรียงลำดับจึงเป็นไปได้ว่าบล็อกที่ต้องการจะอยู่ใน บล็อกถัดไป ดังนั้น การอ่านบล็อกล่วงหน้า 1 บล็อก จะมีโอกาสได้ข้อมูลซึ่งเป็นบล็อกที่ต้องการ ซึ่งเป็นที่ทราบกันอยู่แล้วว่าเวลาที่ใช้ในการค้นหาบล็อกที่มีมากกว่าการ อ่านข้อมูลจากบล็อกหลายเท่า ดังนั้นวิธีนี้จึงเป็นเทคนิคที่ช่วยเพิ่มประสิทธิภาพให้กับระบบใดบ้าง ในกรณีที่ระบบไฟล์นั้นมีการจัดเก็บเป็นแบบเรียงลำดับ สำหรับระบบการจัดเก็บไฟล์อื่น ๆ เช่น เช่น การแอ็กเซสแบบสุ่ม การอ่านบล็อกล่วงหน้าจะใช้ไม่ได้ผล เพราะบล็อกดังกล่าวไม่ใช่ข้อมูลที่ต้องการ

6.3.8.3 การลดการเคลื่อนที่ของหัวอ่าน ( Reducing Disk Arm Motion )
เป็นอีกเทคนิคหนึ่งที่ใช้การควบคุมคู่ไปกับกลไกทางด้านฮาร์ดแวร์ โดยการควบคุมหัวอ่านให้มีการเคลื่อนที่น้อยที่สุด วิธีการนี้ต้องอาศัยการเก็บไฟล์ข้อมูลควบคู่กัน การจัดเก็บข้อมูลลงไฟล์ จะเก็บให้อยู่ใน Cylinder เดียวกัน หัวอ่านจะไม่ต้องเคลื่อนที่ ตัวแผ่นดิสก์ซึ่งหมุนอยู่ตลอดเวลาสามารถอ่าน และเขียนได้ถ้าบล็อกต่าง ๆ เหล่านั้นอยู่บนเส้นรอบวงอันเดียวกัน ทำให้วิธีการนี้สามารถลดเวลาในการค้นหาข้อมูลได้ และลดการเคลื่อนที่ของหัวอ่านด้วย
นอกจากนี้การใช้เทคนิคอื่น ๆ เช่น การกำหนดขนาดของบล็อกให้ใหญ่ขึ้น ก็เป็นอีกเทคนิคหนึ่งที่ใช้ได้ การกำหนดขนาดบล็อกให้ใหญ่ขึ้นทำให้สามารถลดเวลาการค้นข้อมูล (Seek time) ได้มากขึ้น ตัวอย่างเช่น ถ้าเดิมขนาดของบล็อกที่กำหนดไว้เท่ากับ 1 ___ ถ้าเพิ่มเป็น 2 เท่า เป็น 2__ สามารถลดเวลาในการค้นข้อมูล ได้ 1 ครั้ง สมมุติไฟล์ที่ต้องการอ่านมีขนาด 12 __ ไฟล์นี้ต้องการเนื้อที่ในการเก็บ เท่ากับ 12 บล็อก ซึ่งจากเดิมต้องใช้เวลาค้นหาถึง 12 ครั้ง ก็จะเหลือเพียง 6 ครั้งเท่านั้น เป็นต้น เป็นที่ทราบกันโดยทั่วไปแล้วว่า ระบบจะเสียเวลาไปกับการค้นหาข้อมูลไปกว่า 80 เปอร์เซ็นต์ ดังนั้นเทคนิคนี้จึงใช้ได้ผลดีเป็นอย่างยิ่ง แต่ก็มีข้อควรพิจารณาถึงขนาดของบล็อกที่ใหญ่เกินไป ซึ่งจะมีผลกระทบทางด้านอื่น ๆ เช่นกัน โดยเฉพาะทำให้เกิดเนื้อที่ว่างภายในบล็อกสุดท้ายของไฟล์ข้อมูล

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

6.4.1 ระบบไฟล์ของซีดีรอม
ระบบไฟล์ของซีดีรอมจะใช้เป็นตัวอย่างแรกในหัวข้อนี้ระบบไฟล์ภายในซีดีรอม เป็น ระบบที่ง่ายที่สุดเพราะภายในระบบนี้เป็นแบบเขียนได้เพียงครั้งเดียว เมื่อเทียบกับระบบไฟล์อย่างอื่นแล้วระบบนี้ไม่ต้องการมีการบริกหารเนื้อที่ สำหรับการแก้ไข หรือการเปลี่ยนแปลงข้อมูลใดๆ เลย เนื้อที่บนแผ่นซีดีรอมสามารถใช้ในการจัดเก็บข้อมูลได้อย่างต่อเนื่อง โดยที่ผู้ใช้ไม่ต้องกังวลเกี่ยวกับการลบหรือแทรกข้อมูลแต่อย่างใด ตามมาตรฐานสากลในปี ค.ศ. 1988 กำหนดไว้ว่าซีดีรอมที่ผลิตขึ้นจะต้องสามารถใช้ได้กับคอมพิวเตอร์ทุก ๆ ระบบ การจัดเก็บข้อมูลภายในซีดีรอมจะต้องเป็นอิสระจากทุกระบบปฏิบัติการ
โครงสร้างภายในของซีดีรอมแตกต่างจากโครงสร้างของจานแม่เหล็ก (ฟล็อปปี้ดิสก์, ฮาร์ดดิสก์) โดยสิ้นเชิง ในขณะที่จานแม่เหล็กมีการเก็บข้อมูลเป็นวงแหวนหลาย ๆ วงจัดเรียงไปจากวงเล็กที่อยู่วงในไปถึงวงนอกสุดซึ่งเป็นวงใหญ่ที่สุด แต่โครงสร้างภายในของซีดีรอมมีการจัดเก็บข้อมูลในลักษณะคล้ายลานนาฤอกาแต่ละ วงจะต่อเนื่องกันเป็นขดเดียวกัน การเก็บข้อมูลในระหว่างซีดีเพลงจะแตกต่างจากซีดีที่ใช้เก็บข้อมูล
ตามมาตรฐาน ISO 9660 ซีดีรอมทุกแผ่นจะประกอบด้วยบล็อกต่าง ๆ จัดเรียงกันตามลำดับดังต่อไปนี้ คือ 16 บล็อกแรกเป็นส่วนที่ใช้สำหรับบูตเครื่องคอมพิวเตอร์จากแผ่นซีดีรอม เหมือนกับเซ็กเตอร์ 0 ของแผ่นดิสก์ที่ใช้บูตเครื่องคอมพิวเตอร์จากไดรฟ์ A ส่วนถัดมาเรียกว่า Primary volume descriptor ใช้สำหรับเก็บข้อมูลทั่ว ๆ ไปของแผ่นซีดีรอมส่วนนี้กำหนดเนื้อที่ 32 ไบต์สำหรับชื่อระบบปฏิบัติการที่ใช้เวลาที่เขียนข้อมูลลงในแผ่น 32 ไบต์ ถัดมาเป็นชื่อแผ่นซึ่งผู้ใช้เป็นผู้กำหนด ไบต์ ถัดมาเป็นชื่อของบริษัทผู้ผลิตและจำหน่าย และส่วนสุดท้ายใช้เก็บข้อมูลทั่วไป
นอกจากนั้นในบริเวณนี้ (Primary volume descriptor) ยังเก็บข้อมูลสำคัญอย่างอื่นที่ไม่แสดงให้เห็นอีก 3 อย่างคือ ตำหนิแสดงลิขสิทธิ์ของแผ่น ข้อมูลที่เป็นรายละเอียดเกี่ยวกับแผ่น และคีย์ต่าง ๆ ที่แสดงรายละเอียดข้อมูล เช่น ขนาดของบล็อก (1KB, 2KB, 4KB, 8KB ) จำนวนบล็อกที่ใช้เก็บข้อมูลของแผ่น วันที่หมดอายุของแผ่น ข้อมูลที่เกี่ยวข้องกับไดเร็กทอรีราก เช่น แอ็ดเดรส เป็นต้น
แต่ละไดเร็กทอรีเก็บบนซีดีรอมจะประกอบไปด้วยข้อมูลที่สำคัญ โดยแบ่งออกเป็นเป็นฟิลด์ต่าง ๆ ระหว่าง 10-12 ฟิลด์ แต่ละฟิลด์ประกอบด้วยข้อมูล ต่าง ๆ ตามรูป 6.10 ซึ่งเป็นรูป


จากรูปแสดงฟิลด์ต่าง ๆ ตามมาตรฐาน 9660 สามารถอธิบายรายละเอียดของแต่ละฟิลด์ได้ดังต่อไปนี้
1. Directory entry length บอกความยาวของข้อมูลไดเร็กทอรี
2. Extended attribute record length บอกความยาวของ attribute record
3. Location of file บอกตำแหน่งที่เก็บไฟล์
4. File size บอกขนาดไฟล์ข้อมูล
5. Date and time บอกวันที่ เวลาที่เก็บไฟล์ข้อมูล
1. Flags มีขนาด 1 ไบต์ หรือ 8 บิต แต่ละบิตให้ข้อมูลซึ่งเป็นรายละเอียดของไฟล์
2. Interleave เป็นฟิลด์ขนาด 2 ไบต์ มีไว้เพื่อแยกไฟล์ข้อมูลออกเป็นส่วน ๆ ซึ่งยังไม่มี การนำมาใช้งาน
3. CD# เป็นฟิลด์ขนาด 4 ไบต์ เพื่อกำหนดหมายเลขของแผ่นซีดีรอม
4. L ใช้บอกขนาดของไฟล์ข้อมูล
5. File name บอกชื่อไฟล์มีสองส่วนคือ ชื่อที่มีจำนวนอักษรไม่เกิน 8 ตัว ตามด้วยจุด และนามสกุลมีจำนวนอักษรไม่เกิน 3 ตัว
6. Ver เป็นฟิลด์ที่ใช้ระบุเวอร์ชันของระบบปฏิบัติการ
7. Sys เป็นฟิลด์ที่ใช้ระบุระบบปฏิบัติการของแผ่น

6.4.2 ระบบไฟล์ของ Windows 98
Windows ในเวอร์ชันก่อน Windows 98 ใช้ระบบไฟล์ MS – DOS เข้ามาช่วยจัดการเกี่ยวกับไฟล์ข้อมูลซึ่งในเวอร์ชันนี้เป็นการตั้งชื่อไฟล์ แบบ 8 + 3 ( ชื่อ + สกุล ) และใช้ตาราง FAT – 16 ในระบบไฟล์ หลังจากที่ได้มีการพัฒนาตาราง FAT – 32 ขึ้นมาใช้งาน ระบบไฟล์สามารถขยายเนื้อที่การเก็บข้อมูลได้มากกว่า 8 GB นอกจากนั้นคุณยังสามารถตั้งชื่อไฟล์ได้มากกว่าในเวอร์ชันเก่าเสียอีก เหล่านี้ได้รวมไปถึง Windows ME Windows 2000 Windows XP ด้วย


รูป 6.11 ขยายโครงสร้างระบบไฟล์ของ MS – DOS มาใช้ใน Windows 98 [MOS : P443]

ปัญหาของชื่อไฟล์เริ่มเกิดขึ้นเมื่อมีการใช้ระบบไฟล์ที่ต่างกัน ในระบบที่ใช้ MS-DOS คือเวอร์ชัน ตั้งแต่ Windows98 ขึ้นไป ชื่อไฟล์สามารถตั้งได้มากกว่า 8 ตัวอักษร เมื่อนำไปเปิดในเวอร์ชันที่ต่ำกว่า จะทำอย่างไร ปัญหาดังกล่าวทางบริษัทไมโครซอฟต์ได้พิจารณาหาทางออก โดยกำหนดชื่อไฟล์ให้เสียใหม่ เมื่อไฟล์ดังกล่าวนำไปใน MS-DOS หรือเวอร์ชันที่ต่ำกว่า Windows98 ชื่อไฟล์ที่ยาวเกิน 8 ตัวอักษร จะถูกกำหนดให้มีความยาว 6 ตัว และตามด้วย "~1" ตัวอย่างเช่น ถ้าตั้งชื่อไฟล์ว่า "ระบบไฟล์ของ Windows98" เมื่อไฟล์นี้นำไปเปิดบน MS-DOS จะเหลือ เช่น ถ้ามีไฟล์ที่สองในไดเร็กทอรีเดียวกันเป็น "ระบบไฟล์ของ Windows 3.11" เมื่อไฟล์นี้จะนำไปเปิดบน MS-DOS จะใช้ชื่อไฟล์ "ระบบไฟล์~ 2" ก็จะเปลี่ยนไป
ทุกไฟล์จะมีชื่อเป็นของระบบ ถูกเก็บอยู่รวมกันในรูปแบบที่ต่างกัน ไดเร็กทอรีของ ดังรูป 6.11 และในแต่ละชื่อไฟล์ยาว ๆ ก็มีเนื้อที่เก็บไว้อีกที่หนึ่งในแบบของ ดังตัวอย่างรูป 6.12



ในแต่ละฟิลด์ของตารางประกอบด้วยส่วนต่าง ๆ ดังนี้
1. Sequence มีขนาด 1 ไบต์ แต่ใช้เพียง 6 บิต สามารถแสดงลำดับที่ได้ 64 (26) ตำแหน่ง ดังนั้น จึงสามารถเก็บชื่อไฟล์ได้ เท่ากับ 64* 13 = 832 ตัวอักษร
2. 5 characters of file name มรขนาด 10 ไบต์ แต่ใช้เก็บ 5 ตัวอักษรสลับกับช่องว่าง
3. Attribute มีขนาด 1 ไบต์ ใช้เก็บรหัสย่อของคุณสมบัติไฟล์
4. 6 characters of file name มีขนาด 12 ไบต์ แต่ใช้เก็บ 6 ตัวอักษรสลับกับช่องว่าง
5. 2 characters of file name มีขนาด 4 ไบต์ แต่ใช้เก็บ 2 ตัวอักษรสลับกับช่องว่าง

6.4.3 ระบบไฟล์ของ UNIX
UNIX เป็นระบบปฏิบัติการที่ใช้ซีพียูร่วมกัน ( Multiuser file systems ) ระบบไฟล์ของ UNIX มีโครงสร้างแบบต้นไม้ เริ่มจากไดเร็กทอรีรากแตกกิ่งก้านออกไปได้เรื่อย ๆ อย่างไม่รู้จบ ชื่อไฟล์สามารถตั้งได้ถึง 14 ตัวอักษรด้วยกัน UNIX ไดเร็กทอรี ในแต่ละไฟล์จะมี 1 ไดเร็กทอรีเอนทรีย์ ( Directory entry ) ด้วยกัน แต่ละเอนทรีย์ประกอบด้วย 2 ฟิลด์คือชื่อไฟล์ และหมายเลขไอโหนด


ในตารางไอโหนด จะใช้เก็บคุณสมบัติต่าง ๆ ของไฟล์ไว้ เช่น ขนาดของไฟล์เจ้าของไฟล์ การป้องกันข้อมูลในไฟล์ วันที่จัดเก็บ วันที่แก้ไข และวันที่ใช้ข้อมูล เป็นต้น นอกจากนี้ในตารางไอโหนดยังประกอบด้วยตัวนับ (counter) ซึ่งเชื่อมบล็อกข้อมูลไฟล์ไว้ด้วยกัน เมื่อใดที่ลิงค์ไปที่ไอโหนด ตัวนับจะถูกบวกไปครั้งละหนึ่ง และเมื่อลิงค์ถูกย้ายออกไปทีละหนึ่ง และเมื่อใดที่ตัวนับเท่ากับ 0 เนื้อที่บล็อกของไฟล์จะถูกคืนให้กับระบบเพื่อไว้เก็บไฟล์อื่นๆ อีกต่อไป
การใช้ลิงค์เชื่อมดยงบล็อกตาง ๆ ของไฟล์ ในระบบปฏิบัติการ UNIX ทำได้ 3 แบบดังได้อธิบายในหัวข้อก่อนหน้านี้ คือ Single indirect block, Double indirect block และ Triple indirect block ดังรูป 6.15 และ 6.16

รูป 6.15 ไอโหนดของ UNIX [MOS:P447]


รูป 6.16 ขั้นตอนในการเข้าไปใน /usr/don/mail [MOS:P447]
6.5 สรุป
ในการจัดเก็บข้อมูลลงในสื่อเก็บข้อมูลจะต้องมีการตั้งชื่อกลุ่มข้อมูล ชื่อที่ว่านี้เรียกว่า ไฟล์ ในการแอ็กเซสไฟล์คุณไม่จำเป็นต้องทราบแอ็ดเดรส ของไฟล์ที่ต้องการไฟล์ ระบบปฏิบัติการจะจัดการให้คุณผ่านทางโอเปอเรชันที่เรียกว่า System call ซึ่ง system call เหล่านี้จะช่วยคุณสร้าง ลบ อ่าน และเขียนไฟล์ต่าง ๆ ได้
ระบบปฏิบัติการยังช่วยเก็บไฟล์ในกลุ่มเดียวกันไว้ในไดเร็กทอรี ( Directory ) ซึ่งไดเร็กทอรีเป็นไฟล์ประเภทหนึ่งที่ช่วยแบ่งกลุ่มไฟล์ที่จัดเก็บในสื่อที่ เป็นกลุ่มเพื่อให้การใช้งานมีประสิทธิภาพ โครงสร้างไดเร็กทอรีก็มีทั้งแบบ ไดเร็กทอรีเดี่ยว ไดเร็กทอรี 2 ระดับ และไดเร็กทอรีหลายระดับ
สื่อที่ปัจจุบันเป็นนิยมนำมาจัดเก็บไฟล์คือดิสก์ (Disk) ซึ่งเป็นจานแม่เหล็กที่สามารถแบ่งพาร์ติชันเพื่อสะดวกในการจัดเก็บข้อมูล ภายในดิสก์แบ่งออกเป็นเซ็กเตอร์ (Sector) โดยเริ่มจากเซ็กเตอร์ 0 ที่เรียกว่า Master Boot Record ซึ่งใช้ในการเก็บระบบปฏิบัติการเพื่อใช้ในการบูตเครื่อง ส่วนการจัดเก็บข้อมูลของไฟล์ก็มีหลายวิธี ทั้งที่เป็นการจัดเก็บแบบต่อเนื่อง การจัดเก็บแบบลิงค์ลิสต์หรืออาจจะแบ่งออกเป็นไอโหนด (ใน UNIX) นอกจากทั้งที่เป็นการจัดเก็บแบบต่อเนื่อง การจัดเก็บแบบลิงค์ลิสต์ หรือ อาจจะเป็นแบบตารางไอโหนด (ใน UNIX นอกจาก นี้ระบบปฏิบัติการยังมีหน้าที่ในการจัดการเนื้อที่ว่าง การสร้างความน่าเชื่อถือในการใช้งาน ตลอดจนการทำเป็นอัพข้อมูล และการกำหนดรูปแบบเพื่อให้ใช้ดิสก์อย่างมีประสิทธิ์ภาพ ไม่ว่าจะเป็นการใช้แคช การอ่านบล็อกข้อมูลล่วงหน้า รวมถึงการลอการเคลื่อนที่ของหัวอ่านในดิสก์ด้วย

ไม่มีความคิดเห็น: