当前位置: 首页 > news >正文

驱动开发系列06 - 内存映射和DMA

一:概述

        本文深入探讨 Linux 内存管理子系统,重点介绍对设备驱动程序编写者有用的技术。许多类型的驱动程序编程都需要对虚拟内存子系统的工作原理有一定的了解;当我们编写一些更复杂、对性能要求更高的驱动时,本文所涉及的内容就会派上用场。虚拟内存子系统也是 Linux 核心内核中非常有趣的一部分,因此值得一看。

        本文内容分为三节:
        第一节涉及 mmap 系统调用的实现,该调用允许将设备内存直接映射到用户进程的地址空间。将设备内存直接映射到用户进程的地址空间。虽然并非所有设备并都需要 mmap 支持,但对于某些设备,映射设备内存可以显著提高性能。

        第二节我们将讨论直接从内核态访问用户态内存页面的问题,需要这种功能的驱动程序相对较少;在一般情况下,内核会自动执行这种映射,而驱动程序不会感知到这一点。不过,了解如何将用户空间内存映射到内核(使用 get_user_pages)还是很有用的。

        第三节我们讨论直接内存访问(DMA)I/O 操作,它为外部设备提供了直接访问系统内存的能力。

        当然,所有这些技术都需要了解 Linux 内存管理的工作原理,因此,我们首先对该子系统进行概述。

二:Linux中的内存管理

        本节不描述操作系统中的内存管理理论,而是试图指出 Linux 实现的主要特点。尽管你不需要成为一个 Linux 虚拟内存大师来实现 mmap,但对其工作原理有一个基本的了解还是很有用的。接下来将对内核用于管理内存的数据结构进行相当长篇幅的描述。在介绍了必要的背景知识后,我们就可以开始使用这些数据结构了。

        地址类型

  

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • 数据结构-C语言-排序(3)
  • 基于上下文自适应可变长熵编码 CAVLC 原理详细分析
  • 03Spring底层架构核心概念解析
  • 亲测--linux下安装ffmpeg最新版本---详细教程
  • 自适应键盘,自带隐藏键盘的输入框(UITextField)
  • 异常:android.os.NetworkOnMainThreadException 原因分析
  • 【Elasticsearch】Elasticsearch 中的节点角色
  • 前端面试题日常练-day95 【Less】
  • JVM:GraalVM
  • 如何在 Linux 中解压 ZIP 文件
  • 多口适配器,给您的生活增添便利
  • Rust编程-类面向对象编程
  • “轻、灵、画、韵”,TCL第三代艺术电视引领艺术生活
  • 面向对象练习题
  • 玄机-第二章日志分析-mysql应急响应
  • [iOS]Core Data浅析一 -- 启用Core Data
  • 2017-09-12 前端日报
  • es6要点
  • Git的一些常用操作
  • Java多线程(4):使用线程池执行定时任务
  • k8s 面向应用开发者的基础命令
  • Linux中的硬链接与软链接
  • react-core-image-upload 一款轻量级图片上传裁剪插件
  • React组件设计模式(一)
  • STAR法则
  • sublime配置文件
  • Vue小说阅读器(仿追书神器)
  • Zepto.js源码学习之二
  • 创建一个Struts2项目maven 方式
  • 解析 Webpack中import、require、按需加载的执行过程
  • 前嗅ForeSpider中数据浏览界面介绍
  • 使用Maven插件构建SpringBoot项目,生成Docker镜像push到DockerHub上
  • 微服务核心架构梳理
  • 一文看透浏览器架构
  • 正则表达式小结
  • postgresql行列转换函数
  • 阿里云ACE认证学习知识点梳理
  • 阿里云服务器如何修改远程端口?
  • # include “ “ 和 # include < >两者的区别
  • #if等命令的学习
  • #pragam once 和 #ifndef 预编译头
  • (09)Hive——CTE 公共表达式
  • (2)nginx 安装、启停
  • (7)STL算法之交换赋值
  • (Bean工厂的后处理器入门)学习Spring的第七天
  • (libusb) usb口自动刷新
  • (动手学习深度学习)第13章 计算机视觉---微调
  • (十七)devops持续集成开发——使用jenkins流水线pipeline方式发布一个微服务项目
  • (算法)N皇后问题
  • (转)项目管理杂谈-我所期望的新人
  • .mkp勒索病毒解密方法|勒索病毒解决|勒索病毒恢复|数据库修复
  • .net core 3.0 linux,.NET Core 3.0 的新增功能
  • .NET 直连SAP HANA数据库
  • .net快速开发框架源码分享
  • .NET与java的MVC模式(2):struts2核心工作流程与原理