第1章 Redis结构分析
1.1 C语言相关的前置知识复习
1.2 Redis背景
1.2.1 什么是Redis
1.2.2 ANSI C与GNU C
1.2.3 Redis源码下载
1.3 Redis sds函数分析
1.3.1 sds结构体分析
1.3.2 sdsnewlen函数分析
1.3.3 sdscatlen函数分析
1.3.4 sdslen函数分析
1.3.5 sdsMakeRoomFor函数分析
1.3.6 redisObject结构分析
1.3.7 Redis的压缩链表分析
1.4 通过Redis数据结构引发的思考
1.4.1 地址与值的思考
1.4.2 NULL的思考
1.4.3 数组与指针的思考
1.5 小结
第2章 操作系统相关介绍
2.1 进入Linux
2.1.1 内核源码下载
2.1.2 Linux目录解读
2.1.3 内核概览
2.1 历史背景
2.1.1 Linux相关背景
2.1.2 Intel相关背景
2.2 操作系统
2.2.1 什么是操作系统
2.2.2 操作系统启动过程
2.2.3 操作系统调用层级
2.3 地址空间
2.3.1 内存模型
2.3.2 为什么要有地址空间
2.3.3 什么是线性地址空间
2.3.4 段寄存器
2.3.5 指令指针寄存器
2.4 实模式与保护模式
2.5 特权级
2.5.1 CPL、RPL、DPL
2.5.1 一致性与非一致性
2.5.2 切换特权级的调用过程
2.6 小结
第3章 进程管理分析
3.1 进程的相关背景
3.1.1 单道批处理
3.1.2 多道批处理
3.1.3 分时系统
3.2 进程概览
3.2.1 元数据
3.2.2 上下文切换
3.2.3 进程描述符
3.2.4 任务状态段
3.3 内核初始化
3.3.1 内核的main函数
3.3.2 从内核态进入用户态
3.3.3 创建0号进程
3.4 进程调度
3.4.1 进程状态
3.4.2 execv函数
3.4.3 schedule函数
3.3.4 switch_to函数
3.4.5 sys_pause函数
3.4.6 sleep_on函数
3.4.7 interruptible_sleep_on函数
3.4.8 wake_up函数
3.4.9 sys_exit函数
3.4 中断处理分析
3.4.1 什么是中断
3.4.2 中断与异常的来源
3.4.3 中断描述符表
3.4.4 状态寄存器
3.4.5 程序调用
3.4.6 中断处理过程
3.4.7 系统调用
3.5 硬中断原理
3.5.1 request_irq函数
3.5.2 setup_irq函数
3.5.3 init_IRQ函数
3.5.4 interrupt[i] 数组生成
3.5.5 do_IRQ函数
3.5.6 handle_IRQ_event函数
3.6 软中断原理
3.6.1 raise_softirq函数
3.6.2 wakeup_softirqd函数
3.6.3 ksoftirqd内核线程的创建
3.6.4 ksoftirqd 函数
3.6.5 do_softirq函数
3.7 内核线程原理
3.7.1 sys_clone函数
3.7.2 do_fork函数
3.7.3 copy_files函数
3.7.4 copy_fs函数
3.7.5 copy_sighand函数
3.7.6 copy_mm函数
3.7.7 copy_thread函数
3.7.8 ret_from_fork函数
3.7.9 syscall_exit函数
3.8 信号原理
3.8.1 sys_kill函数
3.8.2 group_send_sig_info函数
3.8.3 handle_stop_signal函数
3.8.4 sig_ignored函数
3.8.5 LEGACY_QUEUE宏
3.8.6 send_signal函数
3.8.7 group_complete_signal函数
3.8.8 信号处理汇编
3.8.9 do_signal函数
3.9 小结
第4章 内存管理分析
4.1 分页概览
4.1.1 为什么分页?
4.1.2 控制寄存器
4.1.3 段选择子
4.1.4 段描述符
4.1.5 全局描述符表
4.1.6 局部描述符表
4.1.7 分页过程
4.2 内存描述符
4.3 mmap函数原理
4.3.1 sys_mmap函数
4.3.2 do_mmap2函数
4.3.3 do_mmap_pgoff函数分析
4.3.4 get_unmapped_area函数
4.3.5 find_vma_prepare函数
4.4 munmap函数原理
4.4.1 do_munmap函数
4.4.2 find_vma_prev函数
4.4.3 split_vma函数
4.4.4 find_vma函数
4.4.5 detach_vmas_to_be_unmapped函数
4.4.6 vma_merge函数
4.5 小结
第5章 I/O原理分析
5.1 I/O原理
5.1.1 提升I/O性能的基本思想
5.1.2 I/O执行流程
5.2 文件系统
5.2.1 虚拟文件系统
5.2.2 文件系统概览
5.2.3 文件系统布局
5.2.4 用户权限
5.3 open函数原理
5.3.1 sys_open函数
5.3.2 open_namei函数
5.3.3 dir_namei函数
5.3.4 get_dir函数
5.3.5 find_entry函数
5.3.6 new_inode函数
5.3.7 add_entry函数
5.4 close函数原理
5.4.1 sys_close函数
5.4.2 iput函数
5.5 read函数原理
5.5.1 sys_read函数
5.5.2 block_read函数
5.5.3 file_read函数
5.5.4 bmap函数
5.5.5 new_block函数
5.5.6 get_super函数
5.6 write函数原理
5.6.1 sys_write函数
5.6.2 block_write函数
5.6.3 file_write函数
5.7 高速缓冲区
5.7.1 buffer_head结构体
5.7.2 bread函数
5.7.3 breada函数
5.7.4 brelse函数
5.7.5 getblk函数
5.7.6 get_hash_table函数
5.7.7 wait_on_buffer函数
5.7.8 sync_dev函数
5.7.9 find_buffer函数
5.7.10 remove_from_queues函数
5.7.11 insert_into_queues函数
5.8 块设备驱动
5.8.1 块设备定义
5.8.1 ll_rw_block函数
5.8.2 make_request函数
5.8.3 lock_buffer函数
5.8.4 unlock_buffer函数
5.8.5 add_request函数
5.8.6 do_hd_request函数
5.9 高版本文件写入原理
5.9.1 sys_open函数
5.9.2 filp_open函数
5.9.3 open_namei函数
5.9.4 dentry_open函数
5.9.5 fd_install函数
5.9.6 sys _write函数
5.9.7 vfs_write函数
5.9.8 generic_file_write函数
5.9.9 generic_file_aio_write_nolock函数
5.9.10 generic_commit_write函数
5.10 小结
第6章 数据同步机制
6.1 同步机制概览
6.1.1 同步函数介绍
6.1.2 同步流程
6.1.3 page/buffer cache
6.1.4 create_buffers函数
6.2 O_DIRECT标志
6.2.1 generic_file_direct_IO函数
6.2.2 filemap_fdatawrite函数
6.2.3 mpage_writepages函数
6.2.4 ext2_writepage函数
6.2.5 filemap_fdatawait函数
6.2.6 ext2_direct_IO函数
6.2.7 do_direct_IO函数
6.2.8 submit_page_section函数
6.2.9 dio_bio_submit函数
6.3 O_SYNC标志
6.3.1 generic_osync_inode函数
6.3.2 sync_mapping_buffers函数
6.3.3 wait_on_buffer函数
6.3.4 ll_rw_block函数
6.3.5 write_inode_now函数
6.3.6 write_inode函数
6.3.7 wait_on_inode函数
6.4 sync函数
6.4.1 sys_sync函数
6.4.2 sync_inodes函数
6.4.3 sync_supers函数
6.5 fsync/fdatasync函数
6.5.1 sys_fsync/sys_fdatasync函数
6.5.2 ext2_sync_file函数
6.5.3 ext2_sync_inode函数
6.6 msync函数
6.6.1 sys_msync函数
6.6.2 msync_interval函数
6.6.3 filemap_sync函数
6.2.4 filemap_sync_pte_range
6.2.5 虚拟地址转化物理地址
6.2.5 set_page_dirty
6.7 小结
第7章 网络相关函数分析
7.1 TCP/IP流程概览
7.1.1 TCP流程
7.1.2 TCP状态变更
7.1.3 三次握手与四次挥手
7.1.4 TCP/IP四层模型
7.1.5 socket结构体
7.2 socket函数
7.2.1 sys_socket函数
7.2.2 sock_create函数
7.2.3 sock_alloc函数
7.2.4 inet_create函数
7.2.5 sock_init_data函数
7.2.6 sock_map_fd函数
7.3 bind函数
7.3.1 sys_bind函数
7.3.2 inet_bind函数
7.4 listen函数
7.4.1 sys_listen函数
7.4.2 inet_listen函数
7.4.3 tcp_listen_start函数
7.5 connect函数
7.5.1 sys_connect函数
7.5.2 inet_stream_connect函数
7.5.3 tcp_v4_connect函数
7.5.4 tcp_connect函数
7.5.5 tcp_transmit_skb函数
7.6 accept函数
7.6.1 sys_accept函数
7.6.2 inet_accept函数
7.6.3 tcp_accept函数
7.7 recv函数
7.7.1 sys_recv函数
7.7.2 inet_recvmsg函数
7.7.3 tcp_recvmsg函数
7.8 send函数
7.8.1 sys_send函数
7.8.2 inet_sendmsg函数
7.8.3 tcp_sendmsg函数
7.8.4 tcp_write_xmit函数
7.9 close函数
7.5.1 sys_close函数
7.9.2 inet_release函数
7.9.3 tcp_close函数
7.10 小结
第8章 Redis源码分析
8.1 Redis主流程分析
8.1.1 main函数
8.1.2 initServerConfig函数
8.1.3 initServer函数
8.1.4 setupSignalHandlers函数
8.1.5 createSharedObjects函数
8.1.6 adjustOpenFilesLimit函数
8.1.7 slowlogInit函数
8.1.8 bioInit函数
8.1.9 aeSetBeforeSleepProc函数
8.1.10 aeMain函数
8.1.11 aeDeleteEventLoop函数
8.2 Redis事件循环
8.2.1 event结构
8.2.2 Redis 事件循环设计
8.2.3 aeEventLoop结构体
8.2.4 aeFiredEvent结构体
8.2.5 aeTimeEvent结构体
8.2.6 aeFileEvent结构体
8.2.7 事件循环操作函数原型
8.2.8 ae_select实现
8.2.9 ae_epoll实现
8.3 Redis多路复用器
8.3.1 如何根据环境选择多路复用器
8.3.2 aeCreateEventLoop函数
8.3.3 aeCreateFileEvent函数
8.3.4 aeDeleteFileEvent函数
8.3.5 aeCreateTimeEvent函数
8.3.6 aeDeleteTimeEvent函数
8.3.7 aeMain函数
8.3.8 aeProcessEvents函数
8.3.9 processTimeEvents函数
8.3.10 aeWait函数
8.4 Redis请求与响应整体流程
8.4.1 anetTcpServer函数
8.4.2 anetUnixServer函数
8.4.3 acceptTcpHandler函数
8.4.4 acceptUnixHandler函数
8.4.5 acceptCommonHandler函数
8.4.6 createClient函数 437
8.4.7 readQueryFromClient函数
8.4.8 processInputBuffer函数
8.4.9 resetClient函数
8.4.10 processCommand函数
8.4.11 lookupCommand函数
8.4.12 queueMultiCommand函数
8.4.13 call函数
8.4.14 addReply函数
8.4.15 sendReplyToClient函数
8.5 小结
