Make your own free website on Tripod.com

 

 

 

 

 

 

 

 

 

       
หลักการ

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

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


ลำดับชั้นของข้อมูล

ี่        วิธีหนึ่งที่ใช้พิจารณษหลักการของแฟ้ม คือการมองแฟ้มว่าเป็นหน่วยใหญ่ของข้อมูล ซึ่งประกอบด้วยหน่วยย่อยต่างๆ ที่รู้จักกันดี โดยเริ่มที่หน่วยย่อยที่สุดของข้อมูลก่อน ดังนี้ ข้อมูลทั้งหมดที่จัดการโดยคอมพิวเตอร์ประกอบด้วยบิต (bit) คือเลขฐานสอง 0 และ 1 แต่ละบิตสามารถมีค่าเป็น 0 หรือ 1 ดังนั้นจึงแทนที่สารสนเทศได้เพียงจำกัด คือแยกระหว่างสองสถานะ เช่น จริง-เท็จ เปิด-ปิด และเขียว-แดง เป็นต้น เพื่อให้สามารถแสดงสารสนเทศได้มากขึ้น บิตจึงถูกรวมต่อกันเข้าเป็นสาย เพื่อแสดงสารสนเทศอะไรก็ได้ โดยที่ 2 ยกกำลัง n สภาวะของสารสนเทศ สามารถแทนได้ด้วยแถวของบิต n บิต
แต่เพื่อให้สะดวดต่อการใช้งาน จึงมีการตัดทอนสายของขิตเหล่านี้ให้เป็นหน่วยที่ใหญ่ขึ้น โดยปกติเครื่องคอมพิวเตอร์ในปัจจุบัน จะรวม 8 บิตเป็น 1 ไบต์ (byte) หรือ 1 อักขระ (character) ซึ่ง 8 บิตนี้สามารถแทนอักขระได้ 256 แบบ เซตของอักขระที่แทนได้นี้ มีมาตรฐานอยู่สองแบบด้วยกันคือ แอสกี้ (ASCII-American Standard Code for Information Interchange) และ เอ็กซีดิก (EBCDIC-Extended Binary Coded Decimal Interchange Code)
เขต (field) คือสายของอักขระที่สัมพันธ์กัน เขตตัวเลข (numeric field) ประกอบด้วยอักขระที่เป็นตัวเลขแต่อย่างเดียว เขตอักษร (alphabetic field) ประกอบด้วยอักขระที่ไม่ใช่ตัวเลขและเขตเลขอักษร ประกอบด้วย ตัวเลข อักษร และช่องว่าง (blank) เขตอักขระ (character) ประกอบด้วยอะไรก็ได้ สารสนเทศที่ปรากฏอยู่ในเขต ปกติเป็นหน่วยย่อยที่สุดของข้อมูลทีบรรจุอยู่ในแฟ้ม เช่น เป็นเลขรหัสประจำตัวบุคลากร เงินเดือนของลูกจ้าง หรือหมายเลขโทรศัพท์ของพนักงาน
ระเบียน (record) คือกลุ่มของเขตที่สัมพันธ์กัน เช่นระเบียนของนักเรียนแต่ละคนอาจประกอบด้วย เขตสำหรับรหัสประจำตัว ชื่อและสกุล ที่อยู่ เลขหมายโทรศัพท์ แต้มเฉลี่ยสะสม สาขาวิชาเอก และอื่นๆ กุญแจระเบียน (record key) คือเขตที่แยกระเบียนต่างๆ จากกัน เช่น ระเบียนของนักเรียนจะใช้รหัสประจำตัวเป็นกุญแจระเบียน
แฟ้ม (file) คือกลุ่มของระเบียนที่สัมพันธ์กัน (คือเป็นเรื่องเดียวกัน) เช่นแฟ้มนักศึกษาอาจมีแต่ละระเบียนสำหรับนักศึกษาแต่ละคน แฟ้มสินค้าคงคลังอาจมีระเบียนสำหรับแต่ละชนิดของอะไหล่ หรือแฟ้มบัญชีเรียกเก็บอาจมีระเบียนสำหรับลูกค้าแต่ละรายของบริษัท
ลำดับชั้นสูงสุดของข้อมูลโดยปกติ คือฐานข้อมูล (database) ฐานข้อมูลคือ กลุ่มของแฟ้มที่สัมพันธ์กัน

องค์ประกอบของระบบแฟ้ม

        นอกเหนือไปจากตัวแฟ้มเองแล้ว ระบบแฟ้มยังประกอบไปด้วยซอฟต์แวร์กลุ่มหนึ่ง ซึ่งเอื้ออำนวยต่อการใช้งาน การจัดเก็บ และความปลอดภัยให้กับผู้ใช้ ซึ่งซอฟแวร์กลุ่มนี้สามารถแยกประเภทออกเป็น 3 กลุ่ม เพื่อควบคุมและจัดการงานต่างๆ ดังนี้
