- 博客(11)
- 资源 (68)
- 收藏
- 关注
翻译 良好的Makefile实践
1. 背景这篇文章的主要目的是记录一些可以在Makefile中使用的技巧,以便可以为Makefile本身中的每个目标添加文档,并且可以将其作为make目标查看(例如make help)。在项目中拥有可靠的文档是一件很了不起的事情,而且如果它们不会过时,那就更好了。通常在顶级Readme.md或类似文件中记录每个Make目标。尽管这是迈出的重要第一步,但更新Makefile而不是更新文档是很常见的,因此使它们变得毫无用处。2. 目标最终目标是能够根据Makefile中的注释运行以下内容。# make
2020-11-27 10:42:39 233
原创 多核CPU缓存一致性协议MESI
在计算机系统中,CPU高速缓存(英语:CPU Cache)是用于减少处理器访问内存所需平均时间的部件。在金字塔式存储体系中它位于自顶向下的第二层,仅次于CPU寄存器。其容量远小于内存,但速度却可以接近处理器的频率。当处理器发出内存访问请求时,会先查看缓存内是否有请求数据。如果存在(命中),则不经访问内存直接返回该数据;如果不存在(失效),则要先把内存中的相应数据载入缓存,再将其返回处理器。1. CPU高速缓存(Cache Memory)1.1 CPU为何要有高速缓存CPU在摩尔定律的指导下以每18个
2020-11-26 17:35:12 681
原创 程序员画图工具Draw.io
程序员不要认为写好代码就好,画好图也很重要,难道你没听过PPT架构师,PPT架构师不就天天画图么。关于画图,俗话说,有图有真相!哦,不对,是一图胜千言。一图胜千言,沟通效率那不是刚刚的。Draw.io 是一个很好用的免费流程图绘制工具。你可以利用它绘制一系列的图表、图示或图形,包括流程图、UML 类图、组织结构图、泳道图、E-R 图、文氏图等等。一大堆的介绍,感觉很高端,其实我真正用的也就几个。这块软件可以在线访问进行画图,也可以下载安装包(绿色版)在本地打开进行画图,都是很方便的。这个画.
2020-11-24 13:26:10 1241 1
原创 程序员35岁前需要完成的10件事
作为一名程序员要在 35 岁前完成哪些事情呢?这因目标而异,但下面这些项目应该具有非常高的通用性:1.精通一门最常用的语言2.了解一个最常用平台的基本机制,比如:内存管理、线程机制等3.UML 图和面向对象分析设计方法4.设计原则和设计模式,如:职责单一等5.《代码大全》里讲的一切6.精读一个知名的, 但有点规模的程序。这点上要感谢开源项目给我们提供了这么多优秀程序。但要谨防好高骛远,动辄挑战 Linux 内核,精读是关键。7.累积一定的代码量,比如:独立的完整做过一个数万代码行的东西。这.
2020-11-22 19:51:50 337 1
原创 graph-easy使用简介
Graph::Easy 是一个处理图形DSL的Perl模块,它有如下功能:提供了一种易懂,可读性很强的图形描述语言一种支持 ASCII Art 的基于网格的布局器可以导出为 Graphviz, VCG (Visualizing Compiler Graphs), GDL (Graph Description LAnguages) 和 GraphML 格式。可以从 Graphviz, VCG 和 GDL 导入图像。1. graph-easy 安装1.1 安装perl# yum install
2020-11-22 12:26:33 2653
原创 通过QMP/QGA与虚拟机进行交互
1. QMP介绍qemu对外提供了一个socket接口,称为qemu monitor,通过该接口,可以对虚拟机实例的整个生命周期进行管理,通过该socket接口传递交互的协议是qmp,全称是qemu monitor protocol,基于json格式的协议,主要有如下功能状态查看、变更设备查看、变更性能查看、限制在线迁移数据备份访问内部操作系统2. QMP语法# 不带参数的指令{ "execute" : "XXX" }# 带参数的指令{ "execute" : "XXX", "
2020-11-17 10:22:28 2079
原创 C语言的构造函数与析构函数
C++和JAVA中有构造函数,C语言中也有实现的方法,在gcc下可以使用关键字 __attribute__指定构造函数或者析构函数。他们由编译器在编译阶段进行处理。声明构造函数:void __attribute__((constructor)) function(void)声明析构函数:void __attribute__((destructor)) function(void)例:#include <stdio.h>void __attribute__((construct
2020-11-16 10:22:49 3711
原创 KVM热迁移方式漫谈
1. Pre-copy 预拷贝内存预拷贝内存(Pre-copy)通过一个循环,将内存数据发送至目的主机VM,循环第一轮发送所有内存数据,接下来每一轮发送上一轮预拷贝过程中的脏页。最后一轮是停机拷贝阶段,源主机被挂起,停止内存更新,将脏页整体拷贝到目的主机vm上。对于更新速度非常快的内存部分,每次循环过程都会变脏,需要重复 pre-copy,同时也导致循环次数非常多,迁移的时间变长。针对这种情况,KVM 虚拟机建立了三个原则:集中原则,一个循环内的 dirty pages 小于等于 50;不扩散原则, 一
2020-11-11 22:22:10 1353
原创 内存虚拟化EPT技术简介
1. 内存虚拟化现代多任务操作系统设计,一般进程之间使用不同的虚拟地址空间相互隔离, 在实现上:操作系统负责维护进程页表,映射虚拟地址到物理地址的关系CPU的内存管理单元(MMU)负责执行地址转换CPU提供TLB(Translation lookaside buffer)缓存最近用到的转换结果,加速转换效率虚拟化技术引入后,内存地址空间更加复杂了,客户机(Guest)和宿主机(Host)都有自己的地址空间:GVA: Guest虚拟地址GPA: Guest物理地址HVA: Host虚拟地
2020-11-11 15:48:01 3139
原创 内存管理单元MMU简介
1. MMUMMU在CPU的配合下(通过页异常触发),实现了线性地址到物理地址的动态映射,为正在CPU上运行的应用程序(进程)提供了一个独立的连续内存空间(线性地址空间,或称虚拟内存空间,其中放置了代码段、数据段和堆栈段),屏蔽了地址分配、内存分配和内存回收等一系列复杂的系统行为。MMU的线性地址转换是通过页表进行的,具体过程如下图所示(摘自intel程序员手册卷3):其实最简单明了的方法是通过一个一维数组来记录映射关系:下标代表线性地址,数组元素内容代表物理地址。可是如此一来,用来表示映射关系的内
2020-11-11 10:41:34 6072 1
原创 Linux 64位进程地址空间分布概况
对于Linux 64位系统,理论上,64bit内存地址可用空间为0x0000000000000000 ~ 0xFFFFFFFFFFFFFFFF(16位十六进制数),这是个相当庞大的空间,Linux实际上只用了其中一小部分(256T)。Linux64位操作系统仅使用低47位,高17位做扩展(只能是全0或全1)。所以,实际用到的地址为空间为0x0000000000000000 ~ 0x00007FFFFFFFFFFF(user space)和0xFFFF800000000000 ~ 0xFFFFFFFFFFF
2020-11-05 18:38:16 13941 4
适用于 centos7安装的 bpftrace工具rpm包
2023-11-10
编译原理单元习题-华保健.rar
2021-02-24
Q-Dir文件浏览
2017-09-14
md5sum命令行计算工具
2017-09-14
C语言图像处理程序集
2015-12-29
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人