Меню

Новости

Linux

Введение в Linux
Краткая история создания Linux и Unix
Соглашение GNU General Public License
Процесс разработки Linux
Глава 2. Первое знакомство с кодом
Характерные особенности исходного кода ядра Linux
Использование свойств, специфических для gcc
Идиомы кода ядра
Сокращенное применение #if и #ifdef
Пример кода
printk
printk
Очереди ожидания
struct wait_queue
wait_event
__wait_event
__wake_up
Модули ядра
request_module
exec_modprobe
Конфигурирование и компиляция ядра
Конфигурирование ядра
Сборка ядра
Резервное копирование
Распространение изменений
Глава 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
init
Глава 5. Системные вызовы
Что такое системный вызов?
Прерывания, пространство пользователя и пространство ядра
Способы реализации системных вызовов
system_call
system_call
lcall7
lcall7
Примеры системных вызовов
sys_ni_syscall
sys_time
sys_reboot
sys_sysinfo
Глава 6. Сигналы, прерывания и время
Краткое замечание о блокировках
Сигналы
Структуры данных
sigset_t
struct sigaction
siginfo_t
struct signal_queue
Сервисные функции
Платформенно независимые версии функций
sigaddset
sigdelset
sigismember
sigfindinword
sigmask
Платформенно зависимые версии функций
sigaddset
sigdelset
sigismember
sigmask
sigfindinword
Функции работы с наборами
_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
Очереди таймера
Глава 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
Приоритеты реального времени
setscheduler
Учет ограничений
Возможности
sys_capget
sys_capset
Идентификаторы пользователей и групп
Ограничения ресурсов
Все хорошее когда-то кончается — а теперь, как это делается
exit
do_exit
__exit_files
wait
sys_wait4
release
Глава 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
Глава 9. Межпроцессное взаимодействие по принципу System V
Очереди сообщений
Краткий обзор очереди сообщений
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
Глава 10. Симметричная мультипроцессорная обработка
Понятия и примитивы параллельного программирования
Атомарные операции
Проверка и установка
Семафоры
down
down_interruptible
down_trylock
DOWN_VAR
DOWN_HEAD
DOWN_TAIL
__down
__down_interruptible
__down_trylock
up
__up
__wake_up
Блокировка в цикле
spin_lock_string
spin_unlock_string
read_lock
read_unlock
write_lock
write_unlock
Усовершенствованные программируемые контроллеры прерываний и связь между процессорами
smp_send_reschedule
send_IPI_single
Как поддержка симметричной мультипроцессорной обработки влияет на архитектуру ядра
Влияние SMP на планирование
schedule
__schedule_tail
reschedule_idle
reschedule_idle_slow
release
smp_local_timer_interrupt
smp_local_timer_interrupt
lock_kernel и unlock_kernel
lock_kernel
unlock_kernel
softirq_trylock
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 2.4
Приложение В. Общая лицензия GNU
Сопровождающий CD-ROM

Linux

Код ядра 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
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

2011-03-01Ядро Linux в комментариях

Книга Ядро Linux в комментариях предоставляет уникальную информацию по внутреннему строению наиболее важной части ядра Linux. Linux — это полноценная, 32-разрядная, мультизадачная операционная система, которая за последние годы завоевала очень большую популярность у пользователей по всему миру. В книге приводятся наиболее детализированные и емкие комментарии кода ядра Linux, которые окажутся полезными для многих программистов и разработчиков.
Удобная для изучения организация книги позволяет без особого труда разобраться во всех хитросплетениях кода. Сопровождающий книгу CD-ROM существенно упрощает процесс изучения, поскольку содержит все необходимые исходные коды нескольких версий ядра Linux.

Комментарии кода ядра Linux

Часть II. Комментарии кода ядра Linux

Часть II. Комментарии кода ядра Linux
Глава 1. Введение в Linux
Краткая история создания Linux и Unix
Соглашение GNU General Public License
Процесс разработки Linux
Глава 2. Первое знакомство с кодом
Характерные особенности исходного кода ядра Linux
Использование свойств, специфических для gcc
Идиомы кода ядра
Сокращенное применение #if и #ifdef
Пример кода
printk
printk
Очереди ожидания
struct wait_queue
wait_event
__wait_event
__wake_up
Модули ядра
request_module
exec_modprobe
Конфигурирование и компиляция ядра
Конфигурирование ядра
Сборка ядра
Резервное копирование
Распространение изменений
Глава 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
init
Глава 5. Системные вызовы
Что такое системный вызов?
Прерывания, пространство пользователя и пространство ядра
Способы реализации системных вызовов
system_call
system_call
lcall7
lcall7
Примеры системных вызовов
sys_ni_syscall
sys_time
sys_reboot
sys_sysinfo
Глава 6. Сигналы, прерывания и время
Краткое замечание о блокировках
Сигналы
Структуры данных
sigset_t
struct sigaction
siginfo_t
struct signal_queue
Сервисные функции
Платформенно независимые версии функций
sigaddset
sigdelset
sigismember
sigfindinword
sigmask
Платформенно зависимые версии функций
sigaddset
sigdelset
sigismember
sigmask
sigfindinword
Функции работы с наборами
_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
Очереди таймера
Глава 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
Приоритеты реального времени
setscheduler
Учет ограничений
Возможности
sys_capget
sys_capset
Идентификаторы пользователей и групп
Ограничения ресурсов
Все хорошее когда-то кончается — а теперь, как это делается
exit
do_exit
__exit_files
wait
sys_wait4
release
Глава 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
Глава 9. Межпроцессное взаимодействие по принципу System V
Очереди сообщений
Краткий обзор очереди сообщений
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
Глава 10. Симметричная мультипроцессорная обработка
Понятия и примитивы параллельного программирования
Атомарные операции
Проверка и установка
Семафоры
down
down_interruptible
down_trylock
DOWN_VAR
DOWN_HEAD
DOWN_TAIL
__down
__down_interruptible
__down_trylock
up
__up
__wake_up
Блокировка в цикле
spin_lock_string
spin_unlock_string
read_lock
read_unlock
write_lock
write_unlock
Усовершенствованные программируемые контроллеры прерываний и связь между процессорами
smp_send_reschedule
send_IPI_single
Как поддержка симметричной мультипроцессорной обработки влияет на архитектуру ядра
Влияние SMP на планирование
schedule
__schedule_tail
reschedule_idle
reschedule_idle_slow
release
smp_local_timer_interrupt
smp_local_timer_interrupt
lock_kernel и unlock_kernel
lock_kernel
unlock_kernel
softirq_trylock
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 2.4
Приложение В. Общая лицензия GNU
Сопровождающий CD-ROM

Код ядра Linux

Оглавление

Об авторе
Благодарности
Введение
Как организована эта книга
Для кого предназначена эта книга
Как читать эту книгу
Часть I. Код ядра 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
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

 

Li-nux.ru
Copyright © 2011, Все права защищены