1. วิธีการเข้าถึง (access method) ซึ่งแบ่งได้เป็น 2 ประเภท คือ
1. วิธีการเข้าถึงโดยอาศัยตำแหน่ง สำหรับวิธีการเข้าถึงประเภทนี้ พิจารณาเฉพาะช่องหรือบริเวณที่บรรจุข้อมูล โดยไม่สนใจกับเนื้อความที่มีอยู่ในบริเวณนั้นๆ เปรียบเสมือนการพิจารณาเฉพาะที่ตั้งของบ้านพักอาศัย โดยมิได้สนใจว่าเป็นบ้านชั้นเดียวหรือสองชั้น มีบริเวณหรือไม่ เจ้าของเป็นใคร มีใครอยู่บ้าง จะสนใจก็เฉพาะบริเวณหรือขนาดของที่ดินเท่านั้น ซึ่งขนาดของที่ดินมีผลต่อการอ้างอิงตำแหน่งที่ตั้งเชิงสัมพันธ์
วิธีการเข้าถึงโดยอาศัยตำแหน่งนี้ แบ่งเป็นสองประเภทคือ แบบเรียงลำดับ และแบบตรง วิธีการเข้าถึงแบบเรียงลำดับ (sequential access method) เมื่อกล่าวถึงวิธีการเข้าถึงแบบเรียงลำดับ ก็มักนึกถึงแฟ้มที่อยู่ในเทปแม่เหล็ก นั่นคือการเข้าถึงนอกจากจะเป็นโดยตำแหน่งโดยไม่สนใจเนื้อความแล้ว ยังเป็นตำแหน่งสัมพันธ์อย่างง่ายด้วย กล่าวคือสามารถเข้าถึงข้อมูลในระเบียนหรือไบต์ "ก่อน" (previous) หรือ "หลัง" (next) ข้อมูลที่ตำแหน่ง "ปัจจุบัน" (current) จะเห็นว่าในการประมวลผลเรียงลำดับ (sequential processing) ที่ใช้กันโดยปกตินั้น ก็เป็นการเข้าถึงโดยอาศัยตำแหน่งแบบสัมพันธ์ และเฉพาะตำแหน่งหลังจากตำแหน่งปัจจุบันเท่านั้น
วิธีการเข้าถึงแบบตรง (direct access method) ในการเข้าถึงแบบนี้ใช้ตำแหน่งแห่งที่เฉพาะของสารสนเทศ (ในระดับระเบียนหรือระดับไบต์) ซึ่งตำแหน่งเหล่านี้ปกติเป็นเลขจำนวนเต็มเรียงกันจากน้อยไปมาก โดยเริ่มนับตำแหน่งที่ต้นแฟ้มเป็นตำแหน่งแรก ซึ่งแน่นอนว่าการจัดเก็บแฟ้มต้องเอื้ออำนวยการเข้าถึงแบบนี้ด้วย หากการจัดเก็บใช้อุปกรณ์ความจำที่เป็นแบบเรียงลำดับ เช่น เทป ก็ต้องมีกลไกซึ่งจำลองการทำงานแบบตรงด้วยการทำงานแบบเรียงลำดับ เช่น ใช้วิธีอ่านเรียงลำดับไปทีละระเบียน พร้อมกับนับจำนวนระเบียนที่อ่าน ไป จนกระทั่งไปถึงระเบียนหมายเลขที่ต้องการ เป็นต้น
การเข้าถึงแบบตรงนี้ อาจระบุตำแหน่งตามหน่วยย่อยที่สุดของสารสนเทศ เช่นเป็นตำแหน่งของไบต์นับจากต้นแฟ้ม หรืออาจระบุเป็นหมายเลขระเบียน ซึ่งในกรณีหลัง ต้องมีการแปลงหมายเลขระเบียนออกเป็นตำแหน่งไบต์ เพื่อให้สามารถเข้าถึงได้ในแฟ้มระดับมโนทัศน์ไร้ลักษณ์ (ซึ่งยังไม่ใช่เป็นการเข้าถึงในจานบันทึก) การแปลงนี้สามารถกระทำได้ง่ายๆ เมื่อขนาดของระเบียนคงที่ (fixed-length record) วิธีการเข้าถึงแบบตรงนี้ ยืดหยุ่นกว่าแบบเรียงลำดับ และถูกใช้เป็นรากฐานสำหรับวิธีการเข้าถึงแบบอื่นๆ

วิธีการเข้าถึงโดยอาศัยเนื้อความ

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

ระบบรายนาม
         ในทางมโนทัศน์แล้ว ระบบรายนาม (directory system) เป็นกลไกที่แปลงชื่อที่กำหนดโดยผู้ใช้ ให้เป็นชื่อเฉพาะของแฟ้มที่ใช้อยู่ภายในระบบ ซึ่งชื่อภายในนี้จะถูกนำไปผ่านระบบบ่งลักษณะแฟ้ม เพื่อหาตำแหน่งและลักษณะสมบัติต่างๆ ของแฟ้ม เพื่อใช้ในการทำงานเกี่ยวข้องกับแฟ้มนั้นๆ ต่อไป

