随笔分类 - 工作BKM
摘要:典型的工具链 如上图所示, 整个过程分为三个步骤: 编译, 链接, 重定位 Step 1: 交叉编译 在这一步骤中, 所有的源文件都是基于高级语言(C or C++)进行编写的, 是从高级语言转换为机器可以理解的机器码。 Step 2: 链接目标文件 在单个文件被编译成目标文件后, 接下来是将它们链
阅读全文
摘要:read() ssize_t read(int fd, void buf[.count], size_t count); read from a file descriptor: attempts to read up to count bytes from file descriptor fd i
阅读全文
摘要:Linux系统为应用程序提供了功能强大且容易扩展的API, 但在某些情况下, 与硬件交互或进行需要访问系统中特权信息的操作时, 就需要一个内核模块。 Linux内核模块是一段编译后的二进制代码, 直接插入Linux内核中。 在Ring 0上运行。 1. 安装开发环境 (Ubuntu为例) sudo
阅读全文
摘要:静态大页可以通过两种方法来设置 1. 检查 /proc/meminfo, 确认系统支持HugePage HugePages_Total: 系统中配置的大页数 HugePages_Free:没有访问过的大页数 HugePage_Rsvd: 已经分配但是还未使用的页面数 2. 配置静态大页 通过在boo
阅读全文
摘要:为了解决页表项过多的问题, Linux提供了两种机制, 就是多级页表和大页。 一. 在阐述大页的优点之前, 先来看一下内存映射的页表结构。 PGD: Page Global Directory PUD: Page Upper Directory PMD: Page Middle Directory
阅读全文
摘要:一. 内存映射和页表 我们通常说的内存容量, 指的是物理内存, 只有内核才可以直接访问物理内存。 进程并不可以 Linux内核给每个进程都提供了一个独立的虚拟地址空间, 并且这个地址空间是连续的, 这样, 进程就可以很方便的访问虚拟内存。 虚拟地址空间的内部又被分为内核空间和用户空间两部分。 不同字
阅读全文