Linux Kernel: Навчальний посібник для початківців [закрито]


52

Мені цікаво змінити внутрішню частину ядра, застосувати патчі, обробляти драйвери пристроїв та модулі для власної особистої розваги.

Чи є комплексний ресурс для злому ядра, призначений для досвідчених програмістів?


7
Смішно, як запитання з такою кількістю переглядів та голосів закривається як поза темою.
YoMismo

1
Dura lex, sed lex.
Адам Матан

1
Rectificare sapientis est
YoMismo

Звичайно. Зрештою, quidquid Latine dictum sit altum videtur.
Адам Матан

XDDDD цілком вірно
YoMismo

Відповіді:


33
**TODO** +editPic: Linux Kernel Developer -> (Ring Layer 0)
         +addSection: Kernel Virtualization Engine

KERN_WARN_CODING_STYLE: Do not Loop unless you absolutely have to.

Рекомендовані книги для неініціалізованихvoid *i

"Чоловіки не розуміють книжок, поки не проживають певну кількість життя, або в будь-якому разі ніхто не розуміє глибокої книги, поки він не побачив і не прожив хоча б частину її змісту". –Езра фунт

Подорож у тисячу кодових миль повинна починатися з одного кроку. Якщо ви сумніваєтеся, з якої з наступних книг почати, не хвилюйтеся, виберіть будь-яку на свій вибір. Не всі, хто бродить, загублені. Оскільки всі дороги в кінцевому рахунку підключаються до шосе , ви будете досліджувати нові речі у вашій подорожі ядром, коли сторінки просуваються, не зустрічаючи жодних тупиків, і в кінцевому підсумку підключитесь до code-set. Читайте насторожено і пам’ятайте: Код - це не література .

Залишилося - це не річ, ані емоція, ані зображення, ані ментальна картина, ані пам'ять, ані ідея. Це функція. Процес якийсь. Аспект Життя, який можна було б описати як функцію чогось «більшого». І тому виявляється, що насправді воно не є «відокремленим» від того чимось іншим. Як і функція ножа - різати щось - насправді не є окремим від самого ножа. Ця функція може бути або не використовується в даний момент, але вона потенційно НІКОЛИ не відокремлена.

Дерадомізований алгоритм Соловай Страссена для тесту на первинність :

Делоралізований алгоритм соловай Страссена для випробування первинності

Читайте, щоб не суперечити і не плутати; ні вірити і приймати як належне; ні знайти розмови та дискурси; але зважити і врахувати. Деякі книги потрібно скуштувати, інші - проковтнути, а деякі - пожовкнути та перетравити: тобто деякі книги слід читати лише частинами, інші - читати, але не цікаво, а деякі - читати цілком. та з ретельністю та увагою.

static void tasklet_hi_action(struct softirq_action *a)
{
        struct tasklet_struct *list;

        local_irq_disable();
        list = __this_cpu_read(tasklet_hi_vec.head);
        __this_cpu_write(tasklet_hi_vec.head, NULL);
        __this_cpu_write(tasklet_hi_vec.tail, this_cpu_ptr(&tasklet_hi_vec.head));
        local_irq_enable();

        while (list) {
                struct tasklet_struct *t = list;

                list = list->next;

                if (tasklet_trylock(t)) {
                        if (!atomic_read(&t->count)) {
                                if (!test_and_clear_bit(TASKLET_STATE_SCHED,
                                                        &t->state))
                                        BUG();
                                t->func(t->data);
                                tasklet_unlock(t);
                                continue;
                        }
                        tasklet_unlock(t);
                }

                local_irq_disable();
                t->next = NULL;
                *__this_cpu_read(tasklet_hi_vec.tail) = t;
                __this_cpu_write(tasklet_hi_vec.tail, &(t->next));
                __raise_softirq_irqoff(HI_SOFTIRQ);
                local_irq_enable();
        }
}

Основний Linux (5 -> 1 -> 3 -> 2 -> 7 -> 4 -> 6)

«У природи немає ні ядра, ні оболонки; вона одразу все ”- Йоганн Вольфганг фон Гете

Читач повинен добре розбиратися з концепціями операційної системи ; справедливе розуміння тривалих процесів та його відмінностей від процесів із короткими сплесками виконання; відмовостійкість при дотриманні м'яких і жорстких обмежень у режимі реального часу. Під час читання важливо зрозуміти і n/ackвибір дизайну, зроблений джерелом ядра Linux у основних підсистемах.

Нитки [і] сигнали [є] платформовим слідом нещастя, відчаю, жаху та божевілля (~ Ентоні Бакст). Коли говориться, ви повинні бути самооцінювачем C, перш ніж зануритися в ядро. Ви також повинні мати хороший досвід роботи з пов'язаними списками, стеками, чергами, червоними деревами, хеш-функціями та ін.

volatile int i;
int main(void)
{
    int c;
    for (i=0; i<3; i++) {
        c = i&&&i;
        printf("%d\n", c);    /* find c */
    }
    return 0;
}

Краса та мистецтво джерела Linux Kernel полягає у навмисному затуманенні коду, яке використовується разом. Це часто необхідне для того, щоб передати обчислювальний зміст, що включає дві або більше операцій, чисто і елегантно. Особливо це стосується написання коду для багатоядерної архітектури.

Відео Лекції по системам реального часу , завдання календарного планування , стиснення пам'яті , бар'єри пам'яті , SMP

#ifdef __compiler_offsetof
#define offsetof(TYPE,MEMBER) __compiler_offsetof(TYPE,MEMBER)
#else
#define offsetof(TYPE, MEMBER) ((size_t) &((TYPE *)0)->MEMBER)
#endif
  1. Linux Kernel Development - Роберт Лав
  2. Розуміння ядра Linux - Даніель П. Бовет, Марко Чесаті
  3. Мистецтво Linux KerneL Design - Ян Лісян
  4. Професійна архітектура ядра Linux - Вольфганг Маурер
  5. Дизайн операційної системи UNIX - Моріс Дж. Бах
  6. Розуміння менеджера віртуальної пам'яті Linux - Мел Горман
  7. Linux Kernel Internals - Тігран Айвазян
  8. Вбудований праймер Linux - Крістофер Холлінан

Драйвери пристроїв Linux (1 -> 2 -> 4 -> 3 -> 8 -> ...)

"Музика не веде вас із собою. Ви повинні суворо переносити її завдяки своїй здатності дійсно просто зосередитись на тому маленькому маленькому ядрі емоцій чи історії". - Деббі Гаррі

В основному ваше завдання - встановити високошвидкісний комунікаційний інтерфейс між апаратним пристроєм та ядром програмного забезпечення. Ви повинні ознайомитись з довідковою таблицею / посібником з технічним обладнанням, щоб зрозуміти поведінку пристрою, його стан та стан даних, а також надані фізичні канали. Знання складання для вашої конкретної архітектури та неабияке знання апаратних засобів VLSI Опис таких мов, як VHDL або Verilog допоможуть вам у довгостроковій перспективі.

З : Але чому я повинен читати технічні характеристики?

Відповідь : Тому що "існує прірва вуглецю та кремнію, яке програмне забезпечення не може подолати" - Рахул Соннад

Однак вищевикладене не створює проблем для обчислювальних алгоритмів ( код драйвера - обробка в нижній половині ), оскільки його можна повністю імітувати на універсальній машині Тьюрінга . Якщо обчислений результат справедливий у математичній області , це впевненість, що він також відповідає фізичній області .

Відео лекції про драйвери пристроїв Linux (Lec. 17 та 18), анатомія вбудованого драйвера KMS , керування контактами та GPIO оновлення , загальна рамка годинника , написання справжнього драйвера Linux - Грег К.Х.

static irqreturn_t phy_interrupt(int irq, void *phy_dat)
{
         struct phy_device *phydev = phy_dat;

         if (PHY_HALTED == phydev->state)
                 return IRQ_NONE;                /* It can't be ours.  */

         /* The MDIO bus is not allowed to be written in interrupt
          * context, so we need to disable the irq here.  A work
          * queue will write the PHY to disable and clear the
          * interrupt, and then reenable the irq line.
          */
         disable_irq_nosync(irq);
         atomic_inc(&phydev->irq_disable);

         queue_work(system_power_efficient_wq, &phydev->phy_queue);

         return IRQ_HANDLED;
}
  1. Драйвери пристроїв Linux - Джонатан Корбет, Алессандро Рубіні та Грег Кроа-Хартман
  2. Основні драйвери Linux - Sreekrishnan Venkateswaran
  3. Написання драйверів пристроїв Linux - Джеррі Куперштайн
  4. Посібник з програмування модуля ядра Linux - Пітер Джей Зальцман, Майкл Буріан, Орі Померанц
  5. Посібник для програміста Linux PCMCIA - Девід Хіндс
  6. Як програмувати Linux SCSI - Хейко Ейбфельдт
  7. Посібник із серійного програмування для операційних систем POSIX - Michael R. Sweet
  8. Графічні драйвери Linux: вступ - Stéphane Marchesin
  9. Посібник з програмування для драйверів USB-пристроїв Linux - Detlef Fliegl
  10. Модель пристрою ядра Linux - Патрік Мохель

