Ядро 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
Программное обеспечение:
Аппаратные средства:

Электронный магазин на Java и XML

Одна из причин быстрого распространения XML заключается в том, что Интернет способствует знакомству широких слоев пользователей с HTML, стандартным языком разметки web-страниц. HTML помог многим пользователям получить представление о том, как с помощью тегов в простой текст можно включать дополнительную информацию. Основываясь на этой идее, можно сделать следующий небольшой, хотя и нетривиальный, шаг — перейти к использованию тегов XML для описания данных.
Наиболее очевидным преимуществом XML является возможность расширения этого языка для решения специфических для каждого пользователя задач. Эта возможность делает XML столь привлекательным для тех, кому приходится работать с различными типами данных в какой-либо специальной области. Другoe, не столь очевидное преимущество заключается в том, что для любых расширений этого языка при проверке и обработке данных можно продолжать использовать инструментарий XML, если только при записи данных соблюдены правила языка.

Введение
XML и электронная коммерция
Технологии представления
Процесс оплаты
Разработка системы показа новостей
Параметры приложений