os_filesystem - ระบบไฟล์เสมือน (C ++)
การแนะนำ
นี่คือระบบไฟล์เสมือนจริงที่เลียนแบบ Linux ระบบโฮสต์โดยไฟล์ดิสก์เสมือน มันจำลองการอ่านและการเขียนดิสก์ด้วยการอ่านไฟล์และการเขียนโดยไม่เกี่ยวข้องกับไดรเวอร์พื้นฐาน
ในการเขียนระบบไฟล์ Linux เลียนแบบอย่างง่ายคุณต้องออกแบบเฟรมเวิร์กพื้นฐานที่มี inode, block, superblock, เค้าโครงดิสก์เสมือน, การจัดสรรพื้นที่และข้อมูลอื่น ๆ จุดเริ่มต้นของระบบไฟล์คือ superblock ที่มีข้อมูลสำคัญเกี่ยวกับระบบรวมถึงจำนวนและขนาดของ inode และบล็อก สำหรับ Inode โดยทั่วไปจะต้องใช้พื้นที่ดิสก์หนึ่งเปอร์เซ็นต์ แต่นี่เป็นระบบขนาดเล็กที่มีขนาดทั้งหมดเพียง 5 เมตรดังนั้นจึงมีพื้นที่น้อยมากที่จัดสรรให้กับพื้นที่ Inode และพื้นที่ส่วนใหญ่ที่เหลือคือพื้นที่บล็อก
แผนโดยรวมสำหรับระบบไฟล์นี้มีดังนี้:

เนื่องจากเวลานั้นแน่นเมื่อเขียนโปรแกรมฉันเขียนมันเป็นเวลา 4 วันก่อนที่จะยอมรับดังนั้นรหัสจึงไม่มีเวลาที่จะปรับให้เหมาะสมและบางสถานที่จะปรากฏซ้ำซ้อนดังนั้นอย่าแปลกใจ
แม้ว่าเวลาจะมี จำกัด แต่ก็ใช้ฟังก์ชั่นของตัวแก้ไข VI การเขียนนั้นค่อนข้างง่ายและรหัสยุ่งมาก หากคุณมีเวลาปรับปรุง
โดยทั่วไปรหัสยังคงต้องได้รับการปรับให้เหมาะสม ยินดีต้อนรับเพื่อให้คำแนะนำเพิ่มเติมและค้นหาความผิดพลาดเพิ่มเติม
วิธีใช้
ขั้นตอนที่ 1: ดาวน์โหลดโครงการ
git clone https://github.com/windcode/os_filesystem.git
ขั้นตอนที่ 2: เปิดโครงการด้วย VC ++ 6.0
คลิกสองครั้งที่ไฟล์ Mingos.dsw ในไดเรกทอรีหรือลากไฟล์ไปยังอินเตอร์เฟส VC ++ 6.0
ขั้นตอนที่ 3: คอมไพล์ลิงก์เรียกใช้

หรือ
ขั้นตอนที่ 1: เรียกใช้ไฟล์ mingos.exe โดยตรงในโฟลเดอร์ /debug
ลักษณะ
- การเรียกใช้ก่อนสร้างไฟล์ดิสก์เสมือนจริง

ผู้ใช้เริ่มต้นคือรูทและรหัสผ่านคือรูท

- คำสั่งช่วยเหลือ (ช่วยเหลือ)

- ผู้ใช้เพิ่มลบเข้าสู่ระบบออกจากระบบ (USERADD, USERDEL, ออกจากระบบ)

- แก้ไขสิทธิ์ไฟล์หรือไดเรกทอรี (CHMOD)

- การเขียนและอ่านถูก จำกัด โดยการอนุญาต

- เพิ่มและลบไฟล์/โฟลเดอร์ (Touch, RM, MKDIR, RMDIR)

- ดูข้อมูลระบบ (super, inode, block)

- เลียนแบบตัวแก้ไขข้อความ VI (VI)

Inode จัดการข้อมูลไฟล์และไดเรกทอรี
ใช้ วิธีการเชื่อมโยงกลุ่ม เพื่อจัดการการจัดสรรบล็อกที่ไม่ได้ใช้งาน
- กระบวนการจัดสรรบล็อก: เมื่อจำเป็นต้องจัดสรรบล็อกด้านบนของสแต็กบล็อกฟรีจะนำที่อยู่บล็อกที่ไม่ได้ใช้งานออกเป็นบล็อกที่จัดสรรใหม่ เมื่อสแต็กว่างเปล่าสแต็กในบล็อกฟรีที่แสดงโดยที่อยู่สแต็กด้านล่างจะใช้เป็นสแต็กบล็อกฟรีใหม่
- กระบวนการรีไซเคิลบล็อก: เมื่อรีไซเคิลบล็อกให้ตรวจสอบว่าสแต็กเต็มหรือไม่ หากไม่พอใจตัวชี้สแต็กปัจจุบันจะถูกเลื่อนขึ้นและที่อยู่บล็อกที่จะรีไซเคิลจะถูกวางไว้ที่ด้านบนของสแต็กใหม่ หากสแต็กเต็มบล็อกที่จะรีไซเคิลจะถูกใช้เป็นสแต็กบล็อกฟรีใหม่และที่อยู่องค์ประกอบด้านล่างของสแต็กบล็อกฟรีนี้ถูกตั้งค่าเป็นสแต็กบล็อกฟรีตอนนี้
- บล็อกบิตแมปและ SuperBlock จำเป็นต้องได้รับการอัปเดตในขณะที่จัดสรรและรีไซเคิล
การกระจาย/การรีไซเคิล inode
- การจัดสรรและการรีไซเคิลของ inode นั้นค่อนข้างง่ายและมีการนำการจัดสรรและการรีไซเคิลมาใช้ตามลำดับ
- เมื่อต้องการการจัดสรรให้ค้นหา inode ที่ไม่ได้ใช้งานจากบิตแมป inode ตามลำดับและค้นหาหมายเลขที่ส่งคืน inode ได้สำเร็จ
- เมื่อรีไซเคิลเพียงแค่อัปเดต inode bitmap
- ทั้งการจัดสรรและการรีไซเคิลจำเป็นต้องมีการอัปเดตบิตแมป Inode
สังเกต
- สภาพแวดล้อมการทำงานคือ VC ++ 6.0