Posts
Huey's Blog
Cancel

学习笔记-CMake

帮助文档 cmake官方新手tutorial: https://cmake.org/cmake/help/latest/guide/tutorial/index.html cmake 添加头文件目录,链接动态、静态库 官方文档 cmake 语法 技巧 cmake命令是不区分大小写的,但是变量区分。 判断编译器类型 cmake if ("${CMAKE_...

Effective C++之55条建议

本文为Effective C++一书的学习总结,对55条程序设计建议条款进行罗列、简记。 1 让自己习惯 C++ No.01 视C++为一个语言联邦 C++实则是由多个次语言(Sublanguage)组成的联邦而非单一语言,主要的次语言包括 C、Object-Oriented C++、Template C++、STL。 No.02 尽量以 const, enum, inl...

Linux内核poll/select机制简析

0 I/O多路复用机制 I/O多路复用 (I/O multiplexing),提供了同时监测若干个文件描述符是否可以执行IO操作的能力。select/poll/epoll函数都提供了这样的机制,能够同时监控多个描述符,当某个描述符就绪(读或写就绪),则立刻通知相应程序进行读或写操作。本文将从内核源码(v5.2.14)入手,尝试简述poll/select机制的实现原理。 1 poll/se...

Redis集群环境搭建实践

0 Redis集群简介 Redis集群(Redis Cluster)是Redis提供的分布式数据库方案,通过分片(sharding)来进行数据共享,并提供复制和故障转移功能。相比于主从复制、哨兵模式,Redis集群实现了较为完善的高可用方案,解决了存储能力受到单机限制,写操作无法负载均衡的问题。 本文是Redis集群学习的实践总结,将逐步搭建Redis集群环境,并完成集群伸缩的实践。 1...

Redis源码笔记-服务器日志和函数可变参数处理server.c

server.h / server.c Redis源码中定义了几个和日志相关的函数,用于将不同级别的信息打印到不同的位置(日志文件或标准输出,取决于配置文件的设置),这些函数包括: void serverLog(int level, const char *fmt, ...); void serverLogRaw(int level, const char *msg); void ser...

Linux MMC 驱动子系统简述(源码剖析)

1. Linux MMC 驱动子系统 块设备是Linux系统中的基础外设之一,而MMC/SD存储设备是一种典型的块设备。Linux内核设计了MMC子系统,用于管理MMC/SD设备。 MMC子系统的框架结构如下图所示,其中core layer根据MMC/SD设备协议标准实现了协议。card layer与Linux的块设备子系统对接,实现块设备驱动以及完成请求,具体协议经过core laye...

Linux等待队列(Wait Queue)

1. Linux等待队列概述 Linux内核的等待队列(Wait Queue)是重要的数据结构,与进程调度机制紧密相关联,可以用来同步对系统资源的访问、异步事件通知、跨进程通信等。 在Linux中,等待队列以循环链表为基础结构,包括两种数据结构:等待队列头(wait queue head)和等待队列元素(wait queue),整个等待队列由等待队列头进行管理。下文将用内核源码(基于Lin...

Linux设备驱动模型简述(源码剖析)

Linux设备驱动模型和sysfs文件系统 Linux内核在2.6版本中引入设备驱动模型,简化了驱动程序的编写。Linux设备驱动模型包含设备(device)、总线(bus)、类(class)和驱动(driver),它们之间相互关联。其中设备(device)和驱动(driver)通过总线(bus)绑定在一起。 Linux内核中,分别用bus_type、device_driver和devic...

Redis源码笔记-内存管理zmalloc.c

zmalloc.h / zmalloc.c Redis源代码中关于内存管理相关的函数定义于zmalloc.c文件中,主要函数罗列如下。这里对malloc/free等相关函数的实现进行分析。 参考:博客园 void *zmalloc(size_t size); void *zcalloc(size_t size); void *zrealloc(void *ptr, size_t size...

Redis源码笔记-Linux 环境下自定义的宏定义

Linux环境下Redis源代码中的宏定义 Redis源代码中借助自定义宏定义完成了许多程序分支的分离,在开发的Linux环境下列举出当前环境下自定义的宏定义,以供分析时查询。Linux环境下主要用gcc编译,因此借助gcc -dM -E - < /dev/null命令获得相应的变量,大部分的自定义定义在config.h中定义。 #include <linux/version....