計算之道 捲II:Linux內核源碼與Redis源碼

黃俊 秦羽

  • 出版商: 清華大學
  • 出版日期: 2024-12-01
  • 定價: $834
  • 售價: 8.5$709
  • 語言: 簡體中文
  • ISBN: 7302675740
  • ISBN-13: 9787302675747
  • 相關分類: LinuxKey-Value Store
  • 下單後立即進貨 (約4週~6週)

  • 計算之道 捲II:Linux內核源碼與Redis源碼-preview-1
  • 計算之道 捲II:Linux內核源碼與Redis源碼-preview-2
  • 計算之道 捲II:Linux內核源碼與Redis源碼-preview-3
計算之道 捲II:Linux內核源碼與Redis源碼-preview-1

相關主題

商品描述

本書是一本全面深入探討深度學習領域的核心原理與應用實踐的專業書籍。本書旨在為讀者提供系統的學習路徑,從深度學習的基礎知識出發,逐步深入到復雜的大模型架構和算法實現。本書適合深度學習初學者、中級開發者以及對大模型有深入研究需求的專業人士。通過閱讀本書,讀者不僅能夠掌握深度學習的理論基礎,還能通過豐富的實戰案例,提升解決實際問題的能力。

目錄大綱

第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 小結