Hello, World!

~ Enjoy Today ~

动态链接函数调用是如何实现的
函数链接 根据函数在编译期间的链接方式, 我们可以将函数分为三种: 直接调用(Direct Call):这是最直接的一种方式,函数地址在编译时就已经确定,调用时直接跳转到目标地址。 静态链接(Static Linking):在编译时将库与程序合并,尽管在单个编译单元内不确定函数的具体地址,但在链接阶段会解析所有符号,最终生成的可执行文件包含所有必要的代码,无需依赖外部库。 动态链接(Dynamic Linking......
C/C++ & Python 融合之道
Python 解释器 正如软件系统通常分为定义与实现两部分,编程语言也是。 比如 C++ 标准是由国际标准化组织 ( ISO ) 下属的 ISO/IEC JTC1/SC22/WG21特别工作组制定的,最新标准为 C++ 20 (ISO/IEC 14882:2020),这是定义;而其实现则有 GNU 的 gcc、微软的 visual c++、Apple 发起的 clang 等等,任何人都可以按照定义去实现自己的实现。 Java 规范则是由 Oracle 主导的 JCP 所制定,有 Oracle Java SE、OpenJDK、Corretto、AdoptOpen 等大量......
Executable and Linkable Format
ELF Executable and Linkable Format,可执行与可链接格式,其一个很熟悉的身份就是 Linux 操作系统的标准可执行文件格式,在 Linux 上运行我们编写的代码时,就需要将其编译成 ELF 格式。 另外它还定义了共享库和核心转储文件的结构和布局。 ELF 文件格式在操作系统中起着重要的作用,它使得我们编写的代码能够被正确地编译、链接和执行。 此外,部分 Unix 系统,如: Solaris、FreeBSD 等也采用 ELF 作为其可执行文件格式。 ELF 文件格式被设计为可扩展和灵活的......
很快的共享内存
WHY 共享内存 进程间通信有许多种方式,不同的场景有不同的选择。 当通信内容非常简单的时候,可以考虑信号、信号量甚至 flock() 这种最基础的通信方式。 当需要传递不仅仅是信号这种规模的数据时,可以考虑 FIFO、MQ 等内核 API,也非常的简单易用 。 当我们的传输内容再进一步复杂,需要用“协议”去抽象这种复杂度的时候,Unix Domain Socket 会是一个不错的选择,比如常见的 gRPC over UDS;或者牺牲一点网络栈开销,直接使用基于 TCP / UDP 的 Socket 也非常......
Linux Kernel Debug Tips
Kernel Kernel undertakes the core Operating System job, which is the foundation of the current software ecosystem. So, knowing more about how the kernel works will contribute to the construction of our user mode system. The best method to learn software code is debugging while watching, software = code + data, know more about the runtime data while learning code can help us understand it better. However the Kernel is not a normal software system, we can’t add breakpoint and debug it through IDE debug button like other normal software, though we can implement it by kgdb + QEMU, it’ still too heavy, and not available for online systems. This article shares two lightweight kernel debugging tips, helps us observing it runtime status rapidly. Kernel Module Usally, our codes are runing in user mode. In Linux operating systems, the instruction of user mode program will run in level Ring 3 , they do not have the permission to acces the data in level Ring 0 high memory address space, which means that they can’t snoop the data inside Kernel. In that case, why not try to run our code inside the Kernel? It’s possible to edit the source code of kernel, adding log to print the information we concerned, but it’s a long tedious step.......
CubeFS&Kubernetes实践
Kubernetes (K8S) 是目前容器编排领域事实上的标准,在全球范围内有着广泛的应用。 CubeFS 既可以在 K8S 集群中部署客户端,通过 CSI 接口为 K8S 提供持久卷存储能力,也可以直接将 CubeFS 服务端集群整个部署在 K8S 中。 本文将分别介绍一下如何在 K8S 集群中部署 CubeFS 客户端、服务端,以及一些常见的运维操作和注意事项。 服务端 随着容器化的普及,基础设施全部上 K8S 是未来的趋势,这样所有的资源可以统一调度,且有着云原生庞大生态的加持,基础设施的运维成本也将大幅......
聊一聊磁盘
磁盘 磁盘是一种非常常见的持久化存储设备,相较于计算机上另外一种主要的存储设备:内存,磁盘则主要具有断电数据不丢失、容量通常更大、价格低廉等特点;当然我们今天这里主要聊的是广义上的磁盘,而不是特指利用磁性来存储的狭义上的概念。 存储介质 理论上任何能够表达两种状态,且能持久性的保持的东西都可以用来造磁盘;不过我们通常还要考虑成本等其他实际的问题。 我们通常指的磁盘,按照存储介质来分,主要能分为固态硬盘和机......