التحليل التجريبي: https://www.zhihu.com/column/c_142990858
Linux هو نظام تشغيل مفتوح المصدر. يمكن للمستخدمين تخصيص وتعديل kernel وفقًا لنظامهم يحتاج إلى تخصيص الأنظمة ذات الوظائف الأكثر ملاءمة وكفاءة تشغيل أعلى. لذلك ، فإن تجميع kernel Linux هو مهارة أساسية ضرورية لتطوير النواة.
تعد إضافة مكالمات نظام جديدة حسب الحاجة في النظام طريقة شائعة لتعديل النواة. من خلال هذه التجربة ، يجب على القراء فهم عملية مكالمات نظام معالجة نظام Linux وطريقة إضافة مكالمات النظام.
(1) إضافة مكالمة نظام لتنفيذ وظيفة التعديل أو القراءة للقيمة الرائعة للعملية المحددة ، وإرجاع أحدث قيمة لطيفة وأولوية العملية. يوصى باستدعاء النموذج الأولي على النحو التالي:
int mysetnice (pid_t pid ، int flag ، int nicevalue ، void __user * prio ، void __user * nice) ؛
المعلمة المعنى: PID: معرف العملية.
العلم: إذا كانت القيمة 0 ، فهذا يعني قراءة القيمة اللطيفة ؛ إذا كانت القيمة 1 ، فهذا يعني تعديل القيمة اللطيفة.
Prio ، لطيف: الأولوية الحالية والقيمة الرائعة للعملية. قيمة الإرجاع: إرجاع 0 عند نجاح استدعاء النظام ، وإرجاع رمز الخطأ EFAULT عند فشل استدعاء النظام.
(2) اكتب اختبار تطبيق بسيط تمت إضافته في (1).
(3) إذا تم استدعاء وظيفة kernel من Linux في البرنامج ، فمن المطلوب قراءة الكود المصدري للوظيفة ذات الصلة بعمق.
يمكن لآلية الوحدة النمطية التي توفرها Linux توسيع وظائف Linux ديناميكيًا دون إعادة تجميع النواة ، وقد تم استخدامها على نطاق واسع في تنفيذ العديد من وظائف Kernel Linux. في هذه التجربة ، سوف نتعلم المفاهيم الأساسية والمبادئ وتقنيات التنفيذ للوحدات النمطية ، ثم نستخدم وحدة Kernel لبرمجة المعلومات الأساسية للعملية والوصول إليها ، وبالتالي تعميق فهمنا لمفاهيم العملية وتقنيات برمجة الوحدة النمطية.
(1) تصميم وحدة نمطية تتطلب إدراج أسماء البرنامج وأرقام PID وحالة العملية وأولويات العملية لجميع مؤشرات ترابط kernel في النظام.
(2) تصميم وحدة مع معلمات ، معلماتها هي رقم PID للعملية. تتمثل وظيفة هذه الوحدة في سرد المعلومات العائلية للعملية ، بما في ذلك اسم البرنامج ورقم PID لعملية الأصل وعملية الأخ وعملية الطفل.
(3) يرجى قراءة تنفيذ رمز المصدر لوظائف kernel ذات الصلة المستخدمة في البرنامج بناءً على الموقف الخاص بك.
(1) كن على دراية بواجهة أمر Linux.
(2) من خلال تطبيق البرمجة للنظام ذي الصلة للتحكم في عملية Linux ، سنقوم بزيادة تعميق فهمنا لمفاهيم العملية ، وتوضيح الاتصال والاختلافات بين العمليات والبرامج ، ونفهم المعنى المحدد للتنفيذ المتزامن للعمليات.
(3) من خلال استخدام آلية اتصال خط أنابيب Linux ، وآلية اتصال قائمة انتظار الرسائل ، وآلية اتصال الذاكرة المشتركة ، تعميق فهم أنواع مختلفة من طرق اتصال العملية.
(4) تعميق فهم آلية مزامنة الإشارات من خلال تطبيق Semaphores Posix في Linux. (5) يرجى قراءة وتحليل تنفيذ رمز مصدر kernel لمكالمات النظام ذات الصلة بناءً على الموقف الخاص بك.
(1) على دراية بأوامر Linux الشائعة: PWD ، userAdd ، Passwd ، WHO ، PS ، PSTREE ، KILL ، TOP ، LS ، CD ، MKDIR ، RMDIR ، CP ، RM ، MV ، CAT ، MORE ، GREP ، إلخ.
(2) تنفيذ قذيفة محاكاة:
اكتب ثلاثة برامج مختلفة cmd1.c و cmd2.c و cmd3.c. يتم تخصيص وظائف كل برنامج وتجميعها في ملفات قابلة للتنفيذ CMD1 و CMD2 و CMD3 على التوالي. ثم اكتب برنامجًا لمحاكاة وظيفة برنامج Shell. يمكنه إنشاء عملية طفل للأمر المقابل بناءً على السلسلة التي أدخلها المستخدم (تمثل اسم الأمر المقابل) واتركه ينفذ البرنامج المقابل. تنتظر عملية الوالدين أن تنتهي عملية الطفل ، ثم تنتظر استلام الأمر التالي. إذا كان الأمر المستلم هو الخروج ، فإن عملية الوالدين تنتهي ؛ إذا كان الأمر المستلم أمرًا غير صالح ، فسيتم عرض "الأمر غير الموجود" وتستمر في الانتظار.
(3) تنفيذ برنامج اتصال خط أنابيب:
يتم إنشاء خط أنابيب بواسطة العملية الأصل ، ثم يتم إنشاء 3 عمليات للأطفال ، وتستخدم هذه العمليات الفرعية الثلاث خط الأنابيب للتواصل مع عملية الأصل: ترسل عملية الطفل المعلومات ، وتتلقى عملية الوالد وغيرها من عمليات الأطفال المعلومات بعد كل إرسال الرسائل. يمكن تصميم المحتوى المحدد للاتصال حسب الإرادة وفقًا لاحتياجاتك الخاصة ، وهو مطلوب لاختبار مواقف مختلفة في عملية القراءة والكتابة الحظر ، واختبار الحجم الافتراضي لخط الأنابيب ، واستخدام آلية Smaphore Posix لتحقيق الوصول الحصري المتبادل إلى خط الأنابيب بين العمليات. قم بتشغيل البرنامج لمراقبة العدد الفعلي للبايت القراءة والكتابة من خلال العملية وحظر العملية والاستيقاظ في ظل ظروف مختلفة.
(4) استخدم آلية اتصال قائمة انتظار رسالة Linux لتحقيق التواصل بين موضوعين:
اكتب برنامجًا لإنشاء مؤشر ترابط: موضوع المرسل واستلام مؤشر ترابط ، حيث يقوم مؤشر ترابط المرسل بتشغيل مرسل الوظيفة () ، والذي ينشئ قائمة انتظار الرسائل ، ثم حلقات لانتظار المستخدم لإدخال سلسلة من الأحرف عبر المحطة ، وإرسال سلسلة الأحرف إلى مؤشر ترابط المتلقي من خلال قائمة انتظار الرسائل حتى يدخل المستخدم "" ؛ أخيرًا ، يرسل رسالة "نهاية" إلى مؤشر ترابط المتلقي ، وينتظر الرد على المتلقي. بعد رسالة الرد ، يعرض معلومات الرد المستلمة على شاشة الطرفية ، ويحذف قائمة انتظار الرسائل ذات الصلة ، وينهي تشغيل البرنامج. يتم تشغيل مؤشر ترابط جهاز الاستقبال () ، والذي يتلقى رسائل من المرسل من خلال قائمة انتظار الرسائل ويعرض الرسالة على شاشة الطرفية حتى يتلقى رسالة مع "End". في هذا الوقت ، يرسل رسالة إجابة "فوق" إلى المرسل ، وإنهاء تشغيل البرنامج. استخدم Semaphores بدون اسم لتحقيق التزامن والاستبعاد المتبادل بين خيطين.
(5) استخدام آلية اتصال الذاكرة المشتركة في Linux لتحقيق التواصل بين عمليتين:
اكتب مرسل برنامج ، والذي ينشئ ذاكرة مشتركة ، ثم ينتظر إدخال المستخدم من الأحرف عبر المحطة ، ويرسل سلسلة الأحرف إلى جهاز الاستقبال من خلال الذاكرة المشتركة ؛ أخيرًا ، ينتظر رد المتلقي. بعد تلقي رسالة الرد ، يعرض معلومات الرد المستلمة على شاشة المحطة الطرفية ، ويحذف الذاكرة المشتركة ، وينهي تشغيل البرنامج. اكتب برنامج المتلقي ، الذي يتلقى رسائل من المرسل من خلال الذاكرة المشتركة ، يعرض الرسالة على شاشة الطرفية ، ثم يرسل رسالة إجابة "فوق" إلى المرسل من خلال الذاكرة المشتركة ، وإنهاء تشغيل البرنامج. استخدم Semaphore أو System V Semaphore لتحقيق الاستخدام الحصري والمتزامن للذاكرة المشتركة من خلال عمليتين.
من خلال إدارة مساحة تخزين الملفات المحددة ، والهيكل الفعلي للملفات ، وهيكل الدليل وعمليات الملفات ، سنقوم بتعميق فهمنا لهيكل البيانات الداخلي ووظائفه وعملية تنفيذ نظام الملفات.
(1) افتح مساحة قرص افتراضية في الذاكرة كقسم لتخزين الملفات ، وقم بتنفيذ نظام ملفات بسيط في نظام مهام واحد مستخدم واحد يعتمد على الدلائل متعددة المستويات. عند الخروج من نظام الملفات ، يجب حفظ نظام الملفات الافتراضية على القرص كملف بحيث يمكن استعادته إلى مساحة القرص الظاهري في الذاكرة في المرة القادمة.
(2) يمكن تخصيص مساحة تخزين الملفات عن طريق تخصيص الارتباطات الصريح أو طرق أخرى.
(3) يمكنك اختيار مخططات بت أو طرق أخرى لإدارة مساحة القرص الحرة. إذا تم استخدام صورة BITMAP لإدارة مساحة تخزين الملفات واستخدام تخصيص الارتباطات الصريحة ، فيمكن دمج BITMAP في الدهون.
(4) يتبنى هيكل دليل الملفات بنية دليل متعدد المستويات. من أجل البساطة ، يمكن استخدام العقد الفهرس ، يجب أن يحتوي كل عنصر على معلومات مثل اسم الملف ، والعنوان الفعلي ، والطول ، وما إلى ذلك ، ويمكن أيضًا حماية ملفات القراءة والكتابة من خلال عناصر الدليل.
(5) مطلوب أوامر التشغيل التالية: