Ядро Linux в комментариях

       

Ядро Linux в комментариях

Введение
Как организована эта книга
Для кого предназначена эта книга

Как читать эту книгу
Глава 1. Введение в Linux
Краткая история создания Linux и Unix
Соглашение GNU General Public License
Процесс разработки Linux
Глава 2. Первое знакомство с кодом
Характерные особенности исходного кода ядра Linux
Использование свойств, специфических для gcc
Использование свойств, специфических для gcc - 2
Идиомы кода ядра
Сокращенное применение #if и #ifdef
Пример кода
Printk
Очереди ожидания
Struct wait_queue
Wait_event

__Wake_up
Модули ядра
Request_module
Exec_modprobe
Конфигурирование и компиляция ядра
Конфигурирование ядра
Сборка ядра
Резервное копирование

Распространение изменений

Ядро Linux в комментариях

Глава 3. Обзор архитектуры ядра
Цели проектирования
Ясность

Совместимость
Переносимость
Живучесть и безопасность
Быстродействие
Первый взгляд на архитектуру ядра
Более пристальный взгляд на архитектуру ядра
Так что же, ядро многослойное, модульное, или какое?

Ядро Linux в основном монолитное
Отношения между проектированием и реализацией
Структура каталогов исходного кода ядра
Documentation
Arch
Drivers

Fs
Include
Init
Ipc
Kernel
Lib
Mm
Net
Scripts
Зависящий и независящий от архитектуры код

Глава 4. Инициализация системы

Загрузка ПК
Инициализация ядра Linux
Start_kernel
BogoMIPS
Calibrate_delay
Разбор передаваемых ядру параметров

Parse_options
Checksetup
Profile_setup
Init
Глава 5. Системные вызовы
Что такое системный вызов?

Прерывания, пространство пользователя и пространство ядра
Способы реализации системных вызовов
System_call
Lcall7

Примеры системных вызовов
Sys_ni_syscall
Sys_time
Sys_reboot
Sys_sysinfo

Ядро Linux в комментариях

Глава 6. Сигналы, прерывания и время
Краткое замечание о блокировках
Сигналы

Структуры данных
Sigset_t
Struct sigaction
Siginfo_t
Struct signal_queue
Сервисные функции
Платформенно-независимая версия функций для sigset_t
Sigaddset
Sigdelset

Sigismember
Sigfindinword
Sigmask
Платформенно-зависимая версия функций для sigset_t
Функции работы с наборами

_SIG_SET_BINOP
_SIG_SET_OP
Sigemptyset
Sigaddsetmask
Siginitset
Отправка сигналов
Sys_kill
Kill_something_info
Kill_pg_info
Kill_proc_info

Send_sig_info
Force_sig_info
Recalc_sigpending
Ignored_signal
Do_signal

Dequeue_signal
Notify_parent
Handle_signal
Другие функции, связанные с обработкой сигналов
Sys_sigpending
Do_sigation
Sys_rt_sigtimedwait
Различия кода для сигналов реального и не реального времени

Sys_sigprocmask
Sys_rt_sigprocmask
Прерывания
IRQ
Нижние половины
Действия и IRQ

Init_IRQ
Init_ISA_irqs
Set_intr_gate
Setup_x86_irq
Request_irq
Free_irq
Probe_irq_on
Probe_irq_off
Обработчики и нижние половины аппаратных прерываний
Do_IRQ

Handle_IRQ_event
Do_bottom_half
Run_bottom_halves
Время и таймер
Do_timer
Timer_bh
Update_times
Update_wall_time
Calc_load

Run_old_timers
Очереди таймера

Ядро Linux в комментариях

Глава 7. Процессы и потоки
Планирование и временные кванты
Процессы реального времени
Приоритеты
Идентификаторы процессов (PID)
Подсчет ссылок
Возможности
Представление процессов в ядре

Состояния процессов
Происхождение процессов: fork и __clone
Do_fork
Выделение PID
Get_pid
Запуск новой программы

