ARM内核驱动-内存-链表-进程管理

ARM内核驱动-内存-链表-进程管理
摘要由CSDN通过智能技术生成

对于一个计算机系统来讲,最重要的两个部分是cpu和内存。

一、linux内存管理子系统

包括内存管理模型、地址映射管理和物理地址分配管理

1.1、内核子系统简介

system call interface (SCI)、process management(pm)、memory management(mm)、arch、virtual file system(vfs)、network stack

1.2、内存管理模型


1.3、管理内容

1、虚拟地址与物理地址的映射

在编写裸机程序时,GPIO的控制寄存器地址指的就是物理地址,linux系统中使用的都是虚拟地址,malloc函数首先分配的也是虚拟地址。

2、物理内存的分配

2、地址映射管理

2.1、Linux虚拟地址空间分布

linux的地址空间分为内核空间和用户空间,内核空间又分为直接映射区、vmalloc区、永久内核映射区、固定映射区等。对于一个32位机的linux系统。,其地址空间为4G,其中0-3G为用户空间,3-4G为内核空间(内核空间的前896M为低端内存,高于896M的部分为高端内存。在内核空间的前896M,地址空间与物理空间是线性映射关系,而高128M是非线性映射关系。这样的目的是为了,解决1G的内核空间对大于1G物理内存的管理)。

直接映射区:在直接映射区对应的物理地址为虚拟地址减去3G。

vmalloc:可以访问低端区和高端区。

永久映射区:可以访问高端内存

固定映射区:虚拟地址与固定寄存器的映射区

2.2、虚拟地址转化为物理地址

对于32位虚拟地址,它的高10位,存放了页目录偏移量,低12位存放了物理页(4K)偏移量,中间10位存放了页表偏移量。物理页大小为4k,也可称为页帧或页框。

具体过程描述:首先设定一个基地址,基地址加上页目录偏移量,就是页表的基地址,再加上页表偏移量就是物理页的基地址,最后加上物理页偏移量就是要找的物理页地址,它的大小为4K。

3、物理内存分配


什么时候分配物理内存?

linux系统使用虚拟地址的方式来分配物理内存。比如说电影院有100个座位,你打算请人看电影。如果你只发100张票,也许只来50人,其它人有事不能来。所以,你要发200张票。而这200张票就是所谓的虚拟地址,而100个座位就是物理地址。拿到电影票的人不一定能得到座位。而虚拟内存管理的机制与此相似。分配了虚拟地址还未分配物理地址。

在linux中,用malloc分配的是虚拟地址,只有访问虚拟地址时,才会分配物理内存。

而在内核中的kmalloc,它会分配虚拟内存的同时分配物理内存,并一一对应。

二、linux内核链表

1、链表是一种常用的数据结构,它通过指针将一系列数据节点连接成一条数据链。相对于数组,链表具有更好的动态性,建立链表时无需预先知道数据总量,可以随机分配空间,可以高效地在链表中的任意位置实时插入或删除数据。链表的开销主要是访问的顺序性(遍历链表才可访问要找的结点)和组织链的空间损失。

2、内

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值