《linux 内核全然剖析》 笔记 CODE_SPACE 宏定义分析
2023-09-27 14:23:30 时间
在memory.c里面。遇到一个宏定义,例如以下:
#define CODE_SPACE(addr) ((((addr)+4095)&~4095) < \ current->start_code + current->end_code)
看的第一眼,不知道。第二眼。还是不知道。纠结了半天还是不知道。
睡了一晚,今天早上再看,嘿嘿,竟然看懂了。。。
这个宏定义用于推断给定的addr线性地址是否位于当前进程的代码段中。
4095 = 0xFFF;
addr+4095的作用是将位于0~4095产生一个进位。
比如2+4095 = 4097 = 0x1001 最左边的1就是产生的进位,接着
(addr+4095) & ~4095的作用就是把刚得到的结果的低12位置0.这样一来
0x1001就变成了0x1000这个就是addr所在页最后的地址+1,即是当前页面的下一个页面的開始地址。
如果一个代码段占领了4个页面大小的内存
addr在这四个页面的话。(addr+4095)& ~4095 得到的将是addr所在页面的下一个页面的起始地址。假设该结果小于current->start_code + current->end_code 即代码段的结束地址。那么则该地址在代码段内,否则在代码段外面。
有一句话“认真你就输了”。事实上是个人失望的表现,凡事就怕你较真,认真。死磕,终究会得到真正的答案,也许这个过程不好受。
相关文章
- centos-linux热拔插scsi硬盘
- linux信号
- 【ARM-Linux开发】内核3.x版本之后设备树机制
- 【Linux开发】linux设备驱动归纳总结(七):2.内核定时器
- linux学习之工具
- Linux基金会重磅发布企业开源指南
- linux服务之rsync
- linux常见进程与内核线程
- 上传文件到 Linux 服务器
- Linux内核参数之arp_ignore和arp_announce
- CentOS和Redhat发行版linux内核版本的对应关系
- Linux设备驱动开发详解:基于最新的Linux 4.0内核
- linux内核及其模块的查询,加载,卸载 lsusb等
- 《深入Linux内核》 UNIX的一些故事
- VirtualBox安装kali linux过程及安装后无法全屏问题解决方法(2)
- 【Linux】shell中svn报错:svn: Can't convert string from 'UTF-8' to native encoding:xxx
- Linux内核设计与实现学习笔记目录
- Linux 内核优化
- linux下的C语言开发(AT&T 汇编语言)
- linux IO 内核参数调优 之 原理和参数介绍
- .NET Core(C#) Windows和Linux上重新宽带拨号(PPPoE)实现换IP的方法及示例代码
- Linux内核分析:recv、recvfrom、recvmsg函数实现
- 【Linux 内核】编译 Linux 内核 ⑤ ( 查看 .config 编译配置文件 | 正式编译内核 )
- Redhat 各版本与linux内核对应参照表
- 关于linux内核驱动开发中Makefile编译的问题
- linux套件安装过程中configure,make,make install的作用
- 深入理解Linux内核-页高速缓存
- 深入理解Linux内核-进程地址空间
- 深入理解Linux内核-内存寻址
- Linux_LVM&Quota
- Linux内核:fork的学习——笔记自用