الوحدة 12: إدارة الملفات

File Management

📚 استنادًا إلى الفصل الثاني عشر من كتاب: Operating Systems: Internals and Design Principles – William Stallings – الإصدار التاسع

أهداف الوحدة

  • فهم المفاهيم الأساسية لإدارة الملفات داخل نظام التشغيل.
  • التعرّف على أساليب تنظيم الملفات وطرق الوصول إليها.
  • تحليل الهياكل المستخدمة في أدلة الملفات وأنظمة الملفات.
  • التعرف على نظم إدارة الملفات في Unix، Linux، Windows، Android.
  • فهم آليات مشاركة الملفات وتخزينها على الوسائط الثانوية.
  • استيعاب دور حجب السجلات (Record Blocking) في تحسين أداء I/O.

1️⃣ نظرة عامة على نظام إدارة الملفات (File Management System)

يُعد نظام إدارة الملفات (File Management System) جزءًا حيويًا من نظام التشغيل، فهو المسؤول عن تنظيم، تخزين، استرجاع، وحماية البيانات على وسائط التخزين الثانوية (مثل الأقراص الصلبة، أقراص SSD، USB Drives). يُنظر إلى الملفات ككيانات منطقية من قبل المستخدمين والتطبيقات، بينما يتولى نظام التشغيل مهمة ترجمة هذه الكيانات إلى مواقع فيزيائية على الجهاز التخزيني.

تعريف الملف:

في سياق أنظمة التشغيل، الملف هو مجموعة مسماة من البيانات ذات الصلة، تُخزن كوحدة واحدة على وسائط التخزين الثانوية. يمكن أن يمثل الملف:

  • البرامج (Programs): مثل الملفات التنفيذية (executables) أو الشيفرة المصدرية (source code).
  • الوثائق (Documents): مثل ملفات النصوص، جداول البيانات، أو العروض التقديمية.
  • البيانات (Data): مثل الصور، مقاطع الفيديو، الملفات الصوتية، أو قواعد البيانات.
  • ملفات النظام (System Files): التي تُستخدم بواسطة نظام التشغيل نفسه.

💡 ملاحظة: الملف هو تجريد (Abstraction) يُقدمه نظام التشغيل للمستخدم. فبدلاً من التعامل مع الأقراص ككتل من البايتات، يتعامل المستخدمون مع أسماء ملفات ومجلدات مألوفة.

🔸 مسؤوليات نظام إدارة الملفات الرئيسية:

  • إنشاء وحذف الملفات (File Creation and Deletion): توفير واجهات برمجية (APIs) للمستخدمين والتطبيقات لإنشاء ملفات جديدة وتحديد خصائصها، وكذلك حذف الملفات عند عدم الحاجة إليها.
  • القراءة والكتابة إلى الملفات (Reading and Writing Files): إدارة عمليات نقل البيانات بين الذاكرة الرئيسية والملفات المخزنة على القرص.
  • تنظيم وتحديد الوصول (Organization and Access Control): تنظيم الملفات في هياكل منطقية (مثل الأدلة/المجلدات) وتطبيق آليات التحكم في الوصول (Access Control) لضمان أن المستخدمين المصرح لهم فقط يمكنهم الوصول إلى الملفات بطرق محددة (قراءة، كتابة، تنفيذ).
  • حفظ البيانات واستعادتها (Data Preservation and Recovery): ضمان سلامة البيانات المخزنة على المدى الطويل، وتوفير آليات للاستعادة في حالة فشل النظام أو الأجهزة.
  • إدارة المساحة الحرة (Free Space Management): تتبع المساحات الفارغة على القرص وتخصيصها للملفات الجديدة، وتحريرها عند حذف الملفات.
  • توفير واجهة للمستخدم (User Interface): تقديم واجهة سهلة الاستخدام للمستخدمين للتفاعل مع الملفات (مثل File Explorer في Windows أو أوامر shell في Linux).

📘 مرجع إثرائي: File Systems – OSDev Wiki


2️⃣ تنظيم الملفات وطرق الوصول (File Organization and Access Methods)

لتحقيق الكفاءة في تخزين واسترجاع البيانات، يجب على نظام التشغيل تنظيم الملفات داخليًا بطرق معينة، وتوفير آليات للمستخدمين والتطبيقات للوصول إلى البيانات داخل هذه الملفات.

📍 أ. تنظيم الملفات (File Organization)

يشير تنظيم الملفات إلى كيفية ترتيب البيانات المنطقية داخل الملف على وسائط التخزين. هذا الترتيب يؤثر بشكل مباشر على السرعة التي يمكن بها قراءة وكتابة البيانات، ويجب أن يتناسب مع أنماط الاستخدام المتوقعة للملف.

  • متتالية (Sequential File Organization):
    • الوصف: تُخزن البيانات في الملف بشكل متسلسل، سجل بعد سجل. للوصول إلى سجل معين، يجب قراءة جميع السجلات التي تسبقه.
    • المزايا: بسيطة في التنفيذ، فعالة للقراءة المتسلسلة (مثل ملفات السجلات أو ملفات الفيديو).
    • العيوب: بطيئة جدًا للوصول العشوائي إلى سجلات محددة.
    • مثال: ملف نصي عادي، حيث تقرأ السطور بالترتيب.
  • عشوائية (Direct / Random File Organization):
    • الوصف: تُخزن البيانات بطريقة تسمح بالوصول المباشر إلى أي سجل في الملف باستخدام عنوانه النسبي (Relative Address) أو رقم السجل. لا يتطلب قراءة السجلات السابقة.
    • المزايا: سريعة جدًا للوصول العشوائي.
    • العيوب: قد تُسبب هدرًا في المساحة إذا كانت السجلات ذات أحجام مختلفة أو غير مُستخدمة بالكامل.
    • مثال: قواعد البيانات حيث تحتاج إلى الوصول إلى سجلات محددة بسرعة.
  • مؤشرية (Indexed File Organization):
    • الوصف: تُستخدم هذه الطريقة لدمج مزايا الوصول المتسلسل والعشوائي. يتم إنشاء جدول (فهرس) يحتوي على مؤشرات (Pointers) إلى مواقع السجلات الفعلية داخل الملف. للوصول إلى سجل، يتم البحث أولاً في الفهرس للعثور على موقعه، ثم يتم الوصول إليه مباشرة.
    • المزايا: توفر وصولاً عشوائيًا سريعًا، مع إمكانية الوصول المتسلسل.
    • العيوب: تتطلب مساحة إضافية لتخزين الفهرس، وقد تكون أكثر تعقيدًا في الإدارة.
    • مثال: أنظمة الملفات الحديثة (مثل NTFS و ext4) تستخدم هياكل فهرسة (مثل B-Trees) لتنظيم الملفات والمجلدات.

📍 ب. طرق الوصول (Access Methods)

تُشير طرق الوصول إلى الواجهة التي يوفرها نظام التشغيل للتطبيقات لقراءة وكتابة البيانات من الملفات.

النوع الوصف المثال الأكثر شيوعًا
Sequential Access (الوصول المتسلسل)

يتم قراءة أو كتابة البيانات في الملف بدءًا من البداية وبشكل متتالٍ. لا يمكن "القفز" إلى منتصف الملف مباشرة. إذا أردت قراءة السجل الخامس، يجب أن تقرأ السجلات الأربعة الأولى أولاً.

ملفات النصوص: عند قراءة ملف نصي من البداية إلى النهاية.

ملفات الصوت/الفيديو: عند تشغيل مقطع صوتي أو فيديو من البداية.

Direct Access (الوصول المباشر / العشوائي)

يمكن الوصول إلى أي سجل أو كتلة بيانات داخل الملف مباشرةً، دون الحاجة لقراءة السجلات التي تسبقها. يتم ذلك عادةً باستخدام رقم السجل أو عنوان الكتلة النسبية داخل الملف.

قواعد البيانات: عند البحث عن سجل معين في قاعدة بيانات ضخمة.

أنظمة الملفات: عند الوصول إلى كتلة بيانات محددة على القرص.

Indexed Access (الوصول المؤشر)

تُستخدم هذه الطريقة في الملفات المنظمة مؤشريًا. يتم البحث عن المفتاح المطلوب في الفهرس (الذي يكون عادةً منظمًا بطريقة تسرع البحث مثل B-Tree)، ثم يستخدم المؤشر الموجود في الفهرس للوصول مباشرة إلى السجل الفعلي في الملف.

أنظمة الملفات الحديثة: عند البحث عن ملف باسم معين في مجلد كبير.

قواعد البيانات: استخدام الفهارس لتسريع استعلامات البحث.


3️⃣ شجرات B-Trees في إدارة الملفات

تُعد هياكل البيانات الفعالة ضرورية لإدارة كميات هائلة من الملفات والمجلدات بكفاءة على وسائط التخزين. تُستخدم شجرات B-Trees (أو B-plus Trees) على نطاق واسع في أنظمة الملفات وقواعد البيانات لتنظيم الفهارس وتسريع عمليات البحث والوصول إلى البيانات.

ما هي شجرة B-Tree؟

شجرة B-Tree هي نوع من هياكل بيانات الشجرة المتوازنة (Self-Balancing Tree) المصممة خصيصًا لتخزين البيانات على وسائط التخزين الثانوية (مثل الأقراص الصلبة) التي تتطلب عمليات قراءة/كتابة كتلية (Block-oriented I/O). تتميز B-Trees بأنها:

  • متوازنة دائمًا: تضمن أن جميع الأوراق (Leaf Nodes) تكون على نفس العمق، مما يضمن أن وقت البحث عن أي عنصر يكون ثابتًا نسبيًا.
  • تُقلل من عمليات I/O: كل عقدة في B-Tree مصممة لتناسب حجم كتلة القرص (Disk Block). هذا يعني أن قراءة عقدة واحدة من القرص تجلب كمية كبيرة من البيانات (مفاتيح ومؤشرات)، مما يقلل بشكل كبير من عدد عمليات I/O المطلوبة للبحث عن ملف أو الوصول إليه.
  • تعددية الفروع (High Fan-Out): كل عقدة يمكن أن تحتوي على عدد كبير من المفاتيح والمؤشرات إلى العقد الفرعية، مما يجعل الشجرة "قصيرة" (قليلة العمق) حتى مع عدد هائل من العناصر.

تطبيق B-Trees في إدارة الملفات:

  • فهرسة الأدلة (Directory Indexing): تُستخدم B-Trees لفهرسة أسماء الملفات والمجلدات داخل الأدلة. عندما تبحث عن ملف باسم معين في مجلد يحتوي على آلاف الملفات، فإن استخدام B-Tree يُسرّع عملية البحث بشكل كبير.
  • تحديد موقع كتل الملفات (File Block Location): في بعض أنظمة الملفات، تُستخدم B-Trees لتتبع الكتل الفيزيائية التي تُشكل الملف على القرص.

🧪 مثال توضيحي:

لنفترض أن لديك قرصًا صلبًا يحتوي على مليون ملف. إذا كنت تستخدم بنية قائمة متسلسلة (Sequential List) للبحث عن ملف معين، فقد تحتاج إلى البحث في نصف مليون ملف في المتوسط. ولكن باستخدام شجرة B-Tree، حيث كل عقدة يمكن أن تحتوي على مئات المؤشرات، فإن الوصول إلى أي ملف في هذا المليون ملف قد يتطلب أقل من 10 عمليات قراءة من القرص (أي، زيارة 10 عقد كحد أقصى).

هذا التحسين الهائل في الأداء هو السبب الرئيسي وراء استخدام B-Trees في نظم الملفات الحديثة مثل NTFS (في Windows) و ext4 (في Linux).

📘 مصدر إثرائي: Introduction to B-Trees – Programiz


4️⃣ أدلة الملفات (Directories)

تُعد أدلة الملفات (Directories)، والتي تُعرف عادةً باسم "المجلدات" (Folders)، هي البنية الأساسية التي يستخدمها نظام التشغيل لتنظيم الملفات على وسائط التخزين. بدون الأدلة، سيكون لدينا قائمة واحدة ضخمة من جميع الملفات، مما يجعل العثور على ملف معين أمرًا مستحيلاً.

📍 وظائف الدليل:

  • تنظيم الملفات: تجميع الملفات ذات الصلة معًا في مجموعات منطقية.
  • توفير نظام تسمية: السماح للمستخدمين بتسمية الملفات بأسماء يسهل تذكرها، بدلاً من العناوين الفيزيائية.
  • توفير معلومات وصفية: تخزين معلومات مهمة حول كل ملف.

📍 هيكلية الأدلة (Directory Structures):

  • أحادية المستوى (Single-Level Directory):
    • الوصف: أبسط هيكلية، حيث تُخزن جميع الملفات في دليل واحد مشترك لجميع المستخدمين.
    • المزايا: سهلة التنفيذ.
    • العيوب:
      • مشكلة التسمية: لا يمكن لملفين أن يحملا نفس الاسم.
      • صعوبة البحث: يصبح البحث عن ملف معين صعبًا جدًا مع تزايد عدد الملفات.
      • مشاكل الأمان: لا توجد حماية أو عزل بين ملفات المستخدمين.
  • ثنائية المستوى (Two-Level Directory):
    • الوصف: يوجد دليل رئيسي (Master File Directory - MFD) واحد للنظام، وكل مستخدم لديه دليل فرعي خاص به (User File Directory - UFD). تُخزن ملفات كل مستخدم في دليله الخاص.
    • المزايا: حل مشكلة التسمية (يمكن لمستخدمين مختلفين أن يكون لديهما ملف بنفس الاسم)، يوفر بعض العزل بين المستخدمين.
    • العيوب: لا يزال لا يسمح بتنظيم الملفات داخل دليل المستخدم بشكل هرمي.
  • هرمية (Tree-Structured Directory - بنية شجرية):
    • الوصف: هي الهيكلية الأكثر شيوعًا في أنظمة التشغيل الحديثة (مثل Windows وLinux). تبدأ بدليل جذر (Root Directory)، وتتفرع منه أدلة فرعية (Subdirectories) وملفات. يمكن أن تحتوي الأدلة الفرعية على أدلة وملفات أخرى، مما يُشكل بنية شجرية.
    • المزايا:
      • تنظيم منطقي: يُسهل تنظيم الملفات والمجلدات بشكل هرمي ومنطقي.
      • سهولة البحث: يمكن البحث عن الملفات باستخدام المسار (Path) الكامل.
      • مرونة في التسمية: يمكن أن يكون لملفين نفس الاسم إذا كانا في مسارات مختلفة.
    • العيوب: قد تكون عملية البحث أبطأ إذا كان المسار طويلًا جدًا.

📍 معلومات تُخزن في الدليل (Directory Entry):

لكل ملف أو مجلد في الدليل، يتم تخزين "إدخال دليل" (Directory Entry) يحتوي على معلومات وصفية مهمة حول هذا العنصر. تشمل هذه المعلومات عادةً:

  • اسم الملف (File Name): الاسم الذي يراه المستخدم.
  • معرّف الملف (File Identifier / Inode Number في Unix/Linux): مؤشر فريد يشير إلى البيانات الوصفية الفعلية للملف على القرص.
  • موقعه على القرص (Location on Disk): مؤشرات إلى الكتل الفيزيائية التي تُشكل الملف على وسيط التخزين.
  • حجم الملف (File Size): حجم الملف بالبايتات.
  • صلاحيات الوصول (Access Permissions): من يُسمح له بالوصول إلى الملف وما هي أنواع الوصول (قراءة، كتابة، تنفيذ).
  • التواريخ (Dates): تاريخ الإنشاء، تاريخ آخر تعديل، تاريخ آخر وصول.
  • نوع الملف (File Type): يميز بين الملفات العادية، الأدلة، الأجهزة الطرفية، الروابط الرمزية، إلخ.