Do_execve
Prepare_binprm
Search_binary_handler
Форматы исполняемых файлов
Пример: обработчик двоичных файлов Java
Do_load_java
Load_java
Java_format

Init_java_binfmt
Планирование: посмотрите, как они выполняются!
Функции и политики планирования
Schedule
Switch_to
Вычисление адекватности процесса
Goodness
Приоритеты не реального времени

Sys_setpriority
Update_process_times
Update_process_times - 2
Приоритеты реального времени
Setscheduler
Учет ограничений

Sys_capget
Sys_capset
Идентификаторы пользователей и групп
Ограничения ресурсов
Все хорошее когда-то кончается а теперь, как это делается
Exit
Do_exit
__Exit_files

Wait
Sys_wait4
Release

Ядро Linux в комментариях

Глава 8. Память
Виртуальная память
Свопинг и страничный обмен
Адресное пространство

Модуль управления памятью
Каталоги страниц и таблицы страниц
Буфера хранения результатов преобразования
__Flush_tlb
Сегменты
Компоновка процессов памяти
Struct vm_area_struct
Struct vm_operations_struct

Struct mm_struct
Операции со структурами VMA
Find_vma
Find_vma_prev
Страничный обмен
Подробный обзор средств защиты страниц
Копирование при записи

Ситуация отсутствия страницы
Do_page_fault
Handle_mm_fault
Pgd_offset
Pmd_alloc
Pte_alloc

Handle_pte_fault
Update_mmu_cache
Do_wp_page
Вывод страниц на диск
Try_to_swap_out
Устройства свопинга
Get_swap_page

Swap_free
Sys_swapoff
Sys_swapon
Отображение памяти с помощью mmap
Do_mmap
Merge_segments
Do_munmap

Unmap_fixup
Динамическая память пространства пользователя и пространства ядра
Brk
Sys_brk
Vmalloc и vfree
Vmalloc
Get_vm_area
Vfree

Дамп памяти
Elf_core_dump

Ядро Linux в комментариях

Глава 9. Межпроцессное взаимодействие по принципу SystemV
Очереди сообщений
Краткий обзор очереди сообщений
Struct msg
Struct msqid_ds

Msgque
Msg_init
Real_msgsnd
Real_msgrcv
Sys_msgget

Sys_msgctl
Findkey
Newque
Freeque
Семафоры
Struct sem
Struct semid_ds
Struct sem_queue
Struct sembuf
Struct sem_undo
Sys_semop

Sys_semctl
Sem_exit
Append_to_queue
Prepend_to_queue
Remove_from_queue
Try_atomic_semop
Update_queue
Count_semncnt
Count_semzcnt

Разделяемая память
Struct shmid_ds
Struct shmid_kernel
Newseg
Sys_shmget
Killseg
Sys_shmctl
Insert_attach
Remove_attach

Sys_shmat
Shm_open
Shm_close
Sys_shmdt

Ядро Linux в комментариях

Глава 10. Симметричная мультипроцессорная обработка
Понятия и примитивы параллельного программирования

Атомарные операции
Проверка и установка
Down

Down_interruptible
Down_trylock
DOWN_VAR
DOWN_HEAD
DOWN_TAIL
Up

Блокировка в цикле
Spin_lock_string
Spin_unlock_string
Блокировка в цикле для чтения/записи
Read_lock
Write_lock
Усовершенствованные программируемые контроллеры прерываний и связь между процессорами
Smp_send_reschedule
Send_IPI_single

Как поддержка симметричной мультипроцессорной обработки влияет на архитектуру ядра
Влияние SMP на планирование
__Schedule_tail
Reschedule_idle
Reschedule_idle_slow
Release
Smp_local_timer_interrupt

Lock_kernel и unlock_kernel
Lock_kernel
Unlock_kernel
Softirq_trylock
Cli и sti
__Global_cli
__Global_sti

Irq_enter и irq_exit
Irq_enter
Irq_exit
Глава 11. Настраиваемые параметры ядра
Struct ctl_table
Поддержка /proc/sys
Register_proc_table
Unregister_proc_table