โครงสร้างข้อมูลสำหรับรายนาม

        ก่อนที่จะกล่าวถึงระบบรายนามในรูปแบบต่างๆ ต้องทำความเข้าใจเกี่ยวกับความแตกต่างระหว่าง ระบบรายนาม (directory system) กับ รายนาม (directory) เสียก่อน ระบบรายนามนั้นหมายรวมถึงสารสนเทศและกลยทธ์ต่างๆ ซึ่งระบบปฏิบัติการใช้ในการแปลง การจัดการ และการดูแลรักษา ชื่อภายนอกของแฟ้มทั้งหมดภายในระบบคอมพิวเตอร์ สารสนเทศของระบบรายนามนี้อาจประกอบด้วยข้อมูลหนึ่งส่วนหรือหลายๆ ส่วน แล้วแต่ความซับซ้อนของระบบรายนาม แต่ละส่วนข้อมูลเหล่านี้จะถูกเก็บอยู่เป็นแฟ้มพิเศษ แยกเป็นแฟ้มๆ แต่ละแฟ้มนี้เรียกว่า รายนาม (directory) ชื่อพิเศษที่กำหนดให้นี้ เพื่อแยกแฟ้มของระบบรายนามออกจากแฟ้มของผู้ใช้ (file) โดยทั่วไปและโดยปกติ ระบบแฟ้มจะตรวจสอบชนิดของแฟ้มทุกครั้ง เพื่อป้องกันการแอบหรือเผลอเรอนำแฟ้มประเภทรายนามไปใช้ผิด โครงสร้างข้อมูลที่นิยมใช้กันมากสำหรับรายนามคือ แบบเรียงลำดับ ซึ่งแม้ว่าจะช้าต่อการค้นหาและไม่สะดวกในการเปลี่ยนแปลง แต่เนื่องจากจำนวนรายการในรายนามปกติไม่มาก จึงทำให้การค้นหาแบบเรียงลำดับไม่เสียหายมากไปนัก สำหรับการเพิ่มและลบรายการนั้น อาจทำได้โดยเปลี่ยนแปลงแฟล็กหรือบิตบางตัวในรายการ เพื่อแสดงว่ารายการนั้นใช้หรือไม่ วิธีการนี้ทำให้ไม่ต้องโยกย้ายรายการในรายนาม แต่หากรายนามมีจำนวนรายการมากๆ เข้า การค้นหาก็กินเวลานานขึ้น ในลักษณะนี้อาจใช้วิธีการจัดเรียงรายการและค้นหาแบบไบนารี่ (binary search) ซึ่งมีข้อเสียตรงที่ต้องจัดเรียงรายการทุกครั้งที่มีการเปลี่ยนแปลง (เพิ่ม ลด หรือเปลี่ยนชื่อแฟ้ม) อีกวิธีหนึ่งคือใช้แฮชชิ่ง (hashing) ซึ่งจะเห็นได้ว่าวิธีการต่างๆ จะเข้ารูปแบบเดียวกันกับสำหรับแฟ้มข้อมูลธรรมดา

ระบบรายนามลำดับชั้นเดียว

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

ระบบรายนามสองลำดับชั้น

         ข้อเสียที่สำคัญของระบบรายนามแบบลำดับชั้นเดียว คือการสับสนระหว่างชื่อแฟ้มในกรณีที่มีผู้ใช้ระบบหลายๆ คน วิธีแก้คือ จัดรายนามของแต่ละผู้ใช้แยกจากกัน โดยเรียกรายนามประเภทนี้ว่า รายนามแฟ้มผู้ใช้ (user file directory หรือ UFD) รายนามแฟ้มผู้ใช้แต่ละอันมีโครงสร้างข้อมูลแบบเดียวกันทั้งหมด เช่น เป็นแบบเรียงลำดับธรรมดา แต่บรรจุเฉพาะชื่อของแฟ้มของผู้ใช้คนใดคนหนึ่งเท่านั้น รายนามแฟ้มผู้ใช้เหล่านี้ถูกรวมกันเป็นระบบรายนาม โดยอาศัยรายนามอีกประเภทหนึ่งคือ รายนามแฟ้มหลัก (master file directory หรือ MFD) ซึ่งในระบบแฟ้มใดๆ จะมีเพียงอันเดียว รายนามแฟ้มหลักนี้มิได้เก็บรายชื่อของแฟ้ม แต่ใช้เก็บรายชื่อของรายนามแฟ้มผู้ใช้

