Linux的初始页表
LOWMEM,是相对于HIGHMEM而言,其实就是内核态直接映射的物理内存空间的大小,一般为896MB。
这里只是粗略地估计了一下,取1GB。
LOWMEM_PAGES代表了LOWMEM区域对应了多少内存页,1GB / 4KB = 256K,即需要256K个页表项来描述内核空间
1: /* Number of possible pages in the lowmem region */
2: LOWMEM_PAGES = (((1<<32) - __PAGE_OFFSET) >> PAGE_SHIFT)
计算一下,需要多少内存页来存放LOWMEM区域对应的内存页表项,有256个页表,每个页表占1页内存,需要256页,即256 * 4KB = 1MB来存放256个页表。
1: /* Enough space to fit pagetables for the low memory linear map */
2: MAPPING_BEYOND_END = PAGE_TABLE_SIZE(LOWMEM_PAGES) << PAGE_SHIFT
其中,PAGE_TABLE_SIZE用来计算需要多少个页表来容纳这么多的页, 256K / 1K = 256,需要256个页表
1: #if PTRS_PER_PMD > 1
2: #define PAGE_TABLE_SIZE(pages) (((pages) / PTRS_PER_PMD) + PTRS_PER_PGD)
3: #else
4: #define PAGE_TABLE_SIZE(pages) ((pages) / PTRS_PER_PGD)
5: #endif
下面的计算与上面是相同的, INIT_MAP_SIZE也是1MB
1: /*
2: * Worst-case size of the kernel mapping we need to make:
3: * a relocatable kernel can live anywhere in lowmem, so we need to be able
4: * to map all of lowmem.
5: */
6: KERNEL_PAGES = LOWMEM_PAGES
7:
8: INIT_MAP_SIZE = PAGE_TABLE_SIZE(KERNEL_PAGES) * PAGE_SIZE
9: RESERVE_BRK(pagetables, INIT_MAP_SIZE)
RESERVE_BRK的作用是在.brk区域预留1MB大小的空间,并且设置pagetables为该区域的起始位置的标号名称。
1: /*
2: * Reserve space in the brk section. The name must be unique within
3: * the file, and somewhat descriptive. The size is in bytes. Must be
4: * used at file scope.
5: *
6: * (This uses a temp function to wrap the asm so we can pass it the
7: * size parameter; otherwise we wouldn't be able to. We can't use a
8: * "section" attribute on a normal variable because it always ends up
9: * being @progbits, which ends up allocating space in the vmlinux
10: * executable.)
11: */
12: #define RESERVE_BRK(name,sz) \
13: static void __section(.discard.text) __used notrace \
14: __brk_reservation_fn_##name##__(void) { \
15: asm volatile ( \
16: ".pushsection .brk_reservation,\"aw\",@nobits;" \
17: ".brk." #name ":" \
18: " 1:.skip %c0;" \
19: " .size .brk." #name ", . - 1b;" \
20: " .popsection" \
21: : : "i" (sz)); \
22: }
Linux的初始页表的更多相关文章
- Linux kernel 内存 - 页表映射(SHIFT,SIZE,MASK)和转换(32位,64位)
0. Intro 如下是在32位下的情况,32位下,只有三级页表:PGD,PMD,PTE 在64位情况下,会有四级页表:PGD,PUD,PMD,PTE 但是原理基本上是一样的,本文主要是想记录一下页表 ...
- Linux系统初始流程
一.0S(内核的功能):平台类软件(通用软件) 进程管理:进程调度器(scheduler)维持一个任务结构(task_struct) 内存管理:如何使用线性地址空间,如何分段,如何分页,如何避免内存( ...
- linux --- 1.初始linux
一.计算机简单认识 1.服务器的硬件 ①输入单元:键盘,鼠标,读卡器,触摸屏,手写板 ②主机部分:主板,cpu,显卡,内存条,硬盘,网卡,声卡,电池,散热器 ③输出单元:显示器,打印机 2.内存,cp ...
- Linux 分区初始化为物理卷,把物理卷加入卷组
用到的命令有 1.pvcreate (physical volume create) 2.vgcreate (volume group create) 例子1:创建物理卷 pvcreate /dev/ ...
- Linux知识--初始linux
从今天开始陆续分享Linux的知识 因为服务器基本是Linux的 所以Linux不学明白 Shell命令不熟 会让你的办事效率大打折扣. 一.Linux文件系统 Linux文件系统是从Unix结构 ...
- Linux 服务器初始配置步骤
1.IP配置 vim /etc/sysconfig/network-scripts/ifcfg- BOOTPROTO=dhcp 改成 static ONBOOT=no 改成 yes 添加 IPADDR ...
- Linux - root初始密码设置
Ubuntu刚安装后,不能在terminal中运行su命令,因为root没有默认密码,需要手动设定. 以安装ubuntu时输入的用户名登陆,该用户在admin组中,有权限给root设定密码. 给roo ...
- Linux系统初始配置标准化
Inux系统标准化 配置环境:4台Centos7.6版本的虚拟机,刚刚最小化安装完成,未作任何操作,分别是node1.node2.node3.node4 本文打算利用ansible工具对这四台虚拟机进 ...
- linux内存管理解析1----linux物理,线性内存布局及页表的初始化
主要议题: 1分页,分段模式及实模式 2Linux分页 3linux内存线性地址空间布局及物理内存空间布局 4linux页表初始化及代码解析 1.1.1内存寻址和保护模式 在X86平台上,内存控制单元 ...
随机推荐
- mysql事件(定时任务)处理超时失效订单
MySQL事件(定时任务) https://blog.csdn.net/pan_junbiao/article/details/86489237 UPDATE wz_mer_goods_spec as ...
- 人物-IT-周鸿祎:百科
ylbtech-人物-IT-周鸿祎:百科 周鸿祎(zhōu hóng yī),1970年10月4日生于湖北省黄冈市蕲春县.360公司创始人.董事长兼CEO.奇酷CEO.九三学社中央委员.九三学社中央科 ...
- js对div取值与赋值
js对div取值与赋值 因为JavaScript运行时,id="test1" 的那个div元素可能还没解析和加载,js加载是有顺序的.只需把 js 整个搬到 后面即可. 还有一个特 ...
- 研究一下phpspider
官方文档 1.下载 官方github下载地址: https://github.com/owner888/phpspider 下载地址可能无法访问,这里提供一个网盘下载地址: 链接: https://p ...
- canvas简单画图板
<!DOCTYPE html> <html lang='en'> <head> <meta charset='UTF-8'> <title> ...
- MYSQL索引的深入学习
通常大型网站单日就可能会产生几十万甚至几百万的数据,对于没有索引的表,单表查询可能几十万数据就是瓶颈. 一个简单的对比测试 以我去年测试的数据作为一个简单示例,20多条数据源随机生成200万条数据,平 ...
- awk 按小时 统计接口调用次数
#统计所有接口总量awk -F ' ' '{a[$7]++} END{for(i in a){print i,a[i] | "sort -r -k 7"}}' accesslog/ ...
- lg5169 xtq的异或和
题目 根据一些众所周知的结论,我们先跑一棵生成树出来,之后把所有简单环都搞出来,那么\(u\)到\(v\)的路径一定可以由树上的路径和一些简单环拼起来得到 把所有简单环都插到一个线性基里,之后dfs一 ...
- CSS3 动画Animation的8大属性
animation复合属性.检索或设置对象所应用的动画特效. 如果有多个属性值时以","隔开,适用于所有元素,包含伪对象:after和:before 1.animation-nam ...
- 从URL输入到页面展现,过程中发生了什么?
从在地址栏中输入了URL,到浏览器展现出页面整个过程中,大概经历了如下过程: 在浏览器地址中输入了URL并回车 域名解析 服务器处理请求 浏览器处理 网页的绘制 一.在浏览器地址中输入URL 首先解释 ...