Linux内存管理模块分析 概述 内存管理主要分为三个方面: 管理物理内存:只有内核中负责内存管理的模块可以使用 管理虚拟内存:每个进程看到的都是独立且互不干扰的虚拟空间 物理内存和虚拟内存的转换:上述两者的映射关系 无论是内核态程序还是用户态程序,都使用虚拟内存,虚拟内存空间布局如下: 内核空间部分:存放内核进程的程序 用户空间部分:存放用户进程的程序,从最低位开始,逐个段如下: Tex 2022-07-17 Linux
Linux进程管理模块分析 二进制程序执行 编译过程 源代码文件会经过以下的步骤生成可执行文件(CSAPP): 预处理:预处理过程会将头文件嵌入代码中,定义宏展开,生成.i文件 编译:编译生成汇编语言程序,生成.s文件 汇编:汇编器as将汇编语言翻译成机器指令,打包成.o文件,这被称为Relocatable File 链接:链接器ld将链接库和重定位文件合并,生成可执行文件 编译 process.c内 2022-07-14 Linux
短网址系统设计总结 需求评估 输入数据:一个长网址、过期时间和一个自定义的别名 输出数据:自定义别名或者随机生成的短网址,过期时间之前访问都会被重定向到原始地址。 读多写少 实现原理:将短网址redirect到长网址(301/302跳转) 约束: 过期即失效 短网址唯一 支持自定义短网址 QPS要求、低延迟、可靠性、安全性 系统设计 可行解 写 输入长域名,判断是否存 2022-07-10 系统设计 #系统设计
Kafka学习笔记(四)-集群工作机制 Controller机制 Controller主要作用是在Zookeeper的帮助下管理和协调整个Kafka集群(在zk中存储集群元数据)。Kafka集群中会有一个或多个Broker,其中一个Broker会被选举为Controller,它负责管理整个集群中所有分区和副本的状态,其工作职责包括以下内容: Topic管理:完成对Kafka的Topic的创建删除、分区增加等操作。 分区重分配: 2022-07-06 中间件 > Kafka
Kafka学习笔记(三)-通信协议 协议设计 需要进行网络传输的中间件都会拥有自己的一套通信协议,这往往会成为该组件的性能瓶颈,需要考虑的优化点较多。Kafka自定义了基于TCP的二进制通信协议,Kafka2.0中,一共有43种协议类型,每个都有对应的请求和响应,与HTTP协议类似,它同样有RequestHeader和RequestBody。其中RequestHeader结构如下: api_key:API标识,例如PRODU 2022-07-03 中间件 > Kafka
分析Linux中的Zero-Copy技术 传统IO的流程 零拷贝技术是对传统IO的性能优化,在介绍零拷贝之前,先简单了解一下传统IO中,数据流向的过程: 用户进程发起read()调用,从用户态切换至内核态,DMA从文件中读取数据,并存储在IO Buffer(内核态) 请求得到的数据从IO Buffer拷贝到用户态Buffer(从内核态切换到用户态),然后返回给用户进程。 用户进程调用write()将数据输出到网卡中,此时将 2022-06-30 Linux
Kafka学习笔记(二)-存储架构 Kafka存储架构 Kafka是为了解决大数据量的实时日志流而产生的,日志流主要特点包括: 数据实时存储 海量数据存储与处理 Kafka需要保证以下几点: 存储的主要是消息流 要保证海量数据的高效存储 要支持海量数据的高效检索 要保证数据的安全性和稳定性 Kafka使用的存储方案是:磁盘顺序写 + 稀疏哈希索引。 日志目录布局 Kafka中消息以Topic为单 2022-06-29 中间件 > Kafka
小记-构建RPM包 准备工作 OS环境与rpm版本号如下: [root@localhost ~]# uname -a Linux localhost.localdomain 3.10.0-693.el7.x86_64 #1 SMP Tue Aug 22 21:09:27 UTC 2017 x86_64 x86_64 x86_64 GNU/Linux [root@localhost ~]# rpm --versi 2022-06-27 Linux