บทท่ี 4การจัดการข้อมูล ( File Management)แนวความคดิ เกยี่ วกบั แฟ้มข้อมูล (File Concept) คอมพวิ เตอร์สามารถเกบ็ สารสนเทศ ไดใ้ นหลายๆ สื่อ เช่น จานแม่เหลก็ เทป แฟ้มขอ้ มูล(files) ถูกจบั คู่โดยระบบปฏิบตั ิการ ไปสู่ อปุ กรณ์ทางกายภาพ อุปกรณ์ที่ใชเ้ กบ็ ขอ้ มูลเหล่าน้ีเป็นแบบถาวร (nonvolatile) ถึงแมไ้ ฟดบั หรือ boot เครื่องใหม่ขอ้ มูลกย็ งั อยู่ แฟ้มขอ้ มูล คือ ชื่อของสารสนเทศที่สมั พนั ธ์กนั ซ่ึงถูกบนั ทึกไวใ้ นหน่วยเกบ็ ขอ้ มูลสาํ รอง(secondary storage) ในมุมมองของผใู้ ชแ้ ฟ้มขอ้ มูลคือการจดั สรรที่เลก็ ที่สุดของหน่วยเกบ็ ขอ้ มูลสาํ รองทางตรรกะ นนั่ คือ ขอ้ มูลจะไม่ถกู เขียนลงในหน่วยเกบ็ ขอ้ มูลสาํ รองถา้ ไม่ไดเ้ ขียนลงแฟ้มขอ้ มูล ดงั น้นั แฟ้มขอ้ มูลจึงเป็นตวั แทนของโปรแกรมและขอ้ มูล แฟ้มขอ้ มูล อาจเป็นตวั เลขตวั อกั ษร หรือ ตวั เลขปนตวั อกั ษรแฟ้มขอ้ มูลถูกกาํ หนดเป็นโครงสร้าง ตามชนิดของขอ้ มูลText file คือ ลาํ ดบั ของตวั อกั ษรที่เรียงกนั ในบรรทดั (หรือหนา้ )Source file คือ ลาํ ดบั ของโปรแกรมยอ่ ย (subroutine) และฟังกช์ นั (อาจเป็นการประกาศค่าตามประโยค)Object file คือ ลาํ ดบั ของไบต์ ที่จดั เรียงในบลอ็ กที่ตวั เชื่อมโยง (linker) ของระบบเขา้ ใจExecutable file คือ ลาํ ดบั ของส่วนของรหสั โปรแกรมซ่ึงตวั load โปรแกรม (loader) นาํ เขา้ มายงัหน่วยความจาํ และสง่ั ใหท้ าํ งาน (execute)4.1.1 ลกั ษณะของแฟ้มข้อมูล (File attributes) ชื่อ (Name) – ช่ือแฟ้มขอ้ มูลคือ สญั ลกั ษณ์ (สารสนเทศ) ที่เกบ็ ไวใ้ นรูปแบบท่ีมนุษย์ สามารถอ่านได้ ชนิด (Type) – ส่วนน้ีจาํ เป็นสาํ หรับระบบซ่ึงสนบั สนุนชนิดของขอ้ มูลหลายๆชนิด ตาํ แหน่ง (Location) - เป็นตวั ช้ีไปยงั อุปกรณ์และตาํ แหน่งของแฟ้มขอ้ มูลบนอุปกรณ์น้นั ขนาด (Size) – ขนาดของแฟ้มขอ้ มูลในปัจจุบนั (ไบต,์ คาํ หรือบลอ็ ก) การป้องกนั (protection) – การควบคุมใหส้ ามารถ อ่าน เขียน ทาํ งาน ฯลฯ เวลา วนั ที่ และเอกลกั ษณ์เฉพาะของผู้ใช้ (Time , date , and user identification)
179 ระบบปฏิบตั ิการ – เกบ็ ขอ้ มูลพวก วนั ที่ สร้างแฟ้มน้ีข้ึนมา , ปรับปรุงคร้ังสุดทา้ ยเมื่อไหร่, และใชค้ ร้ังสุดทา้ ย เมื่อไหร่ขอ้ มูลเหล่าน้ีจะเป็นประโยชนใ์ นเรื่องการป้องกนั , การรักษาความปลอดภยั และการ ควบคุมการใชง้ าน4.1.2 คุณสมบตั ขิ องแฟ้มข้อมูล (File Operation) การสร้างแฟ้มข้อมูล (Creating a file) 1. หาที่วา่ งในระบบแฟ้มขอ้ มูล 2. ช่องวา่ งของแฟ้มขอ้ มูลใหม่ตอ้ งถูกสร้างในไดเรกทอรี่ (ไดเรกทอรี่จะบนั ทึกชื่อแฟ้ม และ ตาํ แหน่งในระบบแฟ้มขอ้ มูล) การเขียนแฟ้มข้อมูล (Writing a file) ใชก้ ารเรียกระบบใหเ้ จาะจง ช่ือแฟ้มและสารสนเทศท่ีจะถูกเขียนลงแฟ้มขอ้ มูลโดยระบบ จะคน้ หาไดเรกทอรี่ เพ่ือระบุตาํ แหน่งถดั ไปที่จะตอ้ งเขียน การอ่านแฟ้มข้อมูล (Reading a file) ใชก้ ารเรียกระบบเพอ่ื เจาะจงชื่อแฟ้มและที่ซ่ึง(ในหน่วยความจาํ ) บลอ็ กถดั ไปของ แฟ้มขอ้ มูลควรจะอยู่ จากน้นั ไดเรกทอร่ีจะถูกคน้ หาและระบบจะเกบ็ read pointer เพอื่ ระบุ ตาํ แหน่งถดั ไปท่ีตอ้ งอ่าน โดยทว่ั ไปแฟ้มที่ถูกอ่านหรือเขียนระบบส่วนใหญม่ กั เกบ็ pointer ไวต้ วั เดียว ท่ีใชท้ ้งั อ่านและเขียนไดเ้ รียกวา่ “ตวั ช้ีตาํ แหน่งแฟ้มปัจจุบนั ” (current-file- position pointer) เพือ่ ประหยดั พ้ืนที่และลดความซบั ซอ้ นของระบบ การย้ายตาํ แหน่งภายในแฟ้มข้อมูล (Repositioning within a file) เริ่มจากคน้ หาไดเรกทอรี่ที่ตอ้ งการและกาํ หนดค่าใหต้ วั ช้ีตาํ แหน่งแฟ้มปัจจุบนั การยา้ ย ตาํ แหน่งภายในแฟ้มขอ้ มูลไม่จาํ เป็นตอ้ งเก่ียวขอ้ งกบั I/O จริงๆเลยการทาํ งานของแฟ้มน้ี เรียกว่า การคน้ หา (seek) ขอ้ มูล การลบแฟ้มข้อมูล (Deleting a file) เริ่มจากการคน้ หาไดเรกทอร่ีท่ีมีชื่อจากแฟ้มท่ีจะลบเมื่อพบแลว้ เรากป็ ลดปล่อยท่ีว่าง ท้งั หมดของแฟ้มน้นั (ดงั น้นั ท่ีวา่ งดงั กลา่ วกส็ ามารถใหแ้ ฟ้มอ่ืนใชง้ านได)้ และลบขอ้ มูล น้นั ใน ไดเรกทอร่ีทิ้ง การตดั แฟ้มข้อมูลให้ส้ันลง (truncating a file) เม่ือผใู้ ชต้ อ้ งการใหแ้ ฟ้มขอ้ มูลมีคุณลกั ษณะเหมือนเดิม แต่ตอ้ งการลบเน้ือหาของ
การจดั การขอ้ มูล 180 แฟ้มขอ้ มูลแทนที่จะลบและสร้างใหม่ เราสามารถใชฟ้ ังกช์ นั น้ีเพื่อใหค้ ุณลกั ษณะต่างๆ ยงั คงอยู่ (ยกเวน้ ความยาวของแฟ้มขอ้ มูลจะถูกต้งั ใหม่ใหม้ ีความยาวเป็นศูนย์นอกจาก 6 ขอ้ ดงั กล่าวยงั มีการทาํ งานอื่นอีกเช่น การต่อทา้ ย (appending) การเปล่ียนช่ือ (renaming)การคัดลอก (copy) แฟ้มข้อมูลหรื อคัดลอกแฟ้มไปสู่ อุปกรณ์รับส่ งข้อมูลอีกตัวหน่ึง เช่นเครื่องพิมพ์ หรือ จอภาพ โดยตอ้ งมีการสร้างแฟ้มใหม่และอ่านจากแฟ้มเก่าเพ่ือเขียนลงแฟ้มใหม่การทาํ งานของแฟ้มขอ้ มูลโดยส่วนใหญ่มกั เก่ียวขอ้ งกบั การคน้ หาไดเรกทอรี่ เพื่อหาช่องท่ีเก่ียวขอ้ งกบั ชื่อแฟ้ม เพ่ือหลีกเลี่ยงการคน้ หาน้ีหลายๆระบบจะเปิ ด (open) แฟ้มขอ้ มูลเมื่อถูกใช้คร้ังแรกระบบปฏิบตั ิการจะเก็บตารางเลก็ ๆ ที่บรรจุสารสนเทศเกี่ยวกบั การเปิ ดแฟ้มขอ้ มูลท้งั หมด (open-file-table) เม่ือการทาํ งานเก่ียวกบั แฟ้มถูกร้องขอก็เพียงแต่ใชด้ ชั นีในตาราง ทาํ ให้ไม่ตอ้ งใช้การค้นหาอีกต่อไปเมื่อไม่ต้องการใช้แฟ้มข้อมูลน้ันแล้ว ก็ปิ ด (close) โดยกระบวนการและระบบปฏิบตั ิการจะเอามนั ออกจาก open – file tableโดยสรุปมีสารสนเทศหลายส่วนท่ีเก่ียวขอ้ งกบั การกบั การเปิ ดแฟ้มขอ้ มูล ดงั น้ี ตวั ชีแ้ ฟ้มข้อมูล (File pointer) – ระบบซ่ึงไม่มีระยะห่างจากขอบของแฟ้มขอ้ มูล (file offset) ท่ีเป็นส่วนหน่ึงของคาํ สงั่ เรียกระบบ read และ write ระบบตอ้ งตามรอยตาํ แหน่งที่ อ่านหรือเขียนเป็นคร้ังสุดทา้ ยเหมือนตวั ช้ีตาํ แหน่งแฟ้มขอ้ มลู ปัจจุบนั (current-file- position pointer) การนับการเปิ ดแฟ้มข้อมูล (File open count) - เม่ือแฟ้มขอ้ มูลถูกปิ ด ระบบปฏิบตั ิงานตอ้ ง ใชช้ ่องของตารางเปิ ดแฟ้มขอ้ มูล (open file table ) อีกคร้ัง หรือไม่กใ็ ชท้ ่ีวา่ งในตาราง เพราะกระบวนการหลายๆ กระบวนการอาจจะเปิ ดแฟ้มขอ้ มูลระบบตอ้ งรอใหแ้ ฟ้มสุดทา้ ย ปิ ดก่อนจะลบช่องในตารางเปิ ดแฟ้มสุดทา้ ย ระบบจึงจะลบช่อง (entry) ได้ ตาํ แหน่งของแฟ้มข้อมูลบนดสิ ก์ (Disk location of the file) - การทาํ งานของแฟ้มขอ้ มูล ส่วนใหญ่ตอ้ งการใหร้ ะบบปรับปรุงขอ้ มูลภายในแฟ้มขอ้ มูลสารสนเทศที่จาํ เป็นสาํ หรับ ระบุตาํ แหน่งแฟ้มขอ้ มูลบนดิสกถ์ ูกเกบ็ ไวใ้ นหน่วยความจาํ เพอื่ หลีกเล่ียงท่ีจะตอ้ งอา่ นจาก ดิสกส์ าํ หรับการทาํ งานแต่ละคร้ัง4.1.2.1 ชนิดของแฟ้มข้อมูล (File types) เทคนิคทว่ั ๆไปสําหรับการนาํ ชนิดของแฟ้มขอ้ มูลไปใช้ คือการรวมชนิดเขา้ เป็ นส่วนหน่ึงของชื่อแฟ้มขอ้ มูล ชื่อจะถูกแบ่งเป็น 2 ส่วนคือ ช่ือ และ นามสกุล (extension) โดยทวั่ ไปจะแยกกนัโดยใช้ (.) ดูรูป 4.1
181 ระบบปฏิบตั ิการFile Type Usual Function extensionExecutable exe, com, bin or none ready-to-run machine-languageObject program obj, o complied, machine language, notSource code linkedBatch c, p, pas, 177, asm, a source code in various languagesText bat, sh commands to the command interpreterWord processor txt, doc textual data documentsLibrary wp, tex, rrf, etc. various word-processor formatsPrint or view lib, a libraries of routinesArchive ps, dvi, gif ASCII or binary file arc, zip, tar related files grouped into one file, sometimes compressed. รูปที่ 4.1 แสดงชนิดของแฟ้มข้อมูลทว่ั ไป วธิ ีน้ีทาํ ใหผ้ ใู้ ชแ้ ละระบบปฏิบตั ิการทราบวา่ แฟ้มขอ้ มูลน้นั เป็นแฟ้มชนิดใด ตวั อยา่ งเช่น ในMS-DOS ช่ือยาวไม่เกิน 8 ตวั อกั ษรแลว้ ตามดว้ ยจุดและจบดว้ ย นามสกลุ 3 ตวั อกั ษรระบบจะใช้นามสกลุ เพอ่ื บ่งช้ีชนิดของแฟ้มและชนิดของการทาํ งาน (operation)ซ่ึงสามารถทาํ ไดก้ บั แฟ้มน้นัตวั อยา่ งเช่น ไฟล์ “com” , “.exe” หรือ “.bat” , สามารถ execute ได้ “.com” และ “.exe” เป็น binaryexecutable file “.bat”เป็นแฟ้มขอ้ มูลแบบกลุ่ม (batch)บรรจุในรูปแบบ ASCIIตวั แปลภาษาassembly ยอ่ มรู้จกั แฟ้มขอ้ มูลที่มีนามสกลุ เป็น “.asm” ในระบบ Macintosh รู้จกั พวก “text” หรือ“pict”4.1.2.2 โครงสร้างของแฟ้มข้อมูล (File structure) แฟ้มขอ้ มูลตอ้ งมีโครงสร้างที่ระบบปฏิบตั ิการเขา้ ใจได้ เช่น ระบบปฏิบตั ิการ อาจตอ้ งการexecutable file ที่มีโครงสร้างเฉพาะเพอื่ เอาไปกาํ หนดวา่ จะ load แฟ้มขอ้ มูลวา่ ไวย้ งั ตาํ แหน่งใดในหน่วยความจาํ และตาํ แหน่งของคาํ สง่ั แรก คืออะไร
การจดั การขอ้ มูล 182 ในระบบ UNIX แต่ละแฟ้มขอ้ มูลจะมีบิตทีเรียงลาํ ดบั กนั 8 บิต โดยไม่มีการเปลี่ยนแปลงบิตเหล่าน้ีจากระบบปฏิบตั ิการ วธิ ีน้ียดื หยนุ่ ท่ีสุดแต่มีการสนบั สนุนนอ้ ย โปรแกรมประยกุ ตแ์ ต่ละโปรแกรมตอ้ งแนบรหสั โปรแกรมของตวั เองไปดว้ ยเพื่อแปลแฟ้มนาํ เขา้ ใหเ้ ป็นโครงสร้างที่น่าพอใจ อยา่ งไรกต็ ามระบบปฏิบตั ิการกต็ อ้ งสนบั สนุนอยา่ งนอ้ ย 1 โครงสร้าง นน่ั คือ executable fileเพอื่ ใหร้ ะบบสามารถ load และ run โปรแกรมได้ อีกตวั อยา่ งหน่ึงของระบบปฏิบตั ิการที่สนบั สนุน โครงสร้างของแฟ้มขอ้ มูลเลก็ นอ้ ยคือMacintosh ซ่ึงแฟ้มขอ้ มูลมี 2 ส่วน คือ resource fork และ data fork resource fork บรรจุสารสนเทศที่ผใู้ ชส้ นใจ เช่น ตวั ฉลากบนป่ ุมที่แสดงโดยโปรแกรมผใู้ ช้ต่างประเทศอาจจะตอ้ งการเปล่ียนฉลากน้นั เป็นภาษาของเขาเองซ่ึง Macintosh สนบั สนุนเครื่องมือท่ีอนุญาตใหป้ รับปรุงขอ้ มูลใน resource fork ได้ data fork บรรจุโปรแกรม , รหสั โปรแกรม (code) หรือขอ้ มูล(เน้ือหาของแฟ้มขอ้ มูลทว่ั ไป)4.1.2.3 โครงสร้างของแฟ้มข้อมูลภายใน (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) สามารถทาํ ไดโ้ ดยโปรแกรมประยกุ ตข์ องผใู้ ชห้ รือโดยระบบปฏิบตั ิการ อีกกรณีหน่ึง แฟ้มขอ้ มูลอาจถูกพิจารณาเป็นบลอ็ กแบบเรียงลาํ ดบั ฟังกช์ นั I/O พ้นื ฐานท้งั หมดจะทาํ งานในแบบของบลอ็ ก การแปลงจาก logical record ไปเป็น physical block คือปัญหาอยา่ งง่ายของซอฟตแ์ วร์ สงั เกตไดว้ ่า พ้ืนท่ีวา่ งในดิสก์ มกั ถูกจดั สรรเป็นบลอ็ ก บางส่วนของบลอ็ กสุดทา้ ยของแต่ละแฟ้มขอ้ มูลอาจจะเสียไป ถา้ แต่ละบลอ็ กมี 512 ไบต์ ดงั น้นั แฟ้มขนาด 1949 ไบต์ ควรมี 4 บลอ็ ก(2048 ไบต)์ ที่เหลือ 99 ไบต์ จะเสียไป นน่ั คือ การสูญเสียพ้นื ท่ียอ่ ยภายใน (internal fragmentation)ฉะน้นั ถา้ บลอ็ กขนาดใหญ่กจ็ ะเสียพ้ืนท่ีมากตามไปดว้ ย4.1.3 วธิ ีการเข้าถงึ ระบบแฟ้มข้อมูล4.1.3.1 การเข้าถงึ ข้อมูลแบบเรียงลาํ ดบั (Sequential access) สารสนเทศในแฟ้มขอ้ มูลถูกดึงเขา้ ถึงเป็นลาํ ดบั วธิ ีการเขา้ ถึงขอ้ มูลแบบน้ีเป็นวธิ ีธรรมดาที่สุด ตวั อยา่ งเช่น editor และ compiler มกั เขา้ ถึงแฟ้มขอ้ มูลตามวิธีน้ี
183 ระบบปฏิบตั ิการ การทาํ งาน (operation) บนแฟ้มขอ้ มูลคือ อ่าน และเขียน ตวั อา่ น จะอา่ นส่วนถดั ไปของแฟ้มและเปลี่ยนคา่ ตวั ช้ีแฟ้มขอ้ มูลโดยอตั โนมตั ิตามตาํ แหน่งของ I/O คลา้ ยๆ กบั การเขียนต่อทา้ ยแฟ้มขอ้ มูลแต่ละแฟ้มขอ้ มูลสามารถกลบั ไปเร่ิมตน้ ใหม่และบางระบบโปรแกรมอาจจะสามารถขา้ มไปขา้ งหนา้ หรือขา้ งหลงั N ระเบียน (record) ได้ เมื่อ N คือเลขจาํ นวนเตม็(บางที N=1) การเขา้ ถึงแฟ้มขอ้ มูลแบบเรียงลาํ ดบั ถูกบรรยายในรูป 4.2 current positionBeginnig end rewind read or write รูปที่ 4.2 แสดงแฟ้มข้อมูลทมี่ กี ารเข้าถงึ แบบเรียงลาํ ดบัการเขา้ แฟ้มขอ้ มูลแบบเรียงลาํ ดบั เป็นพ้นื ฐานของ เทป4.1.3.2 การเข้าถงึ แฟ้มข้อมูลโดยตรง (Direct Access) หรือการเขา้ ถึงแฟ้มขอ้ มูลแบบสมั พนั ธ์ (relative access) แฟ้มขอ้ มูลถูกสร้างข้ึนเป็น logicalrecord ที่มีความยาวคงท่ี ซ่ึงอนุญาตใหโ้ ปรแกรมอ่านและเขียนระเบียนอยา่ งรวดเร็วโดยไม่มีลาํ ดบัการเขา้ ถึงแฟ้มขอ้ มูลโดยตรงเป็นพ้ืนฐานของดิสก์ เม่ือ ดิสกอ์ นุญาตใหเ้ ขา้ ถึงบลอ็ คของแฟ้มขอ้ มูลแบบสุ่ม สาํ หรับการเขา้ ถึงแฟ้มขอ้ มูลโดยตรง แฟ้มขอ้ มลู จะถูกมองเป็นจาํ นวนของ บลอ็ คหรือระเบียนดงั น้นั เราอาจจะอา่ นบลอ็ ค 14 แลว้ อา่ นบลอ็ ค 53 แลว้ เขียนบลอ็ ค 7 ได้ หมายเลขบลอ็ คท่ีผูใ้ ชเ้ ตรียมให้ระบบปฏิบตั ิการคือ หมายเลขบล็อคสัมพนั ธ์ (relative blocknumber) หมายเลขบล็อคสัมพนั ธ์ คือดชั นีที่สัมพนั ธ์กบั จุดเร่ิมต้นของแฟ้มขอ้ มูล ดงั น้ัน บล็อคสัมพนั ธ์แรกของแฟ้มขอ้ มูลคือ 0 ถดั ไปคือ 1 ไปเร่ือย ๆ อยา่ งไรก็ตาม ตาํ แหน่งของดิสกจ์ ริงๆ อาจเป็น 14703 สาํ หรับบลอ็ คแรกและบลอ็ คท่ีสอง อาจเป็น 3192 การใชห้ มายเลขบลอ็ คสัมพนั ธ์ทาํ ให้ระบบปฏิบตั ิการตดั สินใจว่า แฟ้มขอ้ มูลควรจะถูกเอาไปไวท้ ่ีไหนและช่วยป้องกนั ผูใ้ ช้จากการเขา้ ถึงส่วนของระบบแฟ้มขอ้ มูลที่ไม่ใช่ส่วนของเขา บางระบบเร่ิมหมายเลขบล็อคสัมพนั ธ์น้ีท่ี 0 ,บางระบบอาจเร่ิมจาก 1 ระบบโดยทั่วไปไม่สนับสนุนท้ังแบบเรียงลาํ ดับและโดยตรงบางระบบสนับสนุนแบบเรียงลาํ ดบั บางระบบเป็ นแบบโดยตรงบางระบบตอ้ งการให้ เม่ือเริ่มสร้างแฟ้มขอ้ มูลกก็ าํ หนดไปเลยว่าเป็ นแบบเรียงลาํ ดบั หรือโดยตรง อย่างไรก็ตาม มนั ก็ไม่ยากที่จะจาํ ลองสถานการณ์จากแบบ
การจดั การขอ้ มูล 184เรียงลาํ ดบั ใหเ้ ป็นแบบโดยตรง ถา้ เรามีตวั แปร cp เป็นตวั กาํ หนดตาํ แหน่งปัจจุบนั ของเรา ดงั น้นั เราสามารถจาํ ลองการทาํ งานของแฟ้มแบบเรียงลาํ ดบั ไดด้ งั รูป4.3Sequential Access Implementation for direct access Reset cp := 0; Read next Read cp; Write next cp := cp +1; Write cp; cp := cp +1; รูปท่ี 4.3 แสดงการจาํ ลองการเข้าถงึ แบบเรียงลาํ ดบั บนแฟ้มข้อมูลทมี่ กี ารเข้าถงึ แบบโดยตรงในทางตรงกนั ขา้ ม มนั ไม่มีประโยชนเ์ ลยถา้ จะลองใหเ้ ปลี่ยนจากแบบโดยตรงมาเป็นแบบเรียงลาํ ดบั4.1.3.3 การเข้าถงึ ข้อมูลแบบอื่น (Other Access Method) วิธีเสริมน้ีเก่ียวขอ้ งกบั การสร้างดชั นี (index) ใหแ้ ฟ้มขอ้ มูล ดชั นีน้ี (เหมือนดชั นีทา้ ยหลงัหนงั สือ) บรรจุตวั ช้ีบลอ็ คในการหาระเบียนในแฟ้มขอ้ มูล ข้นั แรกเราตอ้ งคน้ หาดชั นีแลว้ ใชต้ วั ช้ีในการเขา้ ถึงแฟ้มขอ้ มูลโดยตรงและหาระเบียนที่ตอ้ งการตวั อย่างเช่น แฟ้มขอ้ มูลเกบ็ ราคาสินคา้ แต่ละระเบียนประกอบดว้ ย รหสั สินคา้ 10 หลกั ราคา 6หลกั รวมเป็น 16 ไบต์ ถา้ ดิสกข์ องเรามี 1024 ไบต/์ บลอ็ กราสามารถเกบ็ ได้ 64 ระเบียน/บลอ็ กแฟ้มที่มี120,000 ระเบียนควรจะมี 2,000 บลอ็ ก (2 ลา้ นไบต)์ ดชั นีควรมี 2,000 ช่อง ของทุกๆ 10 หลกัหรือ 20,000 ไบต์ แลว้ ควรเกบ็ ไวใ้ นหน่วยความจาํ ในการคน้ หาราคาของสินคา้ เราสามารถคน้ หา(binary search) ดชั นี ในการคน้ หาน้ีเราควรจะรู้วา่ บลอ็ คไหนบรรจุระเบียนท่ีตอ้ งการแลว้ จึงเขา้ ถึงบลอ็ กน้นั โครงสร้างขอ้ มูลแบบน้ีทาํ ใหเ้ ราสามารถคน้ หาแฟ้มขอ้ มูลขนาดใหญไ่ ดด้ ว้ ยการทาํ I/Oเพยี งนิดเดียว ถา้ แฟ้มขอ้ มูลมีขนาดใหญ่ แฟ้มดชั นีกต็ อ้ งมีขนาดใหญ่เกินจะเกบ็ ไวใ้ นหน่วยความจาํได้ วธิ ีแกว้ ธิ ีหน่ึง คือ สร้างดชั นีสาํ หรับแฟ้มดชั นี (index file) แฟ้มขอ้ มูลปฐมภูมิ (primary indexfile) ควรจะบรรจุตวั ช้ีไปยงั แฟ้มขอ้ มูลทุติยภมู ิ (secondary index file) ซ่ึงควรจะช้ีไปยงั ขอ้ มลู จริงตวั อย่างเช่น ดชั นีแบบเรียงลาํ ดบั ของ IBM (ISAM) ใช้ master index เลก็ ๆ ซ่ึงช้ีไปยงั บลอ็ คของดิสกข์ องดชั นีทุติยภูมิ (secondary index) ดชั นีทุติยภูมิจะช้ีไปยงั บลอ็ คของแฟ้มขอ้ มูลจริงแฟ้มขอ้ มูลถูกเกบ็ แบบเรียงลาํ ดบั โดยการกาํ หนด Key ข้ึนมา เพ่อื หาขอ้ มูลท่ีตอ้ งการ ข้นั แรกเราตอ้ ง
185 ระบบปฏิบตั ิการคน้ หาแบบ binary เพื่อหา master index เพอ่ื จดั เตรียมหมายเลขบลอ็ กของดชั นีทุติยภูมิบลอ็ กถกู อ่านแลว้ คน้ หาแบบ binary อีกคร้ัง เพอื่ หาบลอ็ กท่ีบรรจุระเบียนที่ตอ้ งการข้นั สุดทา้ ย บลอ็ กน้ีจะถูกคน้ หาแบบเรียงลาํ ดบั ดว้ ยวธิ ีการน้ีระเบียนต่างๆ สามารถระบุตาํ แหน่งจาก key ของมนั โดยการอ่านแบบโดยตรงท้งั 2 คร้ัง รูปที่4.4 แสดงสถานะการณ์คลา้ ยๆกนั ซ่ึงนาํ ไปใชโ้ ดยดชั นีและแฟ้มสมั พนั ธ์ของ VMS รูปที่ 4.4 แสดงตวั อย่างของแฟ้มดชั นีและแฟ้มข้อมูลแบบสัมพนั ธ์4.1.4 โครงสร้างของไดเรคทอรี (Directory Structure) การจดั การขอ้ มูลเป็น 100 gigabyte ของดิสก์ ตอ้ งทาํ เป็น 2 ส่วน 1. ระบบแฟ้มขอ้ มูลตอ้ งแบ่งเป็น partitions ใน IBM เรียก minidisks ใน PC และ Macintosh เรียก Volume โดยทวั่ ไป แต่ละดิสกบ์ นระบบบรรจุอยา่ งนอ้ ย 1 partition ผใู้ ชจ้ าํ เป็นตอ้ ง เก่ียวขอ้ งแต่ logical directory และโครงสร้างของแฟ้มขอ้ มูล และสามารถมองขา้ มปัญหา ทางกายภาพในการจดั การพ้นื ที่วา่ งของแฟ้มขอ้ มูลดว้ ยเหตุน้ี partition กส็ ามารถมองเป็น ดิสกเ์ สมือนได้ (virtual disk) 2. แต่ละ partition บรรจุสารสนเทศเก่ียวกบั แฟ้มขอ้ มูลภายใน partition สารสนเทศถูกเกบ็ ใน ช่องใน device directory หรือ เน้ือหาของตารางจาํ นวน (volume table of contents) device
การจดั การขอ้ มูล 186 directory (โดยทวั่ ไปเรียก”ไดเรคทอรี”) บนั ทึกสารสนเทศ เช่น ช่ือ , ตาํ แหน่ง, ขนาด และ ชนิดของแฟ้มขอ้ มูลใน partition รูป 4.5 แสดงตวั อยา่ งการจดั ระเบียบของระบบแฟ้มขอ้ มูล รูปที่ 4.5 แสดงตัวอย่างการจดั ระเบยี บของระบบแฟ้มข้อมูล4.1.4.1 ไดเรกทอรีระดบั เดยี ว (Single-Level Directory) แฟ้มขอ้ มูลท้งั หมดถกู เกบ็ ไวใ้ นไดเรกทอรีเดียวกนั (ดงั รูปท่ี 10.6) ไดเรกทอรีระดบั เดียวมีขอ้ จาํ กดั อยา่ งมีนยั สาํ คญั เม่ือแฟ้มขอ้ มูลมีมากข้ึนหรือมีผใู้ ชม้ ากกว่า 1 คน ถา้ แฟ้มขอ้ มูลท้งั หมดอยู่ในไดเรกทอรีเดียวกนั แฟ้มเหล่าน้นั ตอ้ งมีชื่อเฉพาะตวั ถา้ มีผใู้ ช้ 2 คน เรียกแฟ้มขอ้ มูลชื่อ test ของตวั เอง (คนละไฟลช์ ื่อเดียวกนั ) ดงั น้นั กฎช่ือเฉพาะตวั กถ็ ูกทาํ ลายลง นอกจากน้นั ยงั มีขอ้ จาํ กดั ในเรื่องความยาว ในระบบ MS-DOS ช่ือแฟ้มขอ้ มูลยาวไดไ้ ม่เกิน 11 ตวั อกั ษร (รวมนามสกลุ ) UNIX255 ตวั อกั ษร รูปที่ 4.6 แสดงไดเรกทอร่ีระดบั
187 ระบบปฏิบตั ิการ4.1.4.2 ไดเรกทอรีสองระดบั (Two-Level Directory) ขอ้ เสียของไดเรกทอรีระดบั เดียวคือความสบั สนของช่ือแฟ้มขอ้ มูลระหวา่ งผใู้ ชต้ ่าง ๆ วิธีแก้พ้นื ฐานคือการสร้างไดเรกทอรีแยกกนั ใหผ้ ใู้ ชแ้ ต่ละคน ในโครงสร้างไดเรกทอรีสองระดบั ผใู้ ชแ้ ต่ละคนจะมี user file directory ของตวั เอง (UFD)แต่ละ UFD มีโครงสร้างคลา้ ย ๆ กนั แต่แสดงรายการแฟ้มขอ้ มูลของผใู้ ชค้ นเดียว เม่ืองานของผใู้ ช้เริ่มข้ึนหรือผใู้ ช้ log in เขา้ มา master file directory (MFD) ของระบบจะถูกคน้ หา MFD ถูกระบุโดยช่ือของผใู้ ช้ (user name) หรือหมายเลขบญั ชี (account number) และแต่ละช่องช้ีไปยงั UFD สาํ หรับผใู้ ชน้ ้นั (ดงั รูปท่ี 4.7) รูปท่ี 4.7 แสดงโครงสร้างของไดเรกทอร่ีสองระดบั เมื่อผูใ้ ชอ้ า้ งถึงแฟ้มขอ้ มูล UFD ของเขาจะถูกคน้ หา ดงั น้นั ผูใ้ ชต้ ่างกนั อาจมีแฟ้มขอ้ มูลชื่อเดียวกนั ได้ ตราบใดที่ช่ือเหล่าน้นั ภายในแต่ละ UFD เป็นชื่อเฉพาะตวั (ไม่ซ้าํ กนั ใน UFD) ในการสร้างแฟ้มขอ้ มูลสาํ หรับผใู้ ชค้ นหน่ึง ระบบปฏิบตั ิการจะคน้ หา UFD ของผใู้ ชค้ นน้นัเพื่อหาวา่ มีไฟลช์ ื่อน้ีอยกู่ ่อนหรือไม่ ในการลบแฟ้มขอ้ มูล ระบบปฏิบตั ิการจะคน้ หาใน UFD อยา่ งจาํ กดั ดงั น้นั จึงไม่สามารถเกิดเหตุการณ์ การลบแฟ้มขอ้ มูลท่ีมีช่ือเดียวกนั ของผใู้ ชอ้ ีกคนหน่ึงได้ โครงสร้างไดเรกทอรีสองระดบั แกป้ ัญหาการชนกนั ของชื่อได้ แต่มีปัญหาในเร่ืองการแยกผูใ้ ช้คนหน่ึงออกจากคนอื่นอย่างมีประสิทธิภาพ การแยกน้ีเป็ นขอ้ ดีเมื่อผูใ้ ช้เป็ นอิสระกนั อย่างสมบูรณ์ แต่จะเป็นขอ้ เสียเมื่อผใู้ ชต้ อ้ งการประสานงานบางงานและเขา้ ถึงแฟ้มขอ้ มูลของอีกคนหน่ึงบางระบบไม่ใหแ้ ฟ้มขอ้ มูลของผใู้ ชถ้ ูกเขา้ ถึงโดยผใู้ ชค้ นอื่น ถา้ การเขา้ ถึงแฟ้มขอ้ มูลทาํ ได้ ผูใ้ ช้คนหน่ึงตอ้ งมีความสามารถท่ีจะระบุช่ือแฟ้มขอ้ มูลในไดเรกทอรีของคนอ่ืน การระบุช่ือแฟ้มขอ้ มูลในไดเรกทอรีสองระดบั เราตอ้ งใหท้ ้งั ชื่อของผใู้ ชแ้ ละชื่อแฟ้มขอ้ มูล ไดเรกทอรีสองระดบั สามารถมองเป็นตน้ ไม้ ราก (root) ของตน้ ไมค้ ือ MFD ทายาทโดยตรงคือ UFD ทายาทของ UFD คือ แฟ้มขอ้ มูลของตวั มนั เอง แฟ้มขอ้ มูลคือใบไมข้ องตน้ ไมน้ งั่
การจดั การขอ้ มูล 188เอง ช่ือของผใู้ ชแ้ ละช่ือของแฟ้มขอ้ มูลกาํ หนดเสน้ ทาง (path) ในตน้ ไมจ้ ากราก (MFD) สู่ใบ (แฟ้มที่ตอ้ งการ) ดงั น้นั ช่ือของผใู้ ชแ้ ละชื่อไฟลก์ าํ หนดช่ือของเส้นทาง (path name) แฟ้มขอ้ มูลทุกแฟ้มในระบบมีชื่อของเส้นทาง เพ่ือระบุชื่อแฟ้มขอ้ มูลที่มีลกั ษณะเฉพาะ ผใู้ ชต้ อ้ งรู้ชื่อของเส้นทางของแฟ้มท่ีตอ้ งการตวั อยา่ งเช่น ถา้ ผใู้ ช้ A หวงั จะเขา้ ถึงแฟ้มขอ้ มูลช่ือ test ของเธอเอง เธอสามารถอา้ งอิง test ไดเ้ ลย แต่ถา้ จะเขา้ ถึง test ของผใู้ ช้ B (ไดเรกทอรี่ชื่อ userb) เธอตอ้ งอา้ งถึง /userb/test ทุก ๆ ระบบจะมีไวยากรณ์ของมนั เองสาํ หรับการระบุช่ือแฟ้มในไดเรกทอรี่อ่ืนตวั อยา่ งในระบบ MS-DOS อาจเป็น “C:\userb\test” แยกเป็น partition , ชื่อของไดเรกทอรี , และช่ือแฟ้มขอ้ มูล ในระบบ VMS ไฟล์ “login.com” อาจเป็น “u:[sst.jdeck]login.com;1” u คือช่ือของpartition , “sst” คือ ชื่อไดเรกทอรี , “jdeck” คือ ชื่อของไดเรกทอรียอ่ ย (subdirectory) และ “1” คือหมายเลขเวอร์ชนั ระบบอื่น ช่ือแรกกใ็ หเ้ ป็นช่ือ partition ที่เหลือกเ็ ป็นไดเรกทอรีและไฟล์ เช่น“/u/pbg/test” u คือ partition , “pbg” คือ ไดเรกทอรี และ “test” คือ แฟ้มขอ้ มลู (file) “test” คือแฟ้มขอ้ มูล (file)4.1.4.3 ไดเรกทอรีทมี่ โี ครงสร้างแบบต้นไม้ (Tree-Structured Directories) เมื่อเรารู้วา่ จะมองไดเรกทอรีสองระดบั ใหเ้ ป็นตน้ ไมส้ องระดบั (two-level tree) ยงั ไง เราก็สามารถมองโครงสร้างของไดเรกทอรีใหเ้ ป็นตน้ ไมท้ ่ีมีความสูงเท่าไรกไ็ ดต้ ามใจ (ดงั รูปที่ 4.8) รูปที่ 4.8 แสดงโครงสร้างของไดเรกทอร่ีแบบต้นไม้
189 ระบบปฏิบตั ิการ หลกั การน้ีทาํ ใหผ้ ใู้ ชส้ ามารถสร้างไดเรกทอรียอ่ ย (subdirectory) ของตวั เองได้ และสามารถจดั ระเบียบแฟ้มขอ้ มูลของพวกเขาไดด้ ว้ ย ตวั อยา่ งเช่นในระบบ MS-DOS ถูกสร้างโครงสร้างเหมือนตน้ ไม้ ตน้ ไมม้ ี root directory ทุก ๆ แฟ้มขอ้ มูลในระบบมีช่ือของเส้นทางเฉพาะตวั (uniquepath name) ชื่อของเส้นทาง คือ เส้นทางท่ีมาจาก root ผา่ นมาเป็นไดเรกทอรียอ่ ย เพ่ือเจาะจงแฟ้มท่ีตอ้ งการ ไดเรกทอรี (หรือไดเรกทอรียอ่ ย) บรรจุกลุ่มของแฟ้มขอ้ มูลหรือไดเรกทอรียอ่ ย ทุกไดเรกทอรีมีรูปแบบภายในเหมือน ๆ กนั มีบิตหน่ึงในแต่ละไดเรกทอรีท่ีกาํ หนดวา่ ถา้ เป็นแฟ้มขอ้ มูลจะมีคา่ เป็น 0 ถา้ เป็นไดเรกทอรียอ่ ยจะมีค่าเป็น 1 โปรแกรมเรียกระบบพเิ ศษจะถกู ใชใ้ นการสร้างและลบไดเรกทอรีเหล่าน้ี ในการใชง้ านปกติ ผใู้ ชแ้ ตล่ ะคนจะมี “ไดเรกทอรีปัจจุบนั ” (current directory) ซ่ึงใชเ้ กบ็แฟ้มขอ้ มูลที่ผใู้ ชส้ นใจในปัจจุบนั เม่ือมีการอา้ งอิงแฟ้มขอ้ มูลกจ็ ะเกิดการคน้ หาไดเรกทอรีปัจจุบนัถา้ แฟ้มขอ้ มูลที่ตอ้ งการไม่มีในไดเรกทอรีปัจจุบนั ผใู้ ชต้ อ้ งระบุช่ือของเส้นทาง (path name) หรือเปล่ียนไดเรกทอรีปัจจุบนั ไปเป็นไดเรกทอรีอ่ืน โปรแกรมเรียกระบบจะทาํ ใหช้ ื่อไดเรกทอรีเป็นเหมือนพารามิเตอร์และใชม้ นั เพอ่ื กาํ หนดไดเรกทอรีปัจจุบนั ใหม่ ดงั น้นั ผใู้ ชจ้ ึงสามารถเปล่ียนไดเรกทอรีปัจจุบนั ของเขาไดต้ ามตอ้ งการ ชื่อของเสน้ ทาง (path name) มี 2 ชนิด คือ ช่ือของเสน้ ทางแบบสมั บูรณ์ (absolute path name)หรือ ช่ือของเส้นทางแบบสมั พนั ธ์ (relative path name) ช่ือของเส้นทางแบบสมั บูรณ์ เร่ิมตน้ ท่ี rootแลว้ เดินทางลงมาจนถึงแฟ้มขอ้ มูลท่ีตอ้ งการ มีการกาํ หนดชื่อของไดเรกทอรีตลอดทาง ชื่อของเส้นทางแบบสมั พนั ธก์ าํ หนดเส้นทางจากไดเรกทอรีปัจจุบนั ตวั อยา่ งเช่น จากรูปที่ 10.8 ถา้ไดเรกทอรีปัจจุบนั คือ root/spell/mail ดงั น้นั ชื่อของเสน้ ทางแบบสมั พนั ธค์ ือ prt/first อา้ งถึงแฟ้มขอ้ มูลเดียวกนั กบั ชื่อของเส้นทางแบบสัมบูรณ์ดงั น้ีคือ root/spell/mail/prt/firstนโยบายในการลบไดเรกทอรีของโครงสร้างแบบตน้ ไมน้ ้ี ถา้ ไดเรกทอรีวา่ ง การลบไดเรกทอรีกท็ าํไดง้ ่าย แต่ถา้ ไดเรกทอรีไม่วา่ ง มีไฟลห์ ลายไฟล์ หรือมีหลายไดเรกทอรียอ่ ย วิธีการจดั การคือ 1. บางระบบ เช่น MS-DOS จะลบไดเรกทอรีไม่ไดถ้ า้ มนั ไม่วา่ ง ดงั น้นั ภา้ จะลบไดเรกทอรี ผใู้ ชต้ อ้ งลบไฟลท์ ้งั หมดในไดเรกทอรีก่อน ถา้ มีไดเรกทอรียอ่ ยอยู่ กต็ อ้ งลบไฟลใ์ น ไดเรกทอรียอ่ ยใหห้ มดก่อน แลว้ จึงลบไดเรกทอรียอ่ ยข้ึนมาจนถึงการลบไดเรกทอรีที่ ตอ้ งการลบ วธิ ีน้ีทาํ ใหต้ อ้ งทาํ งานจาํ นวนมาก 2. อีกวธิ ีหน่ึง เช่น ในระบบ UNIX คาํ สงั่ rm ใชล้ บไดเรกทอรี ซ่ึงท้งั ไฟลแ์ ละไดเรกทอรียอ่ ย ของ ไดเรกทอรีน้นั จะถูกลบท้งั หมด จะเห็นไดว้ ่าวิธีน้ีน่าจะดีในการนาํ ไปใช้ เพราะสะดวก แต่อนั ตรายมากเพราะทุกไดเรกทอรีสามารถถูกลบไดด้ ว้ ยคาํ สง่ั คาํ สงั่ เดียว ถา้ คาํ สง่ั เกิด ผดิ พลาด ไฟลแ์ ละไดเรกทอรีจาํ นวนมากจาํ เป็นท่ีจะตอ้ งกกู้ ลบั มาจาก backup เทปที่จะตอ้ ง กกู้ ลบั มาจาก backup เทป
การจดั การขอ้ มูล 1904.1.4.4 ไดเรกทอรีกราฟแบบไม่เป็ นวงจร (Acyclic-Graph Directory) พจิ ารณานกั เขียนโปรแกรม 2 คน ที่ทาํ งานโครงการร่วมกนั แฟ้มขอ้ มูลท่ีเก่ียวกบั โครงการน้ีเกบ็ ไวใ้ นไดเรกทอรียอ่ ยที่แยกมาจากโครงการอื่น แต่นกั เขียนโปรแกรมท้งั สองมีความรับผดิ ชอบต่อโครงการน้ีเท่ากนั ท้งั คูต่ อ้ งการไดเรกทอรียอ่ ยน้ีเป็นของตวั เอง ซ่ึงไดเรกทอรียอ่ ยน้ีควรจะถูกใช้ร่วมกนั (share) การใชแ้ ฟ้มขอ้ มูลหรือไดเรกทอรีร่วมกนั ไม่ไดเ้ หมือนกบั การมี 2 สาํ เนา แต่หมายถึงมีของจริงอยเู่ พยี งหน่ึงเดียว การเปล่ียนแปลงที่ทาํ โดยคน ๆ หน่ึงควรจะทาํ ใหค้ นอ่ืนเป็นความเปลี่ยนแปลงน้ีไดใ้ นทนั ที แฟ้มขอ้ มูลใหม่ที่ถูกสร้างโดยคน ๆ หน่ึงจะตอ้ งปรากฏในไดเรกทอรียอ่ ยท่ีใชร้ ่วมกนั ทนั ทีโดยอตั โนมตั ิโครงสร้างแบบตน้ ไมห้ า้ มใหม้ ีการใชแ้ ฟ้มขอ้ มูลหรือไดเรกทอรีร่วมกนั กราฟแบบไม่เป็นวงจร(acyclic graph) อนุญาตใหม้ ีการใชไ้ ดเรกทอรีและแฟ้มขอ้ มูลร่วมกนั ได้ (ดงั รูปที่ 4.9) รูปท่ี 4.9 แสดงโครงสร้างของไดเรกทอรีกราฟแบบไม่เป็ นวงจรแฟ้มขอ้ มูลหรือไดเรกทอรียอ่ ยอนั เดียวกนั อาจจะอยใู่ น 2 ไดเรกทอรีท่ีต่างกนั ได้การใชแ้ ฟ้มขอ้ มูลและไดเรกทอรีร่วมกนั สามารถนาํ ไปใชไ้ ดห้ ลาย ๆ ทาง เช่น 1. ในระบบ UNIX การสร้างไดเรกทอรีใหม่เรียกวา่ link link น้ีคือตวั ช้ีไปยงั แฟ้มขอ้ มูลอีก แฟ้มหน่ึง หรืออีกไดเรกทอรียอ่ ย ตวั อยา่ งเช่น link อาจเอาไปใชใ้ นชื่อของเสน้ ทางแบบ สมั บูรณ์ (เรียกวา่ symbolic link) เมื่อเกิดการอา้ งอิงแฟ้มขอ้ มูล เราจะคน้ หาไดเรกทอรี ถา้ ไดเรกทอรีถูกทาํ เคร่ืองหมายเป็น link กจ็ ะไดม้ าซ่ึงช่ือของแฟ้มขอ้ มูลหรือไดเรกทอรีจริง ๆ
191 ระบบปฏิบตั ิการ เราอธิบาย link ไดอ้ ีกโดยการใชช้ ่ือของเส้นทาง (path name) เพอ่ื หาตาํ แหน่งแฟ้มขอ้ มูล จริง ๆ link จะถูกจาํ แนกไดง้ ่ายโดยรูปแบบของมนั ในไดเรกทอรี และถูกระบุช่ือโดยตวั ช้ี ทางออ้ ม (indirect pointer)2. อีกวธิ ีหน่ึงในการใชแ้ ฟ้มขอ้ มูลร่วมกนั คือ การคดั ลอกสารสนเทศท้งั หมดไปไวใ้ น ไดเรกทอรีที่ใช้ร่วมกนั ท้งั คู่ ดงั น้นั ไดเรกทอรีท้งั คูต่ อ้ งเหมือนกนั และเท่ากนั link จะแตกต่างกนั อยา่ งชดั เจนจากไดเรกทอรีตน้ ฉบบั ดงั น้นั ท้งั สองจึงไม่เท่ากนั (ไดเรกทอรีตน้ ฉบบั ไม่เท่ากบั ตวั สาํ เนาที่ใชร้ ่วมกนั )การคดั ลอกไดเรกทอรีทาํ ใหต้ น้ ฉบบั และตวั สาํ เนาแยกกนั ได้ปัญหาหลกั ของการคดั ลอกไดเรกทอรีคือการบาํ รุงรักษาใหส้ อดคลอ้ งกนั จะทาํ ไดย้ งั ไง ถา้แฟ้มขอ้ มูลมีการปรับปรุงไปแลว้ อีกปัญหาหน่ึงคือการลบ เม่ือไรดีท่ีเราจะลบได?้ ทางหน่ึงที่เป็นไปไดค้ ือ จะลบไฟลเ์ มื่อมีคนตอ้ งการลบมนั แต่การทาํ อยา่ งน้ีอาจทาํ ใหเ้ กิดตวั ช้ีอยา่ งหลวม ๆ (dangling pointer) ช้ีไปยงัแฟ้มขอ้ มูลที่ไม่มีแลว้ ที่แยก่ ค็ ือ ถา้ ตวั ช้ีแฟ้มขอ้ มูลเหลา่ น้ีเกบ็ ตาํ แหน่งจริงของดิสกไ์ ว้ และพ้ืนที่ดงั กลา่ วถูกใชโ้ ดยแฟ้มขอ้ มูลอื่นไปแลว้ ตวั ช้ีอยา่ งหลวม ๆ น้ีอาจจะช้ีไปยงั ตรงกลางของแฟ้มขอ้ มูลอื่นได้ ในระบบที่มีการใชร้ ่วมกนั แบบ symbolic link สถานการณ์แบบน้ีแกไ้ ดง้ ่าย การลบ link จะไม่ส่งผลต่อไฟลต์ น้ ฉบบั มีแต่ link เท่าน้นั ที่ถูกลบ ถา้ แฟ้มขอ้ มูลถูกลบ พ้ืนที่ของแฟ้มขอ้ มูลจะถูกยดึ คืนและทิ้ง link อยา่ งหลวม ๆ ไป เราสามารถคน้ หา link เหล่าน้ีและลบมนั ทิ้ง แต่ถา้ รายการของlink ที่เกี่ยวขอ้ งไม่ไดถ้ ูกเกบ็ ไวใ้ นแต่ละแฟ้มขอ้ มูล การคน้ หาน้ีจะคอ่ นขา้ งเสียเวลา อีกทางเลือกหน่ึงคือ เราทิ้ง link ไปจนกว่าจะใชม้ นั อีก เมื่อถึงเวลาเราสามารถกาํ หนดใหแ้ ฟ้มขอ้ มูลไหนที่ linkไม่มีใหไ้ ปแกไ้ ขชื่อ link ก่อน การแกไ้ ขน้ีคลา้ ยกบั illegal filename (ในกรณีน้ีผอู้ อกแบบระบบควรพิจารณาอยา่ งถ่ีถว้ นวา่อะไรควรทาํ เม่ือแฟ้มขอ้ มูลถูกลบแลว้ อีกแฟ้มขอ้ มูลที่มีชื่อเดิมถูกสร้างข้ึน ก่อนท่ี symbolic linkของแฟ้มตน้ ฉบบั จะถูกใช)้ ในระบบ UNIX symbolic link จะถกู ทิ้งไปเมื่อแฟ้มขอ้ มูลถูกลบ และมนั ข้ึนอยกู่ บั ผใู้ ชท้ ี่จะคิดเองวา่ แฟ้มตน้ ฉบบั หายไปแลว้ หรือถูกแทนที่ อีกวิธีหน่ึงในการลบ คือ สงวนแฟ้มขอ้ มลู ไวจ้ นกระทงั่ การอา้ งอิงท้งั หมดของมนั ถูกลบไปแลว้ วิธีน้ีเราตอ้ งมีกลไกในการกาํ หนดวา่ การอา้ งอิงสุดทา้ ยของแฟ้มขอ้ มูลว่าถูกลบไปแลว้ เราควรเกบ็ รายการของการอา้ งอิงท้งั หมดไวใ้ นแฟ้มขอ้ มูล (ไดเรกทอรี หรือ symbolic link) เม่ือ link หรือการคดั ลอกไดเรกทอรีถูกสร้างข้ึน ขอ้ มูลใหม่ตอ้ งถูกเพิ่มเขา้ ในรายการของแฟ้มอา้ งอิง เม่ือ linkหรือไดเรกทอรีถูกลบ เรากจ็ ะลบขอ้ มูลมนั ออกจากรายการ แฟ้มขอ้ มูลจะถูกลบเม่ือรายการในแฟ้มอา้ งอิงวา่ งเปล่า
การจดั การขอ้ มูล 192 ปัญหาของวิธีน้ีคือตวั แปรและขนาดของรายการในแฟ้มอา้ งอิงตอ้ งมีขนาดใหญ่ แต่อยา่ งไรก็ตามเราไม่ตอ้ งเกบ็ ขอ้ มูลในรายการจริง ๆ เราเกบ็ เฉพาะจาํ นวนของการอา้ งอิงกพ็ อ ถา้ มีการสร้างlink หรือไดเรกทอรีใหม่ เรากเ็ พม่ิ คา่ ถา้ ลบ link หรือไดเรกทอรีกล็ ดคา่ เม่ือนบั ได้ 0 แฟ้มขอ้ มูลน้นักส็ ามารถลบได้4.1.4.4 ไดเรกทอรีแบบกราฟโดยทว่ั ไป (General Graph Directory) ปัญหาหลกั ของการใชโ้ ครงสร้างของกราฟแบบไม่เป็นวงจรจะแน่ใจไดอ้ ยา่ งไรว่าจะไม่มีวงจรจริง ๆ ? ถา้ เราเร่ิมจากไดเรกทอรีสองระดบั แลว้ ใหผ้ ใู้ ชส้ ร้างไดเรกทอรียอ่ ยเพิม่ กก็ ลายเป็นไดเรกทอรีแบบตน้ ไม้ ถึงเราจะเพม่ิ แฟ้มขอ้ มูลและไดเรกทอรียอ่ ยอีก กย็ งั เป็นไดเรกทอรีแบบตน้ ไม้อยดู่ ี แต่ถา้ เราเพม่ิ การเชื่อมโยงของไดเรกทอรีที่มีอยแู่ ลว้ โครงสร้างแบบตน้ ไมก้ จ็ ะเสียไป เป็นผลใหเ้ กิดโครงสร้างแบบกราฟอยา่ งง่าย (ดงั รูปท่ี 4.10) รูปท่ี 4.10 แสดงไดเรกทอรีแบบกราฟโดยทวั่ ไป ถา้ เราพ่งึ จะคน้ หาแฟ้มขอ้ มูลในไดเรกทอรีท่ีใชร้ ่วมกนั (share subdirectory) แลว้ ไม่เจอ เราน่าจะหลีกเลี่ยงการคน้ หาไดเรกทอรียอ่ ยน้นั ซ้าํ เพราะการหาซ้าํ ทาํ ใหเ้ สียเวลา ถา้ เราอนุญาตใหม้ ีวงจรในไดเรกทอรี นน่ั คือเราตอ้ งการหลีกเล่ียงการคน้ หาขอ้ มูลซ้าํ เป็นคร้ังท่ีสอง ถา้ ออกแบบอลั กอริทึมไม่ดีจะทาํ ใหเ้ กิดการวนซ้าํ (loop) ไม่รู้จบ การคน้ หาในวงจรกจ็ ะไม่มีวนั จบสิ้น วิธีแก้ คือ จาํ กดั จาํ นวนของไดเรกทอรี (ตามใจ) ท่ีจะเขา้ ใชใ้ นระหว่างการคน้ หา อีกปัญหาหน่ึงคือในเร่ืองการลบ ในไดเรกทอรีแบบไม่เป็นวงจร ค่า 0 ในการนบั การอา้ งอิงหมายถึง แฟ้มขอ้ มูลน้นั ลบได้ แต่ถา้ มีวงจรเกิดข้ึน ค่าการอา้ งอิงอาจจะไม่เป็นศูนย์ เม่ือแฟ้มขอ้ มูลหรือไดเรกทอรีน้นั ไม่มีแลว้ ในกรณีน้ีจาํ เป็นตอ้ งใชว้ ิธี “การสะสมขยะ” (garbage collection) เพอื่
193 ระบบปฏิบตั ิการกาํ หนดวา่ เมื่อไรท่ีค่าการอา้ งอิงสุดทา้ ยถูกลบไปแลว้ และพ้นื ท่ีในดิสกต์ รงน้นั สามารถนาํ มาจดั สรรใหม่ไดแ้ ลว้ การสะสมขยะจาํ เป็นสาํ หรับกราฟแบบมีวงจรเท่าน้นั ดงั น้นั กราฟแบบไม่มีวงจรใชง้ านง่ายกวา่ มาก ปัญหากค็ ือการเล่ียงไม่ใหเ้ กิดวงจรเม่ือ link ใหม่ ถกู เพ่มิ เขา้ มาในโครงสร้าง เราจะรู้ได้อยา่ งไรวา่ เม่ือไร link ใหม่จะเป็นวงจรอยา่ งสมบูรณ์ มีอลั กอริทึมในการคน้ หาวงจรในกราฟ แต่มนัเสียเวลา ดงั น้นั โดยทวั่ ไปโครงสร้างไดเรกทอรีแบบตน้ ไมน้ ่าใชก้ วา่ โครงสร้างของกราฟแบบไม่มีวงจร4.1.5 บอกวธิ ีการควบคุมการเข้าถงึ แฟ้มข้อมูลของผู้ใช้ เม่ือสารสนเทศถูกเกบ็ ไวใ้ นระบบคอมพวิ เตอร์ สิ่งที่ตอ้ งทาํ คือการป้องกนั ขอ้ มูลจากความเสียหายทางกายภาพ (ความไวใ้ จได)้ และการเขา้ ถึงขอ้ มูลอยา่ งไม่เหมาะสม (การป้องกนั )4.1.5.1 ชนิดของการเข้าถงึ แฟ้มข้อมูล (Types of Access)กลไกการป้องกนั จดั เตรียมการควบคุมการเขา้ ถึงแฟ้มขอ้ มูลโดยจาํ กดั ชนิดของการเขา้ ถึงแฟ้มขอ้ มูลที่สามารถทาํ ได้ การเขา้ ถึงจะทาํ ไดห้ รือไม่ข้ึนอยกู่ บั ปัจจยั หลายประการ หน่ึงในน้นั คือชนิดของการร้องขอเขา้ ถึงแฟ้มขอ้ มูล ชนิดของการทาํ งานหลาย ๆ ชนิดท่ีต่างกนั อาจตอ้ งถูกควบคุม Read – อ่านจากแฟ้มขอ้ มูล Write – เขียนหรือเขียนอีกคร้ัง (rewrite) แฟ้มขอ้ มูล Execute – load แฟ้มขอ้ มูลเขา้ สู่หน่วยความจาํ และทาํ งานน้นั Append – เขียนสารสนเทศใหม่ต่อทา้ ยแฟ้มขอ้ มลู Delete – ลบแฟ้มขอ้ มูลและคืนพ้ืนที่ใหส้ ามารถใชใ้ หม่ได้ List – แสดงชื่อและคุณลกั ษณะของแฟ้มขอ้ มูลการทาํ งานอ่ืน ๆ เช่น การเปลี่ยนชื่อ (renaming) การคดั ลอก (copying) หรือการปรับปรุง (editing)แฟ้มขอ้ มูล กต็ อ้ งถกู ควบคุมดว้ ย4.1.5.2 รายการเข้าถงึ แฟ้มข้อมูลและกลุ่ม (Access Lists and Groups) รายการการเขา้ ถึงแฟ้มขอ้ มูล (access list) คือ การเจาะจงชื่อของผใู้ ชแ้ ละชนิดของการเขา้ ถึงแฟ้มขอ้ มูลของผใู้ ชแ้ ต่ละคน เมื่อผใู้ ชร้ ้องขอเขา้ ถึงแฟ้มขอ้ มูล ระบบปฏิบตั ิการจะตรวจสอบรายการการเขา้ ถึงแฟ้มขอ้ มูล (access list) ท่ีเกี่ยวขอ้ งกบั แฟ้มขอ้ มูลน้นั ถา้ การร้องขอน้นั มีในรายการของผใู้ ชค้ นน้นั การเขา้ ถึงกจ็ ะไดร้ ับอนุญาต มิฉะน้นั จะเป็นการฝ่าฝืนในการป้องกนั และงานของผใู้ ช้จะถูกปฏิเสธการเขา้ ถึงแฟ้มขอ้ มูล (access denies)
การจดั การขอ้ มูล 194 ปัญหาหลกั เกี่ยวกบั รายการการเขา้ ถึงแฟ้มขอ้ มูล คือ ความยาวของรายการ ถา้ เราตอ้ งการให้ทุกคนอ่านแฟ้มขอ้ มลู เราตอ้ งแสดง (list) รายการผใู้ ชท้ ุกคนดว้ ยการเขา้ ถึงแบบอา่ น (read access)การทาํ เช่นน้ีมีผลลพั ธ์ 2 ประการ 1. การสร้างรายการอาจจะเป็นงานท่ีน่าเบ่ือและไม่ไดอ้ ะไร โดยเฉพาะถา้ เราไม่เห็น วา่ รายการของผใู้ ชใ้ นระบบมีขอ้ ดีอะไร 2. ไดเรกทอรี่ตอ้ งเปล่ียนจากขนาดคงท่ีเป็นแบบแปรผนั ทาํ ใหก้ ารจดั การพ้นื ที่ ซบั ซอ้ นข้ึนกวา่ เดิมปัญหาน้ีแกไ้ ดโ้ ดยใช้ รายการการเขา้ ถึงแฟ้มขอ้ มูลแบบกะทดั รัดเพอ่ื บีบความยาวของรายการการเขา้ ถึงแฟ้มขอ้ มูลใหก้ ะทดั รัด หลาย ๆ ระบบแบ่งประเภทของผใู้ ช้เป็น 3 ประเภท ในการติดต่อกบั แฟ้มขอ้ มูลแต่ละแฟ้ม เจา้ ของ (Owner) คือ ผใู้ ชท้ ่ีสร้างแฟ้มขอ้ มูลเป็นของตวั เอง กลุ่ม (Group) คือ กลมุ่ ของผใู้ ชท้ ี่ใชแ้ ฟ้มขอ้ มูลร่วมกนั และตอ้ งการการเขา้ ถึงแฟ้มขอ้ มูล (access ) ที่คลา้ ยกนั ในกลุ่มหรือกลุ่มงาน (workgroup) คนอื่น (universe) คือ ผใู้ ชอ้ ื่น ๆ ท้งั หมดในระบบตวั อยา่ งเช่น Sara กาํ ลงั เขียนหนงั สือเล่มใหม่ เธอจา้ งคนท่ีจบปริญญาตรีมา 3 คน (Jim , Dawn , Jill)มาช่วย ขอ้ ความในหนงั สือเกบ็ ไวใ้ นไฟลช์ ่ือ book การป้องกนั ไฟลท์ าํ ไดด้ งั น้ี Sara ตอ้ งสามารถทาํ งานบนไฟลน์ ้ีไดท้ ุกอยา่ ง Jim , Dawn และ Jill ควรจะอ่านและเขียนไฟลน์ ้ีไดเ้ ท่าน้นั พวกเขาไม่ควรลบไฟลน์ ้ีได้ ผใู้ ชค้ นอื่นควรจะอา่ นไฟลน์ ้ีได้ (เธอตอ้ งการใหค้ นทว่ั ไปไดอ้ ่านและให้ feedback กลบั มา)เพอ่ื ใหก้ ารป้องกนั สาํ เร็จ เราตอ้ งสร้างกลุ่มใหม่ (new group) เรียกวา่ text ใหม้ ีสมาชิกคือ Jim ,Dawn และ Jill ชื่อของกลุ่ม text ตอ้ งเก่ียวขอ้ งกบั ไฟล์ book และการเขา้ ถึงอยา่ งถูกตอ้ งเราตอ้ งต้งัตามนโยบายขา้ งตน้ตวั อย่างในระบบ UNIX มีการกาํ หนดบิตข้ึน 3 บิต rwx r ควบคุมการเขา้ ถึงแบบอ่าน (read), wควบคุมการเขียน (write), x ควบคุมการทาํ งาน (execution) ดงั น้นั จากตวั อยา่ งของเรา การป้องกนัไฟล์ book ทาํ ไดด้ งั น้ี สาํ หรับเจา้ ของ (owner) Sara ท้งั 3 บิตตอ้ งถูกต้งั (set) ให้ สาํ หรับกลุ่ม (group) text บิต r และ w ถูกต้งั ให้ และสาํ หรับคนอื่น (universe) มีแต่บิต r ท่ีต้งั ให้
195 ระบบปฏิบตั ิการ4.1.5.3 วธิ ีการป้องกนั อ่ืน ๆ (Other Protection Approaches)เช่น การใชร้ หสั ผา่ น (password) การเขา้ ถึงแฟ้มขอ้ มูลแต่ละแฟ้มตอ้ งทาํ โดยรหสั ผา่ น แต่กม็ ีขอ้ เสียถา้ แต่ละแฟ้มมีรหสั ผา่ นต่างกนั ผใู้ ชอ้ าจจาํ ไม่ไดห้ มด ถา้ ใชร้ หสั ผา่ นเหมือนกนั หมดกบั ทุกแฟ้ม ถา้เกิดถูกคน้ พบคร้ังหน่ึงทุกแฟ้มกเ็ ขา้ ไดห้ มด ตวั อยา่ งใน UNIX (An Example : UNIX)การป้องกนั ไดเรกทอรี่ ทาํ ไดค้ ลา้ ย ๆ การป้องกนั แฟ้มขอ้ มูล นน่ั คือในแต่ละไดเรกทอร่ีจะมี 3 ฟิ ลด์(เจา้ ของ, กลุ่ม และคนอ่ืน) แต่ละฟิ ลดม์ ี 3 บิต rwx ดงั น้นั ผใู้ ชส้ ามารถเปล่ียนไดเรกทอรี่ปัจจุบนั ไปอีกไดเรกทอรี่นึงไดถ้ า้ บิต x ของไดเรกทอร่ียอ่ ยน้นั ถูกต้งั ให้ตวั อยา่ งการแสดงรายการไดเรกทอร่ีจาก UNIX แสดงดงั รูป 4.11 ฟิ ลดแ์ รกบรรยายถึงการป้องกนัไฟลห์ รือไดเรกทอรี่ ตวั อกั ษรแรก d หมายถึงไดเรกทอรี่ยอ่ ย นอกจากน้นั ยงั แสดงจาํ นวน link ของไฟล์ , ชื่อเจา้ ของ , ชื่อของกลุ่ม , ขนาดของไฟลใ์ นหน่วยของไบต์ , วนั ที่สร้าง และ ช่ือของไฟล์(ตามดว้ ยนามสกลุ )-rw-rw-r- 1 pbg staff 31200 Sep 3 08:30 intro.psdrwx----- 5 pbg staff 512 Jul 8 09:33 private/drwxrwxr-x 2 pbg staff 512 Jul 8 09:35 doc/drwxrwx--- 2 pbg student 512 Aug 3 14:13 student-proj/-rw-r-r- 1 pbg staff 9423 Feb 24 1993 program.c-rwxr-xr-x 1 pbg staff 20471 Feb 24 1993 programdrwx-x-x 4 pbg faculty 512 Jul 31 10:31 lib/drwx------ 3 pbg staff 1024 Aug 29 06:52 mail/drwxrwxrwx 3 pbg staff 512 Jul 8 09:35 test/ รูปที่ 4.11 แสดงตัวอย่างการแสดงรายการของไดเรกทอรี่
การจดั การขอ้ มูล 1964.2 การใช้งานระบบแฟ้มข้อมูล4.2.1 วธิ ีการจดั สรรแฟ้มข้อมูล การจดั การขอ้ มูลในแง่ของผใู้ ชจ้ ะยงุ่ เก่ียวกบั การจดั การแบ่งเกบ็ ขอ้ มูลลงไฟล์ และไดเร็กทอร่ี เพอ่ื ใหใ้ ชไ้ ดส้ ะดวก แต่ที่จะกล่าวถึงต่อไปน้ีจะเป็นการจดั การขอ้ มูลในแง่ของ OS ซ่ึงจะเกี่ยวขอ้ งกบั การจดั การเน้ือท่ีในอุปกรณ์เกบ็ ขอ้ มูล (ดิสก)์ และวิธีการจดั เกบ็ ไฟล์4.2.1.1 การจดั การเนื้อทใ่ี นดสิ ก์ การเกบ็ ไฟลส์ ่วนใหญ่จะเกบ็ ลงบนดิสก์ ดงั น้นั การจดั เน้ือท่ีในดิสกเ์ พอ่ื การเกบ็ ไฟลจ์ ึงเป็นสิ่งที่สาํ คญั เพราะจะส่งผลถึงประสิทธ์ิภาพการทาํ งานของOS ดว้ ย โดยทว่ั ไปแลว้ วิธีการจดั เกบ็ไฟลล์ งดิสกม์ ีอยู่ 2 วิธีคือ เกบ็ เน้ือหาในไฟลแ์ ต่ละไบตเ์ รียงติดกนั ตลอดท้งั ไฟล์ และแบ่งไฟล์เป็นบลอ็ กเลก็ ๆ ขนาดเท่ากนั การเกบ็ แต่ละบลอ็ กของไฟลไ์ ม่จาํ เป็นตอ้ งเรียงติดกนั กไ็ ด้ การเกบ็ ไฟลท์ ี่ใชเ้ น้ือท่ีในดิสกเ์ รียงต่อเน่ืองกนั ตลอดท้งั ไฟล์ (continuous allocation) จะเกิดปัญหามากในการใชง้ านกล่าวคือ ถา้ ไฟลท์ ่ีเกบ็ อยมู่ ีขนาดใหญ่ข้ึนการเกบ็ กต็ อ้ งการเน้ือท่ีเพม่ิมากข้ึน ไฟลน์ ้นั อาจไม่สามารถถูกเกบ็ ไวใ้ นตาํ แหน่งเดิมในดิสกไ์ ด้ เน่ืองจากไม่มีที่วา่ งพอเพราะไฟลโ์ ตข้ึน ดงั น้นั จึงตอ้ งหาท่ีวา่ งในดิสกท์ ี่ใหม่ท่ีมีขนาดใหญ่เพียงพอสาํ หรับขนาดใหม่ของไฟลท์ ่ีโตข้ึน ดว้ ยเหตุน้ีใน OS เกือบทุกระบบจะใชว้ ิธีแบ่งไฟลอ์ อกเป็นส่วนเลก็ ๆ ท่ีมีขนาดแน่นอนเรียกวา่ บลอ็ ก (block) แต่ละบลอ็ กของไฟลจ์ ะถูกเกบ็ ไวท้ ี่ไหนในดิสกก์ ไ็ ดไ้ ม่จาํ เป็นตอ้ งเรียงต่อกนั ท้งั ไฟล์ เมื่อเลือกใชว้ ิธีแบ่งไฟลป์ ัญหาท่ีตามมากค็ ือ ควรจะใหบ้ ลอ็ กมีขนาดเท่ากบั เท่าใด เซ็กเตอร์แทรคหรือวงรอบ สมมติวา่ เราเลือกขนาดของบลอ็ กใหม้ ีขนาดใหญๆ่ เช่น 1 วงรอบ ถึงแมว้ า่ ไฟลข์ องเรามีขนาดโตเพียงแค่ 1 ไบต์ ไฟลน์ ้ีกจ็ ะใชเ้ น้ือท่ีในดิสกถ์ ึง 1 วงรอบ เพราะแต่ละไฟลจ์ ะตอ้ งใชเ้ น้ือท่ีในดิสกเ์ พอ่ื เกบ็ ไฟลเ์ ป็นจาํ นวนเท่าของขนาดบลอ็ ก สมมติวา่ 1 วงรอบมีขนาด 32 กิโลไบต์และขนาดของไฟลโ์ ดยเฉล่ียแลว้ มีขนาด 1 กิโลไบต์ ดงั น้นั เราจะเสียเน้ือท่ีหน่วยความจาํ ในดิสก์คือ (32-1)/32 = 97% ในทางตรงกนั ขา้ มถา้ เราเลือกขนาดของบลอ็ กใหม้ ีขนาดเลก็ ไฟลแ์ ต่ละไฟลก์ จ็ ะประกอบดว้ ยบลอ็ กหลายบลอ็ กมากเกินไป การอ่านหรือเขียนขอ้ มูลแต่ละบลอ็ กจะตอ้ งเสียเวลาสาํ หรับเวลาแสวงหาและเวลาแฝง ดงั น้นั ถา้ ไฟลป์ ระกอบดว้ ยบลอ็ กหลายบลอ็ ก การอา่ นหรือเขียนขอ้ มูลจะชา้ มาก จะเห็นวา่ ถา้ ขนาดของบลอ็ กใหญ่เกินไปกจ็ ะเปลืองเน้ือที่ในดิสก์ แต่ถา้ ขนาดของบลอ็ กเลก็เกินไป การอ่านหรือเขียนไฟลก์ จ็ ะชา้ มาก ขนาดของบลอ็ กท่ีใชก้ นั ทวั่ ไปในระบบต่างๆ ไดแ้ ก่512 ไบต์ 1 กิโลไบต์ และ 2 กิโลไบต์ สมมติวา่ เซกเตอร์มีขนาด 512 ไบต์ และเลือกใชบ้ ลอ็ กขนาด 1 กิโลไบต์ (1024 ไบต)์ ระบบไฟลจ์ ะใชส้ องเซกเตอร์ท่ีติดกนั เป็นบลอ็ ก 1 บลอ็ กบนฟลอปป้ี ดิสก์ มีขนาด 1 กิโลไบต์ ดงั น้นั ขนาดของไฟลก์ จ็ ะตอ้ งเป็นจาํ นวนเตม็ ของกิโลไบตแ์ ละไม่วา่ ไฟลจ์ ะมีขนาดเลก็ เท่าใดกต็ าม กต็ อ้ งใชเ้ น้ือที่ในดิสกอ์ ยา่ งนอ้ ย 1 กิโลไบต์
197 ระบบปฏิบตั ิการ นอกจากเรื่องขนาดของบลอ็ กแลว้ OS จะตอ้ งวิธีที่จะใหร้ ู้วา่ ในดิสกม์ ีบลอ็ กวา่ ง (ไม่ถูกใช)้บลอ็ กใดบา้ ง วธิ ีท่ีใชก้ นั ทวั่ ไปมี 2 วิธี วิธีแรกใชล้ ิงคล์ ิสต์ (linked list) ของบลอ็ กสมมติว่าเราแบ่งเน้ือท่ีในดิสกเ์ ป็นบลอ็ กท่ีมีขนาด 1 กิโลไบต์ และกาํ หนดหมายเลขประจาํ บลอ็ กแตล่ ะบลอ็ ก(เรียกวา่ หมายเลขบลอ็ ก) มีขนาด 2 ไบต์ ดงั น้นั ใน 1 บลอ็ กจะเกบ็ หมายเลขบลอ็ กไดเ้ ท่ากบั1024/2 = 512 หมายเลข (1 กิโลไบตเ์ ท่ากบั 1024 ไบต)์ OS จะใชบ้ ลอ็ กในดิสกห์ ลายๆบลอ็ กเพอื่ เกบ็ หมายเลขบลอ็ กที่วางอยู่ ในหน่ึงบลอ็ กจะเกบ็ หมายเลขบลอ็ กที่วา่ งอยเู่ พยี ง 511 หมายเลขเท่าน้นั ส่วนหมายเลขสุดทา้ ยจะเกบ็ หมายเลขของบลอ็ กถดั ไปท่ีเกบ็ หมายเลขบลอ็ กวางไวด้ งั ในรูป 4.12 ในบลอ็ กหมายเลข 05,06 และ 10 เกบ็ หมายเลขบลอ็ กท่ีวา่ งไวใ้ นบลอ็ กหมายเลข 05หมายเลขสุดทา้ ยจะเป็นหมายเลข 06 เพอื่ ให้ OS ทราบวา่ บลอ็ กหมายเลข 06 เป็นบลอ็ กท่ีเกบ็หมายเลขสุดทา้ ยจะเป็นหมายเลข 06 เพื่อให้ OS ทราบวา่ บลอ็ กหมายเลข 06 เป็นบลอ็ กท่ีเกบ็หมายเลขบลอ็ กว่างเอาไว้ ส่วน 511 หมายเลขแรกจะเป็นหมายเลขของบลอ็ กวา่ งใน บลอ็ กหมายเลข 10 เกบ็ หมายเลขบลอ็ กวา่ งเพยี ง 3 บลอ็ กเท่าน้นั คือ 333 321 และ 345 หมายเลขบลอ็ ก OS จะเกบ็ บลอ็ กหมายเลข 00 ในดิสกเ์ พ่อื ใชง้ าน และส่วนมากในเน้ือท่ีของบลอ็ กหมายเลข 00 OS จะเกบ็ หมายเลขบลอ็ กของบลอ็ กแรกที่เริ่มเกบ็ หมายเลขบลอ็ กวา่ ง OSเกบ็ ไวใ้ นดสิ ก์ 05 08 19 815 333 134 817 321 135 818 345 136 819 000 137 513 000 81 204 000 90 555 000 110 71 000 144 815 48 06 10 000 บล็อกถดั ไปทเี่ กบ็ หมายเลขบล็อคลา่ ง รูปท่ี 4.12 ตวั อย่างลงิ ค์ลสิ ต์ของบลอ็ กว่าง
การจดั การขอ้ มูล 198 วิธีท่ีสองในการหาบลอ็ กว่างในดิสก์ คือการใช้ บิตแมป็ (bit map) ในดิสกท์ ี่ถูกแบ่งใหม้ ีn บลอ็ กกจ็ ะใช้ n บิตเรียงกนั เพือ่ ตรวจสอบการถูกใชง้ านของบลอ็ กทุกบลอ็ กในดิสก์ ถา้ บลอ็ กท่ีx วา่ งไม่ถูกใช้ บิตท่ี x ในบิตแมป็ จะมีค่าเป็น 1 แต่ถา้ ถูกใชไ้ ปแลว้ กจ็ ะมีค่าเป็น 0 ดงั เช่นในรูป4.131 1 1 0 0 1 0 1 0 1 0 1 1 1 1 1 1 0 0 0 0 0 0 . . . . . . . 0 0 11ก บติ : ก บล็อก บล็อกที่ 0, 1, 2, 5, 7, .... ยงั วา่ งและบล็อกที่0 = บล็อกทถี่ กู ใช ้ 3, 4, 6, 8, 10, 17, 18,... ถกใชง้ านแลว้1 = บลอ็ กวา่ งรูปที่ 4.13 ตวั อย่างบติ แมป็ สําหรับบลอ็ กว่าง ในดิสกข์ นาด 20 เมก็ กะไบต์ ถา้ เราแบ่งเป็นบลอ็ กขนาด 1 กิโลไบต์ ดงั น้นั ในดิสกจ์ ะมี20 กิโลบลอ็ ก ถา้ ใชบ้ ิตแมป็ เพ่ือหาที่วา่ งในดิสก์ กจ็ ะตอ้ งเสียเน้ือท่ีสาํ หรับบิตแมป็ 20 กิโลบิตหรือ 3 บลอ็ ก (20/8=2.5 กิโลไบต)์ แตถ่ า้ เราใชล้ ิงคล์ ิสต์ โดยใหห้ มายเลขบลอ็ กมีขนาด 2 ไบต์จะตอ้ งเสียเน้ือที่ในดิสก์ = 20x2 = 40 กิโลไบต์ หรือ 40 บลอ็ ก จะเห็นวา่ ลิงคล์ ิสตจ์ ะเปลืองเน้ือท่ีมากกว่าแบบบิตแมป็ เพราะบิตแมป็ ใช้ 1 บิตแทน 1 บลอ็ ก แต่ลิงคล์ ิสตใ์ ช้ 16 บิต แทนบลอ็ ก อยา่ งไรกต็ ามถา้ เน้ือท่ีวางในดิสกม์ ีนอ้ ยลง จาํ นวนบลอ็ กว่างกจ็ ะเหลือนอ้ ยลงลงลิงคล์ ิสตม์ ีความยาวส้นั ลง ทาํ ใหแ้ บบลิงคล์ ิสตก์ จ็ ะเปลืองเน้ือท่ีในดิสกน์ อ้ ยกวา่ แบบบิตแมป็4.2.2 การจดั การเนื้อทว่ี ่าง ทาํ นองเดียวกบั การหาบลอ็ กว่างในดิสก์ OS ตอ้ งมีวธิ ีท่ีจะทราบวา่ แต่ละบลอ็ กของไฟล์หน่ึงจะถูกเกบ็ ไวใ้ นบลอ็ กใดบา้ งในดิสก์ วิธีการแรกคือการใชล้ ิ้งคล์ ิสตซ์ ่ึงมีลกั ษณะคลา้ ยกบั ลิ้งค์ลิสตข์ องบลอ็ กว่าง ในบลอ็ กขนาด 1024 ไบต์ จะมีเน้ือหาขอ้ มูลของไฟลอ์ ยเู่ พียง 1022 ไบต์เท่าน้นั ส่วน 2 ไบตส์ ุดทา้ ยจะเป็นพอยนเ์ ตอร์ช้ีไปยงั บลอ็ กถดั ไปของไฟล์ (หมายเลขบลอ็ กถดั ไปของไฟล)์ วธิ ีน้ีมีขอ้ เสียหลกั 2 ประการคือ ประการแรกขนาดของเน้ือหาของไฟลท์ ่ีเกบ็ ลงในแต่ละบลอ็ กในดิสกไ์ ม่เป็นเลขของสองยกกาํ ลงั (เช่น 2,4,8,16,32,64,…..) ซ่ึงก่อใหเ้ กิดความไม่สะดวกหลายอยา่ งในการทาํ งาน หรือจดั การเก่ียวกบั ไฟลแ์ ละประการท่ีสองการเขา้ ถึงเน้ือหาขอ้ มูลของไฟลจ์ ะเป็นการเขา้ ถึงแบบลาํ ดบั เช่นถา้ ตอ้ งการอ่านขอ้ มูลในไบต์ 32768 ในไฟล์จะตอ้ งเขา้ ถงึ บลอ็ กในดิสกเ์ ท่ากบั 32768/1022 =33 คร้ัง (33 บลอ็ ก) เพอ่ื ใหไ้ ดข้ อ้ มูลท่ีไบต์ตอ้ งการเขา้ ถึงจึงกินเวลานาน วิธีท่ี 2 ไดท้ าํ การแกไ้ ขขอ้ เสียที่เกิดข้ึนในวิธีแรกท้งั 2 กรณี โดยสร้างตารางเกบ็ คา่ พอยต์เตอร์ในแต่ละบลอ็ กเอาไวแ้ ทนที่จะเกบ็ ไวท้ ี่ทา้ ยบลอ็ กน้นั ๆ สมมติวา่ เราแบ่งใหด้ ิสกม์ ี 2048บลอ็ ก ตารางน้ีกจ็ ะมี 2048 ช่อง ค่าท่ีเกบ็ ไวใ้ นช่องที่ x คือค่าพอยนเ์ ตอร์ท่ีเกบ็ ไวท้ ี่ทา้ ยบลอ็ ก
199 ระบบปฏิบตั ิการของวธิ ีแรก ทาํ ใหใ้ นบลอ็ กไมต่ อ้ งเกบ็ พอยนเ์ ตอร์อีกต่อไป ใน 1 บลอ็ กจึงเกบ็ เน้ือหาของไฟลไ์ ด้เตม็ ท้งั บลอ็ กตารางน้ีเรียกวา่ ตารางการจดั สรรไฟล์ (file allocation table) หรือ FAT MS-DOSกใ็ ชว้ ิธีน้ี ในรูป 4.14 แสดงตวั อยา่ งตารางการจดั สรรไฟลใ์ นดิสกท์ ี่มีไฟล์ A,B และ C อยู่ จากรูปจะเห็นวา่ ไฟล์ A ใชบ้ ลอ็ กหมายเลข 6 8 4 และ 2 เกบ็ เน้ือหาของไฟลเ์ รียงตามลาํ ดบั ในช่องที่ 6 ของตารางการจดั สรรไฟล์ จึงเกบ็ ค่า 8 เอาไวใ้ นช่องท่ี 8 เกบ็ ค่า 4 ในช่องที่ 4 เกบ็ ค่า 2ในช่องท่ี 2 เกบ็ ค่า EOF (end of file) คือบอกใหท้ ราบวา่ เป็นบลอ็ กสุดทา้ ยของไฟล์ ดงั น้นัอาศยั ขอ้ มูลที่เกบ็ ไวใ้ นตารางการจดั สรรไฟลเ์ ราสามารถเขา้ ถึงส่วนใดของไฟลก์ ไ็ ด้ อยา่ งไรกต็ ามการใชต้ ารางการจดั สรรไฟลย์ งั คงเป็นการเขา้ ถึงแบบลาํ ดบั เหมือนวิธีแรกแต่ไม่ตอ้ งไล่ตามหาในบลอ็ กต่างๆ โดยทว่ั ไป ตารางการจดั สรรไฟลจ์ ะถูกโหลดข้ึนมาเกบ็ ไวใ้ นหน่วยความจาํ เพอ่ื ลดเวลาเขา้ ถึง เน่ืองจากการเขา้ ถึงในหน่วยน้นั เร็วมาก FAT X File A 6 8 4 20 X12 EOF Flie B 5 9 12 133 2 File C 10 3 134 95687 Free 489 1210 311 Free12 EOF EOF1314 Free รูปที่ 4.14 ตวั อย่างตารางการจดั สรรไฟล์ขนาดของตารางการจดั สรรไฟลข์ ้ึนอยกู่ บั จาํ นวนบลอ็ กในดิสก์ (เท่ากบั ความจุของดิสก/์ ขนาดของบลอ็ ก) ยง่ิ ดิสกม์ ีจาํ นวนบลอ็ กมาก ตารางการจดั สรรไฟลก์ จ็ ะมีขนาดใหญ่มาก เช่น MS-DOS2.0 กาํ หนดฟลอปป้ี ดิสกข์ นาด 5.25 นิ้ว ใหม้ ีความจุ 360 กิโลไบต์ ขนาดของบลอ็ กเท่ากบั 1กิโลไบต์ ดงั น้นั จึงมี 360 บลอ็ กใชเ้ ลข 12 บิต กาํ หนดหมายเลขบลอ็ กทาํ ใหต้ ารางการจดั สรรไฟลม์ ีขนาดเท่ากบั (360 x 12) /8 = 540 ไบต์ หรือในฮาร์ดดิสกข์ นาด 64 เมก็ กะไบต์ จะมี 64
การจดั การขอ้ มูล 200กิโลบลอ็ กใช้ 2 ไบต์ กาํ หนดหมายเลขบลอ็ ก ดงั น้นั ตารางการจดั สรรไฟลจ์ ะมีขนาด 64 x 2 =128 ไบต์ ถา้ จะโหลดตารางการจดั สรรไฟลข์ นาด 128 กิโลไบตเ์ ขา้ ไปเกบ็ ไวใ้ นหน่วยความจาํการเขา้ ถึงขอ้ มูลในตารางการจดั สรรไฟลจ์ ะยงิ่ เสียเวลามากข้ึนไปอีกเพราะตารางการจดั สรรไฟลม์ ีขนาดถึง 128 บลอ็ ก การเขา้ ถึงจะตอ้ งกระจายไปตาม 128 บลอ็ กน้ี วธิ ีแกป้ ัญหาคือเพมิ่ ขนาดของบลอ็ กใหโ้ ตข้ึนเพอื่ จาํ นวนยบลอ็ กลง เช่นเปลี่ยนจาก 1 กิโลไบตเ์ ป็น 8 หรือ 16 กิโลไบต์ตารางการจดั สรรไฟลก์ จ็ ะมีขนาดเลก็ ลง แต่ผลเสียท่ีตามมากค็ ือการสร้งไฟลเ์ ลก็ ๆ ในฮาร์ดดิสกก์ ็จะกินเน้ือท่ี ในดิสกห์ ลายกิโลไบตต์ ามขนาดของบลอ็ ก วธิ ีที่ 3 เป็นวธิ ีท่ีใชใ้ น UNIX โดยสร้างตารางเลก็ ๆ ท่ีเรียกวา่ ไอโหนด (I-node) ใหไ้ ฟล์แต่ละไฟล์ ไอโหนดจะเกบ็ ขอ้ มูลต่างๆ ที่เกี่ยวขอ้ งกบั ไฟลเ์ อาไว้ ดงั แสดงในรูป 4.15 i-node Poniter to File node data blocksNumber of link to file Owner's uid Poniter to Owner's qid data blocks File size Time crealed Poniter to Time last accessed data block Time last modified10 Disk block number Single indirect Double indirect Triple indirect Poniter to data block รูปท่ี 4.15 โครงสร้างของ I – nodeภายในโหลดจะมีหลายเลขบลอ็ กแบบ direct 10 หมายเลข แบบ Single indirect 1 หมายเลขแบบ double indirect 1 หมายเลข และแบบ triple indirect 1 หมายเลข หมายเลขบลอ็ กแบบdirect คือ หมายเลขบลอ็ กในดิสกท์ ่ีเกบ็ เน้ือหาขอ้ มูลของไฟลเ์ อาไว้ สมมติวา่ 1 บลอ็ กมีขนาด 1กิโลไบต์ OS สามารถเขา้ ถึงเน้ือหาของไฟลไ์ ด้ 10 กิโลไบต์ โดยอาศยั หมายเลขบลอ็ กแบบdirect ในไอโหนดหมายเลขบลอ็ กแบบ single indirect คือ หมายเลขบลอ็ กของบลอ็ กท่ีเกบ็หมายเลขบลอ็ กแบบ direct เอาไว้ ถา้ หมายเลขบลอ็ กเป็นเลขขนาด 4 ไบต์ ดงั น้นั ใน 1 บลอ็ กจะเกบ็ หมายเลขบลอ็ กไดเ้ ท่ากบั 1024/4 = 256 หมายเลข OS สามารถเขา้ ถึงเน้ือหาของไฟลเ์ พ่ิมไดอ้ ีก 256 กิโลไบต์ โดย OS จะไปอ่านขอ้ มูลของบลอ็ กที่เป็น Single indirect และดูวา่ ภายใน
201 ระบบปฏิบตั ิการบลอ็ กน้ีเกบ็ หมายเลขบลอ็ กอะไรไว้ หมายเลขบลอ็ กเหล่าน้ีกค็ ือ บลอ็ กท่ีเกบ็ เน้ือหาขอ้ มูลของไฟลเ์ อาไวน้ ้นั เอง (เป็นบลอ็ กแบบ direct) ในทาํ นองเดียวกนั บลอ็ กที่เป็น double indirect จะเกบ็หมายเลขบลอ็ กของบลอ็ กท่ีเป็น single indirect ไว้ ดงั น้นั OS สามารถเขา้ ถึง เพื่อหาขอ้ มูลของไฟลเ์ พิม่ ไดอ้ ีก 256 x 256 กิโลไบต์ = 64 เมกกะไบตแ์ ละในบลอ็ กท่ีเป็น double indirect เกบ็หมายเลขบลอ็ กที่เป็น double indirect ดงั น้นั OS สามารถเขา้ ถึง เพือ่ หาขอ้ ขอ้ มูลของไฟลเ์ พม่ิ ได้อีก 256 x 64 เมกกะไบต์ = 16 จิกะไบต์ (230 ไบต)์ ดงั น้นั ขนาดของไฟลท์ ่ี OS สามารถยนิ ยอมใหม้ ีไดข้ นาดไดม้ ากถึง 16 จิกะไบตก์ ว่า (16 จิกะไบต์ + 64 เมกะไบต์ + 265 กิโลไบต์ +10 กิโลไบต)์ จากลกั ษณะของไอโหนดท่ีกล่าวมาถา้ ไฟลม์ ีขนาดนอ้ ยกว่า 10 กิโลไบต์ ชข้ อ้ มูลในไอโหนด(ในส่วนหมายเลขบลอ็ กแบบ direct) เพียงอยา่ งเดียวกเ็ พยี งพอในการหาเน้ือหาของไฟลท์ ้งั ไฟลไ์ ด้ถา้ ไฟลม์ ีขนาดมากกวา่ 10 กิโลไบตแ์ ต่นอ้ ยกวา่ 266 กิโลไบต์ ตอ้ งใชไ้ อโหนดกบั อีก 1 บลอ็ ก(single indirect) ถา้ ไฟลม์ ีขนาดโตกวา่ 266 กิโลไบตแ์ ต่นอ้ ยกวา่ 65,802 กิโลไบต์ (64เมกกะไบต์ + 266 กิโลไบต)์ ตอ้ งใชไ้ อโหนดกบั อีก 3 ถึง 258 บลอ็ ก ข้ึนอยกู่ บั ขนาดของไฟล์ จะเห็นวา่ ถา้ ไฟลม์ ีขนาดใหญ่ข้ึนบลอ็ กในดิสกก์ จ็ ะถูกใชใ้ นการเกบ็ หมายเลขบลอ็ กขอ้ มูลของไฟลก์ ย็ งิ่ มากข้ึน การเขา้ ถึงเน้ือหาของไฟลใ์ นตาํ แหน่งต่างๆ อยา่ งมากท่ีสุดจะเขา้ ถึงบลอ็ กในดิสก์5 บลอ็ กคือบลอ็ กท่ีเป็นไอโหนด triple indirect, double indirect, single indirect และบลอ็ กเน้ือหาขอ้ มูลของไฟล์4.2.3 การใช้งานไดเรกทอรี่การทาํ งานของไดเรกทอรีมีดงั น้ีคือ ค้นหาแฟ้มข้อมูล (Search for a file) – เราอาจตอ้ งหาแฟ้มที่มีช่ือตรงกบั ท่ีเราตอ้ งการ สร้างแฟ้มข้อมูล (Create a file) – แฟ้มขอ้ มูลใหม่จาํ เป็นตอ้ งถูกสร้างและเพ่ิมเขา้ ใน ไดเรกทอรี ลบแฟ้มข้อมูล (Delete a file) – เม่ือแฟ้มขอ้ มูลไม่ตอ้ งการแลว้ เราตอ้ งลบมนั ออกจาก ไดเรกทอรี แสดงไดเรกทอรี (List a directory) – เราตอ้ งสามารถแสดงชื่อแฟ้มขอ้ มูลในไดเรกทอรี และเน้ือหาของไดเรกทอรี สาํ หรับแต่ละแฟ้มในรายการ เปลยี่ นช่ือแฟ้มข้อมูล (Remane a file) – เพราะวา่ ชื่อแฟ้มขอ้ มูลเป็นตวั แทนของเน้ือหาของ ผใู้ ช้ ดงั น้นั ช่ือจะตอ้ งเปล่ียนเมื่อเน้ือหาหรือการใชแ้ ฟ้มขอ้ มูลเปลี่ยนไป การข้ามระบบแฟ้มข้อมูล (Traverse the file system) – มนั เป็นความคิดท่ีดีท่ีจะรักษา เน้ือหาและโครงสร้างของระบบแฟ้มขอ้ มูลท้งั หมด การรักษาน้ีมกั ทาํ ไดโ้ ดยการคดั ลอก
การจดั การขอ้ มูล 202 แฟ้มขอ้ มูลท้งั หมดลงเทปแม่เหลก็ เทคนิคน้ีเป็นการ backup ในกรณีท่ีระบบลม่ หรือ แฟ้มขอ้ มูลเสีย ในกรณีน้ีแฟ้มขอ้ มูลควรถูกคดั ลอกลงเทป และพ้นื ท่ีวา่ งในดิสกข์ องแฟ้ม เหล่าน้นั กจ็ ะถูกปล่อยใหแ้ ฟ้มอ่ืนไดใ้ ช้ไดเร็กทอร่ี (directory) คือสารบญั ที่เกบ็ รวบรวมรายช่ือไฟล์ และขอ้ มูลบางอยา่ งที่สาํ คญั ของไฟล์เอาไวใ้ น OS ทุกระบบจะตอ้ งมีไดเร็กทอร่ีเพอ่ื เกบ็ รายชื่อไฟลท์ ้งั หมดในระบบไวผ้ สู้ ามารถตรวจดูไฟลต์ ่างๆ ไดจ้ ากไดเร็กทอร่ี ไดเร็กทอรี่เองกถ็ ือวา่ เป็นไฟลเ์ ช่นกนั โครงสร้างของไดเร็กทอรี่ประกอบดว้ ยหน่วยยอ่ ยหลายหน่วยใน 1 หน่วยจะเกบ็ ขอ้ มูลของไฟล์ 1 ไฟล์ เช่น ช่ือ ส่วนขยายชนิด ขนาด และอ่ืนๆ ดงั แสดงในรูป 4.16 ชอ่ื สว่ นขยาย ขนาด เจา้ ของ เวลาสรา้ งไฟล์ เวลาทถ่ี กู แกไ้ ขครงั้ ลา่ สดุ เวลาทเี่ ขา้ ถงึ ลา่ สดุ บล็อคในดสิ กท์ ไ่ี ฟลใ์ ช ้ไดเรกทอรี่ ขอ้ มลู ภายในไดเรกทอรข่ี องแตล่ ะหน่วยรูปที่ 4.16 โครงสร้างไดเร็กทอร่ี วธิ ีทาํ ไดเร็กทอร่ีใหก้ บั ระบบที่ง่ายท่ีสุดคือ ในระบบจะมีไดเร็กทอร่ีอยเู่ พียงไดเร็กทอร่ีเดียวและใหไ้ ฟลท์ ุกๆ ไฟลใ์ นระบบรวมอยใู่ นไดเร็กทอรี่เดียวกนั ระบบน้ีเรียกวา่ ระบบไดเร็กทอรี่เด่ียว (single directory) หรือไดเร็กทอร่ี 1 ระดบั (level directory) ไดเร็กทอรี่แบบน้ีไม่ค่อยสะดวกในการใชง้ าน ถา้ มีผใู้ ชห้ ลายคน แต่ละคนมีไฟลห์ ลายไฟลห์ ลายชนิด ไฟลท์ ้งั หมดน้ีจะอยู่ปนกนั ไม่สามารถจดั แบ่งแยกไฟลข์ องผใู้ ชแ้ ต่ละคนออกจากกนั ถา้ เกิดกรณีที่มีการสร้างไฟลข์ องผใู้ ชค้ นหน่ึงตรงกบั ไฟลข์ องผใู้ ชค้ นอื่นๆ (มีชื่อและส่วนขยายเดียวกนั ) อาจทาํ ใหไ้ ฟลข์ องผใู้ ชค้ นน้นั ทาํ ลายไฟลเ์ ก่าท่ีมีอยแู่ ลว้ (โดยถูกเขียนทบั ) หรืออาจทาํ ใหก้ ารสร้างไฟลน์ ้นั ทาํ ไม่ไดใ้ น OSของไมโครคอมพวิ เตอร์รุ่นเก่าๆ เท่าน้นั ท่ีมีการกระทาํ ระบบไดเร็กทอร่ีเด่ียว เพอื่ แกป้ ัญหาของการต้งั ช่ือไฟลต์ รงกนั และไฟลข์ องผใู้ ชท้ ุกคนอยปู่ ะปนกนั ผอู้ อกแบบOS ในระยะต่อมาจึงพฒั นาโครงสร้างของระบบไดเร็กทอร่ีเสียใหม่ คือใหผ้ ใู้ ชแ้ ต่คนสามารถสร้างไดเร็กทอรี่ของตนเองได้ 1 ไดเร็กทอรี่เรียกวา่ เป็นไดเร็กทอรี่ยอ่ ย (sub-dierectory) ไดเร็กทอร่ี
203 ระบบปฏิบตั ิการยอ่ ยน้ีจะอยภู่ ายใตไ้ ดเร็กทอร่ีเดียวกนั (ดูรูป 4.17 ข) เรียกว่าเป็น ไดเร็กทอรี่ราก (root directory)หรือเรียกส้ันๆ วา่ รูท (root) รูทจะมีไดเร็กทอรี่ยอ่ ยไดห้ ลายไดเร็กทอร่ี ภายในไดเร็กทอรี่ยอ่ ยน้ีมีไฟลไ์ ดห้ ลายๆ ไฟล์ ผใู้ ชส้ ามารถต้งั ช่ือไฟลแ์ ละชนิดใหต้ รงกบั ไฟลข์ องผใู้ ชค้ นอ่ืนไดถ้ า้ ไฟลท์ ้งั2 น้ีอยตู่ ่างไดเร็กทอร่ีกนั เราเรียกระบบไดเร็กทอรี่แบบน้ีวา่ ระบบไดเร็กทอร่ี 2 ระดบั (2 leveldirectory ) อยา่ งไรกต็ าม ไดเร็กทอรี่แบบน้ียงั มีปัญหากบั ผใู้ ชท้ ่ีมีไฟลม์ ากๆ เขายงั คงไม่สามารถแบ่งแยกหรือจดั ไฟลอ์ อกเป็นหมวดหมู่ได้ (ถึงแมว้ า่ ไม่มีไฟลท์ ่ีเก่ียวกบั งานเขียนตาํ ราเรียน ไฟล์งานเขียนบทความ ไฟลก์ ารบา้ นนกั เรียนที่ส่งมาไฟลข์ องงานวิจยั น้ีกาํ ลงั ศึกษาคน้ ควา้ อยู่ ไฟล์เก่ียวกบั ผอู้ ปุ การะและทุนการศึกษา ไฟลท์ ี่เป็นเกมส์ และไฟลอ์ ่ืนๆ ในลกั ษณะน้ีเขากย็ งั คงพบปัญหาที่ไฟลห์ ลายๆ ประเภทอยรู่ วมปนกนั Root Root AB CAABCCC AA BCCC(ก)ไดเรกทอร่ีเดี๋ยว (ข) ไดเรกทอร่ี 2 ระดบั
การจดั การขอ้ มูล 204 RootAA B C BB CC CC B CCCC (ค)ไดเรกทอร่ีหลายระดบั - ไดเรกทอรี่ - ไฟล์ รูปท่ี 4.17 ไดเร็กทอรี่หลายระดบั เพ่ือแกป้ ัญหาท่ีเกิดกบั ผใู้ ชใ้ นระบบไดเร็กทอร่ี 2 ระดบั OS ในรุ่นหลงั ๆ น้ีจึงยอมใหผ้ ใู้ ช้สามารถสร้างไดเร็กทอรี่ยอ่ ยของตนเองได้ (ดูรูป 4.17 ค.) มากตามท่ีตอ้ งการ เพ่ือใหผ้ ใู้ ชส้ ามารถแบ่งแยกไฟลป์ ระเภทเดียวกนั ใหอ้ ยใู่ นไดเร็กทอรี่เดียวกนั ไม่ปะปนรวมกนั กบั ไฟล์ ประเภทอ่ืนเม่ือผใู้ ชส้ ร้างไดเร็กทอรี่ข้ึนมามากมาย ทาํ ใหร้ ะบบไดเร็กทอร่ีมีลกั ษณะเหมือนเป็นโครงสร้างตน้ ไม้ (tree structure) เราเรียกระบบไดเร็กทอรี่น้ีวา่ ไดเร็กทอรี่หลายระดบั การอา้ งถึงไฟลแ์ ต่ละไฟลใ์ นไดเร็กทอรี่ (\"ไฟล\"์ ในท่ีน้ีหมายรวมถึงไดเร็กทอร่ีดว้ ย อยา่ ลมืวา่ ไดเร็กทอร่ีกค็ ือไฟลเ์ ช่นกนั ) จาํ เป็นจะตอ้ งบอกที่อยหู่ รือพาธ (path) ของไฟลน์ ้นั ๆ เพอ่ื ให้ระบบรู้วา่ เรากาํ ลงั อา้ งถึงไฟลใ์ นไดเร็กทอร่ีใดๆ (ไฟลค์ นละไฟลืท่ีอยใู่ นไดเร็กทอรี่ต่างกนั อาจมีชื่อเหมือนกนั ได้ การบอกพาธจะทาํ ใหร้ ะบบทราบวา่ เรากาํ ลงั อา้ งถึงไฟลใ์ ดและอยทู่ ี่ไหนในระบบ)การอา้ งถึงไฟลม์ ี 2 วิธี คือ การอา้ งดว้ ยช่ือพาธสมั บูรณ์ (absolute path name) หรือ ชื่อพาธสมั พทั ธ์ (relative path name) การอา้ งถึงไฟลโ์ ดยใชช้ ื่อพาธสมั บูรณ์ เป็นการอา้ งถึงไฟลโ์ ดยเริ่มตน้ จากรูมเสมอ ตามดว้ ยช่ือไดเรคทอรี่ยอ่ ยต่างๆ ไล่ลงมาตามลาํ ดบั ของไดเร็กทอร่ี จนกระทง่ั ถึงไดเร็กทอร่ียอ่ ยที่ไฟลน์ ้นัอยู่ และจบลงดว้ ยชื่อไฟลน์ ้นั เริ่มตน้ รูทดว้ ยเครื่องหมายของรูท เช่น ในระบบ MS-DOS ใช้ '/'แทนรูท หรือในระบบ UNIX ใชเ้ คร่ืองหมาย '/' แทนรูท ซ่ึงไดเร็กทอร่ียอ่ ยจะถูกแยกดว้ ย
205 ระบบปฏิบตั ิการเครื่องหมาย '/' แทนรูท หรือในระบบ UNIX ใชเ้ คร่ืองหมาย '/' แทนรูท ช่ือไดเร็กทอรี่ยอ่ ยจะถูกแยกดว้ ยเคร่ืองหมาย '/' หรือ '\' (ข้ึนอยกู่ บั เครื่องหมายรูท) ตวั อยา่ งเช่นเรามีระบบไดเร็กทอร่ีดงั ในรูป 4.18 การอา้ งถึงไฟล์ text.asm ในไดเร็กทอร่ี asm คือ /usr/pan/asm/test.asm หรือการอา้ งถึง test.pas ในไดเร็กทอร่ี jum คือ /usr/jum/test.pas / bin USR sfw jum bantest.pas ok.com s.bat asm pas test.asm proj.asm - ไดเร็กทอรี่ - ไฟล์ รูปที่ 4.18 ตวั อย่างของระบบไดเร็กทอร่ีส่วนการอา้ งถึงไฟลโ์ ดยใชช้ ่ือพาธสมั พนั ธ์น้นั จะตอ้ งทาํ ความเขา้ ในเก่ียวกบั ไดเร็กทอรี่ปัจจุบนั(working directory หรือ current directory) ผใู้ ชส้ ามารถยา้ ยตาํ แหน่งการทาํ งานจากไดเร็กทอรี่หน่ึงไปยงั อีกไดเร็กทอรี่หน่ึงได้ ในขณะท่ีผใู้ ชท้ าํ งานอยบู่ นไดเร็กทอรี่ใดเราจะเรียกไดเร็กทอร่ีหน่ึงไปยงั อีกไดเร็กทอร่ีหน่ึงได้ ในขณะท่ีผใู้ ชท้ าํ งานอยบู่ นไดเร็กทอร่ีใดเราจะเรียกไดเร็กทอร่ีน้นัวา่ ไดเร็กทอรี่ปัจจุบนั เช่น ในรูปท่ี 4.18 สมมติไดว้ า่ ไดเร็กทอรี่ปัจจุบนั คือ jum และเราสงั่ ให้แสดงรายชื่อไฟลอ์ อกมาจะมีไฟลเ์ พยี ง 3 ไฟลเ์ ท่าน้นั ที่ถูกแสดงออกมาคือ test.pas ok.com และs.bat ไฟลใ์ นไดเร็กทอรี่อื่นจะไม่ถูกแสดงออกมา ถา้ เรายา้ ยไดเร็กทอรี่ปัจจุบนั จาก jum ไปยงัasm และสง่ั ใหแ้ สดงรายชื่อไฟลอ์ อกมา จะมีไฟล์ 2 ไฟลท์ ี่ถูกแสดงออกมาคือ test.asm และproj1.asm ชื่อพาธสมั พทั ธ์จะเริ่มตน้ จากไดเร็กทอรี่ปัจจุบนั ไล่ไปลาํ ดบั ช้นั ของไดเร็กทอรี่ที่ไฟลน์ ้นั อยู่และจบลงดว้ ยช่ือไฟล์ ตวั อยา่ งเช่น สมมติวา่ ไดเร็กทอร่ีปัจจุบนั คือ usr (ในรูป 4.18) ถา้ ตอ้ งการ
การจดั การขอ้ มูล 206อา้ งถึงไฟล์ test.asm จะตอ้ งอา้ งดว้ ย asm/test.asm และถา้ ไดเร็กทอรี่ปัจจุบนั คือ arm จะอา้ งเพยี งแค่ชื่อไฟลเ์ ท่าน้นั คืออา้ งดว้ ย test.asm โดยทวั่ ไปในไดเร็กทอร่ียอ่ ยจะมีไดเร็กทอร่ีท่ีช่ือ และ ไดเ้ ร็กทอร่ี จะหมายถึงไดเร็กทอร่ียอ่ ยน้นั เอง และไดเร็กทอร่ี หมายถึง ไดเร็กทอร่ีท่ีอยเู่ หนือข้ึนไปหน่ึงระดบั เช่นสมมติวา่ ไดเร็กทอรี่ปัจจุบนั คือ ban ไดเร็กทอรี่ที่ช่ือ ภายใตไ้ ดเร็กทอร่ี ban จะหมายถึงไดเร็กทอรี่ usr ดว้ ยการใชไ้ ดเร็กทอร่ีช่ือ เราสามารถอา้ งถึงไฟลท์ ุกไฟลใ์ นระบบโดยใชช้ ื่อพาธสมั พนั ธ์ไดไ้ ม่ว่าจะอยทู่ ี่ไดเร็กทอรี่ปัจจุบนั ใดกต็ าม เช่น ไดเร็กทอร่ีปัจจุบนั คือ pas การอา้ งถึงไฟล์ …/box.dat จะหมายถึงbox.dat ในไดเร็กทอร่ี ban ถา้ ตอ้ งการอา้ งถึงไฟล์ proj1.asm ในไดเร็กทอร่ี asm ตอ้ งอา้ งดว้ ย…/asm/proj1.arm ถา้ ตอ้ งการอา้ งถึงไฟล์ s.bat ในไดเร็กทอร่ี jum ตอ้ งอา้ งดว้ ย …/…/jum/s.bat การแยกแยะพาธที่เราอา้ งถึงวา่ เป็นแบบพาธสมั บูรณ์ หรือชื่อพาธสมั พนั ธ์น้นั สงั เกตไดด้ ว้ ยเคร่ืองหมายรูทเท่าน้นั ถา้ การอา้ งถึงไฟลข์ ้ึนตน้ ดว้ ยเครื่องหมาย \"/\" หรือ \"\\" (แลว้ แต่ตวั OS)การอา้ งน้นั คือ การอา้ งโดยใชพ้ าธสมั บูรณ์ แตถ่ า้ เป็นแบบพาธสมั พนั ธจ์ ะตอ้ งข้ึนตน้ ดว้ ยช่ือไดเร็กทอรี่ยอ่ ยหรือชื่อไฟล์4.2.4 การหาประสิทธิภาพของแฟ้มข้อมูล4.2.4.1 ความถูกต้องในระบบไฟล์ ความถูกตอ้ งเป็นองคป์ ระกอบหน่ึงของความน่าเชื่อถือในระบบไฟล์ การทาํ งานที่เก่ียวขอ้ งกบั ระบบไฟลส์ ่วนใหญ่จะเป็นการอ่านบลอ็ กขอ้ มูลในดิสกข์ ้ึนมาเปลี่ยนแปลงขอ้ มูล แลว้ จึงเขยี นขอ้ มูลในบลอ็ กน้นั กลบั ลงไปในดิสก์ ถา้ เกิดความผดิ ปกติกบั การทาํ งานของระบบในระหวา่ งช่วงที่ระบบไฟลก์ าํ ลงั จะเขียนขอ้ มูลลงดิกส์ เช่นกระแสไฟฟ้าดว้ ย ขอ้ มูลท่ีถูกแกไ้ ขแลว้ แต่ยงั ไม่ถูกเขียนกลบั ลงดิสกก์ จ็ ะสูญเสียไป และเกิดความไม่ถูกตอ้ งข้ึนในระบบไฟล์ ปัญหาเรื่องความไม่ถูกตอ้ งน้ีจะส่งผลกระทบรุนแรงมาก ถา้ บลอ็ กเหล่าน้นั เป็นบลอ็ กท่ีเกบ็ ขอ้ มูลสาํ คญั ๆ เช่น บลอ็ กไอโหนดบลอ็ กไดเร็กทอรี่ หรือบลอ็ กที่เป็นลิงคล์ ิสตข์ องบลอ็ กวา่ เป็นตน้ เพอื่ ขจดั ปัญหาท่ีเกิดข้ึนอนั เนื่องมากจากของความไม่ถูกตอ้ งในระบบไฟลร์ ะบบคอมพิวเตอร์ส่วนใหญ่จะมีโปรแกรมช่วยงานที่สามารถตรวจสอบความถูกตอ้ งของระบบไฟลไ์ ด้โปรแกรมเหล่าน้ีจะถกู รันเมื่อเริ่มบูต (boot) เคร่ืองใหม่ๆ โดยเฉพาะเมื่อเกิดความผดิ ปกติข้ึนกบัระบบจนเครื่องหยดุ การทาํ งาน การทาํ งานของโปรแกรมช่วยงานที่จะอธิบายต่อไปน้ี ใชใ้ นระบบUNIX สาํ หรับระบบอื่นๆ กม็ ีการทาํ งานที่คลา้ คลึงกนั ถา้ ระบบไฟลม์ ีความถูกตอ้ ง แต่ละบลอ็ กจะมีคา่ ของตวั นบั ตวั แรกเป็น 1 และคา่ ตวั นบั ตวั ที่2 เป็น 0 ดงั เช่นในรูป 4.19 (ก) ถา้ เกิดความไม่ถูกตอ้ งข้ึนในระบบไฟลต์ ารางของตวั นบั อาจมีคาํเหมือนกบั ในรูป 4.19 (ข) ซ่ึงบลอ็ กหมายเลข 3 ไม่ใหป้ รากฏอยทู่ ้งั ในไฟลแ์ ละลิสตว์ า่ งลกั ษณะเช่นน้ีเรียกวา่ เกิดบลอ็ กสูญหาย (missing block) ถึงแมว้ า่ การเกิดบลอ็ กสูญหายจะไม่ทาํ ใหเ้ กิด
207 ระบบปฏิบตั ิการความเสียหายในระบบ แต่กท็ าํ ใหเ้ สียเน้ือที่ในดิสกไ์ ปโดยเปล่าประโยชน์ การแกไ้ ขเร่ืองบลอ็ กสูญหายทาํ ไดง้ ่ายมากคือ นาํ บลอ็ กสูญหายท้งั หมดท่ีเกิดขน้ ไปไวร้ วมอยใู่ นลิสตว์ า่ งเท่าน้ีระบบก็สามารถนาํ เอาบลอ็ กสูญหายเหล่าน้นั กลบั มาใชง้ านไดอ้ ีก แต่ตอ้ งคอยระวงั ไวด้ ว้ ยวา่ บลอ็ กสุญหายน้นั ตอ้ งไม่ใช่บลอ็ กเสีย 0 1 2 3 4 5 6 7 8 9 10 11 12 13 หมายเลขบล็อก11101 111 10 1001 บลอ็ กทถ่ี กู ใช ้ บลอ็ กวา่ ง00100 000 10 1110 (ก) มคี วามถูกต้อง 0 1 2 3 4 5 6 7 8 9 10 11 12 13 หมายเลขบล็อก11001 111 01 0001 บล็อกทถี่ กู ใช ้ บลอ็ กวา่ ง00100 000 20 1110 (ข) เกดิ บลอ็ กสูญหาย 0 1 2 3 4 5 6 7 8 9 10 11 12 13 หมายเลขบลอ็ ก11011 111 01 0001 บล็อกทถี่ กู ใช ้ บล็อกวา่ ง00100 000 20 1110 (ค) มบี ล็อกซํ้าในดสิ ก์ว่าง 0 1 2 3 4 5 6 7 8 9 10 11 12 13 หมายเลขบลอ็ ก11011 121 01 0001 บลอ็ กทถ่ี กู ใช ้ บลอ็ กวา่ ง00100 000 10 1110 (ง) มบี ลอ็ กถูกใช้ซํ้ารูปท่ี 4.19 ตารางตรวจสอบความถูกต้องของการใช้บลอ็ ก ในรูป 4.19 (ค) บลอ็ กหมายเลข 8 มีปรากฏอยใู่ นลิสตว์ า่ ง 2 คร้ัง (เกิดข้ึนเฉพาะระบบที่ใชล้ ิ้งคล์ ิสตข์ องบลอ็ กวา่ งเท่าน้นั ในระบบท่ีเป็นบิตแมป็ จะไม่เกิดเหตุการณ์น้ีข้ึน) ในกรณีน้ีถา้ ไม่มีการแกไ้ ขจะเกิดปัญหาการใชบ้ ลอ็ กซ้าํ คือ อาจมีไฟลห์ ลายไฟลใ์ ชบ้ ลอ็ กร่วมกนั ขอ้ มูลในบลอ็ กก็จะปะปนกนั การแกไ้ ขทาํ ไดโ้ ดยแกไ้ ขลิ้งลิสตใ์ หถ้ ูกตอ้ งโดยตดั หมายเลขบลอ็ กท่ีซ้าํ กนั ออกเหลือเพียงหมายเลขเดียว
การจดั การขอ้ มูล 208กรณีที่แยท่ ี่สุดคือ ในกรณีของรูป 4.19 (ง) คือมีบางบลอ็ กถูกใชโ้ ดยไฟลม์ ากกว่า 1 ไฟล์ บลอ็ กหมายเลข 6 ถูกใช้ 2 คร้ัง โดยไฟล์ 2 ไฟล์ วธิ ีการแกไ้ ขกค็ ือนาํ บลอ็ กวา่ งมาบลอ็ กหน่ึง สมมติใชบ้ ลอ็ กวา่ งหมายเลข 10 กอ็ ปป้ี ขอ้ มูลจากบลอ็ กหมายเลข 6 ลงไปในบลอ็ กหมายเลข 10และแทร็กบลอ็ กใหม่น้ีเขา้ ไปในอีกไฟลห์ น่ึงที่ใชบ้ ลอ็ กหมายเลข 6 เหมือนกนั ในขณะน้ีท้งั 2 ก็จะมีขอ้ มูลในบลอ็ กหมายเลข 6 เหมือนกนั ท้งั คู่ แต่ไม่มีการใชบ้ ลอ็ กซ้าํ กนั วธิ ีน้ีขอ้ มูลภายในไฟล์จะไม่ถูกแกไ้ ข ถึงแมว้ า่ อาจจะมีขาดหายไปบา้ ง แต่อยา่ งนอ้ ยที่สุดการใชง้ านบลอ็ กกม็ ีความถูกตอ้ ง ในกรณีน้ีโปรแกรมตรวจสอบควรแสดงขอ้ ความใหผ้ ใู้ ชเ้ จา้ ของไฟลท์ ้งั สองทราบเพอ่ื ให้ผใู้ ชท้ าํ การตรวจสอบขอ้ มูลในไฟลเ์ สียใหม่ นอกจากตรวจสอบการใชง้ านบลอ็ กแลว้ โปรแกรมจะตอ้ งตรวจสอบไฟลแ์ ละไดเร็กทอร่ีดว้ ย โดยใชต้ ารางของตวั นบั เช่นกนั แต่คร้ังน้ีเป็นตวั นบั ของไอโหนดไม่ใช่ของบลอ็ ก เริ่มจาการตรวจสอบที่รูท และไล่ลงไปเร่ือยๆ ตามโครงสร้างตน้ ไมข้ องไดเร็กทอรี่ ตอนแรกค่าของตวั นบั หทุกตวั จะเป็น 0 หมด สาํ หรับทุกๆ ไฟลใ์ นทุกไดเร็กทอรี่โปรแกรมจะเพม่ิ ค่าตวั นบั ข้ึน 1 ใหก้ บัไอโหนดของไฟลน์ ้นั ๆ ดงั น้นั เมื่อโปรแกรมทาํ งานเสร็จมนั จะมีตารางตวั นบั ซ่ึงบ่งช้ีดว้ ยหมายเลขไอโหนด ค่าของตวั นบั จะแสดงถึงจาํ นวนไดเร็กทอรี่ท่ีช้ีไปยงั ไอโหนดน้นั (ดูรูป 4.20) น้นัหมายถึงจาํ นวนลิงคข์ องไฟลน์ ้นั จากน้นั โปรแกรมจะเปรียบเทียบค่าของจาํ นวนลิงคท์ ี่ถูกเกบ็ ไวใ้ นไอโหนดกบั ค่าตวั นบั ในตาราง ถา้ มีความถูกตอ้ งค่าท้งั 2 ตอ้ งเท่ากนั (เช่น ไอโหนดหมายเลข 1ในรูป 4.20 ) ถา้ ไม่ถูกตอ้ งค่าของตวั นบั อาจมากกวา่ หรือนอ้ ยกวา่ ค่าของจาํ นวนลิงคใ์ นไอโหนด(เช่น ไอโหนด หมายเลข 3 และ 4 ในรูป 4.20)0 1 2 3 4 5 6 7 8 -- หมายเลข i-node1 1 2 2 2 1 3 1 1 -- จํานวนไดเร็กทอรท่ี ชี่ ไ้ี ปยงั i-node ( จากการตรวจสอบของโปรแกรม)1 1 2 3 1 1 3 1 1 - - จํานวนลง้ิ ทเี ก็บไวใ้ น i-node◌่ รูปที่ 4.20 การตรวจสอบความถูกต้องของไฟล์4.2.4.2 การปรับทนั กาลอตั โนมตั ิ (automatic update) การปรับทนกาลอตั โนมตั ิ (automatic update) เป็นการเกบ็ ขอ้ มูลที่เรามีเกบ็ ไวโ้ ดยมีคุณลกั ษณะดงั น้ี ในขณะทาํ การแกไ้ ขขอ้ มูล ขอ้ มูลชุดเก่าและขอ้ มูลท่ีนาํ มาใชเ้ ปล่ียนแปลงขอ้ มูลเก่ายงั คงอยเู่ หมือนเดิมไม่ถูกทาํ ลายไป ดงั น้นั ถา้ ระบบการทาํ งานของเคร่ืองเกิดขดั ขอ้ งระหวา่ งแกไ้ ขขอ้ มูล การแกไ้ ขขอ้ มูลยงั คงทาํ ไดโ้ ดยเริ่มตน้ กระบวนการแกไ้ ขต้งั ตน้ ใหม่
209 ระบบปฏิบตั ิการ การใชว้ ธิ ีการปรับทนั การอตั โนมตั ิ เป็นการแกป้ ัญหาของการสูญเสียขอ้ มูลท่ีตน้ เหตุเพราะวิธีน้ีจะไม่ยอมใหข้ อ้ มูลเกิดการสูญหายไปจนกระทงั่ การทาํ งานเสร็จสิ้นลง แต่การปรับทนั กาลอตั โนมตั ิเสียค่าใชจ้ ่ายสูงมาก ตวั อยา่ งเช่น เราใชด้ ิสกต์ วั หน่ึงเกบ็ รายชื่อและจาํ นวนสินคา้ ในโกดงัใชด้ ิสกข์ นาดเท่ากนั อีกตวั หน่ึงทาํ การสาํ รองขอ้ มูลรายการสินคา้ น้ีไวท้ ุกวนั จาํ นวนสินคา้ ท่ีมีการเขา้ -ออกโกดงั ถูกบนั ทึกไวใ้ นดิสกเ์ ลก็ ๆ ซ่ึงบนั ทึกเฉพาะรายการที่มีการเปลี่ยนแปลงเท่าน้นั ในตอนกลางคืนเราจะแกไ้ ขขอ้ มูลในดิสกท์ ่ีเกบ็ ขอ้ มูลใหม้ ีจาํ นวนสินคา้ ถูกตอ้ ง วธิ ีการปรับทนั กาลอตั โนมตั ิคือ อ่านขอ้ มูลจากดิสกท์ ่ีเกบ็ รายการสินคา้ และอา่ นขอ้ มูลจากดิสกท์ ี่เกบ็ รายการเปลี่ยนแปลงในวนั น้นั ทาํ การคาํ นวณเขียนลงในดิสกว์ ่างอีกตวั หน่ึง จะเห็นวา่ ไม่มีการทาํ ลายขอ้ มูลเดิมใหส้ ูญหายไป เพราะดิสกน์ ้นั ถูกใชใ้ นการอา่ นเท่าน้นั ไดถ้ ูกเขียนทบั ลงไปถา้ ระบบเกิดขดั ขอ้ งในขณะแกไ้ ขขอ้ มูล ขอ้ มูลที่เกบ็ ลงในดิสกว์ า่ งเท่าน้นั ที่เสียหาย การแกไ้ ขชื่อขอ้ มูลสามารถเร่ิมตน้ ใหม่ไดห้ ลงั จากที่ระบบกลบั สู่สภาพปกติแลว้ หลงั จากทาํ การแกไ้ ขขอ้ มูลลงดิสกว์ ่างเสร็จแลว้ ทาํ การสาํ รวจขอ้ มูลอีกคร้ังหน่ึง ถา้ ดิสกท์ ่ีเกบ็ รายการสินคา้ ไวม้ ีการเสียหายอาจเนื่องจากฝ่ นุความช้ืน หรือเหตุใดๆ กต็ าม เรากย็ งั มีดิสกส์ าํ รองอีกตวั หน่ึงที่จะนาํ มาใชง้ านแทนได้ จากที่กล่าวมาจะเห็นวา่ การปรับทนั กาลอตั โนมตั ิจะไม่ทาํ ใหเ้ กิดการสูญหายของขอ้ มูลแต่ตอ้ งใชด้ ิสก์หลายตวั ทาํ ใหม้ ีราคาแพงมาก4.3 การใช้งานอปุ กรณ์สํารองข้อมูล4.3.1 ลกั ษณะของอุปกรณ์สํารองข้อมูล (Device Characteristic) โดยทวั่ ไปเราสามารถแบ่งแยกประเภทของอุปกรณ์ไดเ้ ป็น 2 ประเภทคือ - อุปกรณ์อินพตุ -เอาตพ์ ตุ (input/output device) - อุปกรณ์เกบ็ ขอ้ มูล (storage device)อุปกรณ์อนิ พตุ -เอาต์พุต อุปกรณ์อินพตุ คืออุปกรณ์ท่ีทาํ ใหค้ อมพวิ เตอร์สามารถสมั ผสั และรับรู้ส่ิงต่างๆ จากโลกภายนอกได้ ตวั อยา่ งเช่น เครื่องอ่านบตั ร คียบ์ อร์ด เมาส์ (mouse) อุปกรณ์เอาตพ์ ตุ คืออุปกรณ์ท่ีทาํ ใหค้ อมพวิ เตอร์คอบคุมหรือส่งผลออกมาสู่โลกภายนอกได้ตวั อยา่ งเช่น เครื่องเจาะบตั ร จอภาพเคร่ืองพมิ พ์ เราอาจแบ่งแยกอุปกรณ์อินพตุ -เอาตพ์ ตุ ออกเป็น 2 ประเภทไดด้ งั น้ี 1. อุปกรณ์ชนิดขอ้ มูลเป็นสาย (stream) อุปกรณ์ประเภทน้ีขอ้ มูลท่ีส่งเขา้ ออกจะเรียงมาเป็นลาํ ดบั ก่อน-หลงั การแบ่งแยกขอ้ มูลทาํ ไดโ้ ดยการตรวจสอบลาํ ดบั ของขอ้ มูล อุปกรณ์ประเภทน้ีสามารถจดั การไดง้ ่าย เพียงแต่จดั ลาํ ดบั การรับ-ส่งขอ้ มูลใหถ้ กู ตอ้ งกเ็ พียงพอแลว้ ตวั อยา่ งของอุปกรณ์ชนิดน้ี ไดแ้ ก่ คียบ์ อร์ด ซ่ึงขอ้ มูลท่ีส่งเขา้ มาในระบบจะเป็นไปตามลาํ ดบั การกดคีย์ คียใ์ ด
การจดั การขอ้ มูล 210ถูกกดก่อนกจ็ ะถูกส่งมาก่อน เคร่ืองพิมพก์ จ็ ดั อยใู่ นอุปกรณ์ประเภทน้ี ขอ้ มูลท่ีถูกส่งไปก่อนกจ็ ะถูกพิมพก์ ่อน ขอ้ มูลท่ีถูกส่งไปทีหลงั กจ็ ะถูกพมิ พท์ ีหลงั 2. อุปกรณ์ชนิดขอ้ มูลไม่เป็นสาย (non-stream) อุปกรณ์ประเภทน้ี ขอ้ มูลท่ีส่งและรับไม่ข้ึนอยกู่ บั ลาํ ดบั การส่ง เราตอ้ งอาศยั ขอ้ มูลเพิม่ เติมเพื่อที่จะแยกแยะขอ้ มูลแต่ละตวั การจดั การอุปกรณ์ประเภทน้ี OS จะตอ้ งมีวิธีจดั การโดยเฉพาะข้ึนอยกู่ บั ลกั ษณะชนิดน้นั ๆ ตวั อยา่ งของอุปกรณ์ชนิดน้ี เช่น จอภาพของเคร่ืองไมโครคอมพวิ เตอร์ ขอ้ มูลหรือตวั อกั ษรท่ีแสดงอยบู่ นจอภาพแสดงน้นั จะตอ้ งส่งไปในตาํ แหน่งที่ถูกตอ้ ง ตาํ แหน่งของตวั อกั ษรท่ีแสดงอยบู่ นจอภาพแต่ละตวั จะมีแอดเดรสประจาํ ตาํ แหน่งน้นั ๆ เมื่อเราส่งตวั อกั ษรไปยงั แอดเดรสใดตวั อกั ษรกจ็ ะปรากฏอยบู่ นจอภาพ ณ ตาํ แหน่งท่ีตรงกนั กบั แอดเดรสน้นั ดงั น้นั จะเห็นไดว้ า่ การส่งตวั อกั ษรไปให้จอภาพไม่จาํ เป็นตอ้ งมีลาํ ดบั การส่งที่ถูกตอ้ ง แต่ตอ้ งการแอดเดรสท่ีตรงกบั ตาํ แหน่งน้นั เท่าอปุ กรณ์เกบ็ ข้อมูล อุปกรณ์เกบ็ ขอ้ มูล เป็นอุปกรณ์ที่คอมพวิ เตอร์ใชเ้ กบ็ ขอ้ มูลตา่ งๆ (โดยทว่ั ไปกระบวนการน้ีเรียกว่า การเขียน) ในลกั ษณะที่ขอ้ มูลน้ีสามารถถกู ดึงหรือเรียกกลบั มาใชไ้ ดใ้ นภายหลงั(กระบวนการน้ีเรียกวา่ การอ่าน) อุปกรณ์เกบ็ ขอ้ มูลน้ีเป็นอุปกรณ์เกบ็ ขอ้ มูลน้ีเปรียบเสมือนกลไกการเกบ็ ขอ้ มูลของมนุษย์ เช่นใชด้ ินสอเขียนขอ้ ความต่างๆ ไวใ้ นสมุดเมื่อตอ้ งการจะใชภ้ ายหลงั ก็นาํ มาอ่านเพอื่ ร้ือฟ้ื นความจาํ อุปกรณ์เกบ็ ข้อมูลสามารถแบ่งแยกได้เป็ น 2 ประเภท 1. อุปกรณ์ท่ีมีการเขา้ ถึงแบบลาํ ดบั (serial access storage device) ไดแ้ ก่ เทปลกั ษณะของอุปกรณ์ประเภทน้ีการเขา้ ถึง (access) จะตอ้ งเป็นไปตามลาํ ดบั ต้งั แต่ตน้ เทป (หรือตาํ แหน่งที่หวัเทปกาํ ลงั อ่านอย)ู่ เรียงไปจนถึงตาํ แหน่งท่ีตอ้ งการ การเกบ็ ขอ้ มูลจะเกบ็ เป็นกลุ่มๆ ไม่มีแอดเดรสของแต่ละกลุ่ม การอ่านจะตอ้ งอ่านเขา้ มาทีละกลุ่ม ตรวจสอบวา่ เป็นกลุ่มท่ีตอ้ งการหรือไม่ทาํ เช่นน้ีเรียงไปตามลาํ ดบั ของการเกบ็ จนกระทง่ั พบกลุ่มของขอ้ มูลที่ตอ้ งการ 2. อุปกรณ์ที่มีการเขา้ ถึงโดยตรง (direct access storage device) ไดแ้ ก่ ดิสกข์ อ้ มูลท่ีจะถูกจดั ไวเ้ ป็นกลุ่ม ในระดบั บลอ็ กหรือเซกเตอร์ แต่ละกลุ่มจะมีแอดเดรสของตวั เอง การเขา้ ถึงทาํ ได้โดยกาํ หนดแอดเดรสของขอ้ มูลกลมุ่ น้นั ซ่ึงจะทาํ ใหอ้ ปุ กรณ์ทราบวา่ ขอ้ มูลกลุ่มน้นั อยทู่ ่ีไหนและสามารถเขา้ ถึงไดโ้ ดยตรง ไม่ตอ้ งผา่ นกลุ่มขอ้ มูลกลุ่มอื่นๆ เหมือนในกรณีของอปุ กรณ์ที่มีการเขา้ ถึงแบบลาํ ดบั ดสิ ก์ คือ กอ้ นของหน่วยเกบ็ ขอ้ มูลสาํ รองสาํ หรับระบบคอมพิวเตอร์ยคุ ใหม่ เทปแม่เหลก็ เคยถูกใชเ้ ป็นสื่อท่ีใชส้ าํ รองขอ้ มูลมาก่อน แต่เวลาที่ใชใ้ นการเขา้ ถึงขอ้ มูลค่อนขา้ งขา้ กวา่ ดิสก์ ดงั น้นั ในปัจจุบนั เทปมกั ถูกใชเ้ ป็น backup มากกวา่ โดยใชเ้ กบ็ สารสนเทศท่ีใชไ้ ม่ค่อยบ่อย แลว้ ยงั เป็นสื่อท่ี
211 ระบบปฏิบตั ิการใชโ้ อนยา้ ยสารสนเทศจากระบบหน่ึงสู่อีกระบบหน่ึง และใชเ้ กบ็ ขอ้ มูลท่ีมีปริมาณมากท่ีไม่เหมาะจะเกบ็ ในระบบดิสก์ เคร่ืองขบั ดิสก์ (disk drive) ยคุ ใหม่ ถูกพดู ถึงเหมือนเป็นอาร์เรย์ 1 มิติขนาดใหญข่ อง บลอ็ คทางตรรกะ (logical block) ซ่ึงบลอ็ คทางตรรกะคือหน่วยที่เลก็ ท่ีสุดของการโอนยา้ ยขอ้ มูล ขนาดของบลอ็ คทางตรรกะมกั มีขนาด 512 ไบต์ ถึงแมว้ า่ ดิสกบ์ างตวั จะสามารถทาํ “การจดั ระเบียบระดบัต่าํ ” (low-level formatted) เพ่อื เลือกขนาดของบลอ็ คท่ีต่างออกไป เช่น 1024 ไบต์ อาร์เรย์ 1 มิติของบลอ็ คทางตรรกะถูกจบั คู่ (map) ไปบนเซกเตอร์ (sector) ของดิสกแ์ บบ เรียงลาํ ดบั เซกเตอร์ 0 คือ เซกเตอร์แรกของแทร็ก (track) แรกบนไซลินเดอร์ (cylinder) นอก สุด การจบั คู่ดาํ เนินการผา่ นแทร็ก แลว้ ผา่ นแทร็กไปไซลินเดอร์ แลว้ ผา่ นไซลินเดอร์จากนอก สุดไปสู่ช้นั ในสุดโดยการใชก้ ารจบั คู่แบบน้ี ทาํ ใหก้ ารแปลงหมายเลขบลอ็ คทางตรรกะมาเป็นตาํ แหน่งของดิสกจ์ ริงๆ ซ่ึงประกอบดว้ ย หมายเลขไซลินเดอร์ หมายเลขแทร็ก ภายในไซลินเดอร์น้นั และหมายเลขเซกเตอร์ภายในแทร็กน้นั สามารถเป็นไปได้ ในทางปฏิบตั ิ มนั ยากท่ีจะแปลงเลขดงั กลา่ วดว้ ยเหตุผล 2 ประการ 1. ดิสกส์ ่วนใหญ่มีเซกเตอร์เสีย แต่การจบั คู่จะทาํ ไดโ้ ดยใชเ้ ซกเตอร์อ่ืนในดิสกแ์ ทน 2. จาํ นวนของเซกเตอร์ต่อแทร็กไม่คงท่ี แทร็กมาจากจุดศูนยก์ ลางของดิสก์ ย่ิงแทร็กยาวมาก จาํ นวนเซกเตอร์ก็จะมากตาม ดงั น้นั ดิสกย์ คุ ใหม่จะถูกจดั ระเบียบเป็นโซนของไซลินเดอร์ จาํ นวนของเซกเตอร์ต่อแทร็กคือค่าคงท่ีภายในโซน แต่เมื่อเราเคล่ือนจากโซนภายในไปสู่ โซนภายนอก จาํ นวนของเซกเตอร์ต่อแทร็กกจ็ ะเพ่ิมข้ึน ตวั อยา่ งเช่น แทร็กในโซนนอกสุด มีเซกเตอร์ 40 % มากกวา่ ในโซนในสุดจาํ นวนของเซกเตอร์ต่อแทร็กมีจาํ นวนเพิม่ ข้ึนเมื่อเทคโนโลยขี องดิสก์ ไดร้ ับการปรับปรุง และเป็นเรื่องปกติท่ีจะมีเซกเตอร์ต่อแทร็กมากกวา่ 100 เซกเตอร์ ในโซนภายนอกของดิสก์ ในทาํ นองเดียวกนั จาํ นวนของไซลินเดอร์ต่อดิสกก์ จ็ ะเพิม่ ข้ึน4.3.1.1 การจดั ตารางของดสิ ก์ (Disk Scheduling) หน่ึงในความรับผดิ ชอบของระบบปฏิบตั ิการ คือ ตอ้ งใชฮ้ าร์ดแวร์อยา่ งมีประสิทธิภาพสาํ หรับเคร่ืองขบั ดิสก์ (disk drive) นน่ั หมายถึง มีเวลาในการเขา้ ถึงอยา่ งรวดเร็ว (fast access time)และ disk bandwidth ในเรื่องเวลาในการเขา้ ถึงมี 2 องคป์ ระกอบหลกั คือ 1. เวลาในการคน้ หา (seek time) คือ เวลาที่แขนของดิสกเ์ คล่ือนหวั อ่านไปสู่ไซลินเดอร์ท่ีมี เซกเตอร์ที่ตอ้ งการ
การจดั การขอ้ มูล 212 2. เวลาในการหมุนหวั อา่ น (rotational latency) คือ เวลาในการรอคอยท่ีเพม่ิ ข้ึนสาํ หรับดิสก์ ในการหมุนเซกเตอร์ท่ีตอ้ งการมาสู่หวั อา่ นdisk bandwidth คือ จาํ นวนไบตท์ ้งั หมดท่ีถูกโอนยา้ ย มาจากเวลาท้งั หมดต้งั แต่การร้องขอบริการคร้ังแรกจนถึงการโอนยา้ ยคร้ังสุดทา้ ยเสร็จสิ้น เราสามารถปรับปรุงท้งั เวลาในการเขา้ ถึง และbandwidth โดยการจดั ตารางบริการของการร้องขอรับ-ส่งขอ้ มูลของดิสกใ์ นลาํ ดบั ท่ีดี เม่ือโปรเซสตอ้ งการ การรับขอ้ มูลจากดิสกห์ รือส่งขอ้ มูลไปสู่ดิสก์ จึงเกิดการเรียกระบบไปสู่ระบบปฏิบตั ิการ การร้องขอเจาะจงสารสนเทศหลายชิ้น ดงั น้ีคือ การปฏิบตั ิการน้ี คือ การนาํ เขา้ (input) หรือ การส่งออก (output) หรือไม่ ตาํ แหน่งของดิสกท์ ่ีใชใ้ นการโอนยา้ ยขอ้ มูลคืออะไร ตาํ แหน่งของหน่วยความจาํ สาํ หรับการโอนยา้ ยขอ้ มูลคืออะไร จาํ นวนของไบตท์ ่ีถูกโอนยา้ ยขอ้ มูลเป็นเท่าไรถา้ เครื่องขบั ดิสก์ (disk drive) และตวั ควบคุม (controller) วา่ ง การร้องขอจะไดร้ ับบริการทนั ที ถา้มนั ไม่วา่ ง การร้องขอใหม่จาํ เป็นตอ้ งนาํ ไปไวใ้ นแถวคอย สาํ หรับระบบ multiprogramming ท่ีมีหลายกระบวนการ แถวคอยของดิสก์ (disk queue) อาจมีการร้องขออยหู่ ลายตวั ดงั น้นั เม่ือการร้องขอหน่ึงไดร้ ับบริการแลว้ ระบบปฏิบตั ิการจึงมีโอกาสที่จะเลือกการร้องขอมาใหบ้ ริการถดั ไป1. การจดั ตารางแบบมาก่อน-ได้ก่อน (FCFS Scheduling)รูปแบบที่ง่ายที่สุดของการจดั ตารางของดิสก์ คือ มาก่อน-ไดก้ ่อน [first-come, first-served (FCFS)]พิจารณาตวั อยา่ ง ถา้ แถวคอยของดิสก์ มีการร้องขอการรับส่งขอ้ มลู ของบลอ็ คบนไซลินเดอร์ดงั น้ี 98 , 183 , 37 , 122 , 14 , 124 , 65 , 67ตามลาํ ดบั ถา้ หวั อ่านเริ่มตน้ ท่ีไซลินเดอร์ที่ 53 มนั จะเริ่มเคล่ือนในคร้ังแรกจาก 53 ไป 98 แลว้ จึงไป183 , 37 , 122 , 14 , 124 , 65 และสุดทา้ ยท่ี 67 สาํ หรับการเคล่ือนยา้ ยหวั อา่ นท้งั หมด 640 ไซลินเดอร์ การจดั ตารางน้ีคือแผนภาพดงั รูปท่ี 4.21
213 ระบบปฏิบตั ิการ รูปท่ี 4.21 แสดงการจดั ตารางของดสิ ก์แบบมาก่อน-ได้ก่อน (FCFS) ปัญหาของการจดั ตารางวิธีน้ีดูไดจ้ ากการเหวี่ยงกวา้ งจาก 122 ไป 14 แลว้ กลบั มา 124 ถา้ การร้องขอสาํ หรับไซลินเดอร์ 37 และ 14 ไดร้ ับบริการต่อกนั ก่อนหรือหลงั การร้องขอท่ี 122 และ 124การเคลื่อนยา้ ยหวั อ่านท้งั หมดน่าจะลดลงอยา่ งมาก ดงั น้นั สมรรถนะ (performance) ควรจะไดร้ ับการปรับปรุง2. การจดั ตารางแบบเวลาในการค้นหาส้ันทส่ี ุดได้ก่อน (SSTF Scheduling) ฟังดูมีเหตุผลที่จะบริการ การร้องขอท้งั หมดท่ีอยใู่ กลต้ าํ แหน่งของหวั อ่านในขณะน้นั ก่อนจะยา้ ยหวั อ่านไกลออกไปเพอ่ื บริการการร้องขออื่น สมมุติฐานน้ีคือพ้ืนฐานสาํ หรับ วธิ ีเวลาในการคน้ หาส้นั ที่สุดไดก้ ่อน [shortest-seek-time-first (SSTF) algorithm] วธิ ี SSTF จะเลือกการร้องขอที่มีเวลาในการคน้ หานอ้ ยท่ีสุดจากตาํ แหน่งปัจจุบนั ของหวั อา่ น เมื่อเวลาในการคน้ หาเพิม่ ข้ึนดว้ ยจาํ นวนของไซลินเดอร์ที่ถูกอ่านโดยหวั อ่าน SSTF จะเลือกการร้องขอท่ีใกลท้ ่ีสุดกบั ตาํ แหน่งปัจจุบนั ของหวั อ่าน จากตวั อยา่ งท่ีแลว้ การร้องขอท่ีใกลก้ บั ตาํ แหน่งเริ่มตน้ ของหวั อ่านท่ีสุด (53) คือท่ี ไซลินเดอร์ 65 เม่ือเราเคลื่อนมาที่ไซลินเดอร์ 65 การร้องขอที่ใกลท้ ่ีสุดถดั ไปคือที่ไซลินเดอร์ 67 จากน้นัการร้องขอที่ไซลินเดอร์ 37 จะใกลก้ วา่ 98 ดงั น้นั 37 จะไดร้ ับบริการถดั ไป ต่อมาเราบริการการร้องขอท่ีไซลินเดอร์ 14 แลว้ เป็น 98 , 122 , 124 และสุดทา้ ยท่ี 183 (ดงั รูปที่ 4.22) ผลลพั ธข์ องวธิ ีการจดัตารางแบบน้ีการเคล่ือนยา้ ยหวั อ่านท้งั หมดมีเพียง 236 ไซลินเดอร์เท่าน้นั นอ้ ยกวา่ 1 ใน 3 ของระยะทางของวิธี FCFS วิธีน้ีทาํ ใหส้ มรรถนะไดร้ ับการปรับปรุงอยา่ งมาก
การจดั การขอ้ มูล 214 รูปท่ี 4.22 แสดงการจดั ตารางของดสิ ก์แบบเวลาในการค้นหาส้ันทสี่ ุดได้ก่อน (SSTF) การจดั ตารางแบบ SSTF จาํ เป็นท่ีสุดสาํ หรับรูปแบบของการจดั ตารางแบบ SJF และเหมือนกบั SJF มนั อาจจะเกิดปัญหาการแช่เยน็ (starvation) ยงั จาํ ไดห้ รือไม่วา่ การร้องขออาจมาถึงที่เวลาต่าง ๆ กนั สมมติวา่ เรามีการร้องขอ 2 ตวั ในแถวคอย สาํ หรับไซลินเดอร์ 14 และ 186 และขณะที่กาํ ลงั บริการการร้องขอจาก 14 การร้องขอใหม่ใกล้ 14 มาถึง การร้องขอใหม่น้ีจะไดร้ ับบริการเป็นรายถดั ไป ทาํ ใหก้ ารร้องขอท่ี 186 ตอ้ งรอก่อน ในขณะที่การร้องขอน้ีกาํ ลงั ไดร้ ับบริการการร้องขออีกตวั ท่ีใกล้ 14 มาถึงอีก ในทางทฤษฏีถา้ สายการร้องขออยา่ งต่อเน่ืองท่ีใกลอ้ ีกตวั หน่ึงมาถึงจะเป็นเหตุใหก้ ารร้องขอสาํ หรับไซลินเดอร์ 186 จะตอ้ งรออยา่ งไม่สิ้นสุด สิ่งน้ีจะเป็นการเพิ่มแถวคอยการร้องขอใหย้ าวข้ึน ถึงแมว้ า่ วิธี SSTF คือ การปรับปรุงอยา่ งมากจาก FCFS แต่มนั ยงั ไม่ดีที่สุด จากตวั อยา่ ง เราสามารถทาํ ไดด้ ีกวา่ โดยการเคลื่อนหวั อ่านจาก 53 ไป 37 ถึงแมว้ า่ 37 จะไม่ใกลท้ ี่สุด จากน้นั ไป 14 ก่อนจะกลบั ไป 65 , 67 , 98 , 122 , 124 และ 183 กลยทุ ธ์น้ีเป็นการลดการเคล่ือนยา้ ยหวั อ่านท้งั หมดเหลือ 208 ไซลินเดอร์3. การจดั ตารางแบบกวาด (SCAN Scheduling) ในวธิ ีแบบกวาด (SCAN) แขนของดิสกเ์ ริ่มตน้ ที่จุดสิ้นสุดจุดหน่ึงของดิสก์ (A) และเคล่ือนไปยงั จุดสิ้นสุดอื่น (B) การบริการการร้องขอจะทาํ ไดเ้ ม่ือมนั มาถึงในแต่ละไซลินเดอร์ จนกระทง่ัมนั ไปถึงจุดสิ้นสุดอ่ืนของดิสก์ (B) ท่ีจุดสิ้นสุดอ่ืน (B) ทิศทางของการเคล่ือนของหวั อ่านจะถูกยอ้ นกลบั และใหบ้ ริการต่อไป หวั อ่านจะกวาดไปขา้ งหนา้ และขา้ งหลงั ผา่ นดิสกไ์ ปเร่ือย ๆ พิจารณาตวั อยา่ งเดิม ก่อนจะใชว้ ิธีจดั ตารางแบบกวาด กบั การร้องขอบนไซลินเดอร์ 98 , 183 , 37 , 122 , 14, 124 , 65 และ 67 เราจาํ เป็นตอ้ งรู้ทิศทางของการเคล่ือนหวั อ่านก่อน โดยถา้ ตอนน้ีตาํ แหน่งปัจจุบนัของหวั อ่านคือ 53 ถา้ แขนของดิสกก์ าํ ลงั เคล่ือนไปทาง 0 หวั อ่านจะบริการ 37 และจากน้นั เป็น 14 ที่
215 ระบบปฏิบตั ิการไซลินเดอร์ 0 แขนจะยอ้ นกลบั และจะเคลื่อนผา่ นจุดสิ้นสุดอื่นของดิสก์ (ที่ไม่ใช่ 0) การบริการการร้องขอจะทาํ ท่ี 65 , 67 , 98 , 122 , 124 และ 183 (ดงั รูปที่ 4.23)sector 0 Boot Blocksector 1 FAT Root Directory DATA BLOCKS (SUBDIRECTORIES) รูปท่ี 4.26 แสดงโครงร่าง (layout) ของดสิ ก์ในระบบ MS-DOS4.3.1.2 บลอ็ คเสีย (Bad Block) ในระบบดิสกอ์ ยา่ งง่าย เช่น ดิสกท์ ่ีมีตวั ควบคุมแบบ IDE เราสามารถจดั การกบั บลอ็ คเสียได้(โดยผูใ้ ชส้ ั่งให้ทาํ ) เช่น คาํ ส่ัง format ของ MS-DOS เป็ นการจดั ระเบียบทางตรรกะและจะทาํ การหาบล็อคเสียบนดิสก์ ถ้าหาเจอมันจะเขียนค่าพิเศษไวใ้ นช่องของ FAT ที่ตรงกันเพื่อบอกให้โปรแกรมยอ่ ยต่าง ๆ ไม่ใหใ้ ชบ้ ลอ็ คน้นั ถา้ บลอ็ คเกิดเสียในระหวา่ งการทาํ งานปกติ โปรแกรมพเิ ศษ(เช่น chkdsk) ตอ้ งถูกส่ังใหท้ าํ งานเพ่ือคน้ หาบลอ็ คเสียและลอ็ คบลอ็ คเหล่าน้นั ไวไ้ ม่ให้ใช้ ขอ้ มูลท่ีอยใู่ นบลอ็ คเสียกจ็ ะเสียไปโดยปริยาย สาํ หรับดิสกแ์ บบ SCSI สามารถกบู้ ลอ็ คเสียคืนได้ โดยตวั ควบคุมจะเกบ็ รายการของบลอ็ ค เสียบนดิสก์ รายการน้ีถูกเกบ็ มาต้งั แต่ตอนจดั ระเบียบดิสกร์ ะดบั ต่าํ (low-level format) จาก โรงงาน และถูกทาํ ใหท้ นั สมยั ตลอดเวลาของการใชด้ ิสก์ การจดั ระเบียบระดบั ต่าํ จะจดั เซกเตอร์อะไหล่ท่ีระบบปฏิบตั ิการมองไม่เห็นไว้ แลว้ ตวั ควบคุมจะทาํ การแทนที่เซกเตอร์
การจดั การขอ้ มูล 216 ทางตรรกะที่เสียแต่ละเซกเตอร์ดว้ ยเซกเตอร์อะไหล่ วธิ ีการน้ีเรียกว่า การเกบ็ เซกเตอร์ อะไหล่ (sector sparing) หรือการเปล่ียนที่ (forwarding)ตวั อยา่ งของการเปล่ียนแปลงเซกเตอร์เสียอาจเป็นดงั น้ี ระบบปฏิบตั ิการพยายามอา่ นบลอ็ คทางตรรกะที่ 87 ตวั ควบคุมจะทาํ การคาํ นวณรหสั ถูก-ผดิ (ECC) และพบวา่ เซกเตอร์น้นั เสีย มนั จะ รายงานการคน้ พบน้ีไปสู่ระบบปฏิบตั ิการ คราวหนา้ เมื่อบูตระบบใหม่ คาํ สง่ั พเิ ศษจะทาํ งานเพอื่ บอกตวั ควบคุม SCSI เพ่อื แทนเซกเตอร์ท่ีเสียดว้ ยเซกเตอร์อะไหล่ หลงั จากน้นั เมื่อระบบร้องขอบลอ็ คทางตรรกะที่ 87 การร้องขอน้นั จะถูกแปลไป ยงั ตาํ แหน่งของเซกเตอร์ท่ีถูกแทนที่โดยตวั ควบคุมจะเห็นไดว้ ่าการเปล่ียนทิศทางโดยตวั ควบคุมอาจจะทาํ ให้ การจดั ตารางดิสกข์ องระบบปฏิบตั ิการผิดพลาด ดว้ ยเหตุน้ีดิสกส์ ่วนใหญ่ถูกจดั ระเบียบเพื่อเตรียมเซกเตอร์อะไหล่ไวเ้ ลก็ นอ้ ยในแต่ละไซลินเดอร์ เมื่อบลอ็ คเสียถูกพบ ตวั ควบคุมจะใชเ้ ซกเตอร์อะไหล่จากไซลินเดอร์เดียวกนั ถา้ ทาํ ได้ อีกทางเลือกหน่ึงของการเกบ็ เซกเตอร์อะไหล่ ตวั ควบคุมสามารถสั่งใหแ้ ทนที่บลอ็ คเสียโดยเซกเตอร์เลื่อน (sector slipping) ตวั อย่างเช่น สมมุติว่าบล็อคทางตรรกะตาํ แหน่งที่ 17 เสีย และเซกเตอร์อะไหล่แรกท่ีใช้ไดอ้ ยู่ที่ 202 ดงั น้ันเซกเตอร์เลื่อนจะจบั ตาํ แหน่งใหม่จาก 17 ไปถึง 202โดยเคลื่อนตาํ แหน่งท้งั หมดลงหน่ึงจุด คือ เซกเตอร์ 202 จะถูกใชเ้ ป็ นอะไหล่ ดงั น้นั เซกเตอร์ 201จะถูกคดั ลอกไป 202 และดงั น้นั 200 จะยา้ ยไป 201 ไปเร่ือย ๆ จนกระทง่ั เซกเตอร์ 18 ถูกคดั ลอกลงเซกเตอร์ 19 การเลื่อนเซกเตอร์ดว้ ยวิธีน้ีทาํ ใหพ้ ้ืนท่ีของเซกเตอร์ 18 ว่าง ดงั น้นั เซกเตอร์ 17 สามารถถูกจบั คู่ไปตรงตาํ แหน่งน้นั แทนได้ การแทนที่ของบล็อคเสียโดยทวั่ ไปยงั ไม่เป็ นกระบวนการอย่างอตั โนมตั ิซะทีเดียว เพราะขอ้ มูลใน บลอ็ คเสียมกั จะเสียไป ดงั น้นั แฟ้มขอ้ มูลที่ใชง้ านบลอ็ คน้นั ตอ้ งถูกซ่อมแซม (เช่น การกู้คืนจาก backup เทป) โดยตอ้ งการใหค้ นเป็นผแู้ กไ้ ข4.3.2 การรับส่งข้อมูลของอุปกรณ์สํารองข้อมูล เม่ือโปรแกรมตอ้ งการส่งขอ้ มูลใหอ้ ุปกรณ์ต่างๆ ขอ้ มูลท่ีถูกส่งจะถูกเกบ็ ไวใ้ นหน่วยความจาํ (เป็นหน่วยความจาํ ท่ีถูกครอบครองโดยโปรเซส) การส่งจะกระทาํ โดยซีพยี เู ป็นผดู้ ึงขอ้ มูลมาจากหน่วยความจาํ ส่วนน้ี จากน้นั โปรเซสจึงนาํ ขอ้ มูลไปใชไ้ ด้ วธิ ีการรับส่งขอ้ มูล ไดอ้ ธิบายไวแ้ ลว้ ในบทที่ 1 ซ่ึงมีอยู่ 3 วิธี คือ - การพอลล่ิง - การอินเตอร์รัพต์
217 ระบบปฏิบตั ิการ - เมลบอ็ กซ์ท้งั 3 วิธีการรับส่งขอ้ มูลตอ้ งผา่ นซีพียดู งั ในรูป 4.27 ขอ้ มลู เขา้ CPU I/O ขอ้ มลู ออก หน่วยความจาํ รูปที่ 4.27 การรับส่งข้อมูลแบบธรรมดา การรับส่งขอ้ มูลแบบน้ีเป็ นไปไดช้ ้าและเปลืองเวลาของซีพียู ดงั น้ันถา้ เราสามารถรับส่งขอ้ มูลไดโ้ ดยไม่ตอ้ งผ่านซีพียูก็จะทาํ ให้การรับส่งขอ้ มูลเร็วข้ึน และยงั สามารถใชซ้ ีพียูสาํ หรับรันโพรเซสเซอร์อ่ืนไดต้ ่อไป วิธีการเช่นน้ีเรียกว่า การทาํ DMA (direct memory access) ดงั แสดงในรูปที่ 4.28 CPU I/O หน่วยความจาํ รูปที่ 4.28 การส่งข้อมูลแบบ DMA การรับส่งขอ้ มูลแบบ DMA จาํ เป็นตอ้ งอาศยั แชนเนลหรือตวั ควบคุม DMA (DMAcontroller) แชนเนลจะทาํ หนา้ ท่ีแทนซีพยี เู มื่อตอ้ งการรับส่งขอ้ มูลแบบ DMA แชนเนลจะส่งสญั ญาณไปบอกใหซ้ ีพยี รู ับรู้ ซีพยี จู ะสงั่ ใหแ้ ชนแนลทาํ รูทีนควบคุมการส่งขอ้ มูลจากน้นั ซีพยี จู ะไปทาํ งานอ่ืน และเม่ือการทาํ DMA เสร็จสิ้น แชนเนลจะส่งสญั ญาณบอกใหซ้ ีพยี รู ับรู้อีกคร้ังวา่ การทาํ DMA เสร็จสิ้นลงแลว้
การจดั การขอ้ มูล 218 ในขณะที่ซีพียรู ันงานอ่นื อยแู่ ละมีการทาํ DMA เกิดข้ึนพร้อมกนั ดว้ ย การทาํ งานของDMA ไม่ไดเ้ กิดข้ึนตลอดเวลา ในช่วงเวลารับส่งขอ้ มูลระหว่างหน่วยความจาํ กบั แชนแนลแชนแนลจาํ เป็นตอ้ งใชบ้ สั ขอ้ มูลและบสั แอดเดรสของหน่วยความจาํ ซีพยี เู องกจ็ าํ เป็นตอ้ งใชบ้ สั ท้งัสองดว้ ยเช่นกนั ดงั น้นั DMA จะเกิดข้ึนในช่วงเวลาท่ีซีพียกู าํ ลงั คาํ นวณฟังกช์ นั่ ทางคณิตศาสตร์ซ่ึงไม่จาํ เป็นตอ้ งดึงขอ้ มูลจากหน่วยความจาํ ไปใช้ ในช่วงเวลาน้ี บสั ขอ้ มูลและบสั แอดเดรสไม่ถูกใชง้ านโดยซีพียู ดงั น้นั การทาํ DMA จึงนาํ เนินไปได้ ถา้ เม่ือใดซีพียตู อ้ งการใชห้ น่วยความจาํDMA จะตอ้ งหยดุ ลงชวั่ คราวจนกวา่ ซีพยี จู ะหยดุ ใชห้ น่วยความจาํ DMA จึงทาํ งานต่อได้ ลกั ษณะที่ DMA ใชบ้ สั ท้งั 2 ในขณะท่ีซีพยี ไู ม่ใชเ้ รียกวา่ การขโมยรอบเวลา (cycle stealing) ดงั แสดงในรูปท่ี 4.29CPU ทาํ งานCPU ใชบ้ สัDMA ทาํ งาน เวลา รูปที่ 4.29 ช่วงเวลาการทาํ งานของ DMA4.3.2.1 มลั ตเิ พลิ้ พาธ หน่วยควบคุมอุปกรณ์ (CU) ซ่ึงอุปกรณ์แต่ละชนิดตอ้ งมี CU ของตวั เอง CU หน่ึงตวัสามารถควบคุมอุปกรณ์ไดห้ ลายตวั CU เหล่าน้ีอยภู่ ายใตก้ ารควบคุมของโพรเซสเซอร์ที่เรียกว่าแชนเนล แชนเนลกส็ ามารถควบคุม CU ไดห้ ลายๆ ตวั เช่นกนั ดงั แสดงในรูปที่ 4.30
219 ระบบปฏิบตั ิการ Channel A Control Unit อปุ กรณ์ X1 อุปกรณ์ X2CPU 1 อปุ กรณ์ Y1 Control Unit 2Channel B Control Unit 3 อปุ กรณ์ Z3 อปุ กรณ์ Z1 อุปกรณ์ Z2 รูปท่ี 4.30 การตดิ ต่อระหว่าง อุปกรณ์กบั ซีพยี ู ในรูปท่ี 4.30 การติดต่อกบั อุปกรณ์ X1 ตอ้ งผา่ นแชนเนล A และ CU1 ซ่ึงลกั ษณะน้ีเป็นการติดต่อแบบพาธเดี่ยว (single path) คือซีพียไู ม่สามารถติดต่ออุปกรณ์ X1 ผา่ นทางเสน้ ทางอ่ืนได้ เช่น ไม่สามารถติดต่อ X1 ผา่ นแชนเนล B หรือ CU2 จะเห็นว่าลกั ษณะพาธเด่ียวน้ีมีขอ้ เสียคือ ถา้ แชนเนล A หรือ CU1 เกิดเสียหาย ทาํ งานไม่ได้ ซีพยี จู ะไม่สามารถติดต่อกบั อุปกรณ์ X1และ X2 ไดเ้ ลย เพ่อื แกไ้ ขปัญหาในลกั ษณะน้ี เราสามารถออกแบบการติดต่อเสียใหม่ใหเ้ ป็นมลั ติเพิล้ พาธ(multiple path) กล่าวคือ ซีพียู สามารถติดต่อกบั อุปกรณ์ต่างๆ ไดห้ ลายเสน้ ทาง เช่น ในรูปท่ี4.31 Channel A Control Unit 1 อุปกรณ์ XCPU Channel B Control Unit 2 อุปกรณ์ Yรูปที่ 4.31 ตวั อย่างโครงสร้างแบบมลั ตเิ พลิ้ พาธ MULTIPLE PATH
การจดั การขอ้ มูล 220ในลกั ษณะเช่นน้ีซีพียกู บั อุปกรณ์ X , Y สามารถติดต่อกนั ไดห้ ลายทางดงั น้ี 1. ซีพยี ู - แชนเนล A - CU1 - อุปกรณ์ X 2. ซีพียู - แชนเนล A - CU2 - อุปกรณ์ X 3. ซีพียู - แชนเนล B - CU1 - อุปกรณ์ X 4. ซีพียู - แชนเนล B - CU2 - อุปกรณ์ X 5. ซีพียู - แชนเนล A - CU1 - อุปกรณ์ Y 6. ซีพียู - แชนเนล A - CU2 - อุปกรณ์ Y 7. ซีพียู - แชนเนล A - CU1 - อุปกรณ์ Y 8. ซีพียู - แชนเนล A - CU2 - อุปกรณ์ Y จะเห็นวา่ ซีพยี ตู ิดต่อกบั อุปกรณ์ X และ Y ไดถ้ ึง 4 ทาง มลั ติเพลิ้ พาธทาํ ใหร้ ะบบมีความน่าเชื่อถือ (reliability) สูงข้ึน กล่าวคือ สมมติวา่ แชนเนล A เสียหายไม่สามารถทาํ งานไดซ้ ีพียูสามารถติดต่อกบั อุปกรณ์ X และ Y ผา่ นทางแชนเนล B ได้ การใชโ้ ครงสร้างแบบมลั ติเพิล้ พาธน้ี ถา้ เราใหแ้ ชนเนลทุกตวั ติดต่อกบั CU ไดห้ มดระบบกจ็ ะมีความคล่องตวั สูงสุด แต่วา่ เราจะไม่ค่อยพบเห็นโครงสร้างเช่นน้ี ท้งั น้ีเพราะเสียค่าใชจ้ ่ายสูงมาก ในแง่ของตวั อุปกรณ์อปุ กรณ์กค็ วรติดต่อกบั CU ไดห้ ลายตวั เพอ่ื ใหเ้ กิดความคล่องตวั ในการทาํ งาน แต่อยา่ ลืมวา่ CU แต่ละตวัควบคุมอุปกรณ์ไดเ้ พยี งชนิดเดียวเท่าน้นั ดงั น้นั ในกรณีของรูปที่ 9.9 อุปกรณ์ X และ Y ตอ้ งเป็นอุปกรณ์ชนิดเดียวกนั CU1 และ CU2 กต็ อ้ งเป็นตวั ควบคุมอุปกรณ์ชนิดเดียวกนั4.3.2.2 การจดั การดสิ ก์แผน่ ดิสกเ์ ป็นอุปกรณ์ท่ีใชเ้ กบ็ ขอ้ มูลต่างๆ คลา้ ยๆ กบั หนงั สือเล่มหน่ึง หนงั สือแต่ละเล่มมีการจดั รูปแบบต่างกนั ไปข้ึนอยกู่ บั ผพู้ ิมพเ์ ช่นในหนา้ หน่ึงๆ กาํ หนดใหม้ ี 2 คอลมั น์ 28 บรรทดัเหมือนกนั ทุกหนา้ ดิสกก์ เ็ ช่นกนั มีการจดั รูปแบบการเกบ็ ในลกั ษณะของวงรอบ (cylinder) แทร็ก(track) และเซกเตอร์ (sector) โดยจาํ นวนวงรอบ แทร็ก และเซกเตอร์น้ี CS เป็นผกู้ าํ หนดตวั อยา่ งการจดั รูปแบบการเกบ็ ขอ้ มูลของดิสกบ์ นเครื่อง IBM PC โดย MS - DOS มีดงั น้ีจาํ นวนวงรอบ = 40จาํ นวนแทร็กต่อวงรอบ =2จาํ นวนเซกเตอร์ต่อแทร็ก = 9จาํ นวนไบตต์ ่อเซกเตอร์ = 512ดงั แสดงในรูปท่ี 4.32
221 ระบบปฏิบตั ิการ Sector 7 Sector 6 Sector 5Sector 8 Sector 4Tracks 0 1 2 3 4 39Sector 1 Sector 2 Sector 3 รูปที่ 4.32 แสดงการจดั แทร็กและเซกเตอร์บนแผ่นดสิ ก์ของ MS – DOS คาํ วา่ วงรอบ น้นั จะหมายถึง แทร็กทุกแทร็กที่อยใู่ นแนวเดียวกนั ในดิสกไ์ ดร์ฟบางตวั ของเครื่องคอมพิวเตอร์ระบบใหญ่ จะมีแผ่นดิสกห์ ลายแผน่ วางขนานกนั อยบู่ นแกนหมุนแกนเดียวกนัดิสกท์ ุกแผน่ จะมีการแบ่งแทร็กเหมือนกนั แทร็กท่ีอยใู่ นแนวเดียวกนั ก็คือ อยู่บนวงรอบเดียวกนัเช่น แทร็ก 00 ของทุกแผน่ คืออีก 1 วงรอบและต่อๆ ไปเป็นตน้ ดิสก์ไดร์ฟจะมีหัวอ่านเขียน (หรือเรียกส้ันๆ ว่าหัวอ่าน) ซ่ึงทาํ หน้าที่บันทึกขอ้ มูลลงแผ่นดิสก์หรืออ่านขอ้ มูลจากแผ่นดิสก์ข้ึนมา หัวอ่านน้ีจะเลือนเขา้ -ออก ในแนวต้งั ฉากกบั จุดศูนยก์ ลางการหมุนของแผ่นดิสก์ เมื่อมีการเขา้ ถึงขอ้ มูล แผ่นดิสก์จะหมุนรอบแกนหมุนด้วยความเร็วรอบค่าหน่ึง แกนหวั อา่ นจะเลือนไปมาเพอื่ ทาํ การอา่ นหรือเขียนขอ้ มูล ดงั ในรูปที่ 4.33
การจดั การขอ้ มูล 222 แผน่ ดิสก์ทศิ ทางการหมุน หวั อ่านเขียน แกนหมนุ ทศิ ทางของการเคลื่อนไหว ของหัวอ่านเขียนรูปที่ 4.33 การทาํ งานของตวั ขบั ดสิ ก์ เวลาในการเขา้ ถึงขอ้ มูล (access time) สาํ หรับดิสกป์ ระกอบดว้ ย 3 ส่วน คือ 1. เวลาแสวงหา (seek time) คือ ช่วงเวลาท่ีหวั อา่ นเล่ือนจากแทร็กท่ีอยใู่ นขณะน้นั ไปอยู่เหนือแทร็กท่ีตอ้ งการ 2. เวลาแฝง (latency time) คือ ช่วงเวลาที่แผน่ ดิสกห์ มุนตวั เองจนกระทงั่ แซกเตอร์ที่ตอ้ งการอยใู่ ตห้ วั อ่าน 3. เวลาถ่านเทขอ้ มูล (transmission time) คือช่วงเวลาที่หวั อ่านอ่านขอ้ มูล หรือเขียนขอ้ มูลลงบนแผน่ ดิสก์Transmisssion Seek time time Latency timeรูปที่ 4.34 เวลาของการเข้าถงึ ข้อมูล
223 ระบบปฏิบตั ิการดงั น้นั เวลาในการเขา้ ถึงขอ้ มูล = เวลาแสวงหา + เวลาแฝง + เวลาถา่ ยขอ้ มูล โดยปกติ ดิสกจ์ ะหมุนดว้ ยความเร็วสูงทาํ ใหเ้ วลาแฝงมีค่านอ้ ยมากเม่ือเทียบกบั ส่วนอ่ืน จนบางคร้ังอาจตดั ทิ้งได้ สาํ หรับเวลาถ่ายเทขอ้ มูลจะข้ึนอยกู่ บั ปริมาณขอ้ มูลที่ตอ้ งการอ่านหรือเขียนและขอ้ ความเร็วของการส่งขอ้ มูล ซ่ึงค่าท้งั สองน้ีอยนู่ อกเหนือการควบคุมของ OS ดงั น้ันจึงมีเวลาเพียงเวลาแสวงหาเท่าน้ัน OS สามารถควบคุมไดบ้ า้ งบางส่วน เวลาในการเขา้ ถึงขอ้ มูลน้ีมีผลกระทบต่อการทาํ งานของระบบ ถา้ เวลาในการเขา้ ถึงน้อยลง การทาํ งานของระบบก็จะดีข้ึนทาํ งานไดเ้ ร็ว และไดป้ ริมาณงานเพิม่ ข้ึนในเวลาเท่าเดิม หนา้ ที่อีกประการหน่ึงของ OS ก็คือ พยายามลดเวลาในการเขา้ ถึงให้นอ้ ยที่สุดเท่าที่จะทาํได้ กลไกการจดั สรรดิสก์ (disk Scheduling) จะทาํ หนา้ ท่ีลดเวลาแสวงหาให้นอ้ ยท่ีสุดเท่าท่ีจะทาํได้ กลไกการจดั สรรดิสกม์ ีหลายแบบข้ึนอยกู่ บั ผอู้ อกแบบ OS จะเลือกใช้4.3.3.3 การจดั การเทป เทปเป็ นอุปกรณ์เก็บขอ้ มูลอีกชนิดหน่ึง ถึงแม้การทาํ งานจะช้าแต่ก็ยงั นิยมใช้กนั อยู่ในปัจจุบนั เพราะเทปมีราคาถูก การทาํ งานของเทปท่ีชา้ กเ็ น่ืองจากลกั ษณะการทาํ งานของตวั เทปเองการเขา้ ถึงขอ้ มูลเป็นแบบลาํ ดบั ตอ้ งอ่านขอ้ มูลข้ึนมาตรวจสอบทุกกลุ่มจนกวา่ จะพบขอ้ มูลท่ีตอ้ งการ เช่นเดียวกบั ดิสก์ OS เป็นผกู้ าํ หนดรูปแบบการเกบ็ ขอ้ มูลลงบนเทป เทปจะมีการจดั แบ่งการเกบ็ ขอ้ มูลเป็นแทร็ก (track) เรคคอร์ด (record) และบลอ็ ก (block) ดงั ตวั อยา่ งในรูปที่ 4.35Track record 0 GAP 1 2 3 45 6 7 8 1 Byte ช่องว่างระหวา่ งเรคคอร์ดก. การจดั แทร็กและเรคคอร์ดบนเทป
การจดั การขอ้ มูล 224 1 บลอ็ ก 1 บลอ็ ก1 เรคคอร์ด ช่องวา่ งระหวา่ งบลอ็ ก ข. การจดั บลอ็ กบนเทปรูปท่ี 4.36 การจัดวางข้อมูลเทป การแบ่งแทร็กจะแบ่งตามความยาวของเน้ือเทป ดงั ตวั อยา่ งในรูปที่ 4.36 โดยทว่ั ไปเทปจะแบ่งเป็น 9 แทร็ก สาํ หรับเกบ็ ขอ้ มูลขนาด 8 บิต การเกบ็ ขอ้ มูล 1 ไบต์ (8 บิต) จะเกบ็ ตามแนวขวางของเทป 1 บิทต่อ 1 แทร็ก แทร็กท่ีเหลือเป็นพาริต้ีบิต (parity bit) ไดต้ รวจสอบความผดิ พลาดของการเขียน-อ่าน หน่ึงเรคคอร์ดจะมีหลายไบต์ เช่น 512 ไบตต์ ่อเรคคอร์ด ระหวา่ งเรคคอร์ดจะมีเน้ือท่ีวา่ งเรียกวา่ ช่องวา่ งระหว่างเรคคอร์ด (inter-record gap) มีไวเ้ พอื่ แบ่งแยกแต่ละเรคคอร์ดออกจากกนั และไม่มีการเกบ็ ขอ้ มูลลงในช่องวา่ งน้ีดว้ ย หลายๆ เรคคอร์ดรวมเป็น 1บลอ็ ก และเช่นเดียวกนั ระหว่างบลอ็ กแต่ละบลอ็ กจะมีเน้ือที่วา่ งที่เรียกวา่ ช่องวา่ งระหวา่ งบลอ็ ก(inter-block gap) โดยทว่ั ไปช่องวา่ งระวา่ งบลอ็ กจะกวา้ งกวา่ ช่องระหว่างเรคคอร์ด4.3.3.4 การจดั การคยี ์บอร์ด คียบ์ อร์ดเป็นอุปกรณ์อินพตุ ประเภทท่ีมีการส่งขอ้ มูลเป็นสาย น้นั คือลาํ ดบั ของการส่งขอ้ มูลข้ึนอยกู่ บั ลาํ ดบั ของการกดคียแ์ ต่ละคีย์ การเรียงลาํ ดบั ผิดกจ็ ะเกิดความหมายผิดตาม ไปดว้ ย เช่นกด \"a\" และตามดว้ ย \"b\" จะเกิดลาํ ดบั ของขอ้ มูลเป็น \"a b\" ต่างกบั การกด \"b\" จะเกิดลาํ ดบั ของขอ้ มูลเป็น \"b a\" ดงั น้นั ลาํ ดบั ของขอ้ มูลจึงมีความสาํ คญั การจดั การคยี ์บอร์ดของ OS แบ่งได้เป็ น 2 โหมดคือ โหมดดบิ (raw mode) โหมดน้ีอาจเรียกไดว้ า่ เป็นการจดั การเชิงอกั ขระ (character enter) โดยมีลกั ษณะการจดั การเป็นดงั น้ี สมมติวา่ ผใู้ ชต้ ้งั ใจจะพิมพค์ าํ ว่า 'date' แต่เวลาพมิ พจ์ ริง ๆ พิมพผ์ ิดเป็น 'dste'ดงั น้นั เม่ือตอ้ งการแกไ้ ขตอ้ งกด backspace 3 คร้ัง เพือ่ ลบตวั อกั ษร 3 ตวั หลงั ออก) และกด 'a''e' ตามดว้ ย enter ตามลาํ ดบั ในลกั ษณะน้ีโปรแกรมของผใู้ ชจ้ าํ รับอกั ขระท้งั หมด 11 ตวั (รวมอกั ขระที่พิมพผ์ ดิ backspace และ enter)
225 ระบบปฏิบตั ิการ โหมดสุก (cook mode) โหมดน้ีอาจเรียกไดว้ ่าเป็ นการจดั การเชิงบรรทดั (line - orient) ลกั ษณะการส่งขอ้ มูลผ่านโหมดน้ีจะต่างกบั โหมดดิบเพียงเลก็ นอ้ ย ในกรณีตวั อยา่ งที่กล่าวไวโ้ หมดดิบ OS จะส่งอกั ขระให้โปรแกรมท้งั หมด 11 อกั ขระ แต่ถา้ เป็นโหมดสุก OS จะส่งเฉพาะอกั ขระท่ีถูกแกไ้ ขถูกตอ้ งแลว้เท่าน้นั นน่ั คือจะส่งเพียง date ไปให้ ใน OS บางตวั ผใู้ ชส้ ามารถเลือกโหมดการจดั การรับขอ้ มูลไดท้ ้งั 2 โหมด OS จะจองหน่วยความจาํ ไวส้ ่วนหน่ึงเพ่ือรับขอ้ มูลจากคียบ์ อร์ด ก่อนที่จะส่งให้โปรแกรมต่างๆ เอาไปใช้ หน่วยความจาํ ส่วนน้ีเรียกว่า บฟั เฟอร์ (buffer) ในกรณีของโหมดสุกอกั ขระท่ีถูกส่งเข้าถูกส่งเข้ามาเก็บในบัฟเฟอร์น้ีก่อน ถา้ ผูใ้ ช้ก่อนแก้ไขก็จะเกิดการแก้ไขข้อมูลท่ีเก็บในบฟั เฟอร์ จนกระทง่ั เม่ือผูใ้ ชก้ ดแป้น enter ขอ้ มูลหรือกลุ่มของอกั ขระที่ผูใ้ ช้แกไ้ ขแลว้ จะถูกส่งอกั ขระใหโ้ ปรแกรมของผใู้ ชไ้ ดท้ นั ทีไม่ตอ้ งเก็บลงบฟั เฟอร์ แต่ถา้ โปรแกรมของผใู้ ชย้ งั ไม่พร้อมที่จะอินพุตจากผูใ้ ช้ ในกรณีน้ีอกั ขระต่างๆ ที่ผูใ้ ชค้ ียไ์ วจ้ ะถูกเก็บลงบฟั เฟอร์ และจะถูกส่งให้เมื่อโปรแกรมของผใู้ ชพ้ ร้อมท่ีจะรับขอ้ มูล การจะสรรบฟั เฟอร์ของคียบ์ อร์ด แบ่งไดเ้ ป็น 2 วิธีท่ีนิยมใชก้ นั วิธีแรก OS จะมีบฟั เฟอร์ขนาดเลก็ ๆ หลายๆ ตวั เช่น มีขนาด 10 ไบต์ รวมกนั เป็นกลุ่มเรียกวา่ กลุ่มบฟั เฟอร์กลาง เม่ือผใู้ ช้ป้อนขอ้ มูลเขา้ มาทางคียบ์ อร์ด OS จะนาํ ขอ้ มูลต่างๆ เกบ็ ลงในบฟั เฟอร์ 1 ตวั จากกลุ่มบฟั เฟอร์ 1ตวั เกบ็ ขอ้ มูลไดไ้ ม่หมด เป็นตน้ วา่ ผใู้ ชป้ ้อนขอ้ มูลเขา้ มา 48 อกั ขระ OS กจ็ ะยกบฟั เฟอร์ใหผ้ ใู้ ช้5 ตวั จากบฟั เฟอร์กลาง 5 ตวั เกบ็ ได้ 50 อกั ขระ) เม่ือขอ้ มูลเหล่าน้ีถูกส่งไปใหโ้ ปรแกรม คือนาํ ไปใชง้ าน บฟั เฟอร์ท้งั 5 ตวั น้ีจะถูกส่งใหก้ บั กลุ่มบฟั เฟอร์กลาง วิธีทาํ งาน OS กาํ หนดบัฟเฟอร์ให้กับผูใ้ ช้แต่ละคนไปเลยไม่ยุ่งเก่ียวกนั และไม่มีกลุ่มบฟั เฟอร์กลาง เน่ืองจากว่าในบางคร้ังผูใ้ ชต้ อ้ งป้อนขอ้ มูลเขา้ มาเป็นจาํ นวนมาก ดงั น้นั บฟั เฟอร์สาํ หรับผูใ้ ชแ้ ต่ละคนควรมีขนาดโตพอสมควรเช่นมีขนาด 200 ไบต์ สมมติระบบคอมพิวเตอร์มีเทอร์มินลั อยู่ 100 เครื่อง น่ันคือสามารถมีผูใ้ ช้เคร่ืองมือได้ 100 คนในเวลาเดียวกนั ในกรณีน้ีระบบจะตอ้ งเสียหน่วยความจาํ เพ่ือทาํ บฟั เฟอร์ไปถึง 20,000 (200*100) ไบต์ ในขณะท่ีเราใชว้ ิธีแรกบฟั เฟอร์ขนาด 5,000 ไบตก์ พ็ ยี งพอแลว้ ในขณะกดคียแ์ ต่ละคีย์ คียบ์ อร์ดอาจไม่ไดส้ ่งรหสั แอสก้ี ไปให้ OS โดยตรง แต่ส่งรหสั คีย์(key code) ไปใหแ้ ทน ในลกั ษณะน้ี OS ตอ้ งมีหนา้ ท่ีแปลงรหสั คียท์ ่ีถูกส่งเขา้ มาใหเ้ ป็นรหสั แอสก้ีของคียน์ ้นั ๆ เช่นเม่ือผใู้ หก้ ดแป้น 'a' ซ่ึง OS จะมีตารางการแปลงรหสั เกบ็ เอาไวก้ ารทาํ เช่นน้ีทาํให้เพ่ิมความยืดหยุ่นในการใชง้ าน กล่าวคือผูใ้ ชส้ ามารถเปลี่ยนแปลงแป้นต่างๆ บนคียบ์ อร์ดให้เป็นอกั ขระท่ีตอ้ งการได้ โดยไปเปลี่ยนค่าในตารางแปลงรหสั เท่าน้นั ในเชิงกรรกแลว้ คียบ์ อร์ดและจอภาพเป็ นอุปกรณ์ต่างชนิดกนั แต่เมื่อผูใ้ ชก้ ดคียใ์ ดๆ หรือป้อนข้อมูลเข้ามาให้คอมพิวเตอร์ ผูใ้ ช้ย่อมตอ้ งการจะเห็นส่ิงท่ีเขาป้อนถูกแสดงบนจอภาพ
การจดั การขอ้ มูล 226เทอร์มินลั บางชนิดจะแสดงสิ่งต่างๆ ท่ีผใู้ ชป้ ้อนเขา้ มาออกทางจอภาพโดยอตั โนมตั ิ (ใชฮ้ าร์ดแวร์)ซ่ึงจะไม่เหมาะสมกบั กรณีที่มีการป้อนรหัสลบั เพราะรหัสลบั จะถูกแสดงออก บนจอภาพดว้ ยเช่นกนั และนอกจากน้ียงั อาจมีปัญหากบั โปรแกรมต่างๆ ดว้ ย แต่โชคดีที่เทอร์มินลั ส่วนใหญ่ของคุณสมบัติเช่นน้ัน ดงั น้ันจึงเป็ นหน้าที่ของซอฟต์แวร์ท่ีจะจัดการแทนการทาํ เช่นน้ีเรียกว่าการสะท้อน (echoing) ซ่ึง OS ก็อาํ นวยความสะดวกในเรื่องน้ีด้วย แต่ถ้าผูใ้ ช้ไม่ต้องการใช้กบัสะทอ้ นท่ีกระทาํ โดย OS ผูใ้ ชก้ ็สามารถเขียนโปรแกรมจดั การเองก็ได้ เช่น โปรแกรมคียต์ ่างๆจะจดั การเรื่องการสะทอ้ นเอง4.3.4 อธิบายการใช้งานอปุ กรณ์แบบเสตป็ เปิ ล(Stable-Storage Implement) โดยนิยามแลว้ ขอ้ มูลท่ีอยู่ในหน่วยเก็บขอ้ มูลชนิดคงที่จะไม่มีทางสูญหายไปไหน การนาํหน่วยเกบ็ ขอ้ มูลไปใช้ เราจาํ เป็นตอ้ งคดั ลอกขอ้ มูลที่ตอ้ งการไปไวย้ งั อุปกรณ์ที่ใชเ้ กบ็ ขอ้ มูลหลาย ๆท่ี (อาจเกบ็ ในดิสกด์ ว้ ย ในเทปดว้ ย) ดว้ ยโหมดท่ีเป็นอิสระจากความลม้ เหลว เราตอ้ งการวิธีที่จะทาํใหข้ อ้ มูลทนั สมยั (update) ท่ีรับประกนั ไดว้ ่า ความผิดพลาดในระหว่างการทาํ ขอ้ มูลใหท้ นั สมยั จะไม่ทาํ ใหข้ อ้ มูลเสียหาย และเมื่อเราทาํ การกูค้ ืนจากท่ีผิดพลาด เราตอ้ งสามารถทาํ ใหข้ อ้ มูลท้งั หมดมีค่าท่ีถูกตอ้ ง ถา้ เกิดมีการลม้ เหลวอีกในระหว่างการกคู้ ืน เราจะตอ้ งทาํ อยา่ งไรดิสกจ์ ะทาํ งานจนไดผ้ ลลพั ธ์หน่ึงในสามขอ้ น้ี คือ สําเร็จอย่างสมบูรณ์แบบ (Successful completion) ขอ้ มูลถูกเขียนลงดิสกไ์ ดอ้ ยา่ ง ถูกตอ้ ง ล้มเหลวบางส่ วน (Partial failure) ความล้มเหลวเกิดข้ึนระหว่างการโอนยา้ ย ขอ้ มูล ดงั น้นั เซกเตอร์บางส่วนจะถูกเขียนดว้ ยขอ้ มูลใหม่ และเซกเตอร์ที่ถูกเขียน ในระหวา่ งการลม้ เหลวอาจจะผดิ พลาด ล้มเหลวท้งั หมด (Total failure) ความลม้ เหลวเกิดข้ึน ก่อนท่ีดิสกจ์ ะเร่ิมเขียน ดงั น้นั ค่าของขอ้ มูลบนดิสกก์ จ็ ะเหมือนเดิมก่อนท่ีจะเกิดการเขียนใด ๆถา้ ความลม้ เหลวเกิดในระหว่างการเขียนบล็อค เม่ือระบบตรวจพบแลว้ จะทาํ การกูบ้ ล็อคน้นั คืนระบบตอ้ งเกบ็ บลอ็ คทางกายภาพ 2 บลอ็ ก ไวใ้ หบ้ ลอ็ คทางตรรกะแต่ละบลอ็ ค ผลลพั ธ์ท่ีไดม้ ีดงั น้ี 1. เขียนขอ้ มูลลงบนบลอ็ คทางกายภาพบลอ็ คแรก 2. เมื่อเขียนบลอ็ คแรกเรียบร้อย กเ็ ขียนขอ้ มูลเดียวกนั ลงยงั บลอ็ คทางกายภาพอีกบลอ็ ค 3. ประกาศวา่ การทาํ งานเสร็จสิ้นหลงั จากการเขียนบลอ็ คท่ีสองสาํ เร็จเท่าน้นั (ถา้ เขียนไม่ สาํ เร็จจะไม่ประกาศ)ในระหวา่ งการกรู้ ะบบจากความลม้ เหลว บลอ็ คทางกายภาพแต่ละคู่จะถูกทดสอบ ถา้ ท้งั 2 บลอ็ กเหมือนกนั และไม่มีการพบขอ้ ผดิ พลาด กไ็ ม่ตอ้ งทาํ อะไร ถา้ มีบลอ็ คหน่ึงพบวา่ มีขอ้ ผดิ พลาด เราจะแทนที่เน้ือหาในบลอ็ คน้นั ดว้ ยขอ้ มูลของอีกบลอ็ คหน่ึง ถา้ ท้งั สองบลอ็ คไม่พบขอ้ ผดิ พลาด แต่
227 ระบบปฏิบตั ิการเน้ือหาต่างกนั เราจะเอาเน้ือหาของบลอ็ คที่สองเขา้ ไปเกบ็ แทนที่ในบลอ็ คที่หน่ึง กระบวนการในการกคู้ ืนน้ีประกนั ไดว้ า่ การเขียนหน่วยเกบ็ ขอ้ มูลชนิดคงตอ้ งเสร็จสมบรู ณ์หรือไม่ผลลพั ธ์ท่ีไดต้ อ้ งไม่เปล่ียนแปลง
Search
Read the Text Version
- 1 - 50
Pages: