procfs

نظام ملفات العمليات ( procfs ) هو نظام ملفات خاص في أنظمة التشغيل الشبيهة بنظام يونكس ، يعرض معلومات حول العمليات ومعلومات النظام الأخرى في بنية هرمية شبيهة بالملفات، مما يوفر طريقة أكثر ملاءمة ومعيارية للوصول الديناميكي إلى بيانات العمليات المخزنة في النواة مقارنةً بطرق التتبع التقليدية أو الوصول المباشر إلى ذاكرة النواة . عادةً ما يتم ربطه بنقطة تحميل تُسمى /proc عند بدء التشغيل. يعمل نظام ملفات العمليات كواجهة لهياكل البيانات الداخلية المتعلقة بالعمليات الجارية في النواة. في لينكس ، يمكن استخدامه أيضًا للحصول على معلومات حول النواة وتغيير بعض معلمات النواة أثناء التشغيل ( باستخدام sysctl ).

تدعم العديد من أنظمة التشغيل الشبيهة بنظام يونكس نظام الملفات proc، بما في ذلك System V و Solaris و IRIX و Tru64 UNIX و BSD و Linux و IBM AIX و QNX [ 1 ] و Plan 9 من مختبرات بيل . توقف نظام OpenBSD عن دعمه في الإصدار 5.7، الذي صدر في مايو 2015. وهو غير موجود في HP-UX [ 1 ] و macOS [ 2 ] .

تقوم نواة لينكس بتوسيع نطاقها ليشمل البيانات غير المتعلقة بالعمليات.

يوفر نظام ملفات proc طريقة للتواصل بين مساحة النواة ومساحة المستخدم . على سبيل المثال، يستخدم الأمر ps في نظام Plan 9 وإصدار GNU من أداة الإبلاغ عن العمليات ps نظام ملفات proc للحصول على بياناته، دون استخدام أي استدعاءات نظام متخصصة .

تاريخ

يونكس، الإصدار الثامن

قام توم ج. كيليان بتطوير نسخة نظام الملفات /proc لنظام يونكس الإصدار الثامن (V8) ، حيث قدم ورقة بحثية بعنوان "العمليات كملفات" في مؤتمر USENIX في يونيو 1984. ويهدف تصميم procfs إلى استبدال استدعاء النظام ptrace المستخدم لتتبع العمليات. يمكن الاطلاع على التوثيق المفصل في صفحة دليل proc(4) .

SVR3

لم يكن نظام التشغيل الأصلي AT&T System V Release 3 (SVR3) (المتوفر داخليًا لشركة AT&T في عام 1986 وعمومًا في عام 1987) مزودًا بنظام الملفات /proc ، ولكن إصدارًا لاحقًا منه كان مزودًا به. وكان يحتوي فقط على ملفات تمثل العمليات بدلًا من المجلدات الفرعية الشائعة حاليًا.

SVR4

قام روجر فولكنر ورون غوميز بنقل نظام ملفات العمليات (proc) الخاص بنظام V8 إلى نظام SVR4 ، ونشرا ورقة بحثية بعنوان "نظام ملفات العمليات ونموذج العمليات في نظام UNIX System V" في مؤتمر USENIX في يناير 1991. كان هذا النوع من أنظمة ملفات العمليات يدعم إنشاء مجلدات ps ، ولكن كان الوصول إلى هذه الملفات مقتصراً على الدوال read() و write() و ioctl () . بين عامي 1995 و1996، أنشأ روجر فولكنر واجهة procfs-2 لنظام Solaris-2.6، والتي توفر نظام ملفات /proc منظمًا مع مجلدات فرعية.

الخطة 9

طبّق نظام Plan 9 نظام ملفات العمليات، لكنه تفوّق على نظام V8. فنظام ملفات العمليات في V8 كان يعتمد على ملف واحد لكل عملية. أما Plan 9 فقد أنشأ تسلسلاً هرمياً من الملفات المنفصلة لتوفير هذه الوظائف، وجعل /proc جزءاً أساسياً من نظام الملفات. علاوة على ذلك، يسمح نهج Plan 9 في قابلية النقل للأنظمة ذات البنى المختلفة وترتيب البايتات المتباين بتصحيح أخطاء عمليات الأنظمة الأخرى.