ระบบรายนามแบบต้นไม้

       
แม้ว่าระบบรายนามแบบสองลำดับชั้นจะแก้ปัญหาความซ้ำซ้อนของชื่อแฟ้มในระบบที่มีผู้ใช้หลายคน แต่สำหรับผู้ใช้แต่ละคนที่มีแฟ้มจำนวนมากๆ ปัญหาความซ้ำซ้อนของชื่อก็ยังคงมีอยู่ วิธีการแก้ไขคือ ให้ผู้ใช้แต่ละคนสามารถแยกกลุ่มของแฟ้มออกตามงานที่ทำหรือตามความต้องการ โดยรวบรวมแฟ้มแต่ละกลุ่มไว้ภายใต้รายนามที่แยกจากกัน นั่นคือให้มีรายนามย่อย (subdirectory) ภายใต้รายนามแฟ้มผู้ใช้ได้ ซึ่งหลักการของรายนามย่อยนี้สมนัยกับนิสัยการใช้ระบบของผู้ใช้โดยทั่วไป เช่น อาจแยกแฟ้มออกเป็นสองรายนามย่อยคือ แฟ้มของงานวิจัยและพัฒนา กับแฟ้มของงานดำเนินการ เป็นต้น การใช้รายการย่อยนี้ อาจจะมองได้จากอีกแง่มุมหนึ่งคือ เมื่อพิจารณาระบบรายนามสองลำดับชั้นว่าเป็นต้นไม้สูง 2 ชั้น ก็เป็นธรรมดาอยู่เองที่ต้นไม้จะเติบโตขึ้น คือกลายจากสถาพ 2 ชั้น แตกกิ่งก้านสาขาออกไปไม่จำกัดจากรากเดียวกัน เกิดเป็นระบบรายนามแบบต้นไม้ เช่น ในระบบยูนิกซ์เป็นต้น มโนทัศน์ที่สำคัญอีกประการหนึ่งของระบบรายนามในปัจจุบันก็คือ การผนวกพฤติกรรมของผู้ใช้เข้าในระบบแฟ้มด้วย มโนทัศน์นี้แสดงให้เห็นได้โดยสิ่งที่เรียกว่า รายนามปัจจุบัน (current directory) หรือรายนามปฏิบัติการ (working directory) รายนามปัจจุบันคือ รายนามที่ผู้ใช้กำลังมุ่งความสนใจไว้ในขณะนั้น หากเปรียบเทียบกันกับการประมวลผลข้อมูลทั่วๆ ไปแล้ว ปกติผู้ใช้จะใช้แฟ้มข้อมูลแฟ้มใดแฟ้มหนึ่งอยู่ในขณะใดๆ เช่น ใช้แฟ้ม "ฉัน" โดยทำการแก้ไขเปลี่ยนแปลงหรือกำลังทำการแปลภาษาอยู่ก็เป็นได้ ในทำนองเดียวกัน จากบรรดารายนามทั้งหลายในระบบรายนาม รายนามปัจจุบันก็คือรายนาม (หรือกลุ่มของแฟ้มและรายนามย่อยในรายนามนั้น) ที่ผู้ใช้กำลังใช้งานอยู่ จึงเป็นที่รู้กันว่า หากผู้ใช้ไม่ได้แจ้งรายละเอียดของแฟ้มที่จะใช้ให้ชัดเจนพอ ระบบรายนามจะถือว่าผู้ใช้กำลังอ้างอิงเทียบกับรายนามปัจจุบัน นั่นเอง โดยปกติเมื่อผู้ใช้ลงบันทึกเข้าใช้ระบบ (log in) ระบบปฏิบัตการจะตรวจสอบแฟ้มบัญชีผู้ใช้ ว่าผู้ใช้นั้นมีลักษณะสมบัติอย่างไรบ้าง ซึ่งลักษณะสมบัติอย่างหนึ่งคือ รายนามปัจจุบันสำหรับตอนเริ่มเข้าใช้ระบบ และเมื่อผู้ใช้เข้าใช้ระบบ (ที่จุดรายนามปัจจุบัน) ก็สามารถเปลี่ยนรายนามปัจจุบันได้ แต่โดยปกติรายนามโดยทั่วไปจะมีสิทธิการใช้งานควบคุมอยู่ ดังนั้นผู้ใช้จะเปลี่ยนการปฏิบัติงานไปที่รายนามใดๆ ตามอำเภอใจไม่ได้ จำต้องได้รับอนุมัติเสียก่อน วิธีการนี้ทำให้การควบคุมการใช้งานในระบบสะดวกขึ้น เพราะผนวกการใช้เข้ากับสิ่งที่จะใช้ การที่มีรายนามปัจจุบันทำให้ผู้ใช้สามารถระบุชื่อทางที่ไม่สมบูรณ์ได้ ชื่อทางที่ไม่เต็มนี้ยึดถือชื่อทางของรายนามปัจจุบันเป็นหลัก (โดยปกติจะต่อท้ายชื่อทางของรายนามปัจจุบัน) จึงเรียกชื่อทางประเภทนี้ว่า ชื่อทางสัมพัทธ์ (relative pathname)

ระบบรายนามแบบกราฟไร้วัฏจักร

         ระบบรายนามแบบต้นไม้ที่ได้กล่าวถึงนั้น แม้จะเหมาะสมต่อการใช้ระบบแฟ้มมากก็ตาม แต่ก็ยังมีข้อบกพร่องตรงที่ไม่อาจใช้แฟ้มร่วมกันได้ การใช้แฟ้มร่วมกันนี้พิจารณาในแง่ของความสะดวก เช่น ผู้ใช้ผู้หนึ่งมีโปรแกรมเล็กๆ โปรแกรมหนึ่งที่ใช้อยู่เป็นประจำ และต้องแก้ไขอยู่เป็นครั้งคราว หากผู้ใช้ผู้นี้มีรายนามย่อยหลายอัน และอยากที่จะได้โปรแกรมนี้บรรจุไว้ในทุกๆ รายนามย่อยของเขา เพื่อจะได้ไม่ต้องเรียกชื่อทางที่ซับซ้อนทุกครั้งที่ใช้ แต่การทำสำเนาของโปรแกรมนี้ไว้ในทุกๆ รายนามย่อย นอกจากจะเป็นการสิ้นเปลืองแล้ว ยังทำให้ลำบากต่อการแก้ไขเปลี่ยนแปลงอีกด้วย วิธีแก้ไขคือกำหนดให้แฟ้มมีชื่อได้มากกว่าหนึ่งชื่อ ซึ่งทำให้เรียกหาแฟ้มเดียวนั้นได้จากหลายจุดในระบบรายนาม หลักการคือสร้างตัวเชื่อม (link) ขึ้นในรายนามที่ต้องการ โดยอ้างอิงถึงแฟ้มที่มีอยู่แล้ว ในตัวเชื่อมนี้ ผู้ใช้จะกำหนดชื่อใดๆ ให้แฟ้มนั้นใหม่ก็ได้
