Jakie są dobre i złe rzeczy w projektowaniu jądra Linuksa?

Nie jestem mistrzem kodu jądra, ale mam podstawowe pojęcie o jego strukturze. W tym poście możemy omówić, jakie są dobre i złe rzeczy w projektowaniu jądra.

Update: nie, to nie jest zadanie domowe. Wspomniałbym o tym, gdyby tak było.

Zobacz też: https://stackoverflow.com/questions/1548442/i-know-how-to-program-now-how-do-i-learn-to-design

Wszyscy chwalą projekt jądra Linuksa. Let ' s have a list dobrych i złych decyzji projektowych, które zostały podjęte przy projektowaniu jądra.

Author: Rohit Banga, 2009-10-11

6 answers

Istnieje jakiś artykuł o nazwie "Linux Kernel Design Patterns". możesz znaleźć różne wzorce dla jądra projektu dla Linuksa. jednym z ciągłych artykułów jest " Linux Kernel Design Patterns-Part 1", zacznij od tego i poszukaj dodatkowego artykułu dla Kernel Design Patterns.

 7
Author: Sajad Bahmani,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2010-01-10 18:58:18

Nie bezpośrednio o projektowaniu Linuksa, ale uważam, że proces jego rozwoju jest najbardziej godny uwagi. Samo jądro nieustannie się rozwija i robi to z niewiarygodną prędkością. Jest to możliwe tylko Dzięki zdecentralizowanej kontroli wersji (git), która umożliwia bardzo dużej liczbie programistów jednoczesną pracę.

Również, z git bisect osiągnęli coś niezwykłego; teraz jest możliwe dla nie-programistów, aby wyśledzić robaki. Oto cytat z Davida Millera:

Ludzie nie rozumieją tego, że to sytuacja, w której " węzeł końcowy zasada " obowiązuje. Gdy masz ograniczone zasoby (tutaj: Programiści) nie naciskasz na ciężar na nich. Zamiast tego wypychasz rzeczy do zasobu masz dużo, węzły końcowe (tu: użytkownicy), tak aby sytuacja rzeczywiście skaluje.

Osoby zgłaszające błąd mają dostęp do środowiska, w którym występuje błąd, oraz "git bisect" automatycznie wyodrębnia istotne informacje z tego środowisko. Jest to również dobry sposób na pozyskanie nowych współpracowników.

Ponadto, ilekroć programiści chcą dodać kod, bezwzględnie muszą podzielić swój kod na małe, osobno aplikowane łatki, aby każda zmiana mogła być łatwo przejrzana. W ten sposób duża część ich kodu może być zrozumiana przez wiele osób.

Styl zarządzania Linuksem to ciekawa lektura. Linus próbuje żyć atmosfera, w której nie chowasz się za uprzejmością, ale wyraźnie stwierdzasz, co myślisz. Czasami może to być niegrzeczne, ale jestem pewien, że utrzymuje jakość kodu na wysokim poziomie.

 5
Author: martinus,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2010-01-15 13:53:34

Złe rzeczy:

  1. liczba nowych funkcji jest wysoka, a cykl naprawy błędów dla tych funkcji jest niewielki.
  2. config system musi być inteligentny. i kategoryzowane dla niektórych ogólnych potrzeb. jeśli ma kreatora jak config system i więcej interakcji i informacji podczas robienia config.
  3. duża blokada jądra i inne blokady wszędzie bez dobrego mechanizmu sprawdzającego.

Dobre rzeczy:

  1. sterowniki trybu użytkownika: system plików trybu użytkownika, sterownik bloku trybu użytkownika, blok trybu użytkownika driver, raw hid,...
  2. dobry kierowca. w dzisiejszych czasach wiele urządzeń ma wsparcie w jądrze Linuksa.
  3. lekka wirtualizacja w jądrze.
  4. dobre mechanizmy komunikacji pomiędzy przestrzenią użytkownika a przestrzenią jądra (dev, proc, sys, debugfs,...)
  5. bardzo dobre wykorzystanie języka C ze wskaźnikami funkcyjnymi w strukturach do symulacji niektórych cech obiektowych.
  6. tryb użytkownika linux do debugowania.
  7. dobra obsługa systemów wbudowanych
  8. Bardzo dobra ochrona mechanizmy: selinux, apparmor, weryfikacja integralności,...
 3
Author: chezgi,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2010-01-16 19:50:34

Myślę, że to http://linuxhelp.blogspot.com/2006/05/monolithic-kernel-vs-microkernel-which.html powinno zabłysnąć trochę światła na twoje pytanie.

 1
Author: Maxim Veksler,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2009-10-11 14:05:05

Najgorsza rzecz:

System budowania, (tak, Wiem, że to nie ma nic wspólnego z konstrukcją samego jądra).
Jest to absolutny koszmar, w niczym innym nie istnieje, a jeśli z jakiegoś powodu (dodanie nowej architektury, być może) musisz ją zmienić, to musisz nauczyć się zupełnie nowego języka, aby to zrobić.

Najlepsza rzecz:

Prawie wszystko jest konfigurowalne. To niesamowite, że W Zasadzie to samo jądro jest używane w małych urządzeniach wbudowanych bez MMU, i w superkomputerach z ogromnymi pamięciami i tysiącami procesorów.

 1
Author: James,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2010-01-11 15:35:34

Myślę, że rozwój jądra, zamiast być kwestią projektowania z filozoficznymi środowiskami i dyskusjami (takimi jak mikro-jądro vs. monolityczne jądro), jest kwestią praktycznego kodu, który działa niezawodnie. Różnorodność urządzeń peryferyjnych i protokołów, które jądro powinno obsługiwać, oprócz szerokiej gamy wersji sprzętu i producentów, a także złożone problemy, które pojawiają się w rozwoju trybu chronionego (w porównaniu z rozwojem trybu użytkownika, którego używają aplikacje), uzasadniają to stwierdzenie. Również, nie zapominaj o problemie kompatybilności wstecznej, która jest niezbędna dla systemu operacyjnego w praktyce, ale głównie zaniedbywana w filozofii projektowania.

Jądro Linuksa jest tego dobrym przykładem: monolityczne jądro (choć bardzo modularne) z wieloma pragmatycznymi hackami, które przewyższa wiele dobrze zaprojektowanych akademickich lub komercyjnych systemów operacyjnych pod względem popularności i wydajności zarówno w obszarach serwerowych, jak i systemów wbudowanych.

Nadrzędną zaletą Linuksa jest to, że wiele aspektów jego jądra może być albo osadzony w obrazie jądra (głównie bzImage) lub dodany później jako moduł jądra. Możesz go skonfigurować przed utworzeniem obrazu jądra za pomocą narzędzia config, a następnie dowolny moduł jądra może być łatwo usunięty lub dodany w czasie wykonywania (oczywiście przez uprawnienia roota) bez potrzeby ponownego uruchamiania systemu operacyjnego. To sprawia, że rozwój i utrzymanie jądra jest naprawdę łatwiejsze. (Pomyśl tylko o systemie operacyjnym Windows, który wymaga ponownego uruchomienia prawie każdej aktualizacji, wiele razy w programach niezwiązanych z jądrem)

 0
Author: Amir Moghimi,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2010-01-17 12:12:25