4.4BSD ومشتقاتها

استنسخ نظام 4.4BSD تنفيذه لـ /proc من نظام Plan  9. اعتبارًا من فبراير 2011 يتم التخلص تدريجيًا من نظام procfs في نظام FreeBSD، [ 3 ] وقد تم استبداله بواجهة sysctl للحصول على معلومات متعلقة بالعمليات. ولتوفير التوافق الثنائي مع برامج مساحة المستخدم في Linux، توفر نواة FreeBSD أيضًا نظام linprocfs المشابه لنظام procfs في Linux. [ 4 ] تمت إزالته من OpenBSD في الإصدار 5.7، الذي صدر في مايو 2015، لأنه "كان يعاني دائمًا من حالات التزامن المتنافسة، وهو الآن غير مستخدم". [ 5 ] لم يُفعّل نظام macOS نظام procfs، ويتعين على برامج مساحة المستخدم استخدام واجهة sysctl لاسترجاع بيانات العمليات. [ 2 ]

سولاريس

كان نظام /proc متاحًا في نظام سولاريس منذ البداية (يونيو 1992). وقد قدم نظام سولاريس 2.6 في عام 1996 نظام procfs2 من تطوير روجر فولكنر.

لينكس

أضاف نظام لينكس نظام الملفات /proc لأول مرة في الإصدار v0.97.3 ، سبتمبر 1992، وبدأ لأول مرة في توسيعه ليشمل البيانات غير المتعلقة بالعمليات في الإصدار v0.98.6، ديسمبر 1992.

اعتبارًا من عام 2020، يتضمن تطبيق لينكس دليلًا لكل عملية قيد التشغيل، بما في ذلك عمليات النواة ، في أدلة تحمل اسم /proc/PID ، حيث يمثل PID رقم العملية. يحتوي كل دليل على معلومات حول عملية واحدة، بما في ذلك:

  • /proc/PID/cmdline ، الأمر الذي بدأ العملية في الأصل.
  • /proc/PID/cwd ، وهو رابط رمزي إلى دليل العمل الحالي للعملية.
  • يحتوي الملف /proc/PID/environ على أسماء وقيم متغيرات البيئة التي تؤثر على العملية.
  • /proc/PID/exe ، وهو رابط رمزي إلى الملف القابل للتنفيذ الأصلي ، إذا كان لا يزال موجودًا (قد تستمر العملية في التشغيل بعد حذف الملف القابل للتنفيذ الأصلي أو استبداله).
  • /proc/PID/fd ، وهو دليل يحتوي على رابط رمزي لكل واصف ملف مفتوح .
  • /proc/PID/fdinfo ، وهو دليل يحتوي على إدخالات تصف موضع وعلامات كل واصف ملف مفتوح.
  • /proc/PID/maps ، وهو ملف نصي يحتوي على معلومات حول الملفات والكتل المعينة (مثل الكومة والمكدس).
  • لا يمكن الوصول إلى /proc/PID/mem ، وهي صورة ثنائية تمثل الذاكرة الافتراضية للعملية ، إلا بواسطة عملية ptrace .
  • /proc/PID/root هو رابط رمزي إلى المسار الجذر كما يراه البرنامج. بالنسبة لمعظم البرامج، سيكون هذا رابطًا إلى / إلا إذا كان البرنامج يعمل في بيئة معزولة (chroot jail).
  • يحتوي الملف /proc/PID/status على معلومات أساسية حول العملية بما في ذلك حالة تشغيلها واستخدام الذاكرة.
  • /proc/PID/task ، وهو دليل يحتوي على روابط صلبة لأي مهام تم تشغيلها بواسطة هذه العملية (أي: العملية الأصلية).

(يمكن للمستخدمين الحصول على معرف العملية (PID) باستخدام أداة مساعدة مثل pgrep أو pidof أو ps :

$ ls -l /proc/ $( pgrep -n python3 ) /fd # سرد جميع مُعرّفات الملفات لعملية `python3` التي تم تشغيلها مؤخرًا total 0 lrwx------ 1 baldur baldur 64 2020-03-18 12:31 0 -> /dev/pts/3 lrwx------ 1 baldur baldur 64 2020-03-18 12:31 1 -> /dev/pts/3 lrwx------ 1 baldur baldur 64 2020-03-18 12:31 2 -> /dev/pts/3 $ readlink /proc/ $( pgrep -n python3 ) /exe # سرد الملف التنفيذي المستخدم لتشغيل عملية `python3` التي تم تشغيلها مؤخرًا /usr/bin/python3.8

)

يتضمن /proc أيضًا معلومات النظام غير المتعلقة بالعمليات، على الرغم من أنه في نواة 2.6 تم نقل الكثير من هذه المعلومات إلى نظام ملفات زائف منفصل، sysfs ، مثبت تحت /sys :

  • اعتمادًا على طريقة إدارة الطاقة (إن وجدت)، إما الدليل /proc/acpi أو /proc/apm ، والتي تسبق sysfs وتحتوي على معلومات مختلفة حول حالة إدارة الطاقة.
  • /proc/buddyinfo ، معلومات حول خوارزمية الرفيق التي تعالج تجزئة الذاكرة. [ 6 ]
  • يحتوي المجلد /proc/bus على أدلة تمثل مختلف ناقلات البيانات على الكمبيوتر، مثل PCI و USB . وقد تم استبدال هذا المجلد إلى حد كبير بنظام sysfs الموجود ضمن /sys/bus، والذي يوفر معلومات أكثر بكثير.
  • /proc/fb ، قائمة بإطارات العرض المتاحة
  • /proc/cmdline ، الذي يوفر خيارات التمهيد التي يتم تمريرها إلى النواة
  • يحتوي الملف /proc/cpuinfo على معلومات حول وحدة المعالجة المركزية ، مثل الشركة المصنعة (وعائلة وحدة المعالجة المركزية، والطراز، وأسماء الطرازات التي تُمكّن المستخدمين من تحديد وحدة المعالجة المركزية) وسرعتها ( سرعة الساعة )، وحجم ذاكرة التخزين المؤقت، وعدد النوى الشقيقة، وعدد النوى، وعلامات وحدة المعالجة المركزية . يعتمد تنسيق المعلومات المتاحة بشكل كبير على بنية النظام. في بعض البنى، يتضمن الملف /proc/cpuinfo قيمة " bogomips "، والتي يُساء فهمها غالبًا على أنها مقياس لسرعة وحدة المعالجة المركزية، مثل اختبار الأداء، ولكنها في الواقع لا تقيس أي قيمة منطقية (للمستخدمين النهائيين) على الإطلاق. تحدث هذه القيمة كأثر جانبي لمعايرة مؤقت النواة، وتُنتج قيمًا متفاوتة للغاية اعتمادًا على نوع وحدة المعالجة المركزية، حتى عند سرعات الساعة المتساوية.
$ cat /proc/cpuinfo المعالج: 0 معرف المورد: AuthenticAMD عائلة المعالج: 16 الطراز: 6 اسم الطراز: AMD Athlon II X2 270 خطوة المعالج: 3 الشفرة الدقيقة: 0x10000c8 تردد المعالج: 2000 ميجاهرتز حجم الذاكرة المؤقتة: 1024 كيلوبايت ... المعالج: 1 معرف المورد: AuthenticAMD عائلة المعالج: 16 الطراز: 6 اسم الطراز: AMD Athlon II X2 270 خطوة المعالج: 3 الشفرة الدقيقة: 0x10000c8 تردد المعالج: 800 ميجاهرتز حجم الذاكرة المؤقتة: 1024 كيلوبايت ...

في وحدات المعالجة المركزية متعددة النوى، يحتوي /proc/cpuinfo على حقول "الأشقاء" و "أنوية وحدة المعالجة المركزية" والتي تمثل الحساب التالي المطبق: [ 7 ]

"الأشقاء" = (عدد وحدات المعالجة المركزية لكل حزمة معالجة مركزية) * (عدد النوى لكل حزمة معالجة مركزية) "عدد أنوية المعالج" = (عدد الأنوية لكل وحدة معالجة مركزية)