Мережа ядра (1 -> 2 -> 3 -> ...)

"Назвіть це кланом, назвіть його мережею, назвіть це плем'ям, назвіть його сім'єю: як би ви його не називали, хто б ви не були, вам потрібен". - Джейн Говард

Розуміння проходження пакету в ядрі є ключовим фактором для розуміння роботи ядра. Розуміння цього є обов'язковим, якщо ми хочемо зрозуміти внутрішні ресурси Netfilter або IPSec тощо. Дві найважливіші структури мережевого рівня ядра Linux є: struct sk_buffіstruct net_device

static inline int sk_hashed(const struct sock *sk)
{
        return !sk_unhashed(sk);
} 
  1. Розуміння внутрішніх мереж Linux - Крістіан Бенвенуті
  2. Мережа Linux Kernel: впровадження та теорія - Рамі Розен
  3. Мережеве програмування UNIX - У. Річард Стівенс
  4. Остаточний посібник з мережевого програмування Linux - Кейр Девіс, Джон У. Тернер, Натан Йоком
  5. Linux TCP / IP стек: мережа для вбудованих систем - Томас Ф. Герберт
  6. Програмування сокетів Linux за прикладом - Warren W. Gay
  7. Розширені маршрутизації та управління трафіком Linux HOWTO - Берт Хуберт

Налагодження ядра (1 -> 4 -> 9 -> ...)

Якщо в спілкуванні з нею не сказано точно, що означає, неприємності можуть бути наслідком. ~ Алан Тьюрінг, про комп'ютери

Брайан В. Керніган у статті Unix для початківців (1979) сказав: "Найефективнішим інструментом налагодження все ще є ретельна думка, поєднана з розумно розміщеними заявами про друк". Знання, що збирати, допоможе швидко отримати потрібні дані для швидкої діагностики. Великий комп'ютерний вчений Едсгер Дайкстра одного разу сказав, що тестування може продемонструвати наявність помилок, але не їх відсутність. Хороша практика розслідування повинна врівноважувати необхідність швидкого вирішення проблем, необхідність формування своїх навичок та ефективного використання експертів з предметів.

Бувають випадки, коли ти стикаєшся низового боку, начебто нічого не працює, і у тебе не вистачає всіх варіантів. Тоді починається справжня налагодження. Помилка може забезпечити перерву, яку потрібно відключити від фіксації неефективного рішення.

Відео Лекції по Kernel Debug і профілювання , дампи пам'яті , аналізу , Multicore Налагодження з допомогою GDB , контролінг Багатоядерні Race Умови , налагодження електроніки

/* Buggy Code -- Stack frame problem
 * If you require information, do not free memory containing the information
 */
char *initialize() {
  char string[80];
  char* ptr = string;
  return ptr;
}

int main() {
  char *myval = initialize();
  do_something_with(myval);
}
/*  “When debugging, novices insert corrective code; experts remove defective code.”
 *     – Richard Pattis
#if DEBUG
 printk("The above can be considered as Development and Review in Industrial Practises");
#endif
 */
  1. Налагодження та налаштування продуктивності Linux - Steve Best
  2. Техніка налагодження програм Linux - Aurelian Melinte
  3. Налагодження за допомогою GDB: Налагоджувач на рівні джерел GNU - Roland H. Pesch
  4. Налагодження вбудованого Linux - Крістофер Холлінан
  5. Мистецтво налагодження за допомогою GDB, DDD та Eclipse - Норман С. Матлофф
  6. Чому програми виходять з ладу: Посібник із систематичної налагодження - Андреас Зеллер
  7. Програмний екзорцизм: посібник з налагодження та оптимізації застарілого коду - Білл Бланден
  8. Налагодження: пошук найбільш невловимих проблем із програмним та апаратним забезпеченням - Девід Дж. Аганс
  9. Налагодження шляхом мислення: мультидисциплінарний підхід - Роберт Чарльз Мецгер
  10. Знайдіть помилку: Книга невірних програм - Адам Барр

Файлові системи (1 -> 2 -> 6 -> ...)

"Я хотів мати віртуальну пам'ять, принаймні, як це поєднано з файловими системами". - Кен Томпсон