Do_rw_proc
Proc_dostring
Proc_doutsstring
Do_proc_dointvec
Proc_dointvec_minmax
Системный вызов sysctl
Do_sysctl

Parse_table
Do_sysctl_strategy
Register_sysctl_table
Unregister_sysctl_table
Sysctl_string
Sysctl_intvec

Ядро Linux в комментариях

Arch/i386/kernel/entry.S

Arch/i386/kernel/init_task.c
Arch/i386/kernel/irq.c
Arch/i386/kernel/irq.h
Arch/i386/kernel/process.c

Arch/i386/kernel/signal.c
Arch/i386/kernel/smp.c
Arch/i386/kernel/time.c
Arch/i386/kernel/traps.c
Arch/i386/lib/delay.c

Arch/i386/mm/fault.c
Arch/i386/mm/init.c
Fs/binfmt_elf.c
Fs/binfmt_java.c
Fs/exec.c

Include/asm-generic/smplock.h
Include/asm-i386/atomic.h
Include/asm-i386/current.h
Include/asm-i386/dma.h
Include/asm-i386/elf.h
Include/asm-i386/hardirq.h
Include/asm-i386/page.h
Include/asm-i386/pgtable.h

Include/asm-i386/ptrace.h
Include/asm-i386/semaphore.h
Include/asm-i386/shmparam.h
Include/asm-i386/sigcontext.h
Include/asm-i386/siginfo.h
Include/asm-i386/signal.h

Include/asm-i386/smp.h
Include/asm-i386/softirq.h
Include/asm-i386/spinlock.h
Include/asm-i386/system.h
Include/asm-i386/uaccess.h
Include/linux/binfmts.h
Include/linux/capability.h
Include/linux/elf.h

Include/linux/elfcore.h
Include/linux/interrupt.h
Include/linux/kernel.h
Include/linux/kernel_stat.h
Include/linux/limits.h
Include/linux/mm.h
Include/linux/module.h
Include/linux/msg.h
Include/linux/personality.h
Include/linux/reboot.h

Include/linux/resource.h
Include/linux/sched.h
Include/linux/sem.h
Include/linux/shm.h

Include/linux/signal.h
Include/linux/slab.h
Include/linux/smp.h
Include/linux/smp_lock.h
Include/linux/swap.h
Include/linux/swapctl.h
Include/linux/sysctl.h
Include/linux/tasks.h
Include/linux/time.h

Include/linux/timer.h
Include/linux/times.h
Include/linux/tqueue.h
Include/linux/wait.h
Init/main.c

Init/version.c
Ipc/msg.c
Ipc/sem.c
Ipc/shm.c
Ipc/util.c
Kernel/capability.c

Kernel/dma.c
Kernel/exec_domain.c
Kernel/exit.c
Kernel/fork.c
Kernel/info.c

Kernel/itimer.c
Kernel/kmod.c
Kernel/module.c
Kernel/panic.c
Kernel/printk.c
Kernel/sched.c
Kernel/signal.c

Ядро Linux в комментариях

Kernel/softirq.c
Kernel/sys.c

Kernel/sysctl.c
Kernel/time.c
Mm/memory.c
Mm/mlock.c
Mm/mmap.c
Mm/mprotect.c
Mm/mremap.c
Mm/page_alloc.c
Mm/page_io.c
Mm/slab.c
Mm/swap.c

Mm/swap_state.c
Mm/swapfile.c
Mm/vmalloc.c
Mm/vmscan.c
Приложение А. Linux 2.4
Уменьшение случаев бегства
До свидания, Java!

Разряды возможности ELF
Ускорение планировщика
Больше процессов
Существенное усовершенствование поддержки SMP-машин
Приложение B. GNU General Public License
Preamble
Terms And Conditions For Copying, Distribution And Modification

No Warranty
How to Apply These Terms to Your New Programs
Сопровождающий CD-ROM
Программное обеспечение:
Аппаратные средства: