Подтвердить что ты не робот

Какие части ядра Linux я могу прочитать для удовольствия?

Программирование - это не моя основная работа, хотя мне это нравится, и иногда мне платят за это. Уже много лет я слышал о Linux, и мои друзья показали мне много * nixes (или * nici?), Хотя я придерживаюсь Mac OS.

Как вы думаете, есть ли какие-то части ядра Linux, на которые я мог бы смотреть, это поможет мне понять, о чем идет речь? Например, как Linux отличается от Дарвина?

Я вырос с ассемблером и DOS, поэтому такие вещи, как прерывания или низкий уровень C, не должны быть препятствиями для понимания. Но в конце меня больше интересуют концепции высокого уровня, такие как потоки или сетевой стек - я знаю, что разные операционные системы делают их по-разному. И я ищу что-то веселое, легкое и приятное, например, ночное чтение.

(Примечание: сделано CW, на всякий случай)

Обновление: я искал некоторые документы и начал читать:

4b9b3361

Ответ 1

Я бы рекомендовал посмотреть LXR. Это облегчает отслеживание потока кода (вам не нужно искать каждую функцию, которая называется &mdash, ну, у вас есть, но сайт делает это для вас).

Некоторые отправные точки для текущей версии (2.6.30):

  • start_kernel() — подумайте об этом как о эквиваленте ядра main(). Эта функция инициализирует почти все подсистемы ядра; следуйте ему, чтобы увидеть в коде, что вы видите, прокручивая экран во время загрузки.
  • entry_32.S — системные вызовы и прерывания (версия x86-32, которая должна быть ближе к тому, что вы знаете), обратите внимание на использование диалогов сборок AT & T вместо диалектов Intel, к которым вы могли бы более привыкнуть).
  • head_32.S — точка входа ядра. Здесь ядро ​​запускается после переключения в защищенный режим; в конце он назовет start_kernel().
  • arch/x86/boot — код бутстрапа реального режима. Он начинается с сборки (boot/header.S), но быстро переходит в код C (начиная с boot/main.c). Инициализация в реальном режиме (в основном вызовы BIOS, которые необходимо выполнить перед переключением в защищенный режим); он скомпилирован с использованием странного трюка GCC (.code16gcc), который позволяет генерировать 32-битный код реального режима.
  • arch/x86/boot/compressed — если вы когда-нибудь задумывались, откуда приходит сообщение "Decompressing Linux...", это отсюда.

Ответ 2

Сам я всегда находил код планирования задачи немного кривым: -/

Понимаете, вам нужно заняться хобби вне индустрии. Или жизнь: -)

Ответ 3

Комментарии в ядре могут быть довольно забавными. Там некоторые подсказки о том, где найти лучшие из них на kerneltrap.

arch/sparc/lib/checksum.S-/* Солнце, вы просто не можете победить меня, вы просто не можете. Перестань пытаться, arch/sparc/lib/checksum.S: * отказаться. Я серьезно, я буду бить живое дерьмо arch/sparc/lib/checksum.S- * из вас, игра закончилась. */

Ответ 4

linux-0.01.tar.gz - это историческое ядро ​​и полезно для начала
это просто и крошечно и лучше для начала читать
(также он имеет пустоту main (void) Вместо start_kernel() lol: D)

Ответ 6

Вероятно, вам больше не придется читать книгу об теории ОС. Что касается исходного кода: я понятия не имею, но вы можете легко загрузить источник ядра Linux и посмотреть, сможете ли вы найти что-либо это призывы.

Ответ 7

При запуске в каталоге src появится интересный код:

grep -ir "fixme" *

также попробуйте другие комические термины, дерьмо, дерьмо, f ***, пингвин и т.д.

Ответ 8

Вам нужно переопределить слово "весело" в вашем контексте.:)

Тем не менее, ядро ​​Linux может быть слишком большим для монстра. Вы можете начать с некоторых академических или более примитивных ядер, чтобы сначала понять, что происходит. Вы также можете рассмотреть книгу Jolix.

Ответ 9

Для многих пользователей было рекомендовано, чтобы v0.0.1 из Linux был проще всего понять.

Хотя, если вы ищете хороший источник ядра для чтения, я бы не пошел с linux, это был зверь взлома (примерно как сказать, что источники GCC - "забавные" ). Вместо этого вы можете попробовать Minix или один из BSD (Дарвин в основном является подразделением NetBSD iirc) или даже одним из многих бесплатных клонов DOS, если все остальное немного страшнее.

Ответ 10

Попробуйте прочитать код, который реализует эти символьные устройства: /DEV/ ноль /DEV/ нуль /DEV/ полный

И, может быть, генераторы случайных чисел, если вы склонны. Код прост и прост, чем все другие драйверы устройства, поскольку он не касается какого-либо оборудования.

Начать с драйверов / char/mem. *

Ответ 11

kernel.h

Некоторые простые трюки, которые мы можем узнать, например

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

Ответ 12

Для удовольствия, я думаю, вы также можете увидеть Minix, это не совсем Linux, но современные операционные системы от tenenbaum хорошо читаются.