وحدة المعالجة المركزية (CPU) هي وحدة معالجة مركزية فعلية قد تحتوي على عدة أنوية ( نواة واحدة لوحدة واحدة، ونواتان لوحدتين، وأربع أنوية لأربع وحدات). يتيح هذا التمييز بين تقنية تعدد الخيوط المتزامنة (Hyper-Threading) والمعالج ثنائي النواة، أي يمكن حساب عدد الخيوط المتزامنة لكل وحدة معالجة مركزية من خلال قسمة عدد الأنوية المتجاورة على عدد أنوية المعالج . إذا تساوت القيمتان لوحدة معالجة مركزية واحدة، فإن تقنية تعدد الخيوط المتزامنة غير مدعومة. [ 8 ] على سبيل المثال، وحدة معالجة مركزية تحتوي على نواتين متجاورة وعدد أنوية معالج يساوي 2 هي وحدة معالجة مركزية ثنائية النواة، ولكنها لا تدعم تقنية تعدد الخيوط المتزامنة.

  • /proc/crypto ، قائمة بوحدات التشفير المتاحة
  • /proc/devices ، قائمة بأجهزة الأحرف والكتل مرتبة حسب معرف الجهاز، ولكنها تعرض الجزء الأكبر من اسم /dev أيضًا
  • /proc/diskstats ، الذي يوفر بعض المعلومات (بما في ذلك أرقام الأجهزة) لكل جهاز من أجهزة القرص المنطقية
  • /proc/filesystems ، قائمة بأنظمة الملفات التي يدعمها النواة وقت عرضها
  • /proc/interrupts و /proc/iomem و /proc/ioports والمجلد /proc/irq ، مما يوفر بعض التفاصيل حول الأجهزة (المادية أو المنطقية) التي تستخدم موارد النظام المختلفة
  • /proc/kmsg ، يحتوي على الرسائل التي يتم إخراجها بواسطة النواة [ 9 ]
  • /proc/loadavg ، يحتوي على إحصائيات حول متوسط ​​الحمل الحالي في الدقائق الأخيرة.
  • /proc/meminfo ، الذي يحتوي على ملخص لكيفية إدارة النواة لذاكرتها.
  • يُعدّ الملف /proc/modules أحد أهم الملفات في /proc ، ويحتوي على قائمة بوحدات النواة المُحمّلة حاليًا. كما يُعطي مؤشرًا (ليس دائمًا دقيقًا تمامًا) على التبعيات.
  • /proc/mounts ، وهو رابط رمزي إلى self/mounts يحتوي على قائمة بالأجهزة المثبتة حاليًا ونقاط التثبيت الخاصة بها (ونظام الملفات المستخدم وخيارات التثبيت المستخدمة).
  • /proc/net/ ، وهو دليل يحتوي على معلومات مفيدة حول حزمة الشبكة، وخاصة /proc/net/nf_conntrack ، الذي يسرد اتصالات الشبكة الحالية (مفيد بشكل خاص لتتبع التوجيه عند استخدام iptables FORWARD لإعادة توجيه اتصالات الشبكة).
  • /proc/partitions ، وهي قائمة بأرقام الأجهزة وأحجامها وأسماء /dev التي حددتها النواة كأقسام موجودة.
  • /proc/scsi ، الذي يوفر معلومات حول أي أجهزة متصلة عبر وحدة تحكم SCSI أو RAID
  • رابط رمزي للعملية الحالية (التي تجتاز) في /proc/self (أي /proc/PID/ حيث PID هو معرف العملية الحالية).
  • /proc/slabinfo ، يعرض إحصائيات عن ذاكرة التخزين المؤقت للكائنات المستخدمة بكثرة في نواة لينكس
  • /proc/swaps ، قائمة بأقسام التبديل النشطة، وأحجامها المختلفة وأولوياتها
  • يُمكن الوصول إلى خيارات النواة القابلة للتكوين ديناميكيًا ضمن المسار /proc / sys . يحتوي هذا المسار على مجلدات تُمثل أقسام النواة، وتضم ملفات افتراضية قابلة للقراءة والكتابة . على سبيل المثال، يُعد الملف الافتراضي /proc/sys/net/ipv4/ip_forward من الملفات الشائعة الاستخدام ، لأنه ضروري لتوجيه جدران الحماية أو الأنفاق. يحتوي هذا الملف على القيمة '1' أو '0': إذا كانت القيمة 1، فإن بروتوكول IPv4 يُعيد توجيه الحزم غير المُخصصة للمضيف المحلي، وإذا كانت القيمة 0، فلا يُعيد توجيهها.
  • /proc/sysvipc ، يحتوي على معلومات مشاركة الذاكرة والاتصال بين العمليات (IPC).
  • /proc/tty ، يحتوي على معلومات حول المحطات الطرفية ؛ /proc/tty/driver يحتوي على قائمة ببرامج تشغيل TTY واستخدامها [ 10 ]
  • /proc/uptime ، وهو طول الوقت الذي كان فيه النواة قيد التشغيل منذ بدء التشغيل والوقت الذي قضاه في وضع الخمول (كلاهما بالثواني).
  • يحتوي الملف /proc/version على إصدار نواة لينكس، ورقم التوزيعة، ورقم إصدار gcc (المستخدم لبناء النواة)، وأي معلومات أخرى ذات صلة بإصدار النواة قيد التشغيل حاليًا.
  • ملفات أخرى تعتمد على مختلف الأجهزة، وتكوينات الوحدات، والتغييرات التي تطرأ على النواة.

