Внутреннее устройство ядра Linux 2.4
Построение образа ядра Linux
Загрузка: Обзор
Загрузка: BIOS POST
Загрузка: bootsector и setup
LILO в качестве загрузчика.
Высокоуровневая инициализация
SMP Загрузка на x86
Освобождение памяти после инициализации
Разбор командной строки
Структура задачи и таблица процессов
Создание и завершение задач и потоков ядра.
Планировщик
Реализация связанных списков в Linux
Очереди ожидания (Wait Queues)
Таймеры
Нижние половины (Bottom Halves)
Очереди задач
Tasklets
"Мягкие" IRQ
Как реализуются системные вызовы в архитектуре i386?
Атомарные (неделимые) операции
Блокировки (Spinlocks), Read-write блокировки и Big-Reader блокировки;
Семафоры
Поддержка загружаемых модулей
Кеш Inode и взаимодействие с Dcache
Регистрация/Дерегистрация файловых систем.
Управление файловыми дескрипторами
Управление файловой структурой
Управление Суперблоком и точкой монтирования
Пример виртуальной файловой системы: pipefs
Пример дисковой файловой системы: BFS
Домены исполнения и двоичные форматы
Кэш страниц в Linux
Механизмы IPC
Семафоры
Sys_semget()
Sys_semctl()
Sys_semop()
Незаблокированные операции над семафорами
Ошибка при выполнении операций над семафорами
Заблокированные операции над семафорами
Структуры даных поддержки механизма семафоров
Struct sem_array
Struct sem
Struct seminfo
Struct semid64_ds
Struct sem_queue
Struct sembuf
Struct sem_undo
Функции для работы с семафорами
Newary()
Freeary()
Semctl_down()
IPC_RMID
IPC_SET
Semctl_nolock()
IPC_INFO и SEM_INFO
SEM_STAT
Semctl_main()
GETALL
SETALL
IPC_STAT
GETVAL
GETPID
GETNCNT
GETZCNT
SETVAL
Count_semncnt()
Count_semzcnt()
Update_queue()
Try_atomic_semop()
Sem_revalidate()
Freeundos()
Alloc_undo()
Sem_exit()
Sys_msgget()
Sys_msgctl()
IPC_INFO ( или MSG_INFO)
IPC_STAT ( или MSG_STAT)
Sys_msgsnd()
Sys_msgrcv()
Структуры очередей сообщений
Struct msg_queue
Struct msg_msg
Struct msg_msgseg
Struct msg_sender
Struct msg_receiver
Struct msqid64_ds
Struct msqid_ds
Msg_setbuf
Newque()
Freeque()
Ss_wakeup()
Ss_add()
Expunge_all()
Load_msg()
Store_msg()
Free_msg()
Convert_mode()
Testmsg()
Pipelined_send()
Copy_msqid_to_user()
Copy_msqid_from_user()
Sys_shmget()
IPC_INFO
SHM_INFO
SHM_STAT, IPC_STAT
SHM_LOCK, SHM_UNLOCK
Sys_shmat()
Sys_shmdt()
Struct shminfo64
Struct shm_info
Struct shmid_kernel
Struct shmid64_ds
Struct shmem_inode_info
Newseg()
Shm_get_stat()
Shmem_lock()
Shm_destroy()
Shm_inc()
Shm_close()
Shmem_file_setup()
Универсальные примитивы, используемые всеми тремя механизмами IPC
Ipc_alloc()
Ipc_addid()
Ipc_rmid()
Ipc_buildid()
Ipc_checkid()
Grow_ary()
Ipc_findkey()
Ipcperms()
Ipc_lock()
Ipc_lockall()
Ipc_unlockall()
Ipc_get()
Ipc_parse_version()
Struct kern_ipc_perm
Struct ipc_ids
Struct ipc_id
Эффективное использование GNU Make
В этой книге я описываю свой опыт работы с утилитой GNU Make и, в частности, мою методику подготовки make-файлов. Я считаю свою методику довольно удобной, поскольку она предполагает:Автоматическое построение списка файлов с исходными текстами
Автоматическую генерацию зависимостей от включаемых файлов (с помощью компилятора GCC)
"Параллельную" сборку отладочной и рабочей версий программы
Моя книга построена несколько необычным образом. Как правило, книги строятся по принципу "от простого - к сложному". Для новичков это удобно, но может вызвать затруднение у профессионалов. Опытный программист будет вынужден "продираться" сквозь книгу, пропуская главы с известной ему информацией. Я решил построить книгу по другому принципу. Вся "квинтэссенция" книги, ее "главная идея", содержится в первой главе. Остальные главы носят более или менее дополнительный характер.
В начале каждой главы я кратко описываю, о чем в ней будет вестись речь, и какими знаниями нужно обладать, чтобы успешно воспринять излагаемый в главе материал. Для тех, кто чувствует, что недостаточно хорошо ориентируется в предмете разговора, я указываю на дополнительные главы, с которыми следует предварительно ознакомиться.
Для работы я использовал GNU Make версии 3.79.1. Некоторые старые версии GNU Make (например, версия 3.76.1 из дистрибутива Slackware 3.5) могут неправильно работать с примером "традиционного" строения make-файла (по-видимому, они "не воспринимают" старую форму записи шаблонных правил).
Моя методика использования GNU Make