📘 مصدر إثرائي: Directory Structures in OS – StudyTonight


5️⃣ مشاركة الملفات (File Sharing)

في البيئات متعددة المستخدمين، تُعد مشاركة الملفات بين المستخدمين والتطبيقات ميزة أساسية لأنظمة التشغيل الحديثة. يتطلب ذلك آليات دقيقة للتحكم في الوصول مع الحفاظ على الأمان وسلامة البيانات.

أنواع مشاركة الملفات:

  • مشاركة محلية (Local Sharing):
    • بين مستخدمين على نفس النظام
    • يتم التحكم فيها عبر صلاحيات نظام الملفات
  • مشاركة شبكية (Network Sharing):
    • بين أنظمة عبر الشبكة (مثل NFS، SMB)
    • تتطلب آليات مصادقة إضافية

آليات التحكم في المشاركة:

الآلية الوصف مثال تطبيقي
نموذج Unix الأساسي يحدد الصلاحيات للمالك، المجموعة، الآخرين (rwx) chmod 755 file.sh
قوائم التحكم في الوصول (ACLs) تسمح بتعيين صلاحيات دقيقة لكل مستخدم/مجموعة setfacl -m u:user:rw file.txt
كلمات مرور الملفات تشفير الملفات بكلمة مرور للوصول مستندات ZIP المشفرة

⚠️ تحذير أمني: مشاركة الملفات مع صلاحيات غير مناسبة قد تؤدي لاختراقات أمنية. دائماً اتبع مبدأ أقل صلاحيات (Principle of Least Privilege).


6️⃣ حجب السجلات (Record Blocking)

عند تخزين البيانات على وسائط التخزين الثانوية، تظهر مشكلة عدم التطابق بين حجم السجل المنطقي (Record) وحجم الكتلة الفيزيائية (Block) على القرص. تقنية حجب السجلات تحل هذه المشكلة لتحسين كفاءة I/O.

أنواع حجب السجلات:

ثابت الطول (Fixed-Length)
  • جميع السجلات بنفس الحجم
  • سهولة الحساب والتنفيذ
  • هدر مساحة إذا كانت السجلات غير ممتلئة
متغير الطول (Variable-Length)
  • السجلات بأحجام مختلفة
  • كفاءة في استخدام المساحة
  • يتطلب محددات بين السجلات
مقطعي (Blocked)
  • دمج سجلات متعددة في كتلة واحدة
  • يقلل من عمليات I/O
  • يتطلب إدارة للجزء المتبقي

💡 مثال عملي: في قواعد البيانات، يتم عادةً استخدام حجب مقطعي حيث يتم تخزين عدة صفوف (Rows) في كتلة قراءة واحدة لتحسين الأداء.


7️⃣ إدارة التخزين الثانوي

تقوم أنظمة التشغيل بإدارة وسائط التخزين الثانوية (الأقراص) عبر ثلاث عمليات رئيسية:

1. إدارة المساحة الحرة (Free Space Management)

  • Bit Vector: خريطة بتات تمثل كل كتلة (0 = فارغة، 1 = مشغولة)
  • Linked List: ربط الكتل الفارغة معاً عبر مؤشرات
  • Grouping: تخزين عناوين الكتل الفارغة في كتل مخصصة

2. تخصيص الملفات (File Allocation Methods)

الأسلوب الوصف المزايا والعيوب
متجاور (Contiguous) تخصيص كتل متتالية للملف سريع للوصول المتسلسل - مشكلة التجزئة
مترابط (Linked) كل كتلة تحتوي مؤشر للكتلة التالية لا توجد تجزئة - بطيء للوصول العشوائي
مفهرس (Indexed) كتلة فهرس تحتوي مؤشرات لجميع كتل الملف مرن وسريع - يتطلب مساحة إضافية للفهرس

3. إدارة الأداء (Performance Optimization)

  • التخزين المؤقت للقرص (Disk Caching): استخدام ذاكرة RAM لتخزين الكتل المستخدمة حديثاً
  • التقسيم (Partitioning): تقسيم القرص إلى مناطق مستقلة
  • التجزئة (Defragmentation): إعادة ترتيب الكتل لتحسين الأداء

8️⃣ إدارة الملفات في أنظمة التشغيل المختلفة

تختلف تطبيقات أنظمة الملفات بين أنظمة التشغيل الرئيسية، رغم اشتراكها في المبادئ الأساسية:

Linux
  • نظام الملفات: ext4 (الأحدث)، يدعم Btrfs، XFS، ZFS
  • الميزات:
    • Journaling لتجنب فقدان البيانات
    • دعم للروابط الصلبة والرمزية
    • صلاحيات POSIX القياسية
  • أوامر أساسية: ls, chmod, chown, mount, ln
Windows
  • نظام الملفات: NTFS (الافتراضي)، يدعم FAT32، exFAT
  • الميزات:
    • جدول الملفات الرئيسي (MFT)
    • دعم ACLs متقدم
    • ضغط وتشفير على مستوى الملف
  • أوامر أساسية: dir, icacls, fsutil, defrag
Unix
  • نظام الملفات: UFS (تقليدي)، ZFS (حديث)
  • الميزات:
    • هيكلية inode للبيانات الوصفية
    • أذونات مستخدم/مجموعة/آخرين
    • أجهزة كملفات في /dev
  • أوامر أساسية: ls -i, df -h, du, fsck
Android
  • نظام الملفات: أساسه Linux مع تعديلات
  • الميزات:
    • تقسيمات متعددة (system, data, cache)
    • عزل بيانات التطبيقات (Sandboxing)
    • دعم التخزين الخارجي عبر FUSE
  • ملاحظة: يقتصر الوصول المباشر للملفات على التطبيقات ذات الصلاحيات

ملخص الوحدة

  • نظام إدارة الملفات هو المسؤول عن تنظيم وتخزين واسترجاع البيانات على الوسائط الثانوية
  • تختلف طرق تنظيم الملفات (متسلسلة، عشوائية، مفهرسة) حسب نمط الاستخدام
  • تستخدم أنظمة الملفات الحديثة هياكل B-Trees لتسريع عمليات البحث
  • الأدلة (المجلدات) تنظم الملفات في هياكل هرمية لتسهيل الإدارة
  • مشاركة الملفات تتطلب آليات تحكم دقيقة في الوصول للحفاظ على الأمان
  • حجب السجلات يحسن كفاءة I/O عبر تجميع السجلات في كتل تخزين
  • تختلف تفاصيل أنظمة الملفات بين Linux، Windows، Unix، Android لكن المبادئ الأساسية مشتركة

اختبار سريع

1. أي من هذه ليست طريقة لتخصيص مساحة الملفات على القرص؟

2. ما الميزة الرئيسية لاستخدام B-Trees في أنظمة الملفات؟

موارد إضافية

كتاب إلكتروني

Operating Systems: Three Easy Pieces - فصل أنظمة الملفات

عرض المورد
فيديو تعليمي

شرح مبسط لأنظمة الملفات من قناة Crash Course

مشاهدة الفيديو
دليل عملي

Linux Filesystem Hierarchy - دليل شامل لهيكلية الملفات في لينكس

قراءة الدليل
الوحدة السابقة:إدارة الإدخال/الإخراج الوحدة التالية:أنظمة التشغيل المدمجة