ข้อสังเกตที่สำคัญของการสร้างตัวเชื่อมคือ สามารถเชื่อมไปยังแฟ้มได้เท่านั้น ไม่อาจเชื่อมไปยังรายนามได้ เพราะหากมีการเชื่อมไปยังรายนามแล้ว อาจก่อให้เกิดการวนเป็นวัฏจักรขึ้น ซึ่งทำให้ระบบยุ่งยากมากขึ้น ทั้งในด้านการตรวจสอบและจัดการวัฏจักรเหล่านั้น การที่จำกัดตัวเชื่อมไว้เฉพาะกับแฟ้มนั้น เพราะแฟ้มไม่อาจบรรจุตัวเชื่อมได้อีก โอกาสเกิดวัฏจักรจึงไม่มี จึงเรียกระบบรายนามแบบนี้ว่า ระบบรายนามแบบกราฟไร้วัฏจักร (acyclic graph directory system)
การใช้ตัวเชื่อมนี้ สามารถทำได้สองวิธี วิธีแรกให้ระบุว่ารายการนั้นๆ ในรายนามเป็นตัวเชื่อม แล้วบรรจุชื่อทางของแฟ้มที่จะเชื่อมเข้าไปไว้ในรายการนั้น ดังนั้นเมื่อมีการอ้างอิงถึงชื่อใหม่รายการนี้จะบอกถึงชื่อเก่า ซึ่งจะถูกนำไปใช้ในการค้นหาแฟ้มต่อไป ส่วนอีกวิธีการหนึ่งนั้นให้ทำสำเนาของรายการสำหรับชื่อเก่ามาใส่ไว้ในรายการของชื่อใหม่ ดังนั้นชื่อทั้งสองจะมีศักยภาพทัดเทียมกัน ไม่อาจแยกได้ภายหลังว่าชื่อใดเป็นชื่อเดิม ชื่อใดเป็นตัวเชื่อม ทำให้เกิดความกลมกลืนในระบบไม่ลักลั่นเหมือนอย่างวิธีแรก ข้อเสียที่สำคัญของวิธีที่สองในการทำตัวเชื่อมคือ การดูแลให้สารสนเทศในรายการของชื่อ ทั้งหลายของแฟ้มใดแฟ้มหนึ่งสอดคล้องกันอยู่เสมอ เช่น หากมีผู้ใช้เรียกแฟ้มผ่านชื่อ "ก" แล้วแก้ไขเพิ่มเติมทำให้แฟ้มโตขึ้น เขตข้อมูลที่แสดงขนาดของแฟ้มในรายการสำหรับชื่อ "ก" ก็จะเปลี่ยนแปลงไปตามขนาดที่เปลี่ยนไป แต่ในขณะเดียวกัน หากมีชื่อ "ข" ซึ่งเชื่อมมายังแฟ้มนี้ การเปลี่ยนแปลงที่เกิดขึ้น จะไม่ปรากฏในรายการของชื่อ "ข" ทำให้เกิดความคลาดเคลื่อนขึ้น วิธีการแก้ไขข้อบกพร่องนี้ ทำได้โดยการสอดแทรกเพิ่มเติม ระบบบ่งลักษณะของแฟ้ม กล่าวคือสำหรับแฟ้ม (หมายถึงเนื้อที่ที่ใช้เก็บสารสนเทศ) จะมีชื่อและลักษณะสมบัติภายในเพียงอันเดียว เพราะมีแฟ้มเดียว แต่อาจมีชื่อภายนอกที่ผู้ใช้ตั้งให้กี่ชื่อก็ได้ตามสะดวก เมื่อมีการแยกมโนทัศน์เช่นนี้แล้ว รายการในรายนามก็บรรจุเฉพาะชื่อภายนอก (และข้อมูลบางประการที่ไม่ค่อยสำคัญนัก) ในขณะที่ข้อมูลที่สำคัญต่อการดูแลรักษาแฟ้ม เช่นขนาดและตำแหน่งจะมีอยู่ชุดเดียวอยู่ในระบบบ่งลักษณะ ดังนั้นการเปลี่ยนแปลงสภาพหรือลักษณะสมบัติของแฟ้ม จะก่อให้เกิดการเปลี่ยนแปลงในระบบบ่งลักษณะซึ่งมีอยู่ชุดเดียวสำหรับแฟ้มนั้น ทำให้การเปลี่ยนแปลงใดๆ มีผลกระทบต่อผู้ใช้ทุกคนที่ใช้แฟ้มนี้ร่วมกันอยู่โดยผ่านชื่อภายนอกที่แตกต่างกัน