У системі UNIX все є файлом; якщо щось не є файлом, це процес, за винятком названих труб та розеток. У файловій системі файл представлений inode, своєрідним серійним номером, що містить інформацію про фактичні дані, що складають файл. Віртуальна файлова система Linux VFSзберігає інформацію в пам'яті кожної файлової системи під час її встановлення та використання. Необхідно бути обережним для правильного оновлення файлової системи, оскільки дані в цих кешах змінюються, коли файли та каталоги створюються, записуються та видаляються. Найважливішим із цих кешів є буферний кеш, який інтегрований у спосіб, коли окремі файлові системи отримують доступ до своїх базових блоків зберігання даних.

Відео лекції про системи зберігання даних , файлова система Flash Friendly

long do_sys_open(int dfd, const char __user *filename, int flags, umode_t mode)
{
        struct open_flags op;
        int fd = build_open_flags(flags, mode, &op);
        struct filename *tmp;

        if (fd)
                return fd;

        tmp = getname(filename);
        if (IS_ERR(tmp))
                return PTR_ERR(tmp);

        fd = get_unused_fd_flags(flags);
        if (fd >= 0) {
                struct file *f = do_filp_open(dfd, tmp, &op);
                if (IS_ERR(f)) {
                        put_unused_fd(fd);
                        fd = PTR_ERR(f);
                } else {
                        fsnotify_open(f);
                        fd_install(fd, f);
                }
        }
        putname(tmp);
        return fd;
}

SYSCALL_DEFINE3(open, const char __user *, filename, int, flags, umode_t, mode)
{
        if (force_o_largefile())
                flags |= O_LARGEFILE;

        return do_sys_open(AT_FDCWD, filename, flags, mode);
}
  1. Файлові системи Linux - панель Moshe
  2. Файлові системи Linux - Вільям Фон Хаген
  3. Файлові системи UNIX: еволюція, проектування та впровадження - Стів Д. Пат
  4. Практичний дизайн файлової системи - Домінік Джампаоло
  5. Криміналістичний аналіз файлової системи - Brian Carrier
  6. Ієрархія файлових систем Linux - Binh Nguyen
  7. BTRFS: Файлова система B-дерева Linux - Охад Роде
  8. StegFS: Стеганографічна файлова система для Linux - Ендрю Д. Макдональд, Маркус Г. Кун

Безпека (1 -> 2 -> 8 -> 4 -> 3 -> ...)

"UNIX не був розроблений для того, щоб перешкоджати користувачам робити дурні речі, оскільки це також заважало їм робити розумні речі". - Дуг Гвін

Жодна техніка не працює, якщо вона не використовується. Етика змінюється з використанням технології.

" F × S = k " продукт свободи та безпеки є постійною. - Закони Нівен

Криптографія складає основу довіри до Інтернету. Злом - це використання контролю безпеки будь-якого технічного, фізичного чи людського елемента. Захист ядра від інших запущених програм - це перший крок до надійної та стабільної системи, але цього, очевидно, недостатньо: певний ступінь захисту повинен існувати і між різними програмами user-land. Експлоатація може орієнтуватися на місцеві або віддалені служби.

"Ви не можете зламати свою долю, грубу силу ... вам потрібна задня дверцята, бічний канал у життя". - Клайд Дуза

Комп’ютери не вирішують проблем, вони виконують рішення. За кожним недетермінованим алгоритмічним кодом стоїть рішучий розум. - / var / log / dmesg

Відео лекції з криптографії та мережевої безпеки , простори імен для безпеки , захист від віддалених атак , захищений вбудований Linux

env x='() { :;}; echo vulnerable' bash -c "echo this is a test for Shellsock"
  1. Злом: мистецтво експлуатації - Джон Еріксон
  2. Арсенал Rootkit: втеча та ухилення від темних куточків системи - Білл Бланден
  3. Зловмисне викриття : Секрети безпеки мережі - Стюарт МакКлюр, Джоел Скамбре, Джордж Курц
  4. Посібник з експлуатації ядра: напад на ядро - Енріко Перла, Массіміліано Олдані
  5. Криміналістика мистецтва пам’яті - Майкл Хейл Лі, Ендрю Кейс, Джеймі Леві, Аарон Уолтерс
  6. Практична реверсна інженерія - Брюс Данг, Олександр Газе, Еліас Бачаалані
  7. Практичний аналіз шкідливих програм - Майкл Сікорський, Ендрю Хоніг
  8. Максимальна безпека Linux: Посібник хакера щодо захисту вашого Linux-сервера - анонімний
  9. Linux Security - Крейг Хант
  10. Реальна безпека Linux - Боб Токсен

