Linux子系统学习

news/2024/7/20 13:43:26 标签: linux驱动开发, 内存管理

1、Linux子系统介绍


如图所示,Linux有7个子系统,分别为
SCI:系统调用
PM:进程管理
VFS:虚拟文件系统
Network Stack:网络协议栈
Arch:体系结构相关
DD:设备驱动

和Linux驱动开发关系较为紧密的有进程管理系统、内存管理系统、虚拟文件系统,下面将学习进程管理系统和内存管理系统。

2、Linux内存管理子系统

2.1内存管理模型

内存管理子系统的职能主要有2个:
1、虚拟地址空间分布
2、虚拟地址到物理地址的映射

右边是虚拟地址的分配,上面是物理地址的分配,下面是虚拟地址到物理地址的转换。
Linux支持的虚拟地址空间由硬件来决定,比如32位的处理器只支持4G的虚拟内存,4G内存又被分为用户空间(0~3G)和系统空间(3~4G),即3:1的方式分配。
系统空间又分为直接映射区(3G~3G+896M(最高)),Vmalloc区、永久映射区和固定映射区。由于这几个区到物理地址的映射方式不同,所以分为4个区。


用户空间的虚拟地址到物理地址的映射:


学过操作系统的同学应该对这幅图不陌生。先把虚拟地址的高10位取出来,作为偏移加上基地址作为页目录,然后指向页表基地址。页表基地址加上中间10位就可以取到一个物理页的基地址,物理页的基地址加上后12位的页内偏移,就可以找到物理页的存储单元。

内核直接映射区到物理地址的映射:
这里的虚拟地址直接减去3G后就是它的物理地址

vMalloc区:
(物理地址的低896M称为低端地址,其他称为高端地址)
它及访问高端地址也访问低端地址,没有一种线性的映射关系

永久内核映射区:
它固定访问高端内存

固定映射区:
它和特殊的寄存器建立映射关系,用来访问寄存器。



http://www.niftyadmin.cn/n/890855.html

相关文章

解决过拟合的一些方法

由于条件限制,比如数据不够丰富、不够代表性,你的模型很有可能出现过拟合。即你的模型试图去记住所有的训练数据,而不是学习数据的趋势。虽然数据增强的方法能缓解一些,但往往插值出来的数据仍然很局限。一般,我们有下…

Nvidia TensorRT

当你训练获得模型后,便需要做在线预测inference。这时你系统的延迟和吞吐是关键。 nvidia推出的TensorRT就是用来做inferecne加速的,他们对几个典型的网络做了针对性的优化,比如将Conv、BN、Relu三个操作变成一个操作(fuse netwo…

Linux驱动开发准备

1、Linux驱动开发概述 Linux驱动分类,分类有很多分类方法,比如常规分类法、总线分类法,按照常规分类法可分为字符设备、块设备、网络设备。1.1 字符设备 字符设备是一种按字节(最小访问单位)来访问的设备,字符驱动则负责驱动字符设…

决策树转规则

有些决策、分类的规则,手写比较麻烦,但用机器学习模型,比如LR搞的话又比较难运营和理解。这时,通过少node的决策树模型来做,并将其生成规则,是一个折衷的解决方案。 import numpy as np from sklearn.tree…

Linux字符设备驱动程序开发(1)-使用字符设备驱动

1、使用字符设备驱动程序 1.1编译/安装驱动 在Linux系统中&#xff0c;驱动程序通常采用内核模块的程序结构来进行编码。因此&#xff0c;编译/安装一个驱动程序&#xff0c;其实质就是编译/安装一个内核模块。把下面的范例代码拷贝到Linux系统中&#xff1a; #include <…

tensorflow编程一些需要知道的 - 5 实现logistic分类器

写编写一个简单的logistic 分类器。 import tensorflow as tf import numpy as np import pandas as pdclass Trainer(object):def __init__ (self):self.load()print (self.x_data.shape, self.y_data.shape)def build_graph (self):# 首先你得构建你的计算图self.x tf.place…

cout 为啥慢

有时候为了分析数据&#xff0c;需要打印大量的数据&#xff0c;几百万行。如果用std::cout << xxx << std::endl;会发现巨慢无比。原因是每行数据被发送到终端程序&#xff0c;当用了std::endl时&#xff0c;会刷新缓存&#xff0c;从而造成频繁的系统调用。如下面…