ระบบบ่งลักษณะแฟ้ม


        ปกติแล้วในระบบแฟ้มอย่างพื้นฐาน สารสนเทศสำหรับการจัดการเกี่ยวกับแฟ้ม จะรวมอยู่กับรายการชื่อแฟ้มนั้นในระบบรายนาม แต่เมื่อระบบรายนามซับซ้อนมากขึ้น เช่นในระบบรายนามแบบกราฟไร้วัฏจักร ซึ่งมีการผนวกสารสนเทศในการจัดการแฟ้มไว้กับชื่อ เริ่มไม่สะดวก เพราะหากแฟ้มใดมีชื่อมากกว่าหนึ่งชื่อ ก็อาจเกิดการลักลั่นระหว่างสารสนเทศควบคุมในทั้งสองที่ได้
สารสนเทศที่ถูกแยกออกมาจากระบบ รายนาม ซึ่งซับซ้อนมากนั้น ถูกรวบรวมและจัดการโดยระบบบ่งลักษณะของแฟ้ม (file description system) โดยลักษณะสมบัติของแต่ละแฟ้มเป็นโครงสร้างข้อมูลขนาดเล็ก ซึ่งเจาะจงบ่งเฉพาะแฟ้มนั้นๆ เท่านั้น โครงสร้างนี้เรียกว่า ตัวบ่งลักษณะของแฟ้ม (file descriptor) หรือ บล็อกควบคุมแฟ้ม (file control block หรือ FCB)

สารสนเทศที่ถูกบรรจุอยู่ในตัวบ่งลักษณะของแฟ้ม โดยปกติประกอบด้วย
1. ชื่อภายใน
2. ตำแหน่งที่อยู๋ในหน่วยความจำรอง
3. รูปแบบของแฟ้ม (แถวอักขระ บล็อก เรียงลำดับ หรือดัชนีเรียงลำดับ เป็นต้น)
4. ชนิดของอุปกรณ์ที่ใช้เก็บ
5. สารสนเทศควบคุมการใช้งาน (สิทธิในการใช้)
6. ชนิดของแฟ้ม (โปรแกรมดิบ ข้อมูล หรือโปรแกรมของภาษาเบสิก เป็นต้น)
7. วันที่และเวลาที่ถือกำเนิด
8. วันและเวลาที่ถูกเปลี่ยนแปลงแก้ไขครั้งล่าสุด

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

การจัดสรรหน่วยความจำรอง

ในที่นี้ การจัดสรรหน่วยความจำรอง หมายเฉพาะการจัดสรรเนื้อที่ให้กับแฟ้มข้อมูลของผู้ใช้ รวมถึงแฟ้มพิเศษต่างๆ เช่นรายนามหรือตัวบ่งลักษณะของแฟ้ม ทั้งนี้ไม่นับการใช้หน่วยความจำรองไปในทางอื่น เช่น เป็นที่อยู่ของหน่วยความจำเสมือน เป็นต้น

การจัดสรรแบบต่อเนื่อง

         ในการจัดสรรแบบต่อเนื่อง (contiguous allocation) แฟ้มจะได้รับบริเวณที่ต่อเนื่องเป็นชิ้นเดียวกันในหน่วยความจำรอง โดยผู้ใช้ต้องระบุล่วงหน้าว่าขนาดของแฟ้มเป็นเท่าไร (ปกติระบุเกินไว้) ซึ่งระบบแฟ้มจะจัดหาเนื้อที่ที่มีขนาดเท่ากับหรือใหญ่กว่าขนาดที่ขอมา หากไม่สามารถหาได้ก็ไม่อาจสร้างแฟ้มนั้นได้
ข้อดีของการจัดสรรแบบต่อเนื่องคือ สารสนเทศในแฟ้มเดียวกันอยู่ใกล้เคียงกัน ทำให้การเรียกใช้สารสนเทศนั้นเร็วขึ้นกว่าการที่สารสนเทศอยู่กระจายไปในหน่วยความจำรอง เช่น ถ้าเป็นจานบันทึก การที่สารสนเทศอยู่ใกล้กันทำให้ลดเวลาในการค้นหาร่อง (seek time) ได้มาก ระบบบ่งลักษณะของแฟ้มสำหรับการจัดสรรแบบต่อเนื่อง จะไม่ซับซ้อนเพราะในเขตข้อมูลเกี่ยวกับตำแหน่งของแฟ้ม มีเพียงจุดเริ่มต้นของแฟ้มและความยาวของแฟ้มเท่านั้น
ข้อเสียของการจัดสรรแบบต่อเนื่อง มีลักษณะเช่นเดียวกับข้อเสียของการจัดสรรแบบนี้ในหน่วยความจำหลัก ปัญหาคือการขาดวิ่นของหน่วยความจำ (memory fragmentation) กล่าวคือ เมื่อมีการสร้างและทำลายแฟ้มอยู่สักระยะหนึ่ง ก็เกิดช่องว่างขนาดต่างๆ ขึ้นกระจายอยู่ในหน่วยความจำรอง แม้ว่าขนาดของช่องว่างเหล่านี้จะรวมกันแล้วจะใหญ่มากพอสำหรับแฟ้มที่ต้องการเข้าอยู่ในหน่วยความจำรอง แต่การที่ช่องว่างเหล่านี้กระจายกันอยู่ จึงไม่อาจรับแฟ้มได้ เพราะแต่ละช่องว่างเล็กเกินไป การแก้ไขอาจทำได้โดยการรวมช่องว่างที่อยู่ติดกันเข้าด้วยกัน หรือทำการกระชับ (compact) หน่วยความจำรอง คือเลื่อนแฟ้มมารวมกันเพื่อไล่ช่องว่างไปรวมกันเสีย แต่วิธีการนี้นั้นทำได้ยากกว่าในหน่วยความจำหลัก เนื่องจากความเร็วของหน่วยความจำรองนั้นต่ำกว่ามากและปริมาณของสารสนเทศที่ต้องโยกย้ายสูงมาก

