550 likes | 989 Views
Operating System. บทที่ 10 ส่วนต่อประสานของระบบแฟ้มข้อมูล (FILE-SYSTEM INTERFACE). แนวความคิดเกี่ยวกับแฟ้มข้อมูล (File Concept). แฟ้มข้อมูลถูกกำหนดเป็นโครงสร้าง ตามชนิดของข้อมูล Text file คือ ลำดับของตัวอักษรที่เรียงกันในบรรทัด ( หรือหน้า )
E N D
Operating System บทที่ 10 ส่วนต่อประสานของระบบแฟ้มข้อมูล (FILE-SYSTEM INTERFACE)
แนวความคิดเกี่ยวกับแฟ้มข้อมูล (File Concept) • แฟ้มข้อมูลถูกกำหนดเป็นโครงสร้าง ตามชนิดของข้อมูล • Text fileคือ ลำดับของตัวอักษรที่เรียงกันในบรรทัด (หรือหน้า) • Source fileคือ ลำดับของโปรแกรมย่อย (subroutine) และฟังก์ชัน(อาจเป็นการประกาศค่าตามประโยค) • Object file คือ ลำดับของไบต์ ที่จัดเรียงในบล็อคที่ตัวเชื่อมโยง (linker) ของระบบเข้าใจ • Executable fileคือ ลำดับของส่วนของรหัสโปรแกรมซึ่งตัว load โปรแกรม (loader) นำเข้ามายังหน่วยความจำและสั่งให้ทำงาน (execute)
คุณลักษณะของแฟ้มข้อมูล (File attributes) • ชื่อ (Name) – ชื่อแฟ้มข้อมูลคือ สัญลักษณ์ (สารสนเทศ) ที่เก็บไว้ในรูปแบบที่มนุษย์สามารถอ่านได้ • ชนิด (Type) – ส่วนนี้จำเป็นสำหรับระบบซึ่งสนับสนุนชนิดของข้อมูลหลายๆชนิด • ตำแหน่ง (Location) - เป็นตัวชี้ไปยังอุปกรณ์และตำแหน่งของแฟ้มข้อมูลบนอุปกรณ์นั้น • ขนาด (Size) – ขนาดของแฟ้มข้อมูลในปัจจุบัน (ไบต์, คำหรือบล็อค) • การป้องกัน (protection) – การควบคุมให้สามารถ อ่าน เขียน ทำงาน ฯลฯ
คุณลักษณะของแฟ้มข้อมูล (File attributes) • เวลา วันที่ และเอกลักษณ์เฉพาะของผู้ใช้ (Time , date , and user identification) • – เก็บข้อมูลพวก วันที่ สร้างแฟ้มนี้ขึ้นมา , ปรับปรุงครั้งสุดท้ายเมื่อไหร่, และใช้ครั้งสุดท้ายเมื่อไหร่ • ข้อมูลเหล่านี้จะเป็นประโยชน์ในเรื่องการป้องกัน, การรักษาความปลอดภัยและการควบคุมการใช้งาน
การทำงานของแฟ้มข้อมูล(File Operation) • การสร้างแฟ้มข้อมูล (Creating a file) • หาที่ว่างในระบบแฟ้มข้อมูล • ช่องว่างของแฟ้มข้อมูลใหม่ต้องถูกสร้างในไดเรกทอรี (ไดเรกทอรีจะบันทึกชื่อแฟ้ม และตำแหน่งในระบบแฟ้มข้อมูล)
การเขียนแฟ้มข้อมูล (Writing a file) • ใช้การเรียกระบบให้เจาะจง ชื่อแฟ้มและสารสนเทศที่จะถูกเขียนลงแฟ้มข้อมูลโดยระบบจะค้นหาไดเรกทอรี เพื่อหาตำแหน่งของแฟ้มข้อมูลระบบต้องเก็บ write pointer เพื่อระบุตำแหน่งถัดไปที่จะต้องเขียน
การอ่านแฟ้มข้อมูล (Reading a file) • ใช้การเรียกระบบเพื่อเจาะจงชื่อแฟ้มและที่ซึ่ง(ในหน่วยความจำ) บล็อคถัดไปของแฟ้มข้อมูลควรจะอยู่ จากนั้นไดเรกทอรีจะถูกค้นหาและระบบจะเก็บ read pointer เพื่อระบุตำแหน่งถัดไปที่ต้องอ่าน โดยทั่วไปแฟ้มที่ถูกอ่านหรือเขียนระบบส่วนใหญ่มักเก็บ pointer ไว้ตัวเดียว ที่ใช้ทั้งอ่านและเขียนได้เรียกว่า “ตัวชี้ตำแหน่งแฟ้มปัจจุบัน” (current-file-position pointer) เพื่อประหยัดพื้นที่และลดความซับซ้อนของระบบ
การย้ายตำแหน่งภายในแฟ้มข้อมูล (Repositioning within a file) • เริ่มจากค้นหาไดเรกทอรีที่ต้องการและกำหนดค่าให้ตัวชี้ตำแหน่งแฟ้มปัจจุบันการย้ายตำแหน่งภายในแฟ้มข้อมูลไม่จำเป็นต้องเกี่ยวข้องกับ I/O จริงๆเลยการทำงานของแฟ้มนี้เรียกว่า การค้นหา (seek) ข้อมูล
การลบแฟ้มข้อมูล (Deleting a file) • เริ่มจากการค้นหาไดเรกทอรีที่มีชื่อจากแฟ้มที่จะลบเมื่อพบแล้วเราก็ปลดปล่อยที่ว่างทั้งหมดของแฟ้มนั้น (ดังนั้นที่ว่างดังกล่าวก็สามารถให้แฟ้มอื่นใช้งานได้) และลบข้อมูลนั้นในไดเรกทอรีทิ้ง
การตัดแฟ้มข้อมูลให้สั้นลง (truncating a file) • เมื่อผู้ใช้ต้องการให้แฟ้มข้อมูลมีคุณลักษณะเหมือนเดิม แต่ต้องการลบเนื้อหาของแฟ้มข้อมูลแทนที่จะลบและสร้างใหม่ เราสามารถใช้ฟังก์ชันนี้เพื่อให้คุณลักษณะต่างๆ ยังคงอยู่ (ยกเว้นความยาวของแฟ้มข้อมูลจะถูกตั้งใหม่ให้มีความยาวเป็นศูนย์
โดยสรุปมีสารสนเทศหลายส่วนที่เกี่ยวข้องกับการกับการเปิดแฟ้มข้อมูล ดังนี้ • ตัวชี้แฟ้มข้อมูล (File pointer) – ระบบซึ่งไม่มีระยะห่างจากขอบของแฟ้มข้อมูล (file offset) ที่เป็นส่วนหนึ่งของคำสั่งเรียกระบบ read และ write ระบบต้องตามรอยตำแหน่งที่อ่านหรือเขียนเป็นครั้งสุดท้ายเหมือนตัวชี้ตำแหน่งแฟ้มข้อมูลปัจจุบัน (current-file-position pointer) • การนับการเปิดแฟ้มข้อมูล (File open count) - เมื่อแฟ้มข้อมูลถูกปิด ระบบปฏิบัติงานต้องใช้ช่องของตารางเปิดแฟ้มข้อมูล (open file table ) อีกครั้ง หรือไม่ก็ใช้ที่ว่างในตาราง เพราะกระบวนการหลายๆ กระบวนการอาจจะเปิดแฟ้มข้อมูลระบบต้องรอให้แฟ้มสุดท้ายปิดก่อนจะลบช่องในตารางเปิดแฟ้มสุดท้าย ระบบจึงจะลบช่อง (entry) ได้
โดยสรุปมีสารสนเทศหลายส่วนที่เกี่ยวข้องกับการกับการเปิดแฟ้มข้อมูล ดังนี้ • ตำแหน่งของแฟ้มข้อมูลบนดิสก์ (Disk location of the file) – การทำงานของแฟ้มข้อมูลส่วนใหญ่ต้องการให้ระบบปรับปรุงข้อมูลภายในแฟ้มข้อมูลสารสนเทศที่จำเป็นสำหรับระบุตำแหน่งแฟ้มข้อมูลบนดิสก์ถูกเก็บไว้ในหน่วยความจำเพื่อหลีกเลี่ยงที่จะต้องอ่านจากดิสก์สำหรับการทำงานแต่ละครั้ง
ชนิดของแฟ้มข้อมูล(File types) • เทคนิคทั่วๆไปสำหรับการนำชนิดของแฟ้มข้อมูลไปใช้ คือการรวมชนิดเข้าเป็นส่วนหนึ่งของชื่อแฟ้มข้อมูล ชื่อจะถูกแบ่งเป็น 2 ส่วนคือ ชื่อ และ นามสกุล(extension) โดยทั่วไปจะแยกกันโดยใช้ (.) ดูรูป 10.1
ชนิดของแฟ้มข้อมูล(File types)
โครงสร้างของแฟ้มข้อมูล (File structure) • แฟ้มข้อมูลต้องมีโครงสร้างที่ระบบปฏิบัติการเข้าใจได้ เช่น ระบบปฏิบัติการ อาจต้องการ executable file ที่มีโครงสร้างเฉพาะเพื่อเอาไปกำหนดว่าจะ load แฟ้มข้อมูลว่าไว้ยังตำแหน่งใดในหน่วยความจำและตำแหน่งของคำสั่งแรก คืออะไร • ตัวอย่างหนึ่งของระบบปฏิบัติการที่สนับสนุน โครงสร้างของแฟ้มข้อมูลเล็กน้อยคือ Macintosh ซึ่งแฟ้มข้อมูลมี 2 ส่วน คือ resource fork และ data fork • resource fork บรรจุสารสนเทศที่ผู้ใช้สนใจ เช่น ตัวฉลากบนปุ่มที่แสดงโดยโปรแกรมผู้ใช้ต่างประเทศอาจจะต้องการเปลี่ยนฉลากนั้นเป็นภาษาของเขาเองซึ่ง Macintosh สนับสนุนเครื่องมือที่อนุญาตให้ปรับปรุงข้อมูลใน resource fork ได้ • data fork บรรจุโปรแกรม , รหัสโปรแกรม (code) หรือข้อมูล(เนื้อหาของแฟ้มข้อมูลทั่วไป)
โครงสร้างของแฟ้มข้อมูลภายใน(Internal file structure) • ในระบบดิสก์ มักมีขนาดของบล็อคที่กำหนดโดย ขนาดของ เซกเตอร์ disk I/O ถูกแบ่งเป็นหน่วยของบล็อค (physical record) และทุกบล็อคมีขนาดเท่ากัน โดย physical record จะต้องตรงกับความยาวของ logical record การห่อ (packing) จำนวนของ logical record ไปสู่ physical block เป็นวิธีโดยทั่วไปในการแก้ปัญหานี้ • ขนาดของ logical record ขนาดของ physical block และเทคนิค packing เป็นตัวกำหนดว่า logical record จำนวนเท่าไรที่จะอยู่ในแต่ละ physical block การห่อ (packing) สามารถทำได้โดยโปรแกรมประยุกต์ของผู้ใช้หรือโดยระบบปฏิบัติการ
วิธีการเข้าถึงแฟ้มข้อมูล (Access Methods) การเข้าถึงข้อมูลแบบเรียงลำดับ • (Sequential access) • สารสนเทศในแฟ้มข้อมูลถูกดึงเข้าถึงเป็นลำดับ • การทำงาน (operation) บนแฟ้มข้อมูลคือ อ่าน และเขียน ตัวอ่าน จะอ่านส่วนถัดไปของแฟ้ม และเปลี่ยนค่าตัวชี้แฟ้มข้อมูลโดยอัตโนมัติตามตำแหน่งของ I/O คล้ายๆ กับการเขียนต่อท้ายแฟ้มข้อมูลแต่ละแฟ้มข้อมูลสามารถกลับ ไปเริ่มต้นใหม่และบางระบบโปรแกรมอาจจะสามารถข้ามไปข้างหน้าหรือข้างหลัง N ระเบียน (record) ได้ เมื่อ N คือเลขจำนวนเต็ม
การเข้าถึงแฟ้มข้อมูลโดยตรง (Direct Access) • หรือการเข้าถึงแฟ้มข้อมูลแบบสัมพันธ์ (relative access) แฟ้มข้อมูลถูกสร้างขึ้นเป็น logical record ที่มีความยาวคงที่ ซึ่งอนุญาตให้โปรแกรมอ่านและเขียนระเบียนอย่างรวดเร็วโดยไม่มีลำดับ การเข้าถึงแฟ้มข้อมูลโดยตรงเป็นพื้นฐานของดิสก์ เมื่อดิสก์อนุญาตให้เข้าถึงบล็อคของแฟ้มข้อมูลแบบสุ่ม สำหรับการเข้าถึงแฟ้มข้อมูลโดยตรง แฟ้มข้อมูลจะถูกมองเป็นจำนวนของบล็อคหรือระเบียนดังนั้นเราอาจจะอ่านบล็อค 14 แล้วอ่านบล็อค 53 แล้วเขียน บล็อค 7 ได้
ระบบโดยทั่วไปไม่สนับสนุนทั้งแบบเรียงลำดับและโดยตรงบางระบบสนับสนุนแบบเรียงลำดับ บางระบบเป็นแบบโดยตรงบางระบบต้องการให้ เมื่อเริ่มสร้างแฟ้มข้อมูลก็กำหนดไปเลยว่าเป็นแบบเรียงลำดับหรือโดยตรง อย่างไรก็ตาม มันก็ไม่ยากที่จะจำลองสถานการณ์จากแบบเรียงลำดับให้เป็นแบบโดยตรง ถ้าเรามีตัวแปร cp เป็นตัวกำหนดตำแหน่งปัจจุบันของเรา ดังนั้นเราสามารถจำลองการทำงานของแฟ้มแบบเรียงลำดับได้ดังรูป10.3
การเข้าถึงข้อมูลแบบอื่น(Other Access Methods) • วิธีเสริมนี้เกี่ยวข้องกับการสร้างดัชนี (index) ให้แฟ้มข้อมูล ดัชนีนี้ (เหมือนดัชนีท้ายหลังหนังสือ) บรรจุตัวชี้ บล็อคในการหาระเบียนในแฟ้มข้อมูล ขั้นแรกเราต้องค้นหาดัชนีแล้วใช้ตัวชี้ในการเข้าถึงแฟ้มข้อมูลโดยตรงและหาระเบียนที่ต้องการ • ถ้าแฟ้มข้อมูลมีขนาดใหญ่ แฟ้มดัชนีก็ต้องมีขนาดใหญ่เกินจะเก็บไว้ในหน่วยความจำได้ วิธีแก้วิธีหนึ่ง คือ สร้างดัชนีสำหรับแฟ้มดัชนี (index file) แฟ้มข้อมูลปฐมภูมิ (primary index file) ควรจะบรรจุตัวชี้ไปยังแฟ้มข้อมูลทุติยภูมิ (secondary index file) ซึ่งควรจะชี้ไปยังข้อมูลจริง
การเข้าถึงข้อมูลแบบอื่น(Other Access Methods)
โครงสร้างของไดเรคทอรี (Directory Structure) • การจัดการข้อมูลเป็น 100 gigabyte ของดิสก์ ต้องทำเป็น 2 ส่วน • ระบบแฟ้มข้อมูลต้องแบ่งเป็น partitions ใน IBM เรียก minidisks ใน PC และ Macintosh เรียก Volume โดยทั่วไป แต่ละดิสก์บนระบบบรรจุอย่างน้อย 1 partition ผู้ใช้จำเป็นต้องเกี่ยวข้องแต่ logical directory และโครงสร้างของแฟ้มข้อมูล และสามารถมองข้ามปัญหาทางกายภาพในการจัดการพื้นที่ว่างของแฟ้มข้อมูลด้วยเหตุนี้ partition ก็สามารถมองเป็นดิสก์เสมือนได้ (virtual disk) • แต่ละ partition บรรจุสารสนเทศเกี่ยวกับ แฟ้มข้อมูลภายใน partition สารสนเทศถูกเก็บในช่องใน device directory หรือ เนื้อหาของตารางจำนวน (volume table of contents) device directory (โดยทั่วไปเรียก”ไดเรคทอรี”) บันทึกสารสนเทศ เช่น ชื่อ , ตำแหน่ง, ขนาด และชนิดของแฟ้มข้อมูลใน partition รูป 10.5 แสดงตัวอย่างการจัดระเบียบของระบบแฟ้มข้อมูล
โครงสร้างของไดเรคทอรี (Directory Structure)
การทำงานของไดเรกทอรีมีดังนี้คือการทำงานของไดเรกทอรีมีดังนี้คือ • ค้นหาแฟ้มข้อมูล (Search for a file) – เราอาจต้องหาแฟ้มที่มีชื่อตรงกับที่เราต้องการ • สร้างแฟ้มข้อมูล (Create a file) – แฟ้มข้อมูลใหม่จำเป็นต้องถูกสร้างและเพิ่มเข้าในไดเรกทอรี • ลบแฟ้มข้อมูล (Delete a file) – เมื่อแฟ้มข้อมูลไม่ต้องการแล้ว เราต้องลบมันออกจากไดเรกทอรี • แสดงไดเรกทอรี (List a directory) – เราต้องสามารถแสดงชื่อแฟ้มข้อมูลในไดเรกทอรีและเนื้อหาของไดเรกทอรี สำหรับแต่ละแฟ้มในรายการ
การทำงานของไดเรกทอรีมีดังนี้คือการทำงานของไดเรกทอรีมีดังนี้คือ • เปลี่ยนชื่อแฟ้มข้อมูล (Rename a file) – เพราะว่าชื่อแฟ้มข้อมูลเป็นตัวแทนของเนื้อหาของผู้ใช้ ดังนั้นชื่อจะต้องเปลี่ยนเมื่อเนื้อหาหรือการใช้แฟ้มข้อมูลเปลี่ยนไป • การข้ามระบบแฟ้มข้อมูล (Traverse the file system) – มันเป็นความคิดที่ดีที่จะรักษาเนื้อหาและโครงสร้างของระบบแฟ้มข้อมูลทั้งหมด การรักษานี้มักทำได้โดยการคัดลอกแฟ้มข้อมูลทั้งหมดลงเทปแม่เหล็ก เทคนิคนี้เป็นการ backup ในกรณีที่ระบบล่มหรือแฟ้มข้อมูลเสีย ในกรณีนี้แฟ้มข้อมูลควรถูกคัดลอกลงเทป และพื้นที่ว่างในดิสก์ของแฟ้มเหล่านั้นก็จะถูกปล่อยให้แฟ้มอื่นได้ใช้
ไดเรกทอรีระดับเดียว(Single-Level Directory) • แฟ้มข้อมูลทั้งหมดถูกเก็บไว้ในไดเรกทอรีเดียวกัน (ดังรูปที่ 10.6) ไดเรกทอรีระดับเดียวมีข้อจำกัดอย่างมีนัยสำคัญ เมื่อแฟ้มข้อมูลมีมากขึ้นหรือมีผู้ใช้มากกว่า 1 คน ถ้าแฟ้มข้อมูลทั้งหมดอยู่ในไดเรกทอรีเดียวกัน แฟ้มเหล่านั้นต้องมีชื่อเฉพาะตัว ถ้ามีผู้ใช้ 2 คน เรียกแฟ้มข้อมูลชื่อ test ของตัวเอง (คนละไฟล์ชื่อเดียวกัน) ดังนั้น กฎชื่อเฉพาะตัวก็ถูกทำลายลง นอกจากนั้นยังมีข้อจำกัดในเรื่องความยาว ในระบบ MS-DOS ชื่อแฟ้มข้อมูลยาวได้ไม่เกิน 11 ตัวอักษร (รวมนามสกุล) UNIX 255 ตัวอักษร
ไดเรกทอรีระดับเดียว(Single-Level Directory)
ไดเรกทอรีสองระดับ(Two-Level Directory) • ข้อเสียของไดเรกทอรีระดับเดียวคือความสับสนของชื่อแฟ้มข้อมูลระหว่างผู้ใช้ต่าง ๆ วิธีแก้พื้นฐานคือการสร้างไดเรกทอรีแยกกันให้ผู้ใช้แต่ละคน • ในโครงสร้างไดเรกทอรีสองระดับ ผู้ใช้แต่ละคนจะมี user file directory ของตัวเอง (UFD) แต่ละ UFD มีโครงสร้างคล้าย ๆ กัน แต่แสดงรายการแฟ้มข้อมูลของผู้ใช้คนเดียว เมื่องานของผู้ใช้เริ่มขึ้นหรือผู้ใช้ log in เข้ามา master file directory (MFD) ของระบบจะถูกค้นหา MFD ถูกระบุโดยชื่อของผู้ใช้ (user name) หรือหมายเลขบัญชี (account number) และแต่ละช่องชี้ไปยัง UFD สำหรับผู้ใช้นั้น (ดังรูปที่ 10.7)
ไดเรกทอรีสองระดับ(Two-Level Directory)
ไดเรกทอรีสองระดับ(Two-Level Directory) • การระบุชื่อแฟ้มข้อมูลในไดเรกทอรีสองระดับ เราต้องให้ทั้งชื่อของผู้ใช้และชื่อแฟ้มข้อมูล ไดเรกทอรีสองระดับสามารถมองเป็นต้นไม้ ราก (root) ของต้นไม้คือ MFD ทายาทโดยตรงคือ UFD ทางยากของ UFD คือ แฟ้มข้อมูลของตัวมันเอง แฟ้มข้อมูลคือใบไม้ของต้นไม้นั่งเอง ชื่อของผู้ใช้และชื่อของแฟ้มข้อมูลกำหนดเส้นทาง (path) ในต้นไม้จากราก (MFD) สู่ใบ (แฟ้มที่ต้องการ) ดังนั้นชื่อของผู้ใช้และชื่อไฟล์กำหนดชื่อของเส้นทาง (path name) แฟ้มข้อมูลทุกแฟ้มในระบบมีชื่อของเส้นทาง เพื่อระบุชื่อแฟ้มข้อมูลที่มีลักษณะเฉพาะ ผู้ใช้ต้องรู้ชื่อของเส้นทางของแฟ้มที่ต้องการ
ไดเรกทอรีสองระดับ(Two-Level Directory) • ตัวอย่างในระบบ MS-DOS อาจเป็น “C:\userb\test” แยกเป็น partition , ชื่อของไดเรกทอรี , และ ชื่อแฟ้มข้อมูล ในระบบ VMS ไฟล์ “login.com” อาจเป็น “u:[sst.jdeck]login.com;1” u คือชื่อของ partition , “sst” คือ ชื่อไดเรกทอรี , “jdeck” คือ ชื่อของไดเรกทอรีย่อย (subdirectory) และ “1” คือ หมายเลขเวอร์ชัน
ไดเรกทอรีที่มีโครงสร้างแบบต้นไม้(Tree-Structured Directories)
ไดเรกทอรีที่มีโครงสร้างแบบต้นไม้(Tree-Structured Directories) • ในการใช้งานปกติ ผู้ใช้แต่ละคนจะมี “ไดเรกทอรีปัจจุบัน” (current directory) ซึ่งใช้เก็บแฟ้มข้อมูลที่ผู้ใช้สนใจในปัจจุบัน เมื่อมีการอ้างอิงแฟ้มข้อมูลก็จะเกิดการค้นหาไดเรกทอรีปัจจุบัน ถ้าแฟ้มข้อมูลที่ต้องการไม่มีในไดเรกทอรีปัจจุบัน ผู้ใช้ต้องระบุชื่อของเส้นทาง (path name) หรือเปลี่ยนไดเรกทอรีปัจจุบันไปเป็นไดเรกทอรีอื่น โปรแกรมเรียกระบบจะทำให้ชื่อไดเรกทอรีเป็นเหมือนพารามิเตอร์และใช้มันเพื่อกำหนดไดเรกทอรีปัจจุบันใหม่ ดังนั้นผู้ใช้จึงสามารถเปลี่ยนไดเรกทอรีปัจจุบันของเขาได้ตามต้องการ
ไดเรกทอรีที่มีโครงสร้างแบบต้นไม้(Tree-Structured Directories) • ชื่อของเส้นทาง (path name) มี 2 ชนิด คือ ชื่อของเส้นทางแบบสัมบูรณ์ (absolute path name) หรือ ชื่อของเส้นทางแบบสัมพันธ์ (relative path name) ชื่อของเส้นทางแบบสัมบูรณ์ เริ่มต้นที่ root แล้วเดินทางลงมาจนถึงแฟ้มข้อมูลที่ต้องการ มีการกำหนดชื่อของไดเรกทอรีตลอดทาง ชื่อของเส้นทางแบบสัมพันธ์ กำหนดเส้นทางจากไดเรกทอรีปัจจุบัน ตัวอย่างเช่น จากรูปที่ 10.8 ถ้าไดเรกทอรีปัจจุบันคือ root/spell/mail ดังนั้นชื่อของเส้นทางแบบสัมพันธ์คือ prt/first อ้างถึงแฟ้มข้อมูลเดียวกันกับชื่อของเส้นทางแบบสัมบูรณ์ดังนี้คือ root/spell/mail/prt/first
ไดเรกทอรีที่มีโครงสร้างแบบต้นไม้(Tree-Structured Directories) • นโยบายในการลบไดเรกทอรีของโครงสร้างแบบต้นไม้นี้ ถ้าไดเรกทอรีว่าง การลบไดเรกทอรีก็ทำได้ง่าย แต่ถ้าไดเรกทอรีไม่ว่าง มีไฟล์หลายไฟล์ หรือมีหลายไดเรกทอรีย่อย วิธีการจัดการคือ • บางระบบ เช่น MS-DOS จะลบไดเรกทอรีไม่ได้ถ้ามันไม่ว่าง ดังนั้นภ้าจะลบไดเรกทอรี ผู้ใช้ต้องลบไฟล์ทั้งหมดในไดเรกทอรีก่อน ถ้ามีไดเรกทอรีย่อยอยู่ ก็ต้องลบไฟล์ในไดเรกทอรีย่อยให้หมดก่อน แล้วจึงลบไดเรกทอรีย่อยขึ้นมาจนถึงการลบไดเรกทอรีที่ต้องการลบ วิธีนี้ทำให้ต้องทำงานจำนวนมาก
ไดเรกทอรีที่มีโครงสร้างแบบต้นไม้(Tree-Structured Directories) • อีกวิธีหนึ่ง เช่น ในระบบ UNIX คำสั่ง rm ใช้ลบไดเรกทอรี ซึ่งทั้งไฟล์และไดเรกทอรีย่อยของ ไดเรกทอรีนั้นจะถูกลบทั้งหมด จะเห็นได้ว่าวิธีนี้น่าจะดีในการนำไปใช้ เพราะสะดวก แต่อันตรายมากเพราะทุกไดเรกทอรีสามารถถูกลบได้ด้วยคำสั่งคำสั่งเดียว ถ้าคำสั่งเกิดผิดพลาด ไฟล์และไดเรกทอรีจำนวนมากจำเป็นที่จะต้องกู้กลับมาจาก backup เทป
ไดเรกทอรีกราฟแบบไม่เป็นวงจร(Acyclic-Graph Directory) • พิจารณานักเขียนโปรแกรม 2 คน ที่ทำงานโครงการร่วมกัน แฟ้มข้อมูลที่เกี่ยวกับโครงการนี้เก็บไว้ในไดเรกทอรีย่อยที่แยกมาจากโครงการอื่น แต่นักเขียนโปรแกรมทั้งสองมีความรับผิดชอบต่อโครงการนี้เท่ากัน ทั้งคู่ต้องการไดเรกทอรีย่อยนี้เป็นของตัวเอง ซึ่งไดเรกทอรีย่อยนี้ควรจะถูกใช้ร่วมกัน (share) การใช้แฟ้มข้อมูลหรือไดเรกทอรีร่วมกัน ไม่ได้เหมือนกับการมี 2 สำเนา แต่หมายถึงมีของจริงอยู่เพียงหนึ่งเดียว การเปลี่ยนแปลงที่ทำโดยคน ๆ หนึ่งควรจะทำให้คนอื่นเป็นความเปลี่ยนแปลงนี้ได้ในทันที แฟ้มข้อมูลใหม่มที่ถูกสร้างโดยคน ๆ หนึ่งจะต้องปรากฏในไดเรกทอรีย่อยที่ใช้ร่วมกันทันทีโดยอัตโนมัติ
ไดเรกทอรีกราฟแบบไม่เป็นวงจร(Acyclic-Graph Directory) • โครงสร้างแบบต้นไม้ห้ามให้มีการใช้แฟ้มข้อมูลหรือไดเรกทอรีร่วมกัน กราฟแบบไม่เป็นวงจร (acyclic graph) อนุญาตให้มีการใช้ไดเรกทอรีและแฟ้มข้อมูลร่วมกันได้ (ดังรูปที่ 10.9)
ไดเรกทอรีกราฟแบบไม่เป็นวงจร(Acyclic-Graph Directory)
ไดเรกทอรีกราฟแบบไม่เป็นวงจร(Acyclic-Graph Directory) • แฟ้มข้อมูลหรือไดเรกทอรีย่อยอันเดียวกันอาจจะอยู่ใน 2 ไดเรกทอรีที่ต่างกันได้ • การใช้แฟ้มข้อมูลและไดเรกทอรีร่วมกันสามารถนำไปใช้ได้หลาย ๆ ทาง เช่น • ในระบบ UNIX การสร้างไดเรกทอรีใหม่เรียกว่า link link นี้คือตัวชี้ไปยังแฟ้มข้อมูลอีกแฟ้มหนึ่ง หรืออีกไดเรกทอรีย่อย ตัวอย่างเช่น link อาจเอาไปใช้ในชื่อของเส้นทางแบบสัมบูรณ์ (เรียกว่า symbolic link) เมื่อเกิดการอ้างอิงแฟ้มข้อมูล เราจะค้นหาไดเรกทอรี ถ้าไดเรกทอรีถูกทำเครื่องหมายเป็น link ก็จะได้มาซึ่งชื่อของแฟ้มข้อมูลหรือไดเรกทอรีจริงๆ
ไดเรกทอรีกราฟแบบไม่เป็นวงจร(Acyclic-Graph Directory) • อีกวิธีหนึ่งในการใช้แฟ้มข้อมูลร่วมกัน คือ การคัดลอกสารสนเทศทั้งหมดไปไว้ในไดเรกทอรีที่ใช้ร่วมกันทั้งคู่ ดังนั้นไดเรกทอรีทั้งคู่ต้องเหมือนกันและเท่ากัน link จะแตกต่างกันอย่างชัดเจนจากไดเรกทอรีต้นฉบับ ดังนั้นทั้งสองจึงไม่เท่ากัน (ไดเรกทอรีต้นฉบับไม่เท่ากับตัวสำเนาที่ใช้ร่วมกัน) การคัดลอกไดเรกทอรีทำให้ต้นฉบับและตัวสำเนาแยกกันได้
ไดเรกทอรีแบบกราฟโดยทั่วไป(General Graph Directory) • ปัญหาหลักของการใช้โครงสร้างของกราฟแบบไม่เป็นวงจรจะแน่ใจได้อย่างไรว่าจะไม่มี วงจรจริง ๆ ? ถ้าเราเริ่มจากไดเรกทอรีสองระดับ แล้วให้ผู้ใช้สร้างไดเรกทอรีย่อยเพิ่มก็กลายเป็น ไดเรกทอรีแบบต้นไม้ ถึงเราจะเพิ่มแฟ้มข้อมูลและไดเรกทอรีย่อยอีก ก็ยังเป็นไดเรกทอรีแบบต้นไม้อยู่ดี แต่ถ้าเราเพิ่มการเชื่อมโยงของไดเรกทอรีที่มีอยู่แล้ว โครงสร้างแบบต้นไม้ก็จะเสียไป เป็นผลให้เกิดโครงสร้างแบบกราฟอย่างง่าย (ดังรูปที่ 10.10)
ไดเรกทอรีแบบกราฟโดยทั่วไป(General Graph Directory)
ไดเรกทอรีแบบกราฟโดยทั่วไป(General Graph Directory) • ถ้าเราพึ่งจะค้นหาแฟ้มข้อมูลในไดเรกทอรีที่ใช้ร่วมกัน (share subdirectory) แล้วไม่เจอ เราน่าจะหลีกเลี่ยงการค้นหาไดเรกทอรีย่อยนั้นซ้ำ เพราะการหาซ้ำทำให้เสียเวลา • ถ้าเราอนุญาตให้มีวงจรในไดเรกทอรี นั่นคือเราต้องการหลีกเลี่ยงการค้นหาข้อมูลซ้ำเป็นครั้งที่สอง ถ้าออกแบบอัลกอริทึมไม่ดีจะทำให้เกิดการวนซ้ำ (loop) ไม่รู้จบ การค้นหาในวงจรก็จะไม่มีวันจบสิ้น วิธีแก้ คือ จำกัดจำนวนของไดเรกทอรี (ตามใจ) ที่จะเข้าใช้ในระหว่างการค้นหา
ไดเรกทอรีแบบกราฟโดยทั่วไป(General Graph Directory) • อีกปัญหาหนึ่งคือในเรื่องการลบ ในไดเรกทอรีแบบไม่เป็นวงจร ค่า 0 ในการนับการอ้างอิง หมายถึง แฟ้มข้อมูลนั้นลบได้ แต่ถ้ามีวงจรเกิดขึ้น ค่าการอ้างอิงอาจจะไม่เป็นศูนย์ เมื่อแฟ้มข้อมูลหรือไดเรกทอรีนั้นไม่มีแล้ว ในกรณีนี้จำเป็นต้องใช้วิธี “การสะสมขยะ” (garbage collection) เพื่อกำหนดว่าเมื่อไรที่ค่าการอ้างอิงสุดท้ายถูกลบไปแล้ว และพื้นที่ในดิสก์ตรงนั้นสามารถนำมาจัดสรรใหม่ได้แล้ว
ไดเรกทอรีแบบกราฟโดยทั่วไป(General Graph Directory) • การสะสมขยะจำเป็นสำหรับกราฟแบบมีวงจรเท่านั้น ดังนั้นกราฟแบบไม่มีวงจรใช้งานง่ายกว่ามาก ปัญหาก็คือการเลี่ยงไม่ให้เกิดวงจรเมื่อ link ใหม่ ถูกเพิ่มเข้ามาในโครงสร้าง เราจะรู้ได้อย่างไรว่าเมื่อไร link ใหม่จะเป็นวงจรอย่างสมบูรณ์ มีอัลกอริทึมในการค้นหาวงจรในกราฟ แต่มันเสียเวลา ดังนั้นโดยทั่วไปโครงสร้างไดเรกทอรีแบบต้นไม้น่าใช้กว่าโครงสร้างของกราฟแบบไม่มีวงจร
การป้องกัน (Protection) ชนิดของการเข้าถึงแฟ้มข้อมูล(Types of Access) • Read – อ่านจากแฟ้มข้อมูล • Write – เขียนหรือเขียนอีกครั้ง (rewrite) แฟ้มข้อมูล • Execute – load แฟ้มข้อมูลเข้าสู่หน่วยความจำและทำงานนั้น • Append – เขียนสารสนเทศใหม่ต่อท้ายแฟ้มข้อมูล • Delete – ลบแฟ้มข้อมูลและคืนพื้นที่ให้สามารถใช้ใหม่ได้ • List – แสดงชื่อและคุณลักษณะของแฟ้มข้อมูล
รายการเข้าถึงแฟ้มข้อมูลและกลุ่ม (Access Lists and Groups) • รายการการเข้าถึงแฟ้มข้อมูล (access list) คือ การเจาะจงชื่อของผู้ใช้และชนิดของการเข้าถึงแฟ้มข้อมูลของผู้ใช้แต่ละคน เมื่อผู้ใช้ร้องขอเข้าถึงแฟ้มข้อมูล ระบบปฏิบัติการจะตรวจสอบรายการการเข้าถึงแฟ้มข้อมูล (access list) ที่เกี่ยวข้องกับแฟ้มข้อมูลนั้น ถ้าการร้องขอนั้นมีในรายการของผู้ใช้คนนั้น การเข้าถึงก็จะได้รับอนุญาต มิฉะนั้นจะเป็นการฝ่าฝืนในการป้องกัน และงานของผู้ใช้จะถูกปฏิเสธการเข้าถึงแฟ้มข้อมูล (access denies)
รายการเข้าถึงแฟ้มข้อมูลและกลุ่ม (Access Lists and Groups) • ปัญหาหลักเกี่ยวกับรายการการเข้าถึงแฟ้มข้อมูล คือ ความยาวของรายการ ถ้าเราต้องการให้ทุกคนอ่านแฟ้มข้อมูล เราต้องแสดง (list) รายการผู้ใช้ทุกคนด้วยการเข้าถึงแบบอ่าน (read access) การทำเช่นนี้มีผลลัพธ์ 2 ประการ • การสร้างรายการอาจจะเป็นงานที่น่าเบื่อและไม่ได้อะไร โดยเฉพาะถ้าเราไม่เห็นว่ารายการของผู้ใช้ในระบบมีข้อดีอะไร • ไดเรกทอรีต้องเปลี่ยนจากขนาดคงที่เป็นแบบแปรผัน ทำให้การจัดการพื้นที่ซับซ้อนขึ้นกว่าเดิม • ปัญหานี้แก้ได้โดยใช้ รายการการเข้าถึงแฟ้มข้อมูลแบบกะทัดรัด
รายการเข้าถึงแฟ้มข้อมูลและกลุ่ม (Access Lists and Groups) • เพื่อบีบความยาวของรายการการเข้าถึงแฟ้มข้อมูลให้กะทัดรัด หลาย ๆ ระบบแบ่งประเภทของผู้ใช้เป็น 3 ประเภท ในการติดต่อกับแฟ้มข้อมูลแต่ละแฟ้ม • เจ้าของ (Owner)คือ ผู้ใช้ที่สร้างแฟ้มข้อมูลเป็นของตัวเอง • กลุ่ม (Group)คือ กลุ่มของผู้ใช้ที่ใช้แฟ้มข้อมูลร่วมกัน และต้องการการเข้าถึงแฟ้มข้อมูล (access ) ที่คล้ายกันในกลุ่มหรือกลุ่มงาน (workgroup) • คนอื่น (universe)คือ ผู้ใช้อื่น ๆ ทั้งหมดในระบบ