ما هي أجزاء Linux kernel التي يمكنني قراءتها للمتعة؟ [مغلق

StackOverflow https://stackoverflow.com/questions/1010724

سؤال

البرمجة ليست وظيفتي الرئيسية ، على الرغم من أنني أستمتع بها وأحيانًا أتقاضى رواتبها. لسنوات عديدة حتى الآن ، كنت أسمع عن Linux وأظهرت لي أصدقائي العديد من nixes (أو *Nici؟) ، على الرغم من أنني ألزم Mac OS.

هل تعتقد أن هناك أي أجزاء من Kernel Linux التي يمكنني الاستمتاع بها ، وهذا من شأنه أن يساعدني في فهم ما هي الأشياء الكاملة؟ على سبيل المثال ، كيف يختلف لينكس عن داروين؟

لقد نشأت مع Assembler و DOS ، لذلك لا ينبغي أن تكون أشياء مثل المقاطعات أو المستوى المنخفض من المستوى C عوائق أمام الفهم. لكن في النهاية ، أنا مهتم أكثر بمفاهيم عالية المستوى ، مثل ترابط أو مكدس الشبكات - أعرف أن أنظمة التشغيل المختلفة تقوم بها بشكل مختلف. وأنا أبحث عن شيء ممتع وسهل وممتع ، مثل القراءة في وقت متأخر من الليل.

(ملاحظة: صنع CW ، فقط في حالة)

تحديث: بحثت عن بعض المستندات وبدأت في القراءة:

هل كانت مفيدة؟

المحلول

أود أن أوصي بالبحث في LXR. يسهل اتباع تدفق الكود (ليس عليك البحث عن كل وظيفة تسمى - حسنًا ، لديك ، لكن الموقع يفعل ذلك من أجلك).

بعض نقاط البداية ، للإصدار الحالي (2.6.30):

  • start_kernel() - فكر في الأمر على أنه ما يعادل النواة main(). تهيئة هذه الوظيفة تقريبًا جميع الأنظمة الفرعية kernel ؛ اتبعه لترى في الكود ما تراه التمرير على الشاشة أثناء التمهيد.
  • intpl_32.s -مكالمات النظام والمقاطعات (إصدار x86-32 ، والذي يجب أن يكون أقرب ما تعرفه ؛ لاحظ استخدام لهجة AT&T Assembly بدلاً من لهجة Intel التي قد تكون معتادًا عليها).
  • Head_32.s - نقطة دخول النواة. هذا هو المكان الذي تبدأ فيه النواة بعد التبديل إلى الوضع المحمي ؛ في النهاية ، سوف يتصل start_kernel().
  • القوس/x86/التمهيد -رمز bootstrap الوضع الحقيقي. يبدأ في التجميع (التمهيد/رأس) ، ولكن بسرعة يقفز إلى رمز C (بدءا من التمهيد/main.c). هل تهيئة الوضع الحقيقي (معظمها مكالمات BIOS التي يجب القيام بها قبل التحول إلى الوضع المحمي) ؛ يتم تجميعه باستخدام خدعة غريبة في مجلس التعاون الخليجي (.code16gcc) ، والذي يسمح بتوليد رمز الوضع الحقيقي 32 بت.
  • القوس/x86/التمهيد/مضغوط - إذا كنت تساءلت يومًا من أين تأتي رسالة "فك ضغط Linux ..." ، فهي من هنا.

نصائح أخرى

نفسي ، لقد وجدت دائمًا رمز جدولة المهام قليلاً من الصخور:-/

Methinks تحتاج إلى الحصول على هواية خارج الصناعة. أو حياة :-)

يمكن أن تكون التعليقات في kernel مضحكة للغاية. هناك بعض نصائح حول مكان العثور على أفضلها على kerneltrap.

ARCH/SPARC/LIB/CHECKSUM.S-/* SUN ، لا يمكنك ضربني ، لا يمكنك ذلك. توقف عن المحاولة ، القوس/sparc/lib/checksum.s: * الاستسلام. أنا جاد ، سأقوم بركل القرف الحي/sparc/lib/checksum.s- * منكم ، اللعبة انتهت ، إطفاء الأنوار. */

Linux-0.01.tar.gz هي نواة تاريخية وجيدة للبدء
إنها بسيطة وصغيرة وأفضل لبدء القراءة
(كما أنه يحتوي على باطلة رئيسية (باطلة) بدلاً من start_kernel () lol: d)

قد ترغب في قراءة كتاب أو تقليصه يصف kernel Linux قبل النظر في عمق Kernel Linux.

الكتب التي تتبادر إلى الذهن هي:

من المحتمل أن تحصل على المزيد من قراءة كتاب عن نظرية نظام التشغيل. بقدر ما يذهب رمز المصدر: ليس لدي أي فكرة ، ولكن يمكنك بسهولة تنزيل مصدر Linux kernel ومعرفة ما إذا كان يمكنك العثور على أي شيء يناشد.

يجب أن يظهر هذا بعض التعليمات البرمجية المثيرة للاهتمام عند التشغيل في دليل SRC:

grep -ir "fixme" *

حاول أيضًا مع المصطلحات الهزلية الأخرى ، الهراء ، القرف ، F *** ، البطريق ، إلخ.

تحتاج إلى إعادة تعريف كلمة "متعة" في سياقك. قون

ومع ذلك ، قد تكون نواة Linux أكثر من وحش. قد ترغب في البدء ببعض النواة الأكاديمية أو الأكثر بدائية للتعليق على ما يجري ، أولاً. قد ترغب أيضًا في النظر في جوليكس الكتاب.

تم التوصية به من قبل عدد قليل من الأشخاص أن V0.0.1 من Linux هو الأسهل في الفهم.

رغم ذلك ، إذا كنت تبحث عن مصدر جيد للقراءة ، فلن أذهب مع Linux ، فهو وحش من الاختراق (مثل قول مصادر GCC "ممتعة") بدلاً من ذلك ، قد ترغب في تجربة Minix أو أحد BSDS (داروين هو في الأساس فرع من Netbsd IIRC) أو حتى واحدة من العديد من استنساخ DOS الحرة إذا كان كل شيء آخر مخيفًا جدًا ..

حاول قراءة الكود الذي ينفذ أجهزة الأحرف هذه: /dev /Zero /dev /null /dev /full

وربما مولدات الأرقام العشوائية إذا كنت تميل. الكود واضح ومباشر من جميع برامج تشغيل الأجهزة الأخرى لأنه لا يلمس أي أجهزة.

ابدأ من السائقين/char/mem.*

kernel.h

بعض الحيل البسيطة التي يمكننا تعلمها ، مثل

#define ARRAY_SIZE(x) (sizeof(x)/sizeof(x[0]))
...
#define min(x, y) ...
...
#define container_of

من أجل المتعة ، أعتقد أنك يمكن أن ترى Minix أيضًا ، فهي ليست Linux بالضبط ولكن أنظمة التشغيل الحديثة من Tenenbaum هي قراءة جيدة.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top