تأتي الأدوات الأساسية التي تستخدم /proc تحت نظام Linux في حزمة procps ( عمليات /proc )، وتعمل فقط بالاقتران مع /proc مثبت .

سيجوين

قام Cygwin بتطبيق نظام ملفات procfs وهو في الأساس نفس نظام ملفات procfs الخاص بنظام Linux.

مراجع

  1. 1 2 نيميث، إيفي؛ سنايدر، غارث؛ هاين، ترينت ر.؛ وايلي، بن (14 يوليو 2010). دليل إدارة أنظمة يونكس ولينكس . بيرسون للتعليم. ص  136. ISBN 978-0-13-211736-4.
  2. 1 2 أميت سينغ (2003). "/proc على نظام التشغيل ماك أو إس إكس" . كتاب "أساسيات نظام التشغيل ماك أو إس إكس " . مؤرشف من الأصل في 4 مايو 2012. تم الاطلاع عليه في 10 يوليو 2021 .
  3. "لماذا تم إهمال procfs لصالح procstat؟" . freebsd.org . 22 فبراير 2011.
  4. "linprocfs(5)" . صفحات دليل FreeBSD . مشروع FreeBSD. 13 نوفمبر 2019. تم الاطلاع عليه بتاريخ 12 يونيو 2021 .
  5. "التغييرات التفصيلية بين OpenBSD 5.6 و 5.7" . openbsd.org .
  6. "3.2.2. /proc/buddyinfo" . centos.org . مؤرشف من الأصل في 2 سبتمبر 2013. تم الاطلاع عليه في 23 مايو 2011 .
  7. بارون، جيسون. "تقنية تعدد الخيوط مقابل المعالج ثنائي النواة" . مؤرشف من الأصل في 13 مايو 2016. تم الاطلاع عليه في 28 يونيو 2011 .
  8. "فهم ملف /proc/cpuinfo في نظام لينكس" . richweb.com . مؤرشف من الأصل بتاريخ 3 أبريل 2012. تم الاطلاع عليه بتاريخ 21 أبريل 2015 .
  9. نغوين، بينه (30 يوليو 2004). "تسلسل هرمي لنظام ملفات لينكس" . بينه نغوين. ص 63. تم الاطلاع عليه في 18 يوليو 2016. /proc/kmsg[:] رسائل صادرة من النواة. يتم توجيهها أيضًا إلى سجل النظام (syslog ) . 
  10. "نظام الملفات /proc" . وثائق نواة لينكس . تم الاطلاع عليه بتاريخ 9 أغسطس 2024 .

مصادر