การจัดสรรแบบไม่ต่อเนื่อง

         เนื่องจากแฟ้มข้อมูลในระบบมักเปลี่ยนแปลงขนาดอยู่เสมอ และผู้ใช้เองก็มักไม่ทราบล่วงหน้าว่าขนาดของแฟ้มที่สุดแล้วจะเป็นเท่าใด ในปัจจุบันระบบจัดสรรแบบต่อเนื่องจึงเริ่มถูกแทนที่โดยระบบจัดสรรแบบ ไม่ต่อเนื่อง (noncontiguous allocation) ซึ่งยืดหยุ่นกว่าแบบต่อเนื่องมาก การจัดสรรแบบไม่ต่อเนื่องนี้มีหลายวิธีด้วยกัน ซึ่งจะได้กล่าวต่อไปนี้
1. การเชื่อมโยงเชิงเสี้ยว
ในวิธีการจัดสรรแบบไม่ต่อเนื่องแบบแรกนี้ ถือว่าจานบันทึกประกอบด้วยเสี้ยว (sector) อยู่จำนวนหนึ่ง โดยที่แต่ละเสี้ยวมีตำแหน่งประจำตัวแยกต่างหากจากกัน แฟ้มใดๆ ก็ประกอบด้วยเสี้ยวเหล่านี้มาเรียงต่อกันเข้า แต่ในความเป็นจริง เสี้ยวเหล่านี้อาจอยู่กระจายกันไปในจานบันทึก หากแต่ถูกเชื่อมโยงต่อกันโดยตัวชี้ (linked list) ดังนั้นในแต่ละจานบันทึกจะประกอบด้วยแถวของเสี้ยงตามการเชื่อมโยงนี้ แฟ้มละแถว รวมทั้งแถวซึ่งเชื่อมโยงเสี้ยวที่ว่างเข้าด้วยกัน เรียกว่า แถวเสี้ยวว่าง (free space list) เมื่อแฟ้มต้องการขยาย ระบบจะขอเสี้ยวที่ว่างจากแถวเสี้ยวว่างนี้ แล้วมาร้อยต่อจากเสี้ยวสุดท้ายของแฟ้ม ส่วนแฟ้มที่หดตัวลดขนาดลง ก็คืนเสี้ยวที่ไม่ใช้กลับไปยังแถวเสี้ยวว่าง ดังนั้นในระบบนี้จะไม่มีการกระชับเนื้อที่ในจานบันทึกหรือหน่วยความจำรองแต่อย่างใด ข้อเสียของการจัดสรรแบบไม่ต่อเนื่องโดยใช้การเชื่อมโยงเชิงเสี้ยว (sector-based linked list allocation) คือการที่ระเบียนของแฟ้มกระจายอยู่ทั่วไปในจานบันทึก ทำให้เวลาในการใช้แฟ้มสูงขึ้นเนื่องจากเวลาในการค้นหาร่องเพิ่มมากขึ้น นอกจากนั้นยังมีความล่าช้าในการต้องคอยดูแลระบบตัวชี้ที่เชื่อมโยงเสี้ยวเหล่านั้น ประกอบทั้งตัวชี้เหล่านี้ก็กินเนื้อที่ของหน่วยความจำรองไปส่วนหนึ่งด้วย
2. การจัดสรรแบบบล็อก
การลดปัญหาที่เกิดในการจัดสรรแบบเชื่อมโยงเชิงเสี้ยว ทำได้โดยจัดสรรหน่วยความจำรองด้วย "ชิ้น" ที่ใหญ่กว่าเสี้ยว ด้วยหลักการนี้ทำให้รวมเอาข้อมดีของทั้งการจัดสรรแบบต่อเนื่องกับการจัดสรรแบบเชื่อมโยงเชิงเสี้ยวเข้าด้วยกัน กล่าวคือมีทั้งข้อดีของการที่สารสนเทศอยู่ใกล้กัน สำหรับแฟ้มใดแฟ้มหนึ่งในจานบันทึก แต่มีความยืดหยุ่นของการจัดสรร เพราะไม่ต้องจัดหาบริเวณใหญ่บริเวณเดียว
วิธีการแบบบล็อกนี้ จะเห็นได้ชัดหากพิจารณาว่า การจัดสรรแบบต่อเนื่องนั้น แฟ้มทั้งแฟ้มต้องอยู่ติดกันในจานบันทึก ซึ่งก่อให้เกิดความยุ่งยากต่อการจัดหาเนื้อที่ในหน่วยความจำรอง แต่ถ้าเราแบ่งแฟ้มเป็นสองส่วน หรือเป็นสี่ส่วน แต่ละส่วนจะเล็กพอที่จะลดปัญหาของการจัดหาบริเวณลงได้มาก แต่ขณะเดียวกันแต่ละส่วนก็ยังใหญ่พอที่ไม่ทำให้เวลาในการเรียกใช้สารสนเทศในแฟ้มเลวลงเท่าใดนัก เพราะปกติแล้ว กระบวนการไม่อาจใช้สารสนเทศทั้งหมดในแฟ้มได้ในการใช้คราวเดียว สาเหตุหนึ่งของพฤติกรรมนี้ก็เนื่องมาจากขนาดที่จำกัดของบัฟเฟอร์สำหรับกระบวนการนั้น เมื่อระบบรับ/ส่งข้อมูลอ่านสารสนเทศเข้าไปเต็มบัฟเฟอร์แล้ว กระบวนการก็ดำเนินต่อ เพื่อใช้สารสนเทศในบัฟเฟอร์นั้น ในขณะเดียวกัน จานบันทึกก็หันไปบริการคำขอของกระบวนการอื่น ซึ่งจะโยกย้ายหัวอ่าน/บันทึกไปยังตำแหน่งอื่น ดังนั้นเมื่อกระบวนการดังกล่าวใช้สารสนเทศในบัฟเฟอร์หมดแล้ว และต้องทำการอ่านส่วนต่อไปจากแฟ้ม จานบันทึกก็ต้องโยกย้ายหัวอ่าน/บันทึกอีกอยู่ดี จะเห็นว่าการที่ส่วนต่อไปในแฟ้มอยู่ติดกันกับส่วนก่อนหรือไม่ ไม่ใช่เรื่องสำคัญอีกต่อไป
การจัดสรรโดยอาศัยบล็อก หรือในบางครั้งเรียกว่า ตอน (extent) สามารถทำได้หลายวิธี โดยในที่นี้จะกล่าวถึงอยู่ 3 วิธีคือ
1. การจัดสรรแบบเชื่อมโยงเชิงบล็อก
การจัดสรรแบบเชื่อมโยงเชิงบล็อก (block chaining) มีลักษณะเหมือนการจัดสรรแบบเชื่อมโยงเชิงเสี้ยว เพียงแต่เปลี่ยนจากเสี้ยวเป็นบล็อก ลักษณะการจัดสรรแบบเชื่อมโยงเชิงบล็อกนี้เหมาะต่อการประมวลผลแบบเรียงลำดับมาก
2. การจัดสรรแบบบล็อกดัชนี
การที่ต้องวิ่งไป ตามสายโซ่ของการเชื่อมโยงในบล็อกในจานบันทึก ทำให้การค้นหาบล็อกใดๆ (โดยเฉพาะในการเข้าถึงแบบตรง) ทำได้ช้ามาก วิธีการแก้ไขมีอยู่สองวิธีด้วยกัน วิธีแรกที่จะกล่าวถึงในที่นี่เรียกว่า การจัดสรรแบบบล็อกดัชนี (index block allocation) ซึ่งหลักการคือการรวบรวมบรรดาตัวชี้ในสายโซ่การเชื่อมโยงบล็อกมารวมไว้ที่เดียวกัน เป็นตารางหรือบล็อกพิเศษเรียกว่า บล็อกดัชนี (index block) โดยปกติรายการที่เรียงกันอยู่ในบล็อกดัชนีจะแทนลำดับของบล็อกในสายโซ่การเชื่อมโยง โดยที่ข้อมูลในแต่ละรายการจะชี้ไปยังบล็อกที่สมนัยนั้น
3. การจัดสรรแบบแผนผังแฟ้มเชิงบล็อก การลดความล่าช้าในการติดตามสายโซ่การเชื่อมโยงไปตามบล็อก นอกเหนือไปจากการใช้บล็อกดัชนีแล้ว ยังสามารถทำได้โดยการจำลองรูปลักษณ์ของจานบันทึกไว้เป็นแผนผังเล็กๆ ที่บรรจุเฉพาะตัวชี้ที่เชื่อมโยงกันอยู่ ด้วยลักษณะนี้ทำให้ไม่ต้องวิ่งไปตามสายโซ่จริงในจานบันทึก แต่วิ่งไปตามแผนผังจำลองนี้แทน ซึ่งแผนผังนี้อาจมีขนาดเล็กพอจะบรรจุไว้ตลอดเวลาในหน่วยความจำหลัก ทำให้การค้นหาเป็นไปได้อย่างรวดเร็ว
ในระบบแผนผังแฟ้มเชิงบล็อก (block-oriented file mapping) นี้ รายการในแผนผังสมนัยกับบล็อกทาง กายภาพในจานบันทึก ดังนั้นการแปลงตำแหน่งจากในแผนผังไปเป็นตำแหน่งในจานบันทึกจึงทำได้ไม่ยาก รายการในแผนผังที่ตรงกับบล็อกสุดท้ายของแฟ้มจะบรรจุค่าพิเศษคือ "จบ" หรือ "nil" เพื่อแสดงการสิ้นสุดของสายโซ่ และสำหรับบล็อกที่ว่างรายการในแผนผังก็บรรจุค่าพิเศษเช่นกันคือ "ว่าง" หรือ "free" ซึ่งการค้นหาบล็อกว่างอาจทำแบบเรียงลำดับไปในแผนผัง หรืออาจเก็บบล็อกว่างไว้ในลักษณะสายโซ่เชื่อมโยงกันไว้ในแผนผังก็ได้