Джерело ядра (0,11 -> 2,4 -> 2,6 -> 3,18)

"Як і вино, майстерність програмування ядра дозріває з часом. Але, на відміну від вина, воно стає солодшим у процесі". - Лавренція Мучека

Ви можете не думати, що програмісти - художники, але програмування - надзвичайно творча професія. Це творчість, заснована на логіці. Освіта з інформатики не може нікого зробити більш досвідченим програмістом, ніж вивчення кистей та пігменту може зробити когось майстром-майстром. Як ви вже знаєте, є різниця між пізнанням шляху та проходженням стежки; надзвичайно важливо засунути рукави і забруднити руки вихідним кодом ядра. Нарешті, отримавши таким чином знання ядра , куди б ви не поїхали, ви сяятимете .

Незрілі кодери імітують; зрілі кодери крадуть; погані кодери обмежують те, що вони беруть, а хороші кодери перетворюють це на щось краще чи принаймні щось інше. Хороший кодер вбудовує свою крадіжку в ціле почуття, яке є унікальним, абсолютно відмінним від того, з якого вона була зірвана.

Відео лекції про рецепти ядра

linux-0.11
├── boot
│   ├── bootsect.s      head.s      setup.s
├── fs
│   ├── bitmap.c    block_dev.c buffer.c        char_dev.c  exec.c
│   ├── fcntl.c     file_dev.c  file_table.c    inode.c     ioctl.c
│   ├── namei.c     open.c      pipe.c          read_write.c
│   ├── stat.c      super.c     truncate.c
├── include
│   ├── a.out.h     const.h     ctype.h     errno.h     fcntl.h
│   ├── signal.h    stdarg.h    stddef.h    string.h    termios.h
│   ├── time.h      unistd.h    utime.h
│   ├── asm
│   │   ├── io.h    memory.h    segment.h   system.h
│   ├── linux
│   │   ├── config.h    fdreg.h fs.h    hdreg.h     head.h
│   │   ├── kernel.h    mm.h    sched.h sys.h       tty.h
│   ├── sys
│   │   ├── stat.h      times.h types.h utsname.h   wait.h
├── init
│   └── main.c
├── kernel
│   ├── asm.s       exit.c      fork.c      mktime.c    panic.c
│   ├── printk.c    sched.c     signal.c    sys.c       system_calls.s
│   ├── traps.c     vsprintf.c
│   ├── blk_drv
│   │   ├── blk.h   floppy.c    hd.c    ll_rw_blk.c     ramdisk.c
│   ├── chr_drv
│   │   ├── console.c   keyboard.S  rs_io.s
│   │   ├── serial.c    tty_io.c    tty_ioctl.c
│   ├── math
│   │   ├── math_emulate.c
├── lib
│   ├── close.c  ctype.c  dup.c     errno.c  execve.c  _exit.c
│   ├── malloc.c open.c   setsid.c  string.c wait.c    write.c
├── Makefile
├── mm
│   ├── memory.c page.s
└── tools
    └── build.c
  1. Початок початківців з джерела Linux 0,11 (менше 20 000 рядків вихідного коду). Після 20 років розвитку, порівняно з Linux 0,11, Linux став дуже величезним, складним і важким для навчання. Але концепція дизайну та основна структура не мають кардинальних змін. Навчання Linux 0,11 все ще має важливе практичне значення.
  2. Обов’язкове читання для хакерів у ядрі => Linux_source_dir/Documentation/*
  3. Ви повинні бути підписані та активні принаймні в одному списку розсилки ядра. Почніть з початківців ядра .
  4. Вам не потрібно читати повний вихідний код. Після того, як ви ознайомитесь з API ядра та його використанням, почніть безпосередньо з вихідного коду підсистеми, яка вас цікавить. Ви також можете почати з написання власних модулів plug-n-play для експерименту з ядром.
  5. Автори драйверів пристроїв отримали б користь, маючи власне спеціальне обладнання. Почніть з Raspberry Pi .

2
Дякую! це досить вичерпна відповідь. Погляньте
Адам Матан

1
Ця відповідь дивовижна
pkqxdd

Дивовижна відповідь! Я також створив підручник, який може мене зацікавити: github.com/cirosantilli/linux-kernel-module-cheat Він містить високо автоматизовану установку, яка будує для вас ядро ​​Linux, QEMU та кореневу файлову систему. Включена налаштування налагодження кроку ядра GDB Linux.
Ciro Santilli 新疆 改造 中心 法轮功 六四 事件


5

Я пропоную вам прочитати " Ядро Linux у двох словах ", Грег Кроах-Хартман та " Розуміння ядра Linux ", Роберт Лав. Обов’язково читає :)


2
kroah.com/lkn - Безкоштовно онлайн
Джошуа Енфілд

@Josh Ці книги були написані 5-6 років тому, вони все ще актуальні?
Олексій Болотов,

Я не можу відповісти на це з будь-якою розумною правдоподібністю: (Інші обов'язки вимагали мого часу, і я ніколи не замислювався над цим читанням. Сподіваюсь, Wzzrd бачить ці коментарі і може коментувати.
Джошуа Енфілд,

1
Так, книги все ще актуальні. Багато, багато деталей змінилося до невпізнання. Подивіться на згадувану вище сторінку початківців ядра (або сторінку ядра lwn.net для поглибленої дискусії та новин).
фонбранд

4

Ще один хороший ресурс - драйвери пристроїв Linux . Це дало б вам інший спосіб потрапити у внутрішні розробки. З передмови:

Це, на перший погляд, книга про написання драйверів пристроїв для системи Linux. Це, звичайно, гідна мета; Потік нових апаратних продуктів швидше за все не сповільниться, і комусь доведеться змусити всі ці нові гаджети працювати з Linux. Але ця книга також про те, як працює ядро ​​Linux та як адаптувати його роботи до ваших потреб чи інтересів. Linux - це відкрита система; ця книга, ми сподіваємось, вона є більш відкритою та доступною для більшої спільноти розробників.


Мені завжди здається, що цілеспрямоване навчання для мене продуктивніше, ніж абстрактне навчання. Книга LDD дала мені шанс відкусити досить маленький шматок, щоб досягти прогресу.
Ларрі Смітм'є


2

Linux Kernel 2.4 Internals - ще один Інтернет-ресурс, на який слід звернути увагу. Схоже, використовується досить «заземлений» підхід, починаючи з завантаження. Тут TOC:

  1. Завантаження
    • 1.1 Побудова зображення ядра Linux
    • 1.2 завантаження: огляд
    • 1.3 Завантаження: BIOS POST
    • 1.4 Завантаження: завантажувач та налаштування
    • 1.5 Використання LILO як завантажувача
    • 1.6 Ініціалізація високого рівня
    • 1.7 SMP завантаження на x86
    • 1.8 Вивільнення даних і коду ініціалізації
    • 1.9 Обробка командного рядка ядра
  2. Управління процесами та перериваннями
    • 2.1 Структура завдань та таблиця процесів
    • 2.2 Створення та припинення завдань та ниток ядра
    • 2.3 Планувач Linux
    • 2.4 Реалізація пов'язаного списку Linux
    • 2.5 Зачекайте черги
    • 2.6 Таймери ядра
    • 2.7 Нижні половинки
    • 2.8 Черги із завданнями
    • 2.9 Задачі
    • 2.10 Софтірки
    • 2.11 Як системні виклики реалізуються в архітектурі i386?
    • 2.12 Атомні операції
    • 2.13 Spinlocks, Spinlocks читання-запису та Spinlocks Big-Reader
    • 2.14 Семафори та читання / запис Семафорів
    • 2.15 Підтримка ядра для завантаження модулів
  3. Віртуальна файлова система (VFS)
    • 3.1 Кеш-пам'ять і взаємодія з Dcache
    • 3.2 Реєстрація / Нереєстрація файлової системи
    • 3.3 Управління файлами дескрипторів
    • 3.4 Управління структурою файлів
    • 3.5 Управління суперблоком та монтажною точкою
    • 3.6 Приклад віртуальної файлової системи: pipefs
    • 3.7 Приклад файлової системи диска: BFS
    • 3.8 Виконання доменів та бінарних форматів
  4. Кеш сторінок Linux
  5. Механізми IPC
    • 5.1 Семафори
    • 5.2 Черги з повідомленнями
    • 5.3 Спільна пам'ять
    • 5.4 Примітиви Linux IPC

І, щоб зробити його ще солодшим, є нове третє видання Linux Kernel Development від Роберта Лава, і Slashdot має огляд.


1

Почніть з Linux Kernel Primer від Клаудії Зальцберг та ін. Добре почати з початківців. Книга Роберта Лава, безумовно, не та книга, з якої слід починати початківцям. Пізніша книга вище середнього рівня.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.