导航:首页 > 器材知识 > 为什么设备驱动要用虚拟地址

为什么设备驱动要用虚拟地址

发布时间:2023-03-19 16:25:39

⑴ 驱动程序中访问地址空间是操作物理地址还是虚拟地址,还是两者都可以

不同操作系统不一样,像linux就是虚拟地址,vxworks就是直接物理地址

⑵ 一台计算机有48为虚拟地址和32位物理地址是怎么回事

任何时候,计算机上都存在一个程序能够产生的地址集合,我们称之为地址范围。这个范围的大小由CPU的位数决定,例如一个32位的CPU,它的地址范围是0~0xFFFFFFFF (4G),而对于一个64位的CPU,它的地址范围为0~0xFFFFFFFFFFFFFFFF (16E).这个范围就是我们的程序能够产生的地址范围,我们把这个地址范围称为虚拟地址空间,该空间中的某一个地址我们称之为虚拟地址。与虚拟地址空间和虚拟地址相对应的则是物理地址空间和物理地址,大多数时候我们的系统所具备的物理地址空间只是虚拟地址空间的一个子集。这里举一个最简单的例子直观地说明这两者,对于一台内存为256M的32bit x86主机来说,它的虚拟地址空间范围是0~0xFFFFFFFF(4G),而物理地址空间范围是0x00000000~0x0FFFFFFF(256M)。

在没有使用虚拟存储器的机器上,地址被直接送到内存总线上,使具有相同地址的物理存储器被读写;而在使用了虚拟存储器的情况下,虚拟地址不是被直接送到内存地址总线上,而是送到存储器管理单元MMU,把虚拟地址映射为物理地址。
大多数使用虚拟存储器的系统都丛乎使用一种称为分页(paging)机制。虚拟地址空间划分成称为页(page)的单位,而相应的物理地址空间也被进行划分,单位是页帧(frame).页和页帧的大小必须相同。在这个例子中我们有一台可以生成32位地址的机器,它的虚拟地址范围从0~0xFFFFFFFF(4G),而这台机器只有256M的物理地址,因此他可以运行4G的程序,但该程序不能一次性调入内存运行。这台机器必须有一个达到可以存放渗斗悉4G程序的外部存储器(例如磁盘或是FLASH),以保证程序片段在需要时可以被调用。在这个例子中,页的大小为4K,页帧大小与页相同--这点是必须保证的,因为内存和外围存储器之间的传输总是以页为单位的。对应4G的虚拟地址和256M的物销宴理存储器,他们分别包含了1M个页和64K个页帧。

⑶ 用游侠系统提示虚拟地址有什么用

那是因为搭埋顷,安装金山游侠V时会安装一个<虚拟光驱>是这知陆个虚拟光驱的驱动没有经过微软认液清证,其实装上也没什么,不会影响系统。如果不想要这个虚拟光驱,只要安装时选择<自定义>把虚拟光驱去掉,系统就不会提示这个了。

⑷ 驱动中操作物理绝对地址为什么要先ioremap

void * __ioremap(unsigned long phys_addr, unsigned long size, unsigned long flags) 入口: phys_addr:要映射的起始的IO地址; size:要映射的空间的大小; flags:要映射的IO空间的和权限有关的标志; 功能: 将一个IO地址空间映射到内核的虚拟地址空间上去,便于访问; 实现:对要映射的IO地址空间进行判断,低PCI/ISA地址不需要重新映射,也不允许用户将IO地址空间映射到正在使用的RAM中,最后申请一 个 vm_area_struct结构,调用remap_area_pages填写页表,若填写过程不成功则释放申请的vm_area_struct空 间; 意义: 比如isa设备和pci设备,或者是fb,硬件的跳线或者是物理连接方式决定了硬件上的内存影射到的cpu物理地址。 在内核访问这些地址必须分配给这段内存以虚拟地址,这正是__ioremap的意义所在 ,需要注意的是,物理内存已经"存在"了,无需alloc page给这段地址了. 文件中的注释也是比较详尽的,并且只 暴露了__ioremap,iounmap两个函数供其他模 块调用,函数remap_area_pte,remap_area_pmd,remap_area_pages只为__ioremap所用. -------- 为了使软件访问I/O内存,必须为设备分配虚拟地址.这就是ioremap的工作.这个函数专门用来为I/O内存区域分配虚拟地址(空间).对于直接映射的I/O地址ioremap不做任何事情(uClinux中是这么实现的??) 有了ioremap(和iounmap),设备就可以访问任高搜何I/O内存空间,不论它是否直接映射到虚拟地址空间.但是戚让历,这些地址永远不能直接使用(指物理地址),而要用readb这种函数. 根据计算机平台和所使用总线的不同,I/O 内存可能是,也可能不是通过页表访问的,通过页表访问的是统一编址(PowerPC),否则是独立编址(Intel)。如果访问是经由页表进行的,内核必须首先安排物理地址使其对设备驱动 程序可见(这通常意味着在进行任何 I/O 之前必须先调用 ioremap)。如果访问无需页表,那么 I/O 内存区域就很象 I/O 端口,可以使 用适当形式的函数读写它们。 不管访问 I/O 内存时是否需要调用 ioremap,都不鼓励直接使用指向 I/O 内存的指针。尽管(在“I/O 端口和 I/O 内存” 介绍过)I/O 内存在硬件一级是象普通 RAM 一样寻址的,但在“I/O 寄存器和常规内存”中描述过的那些需要额外小心的情况中已经建议不要使用普 通指针。相反,使用“包装的”函数访问 I/O 内存,一方面在所有平台上都是安全的,另一方面,在可以直接对指针指向的内存区域执行操作的时候,该函数 是经过优化的 ------- 自己原以为当给显卡上的存储空间分配了总线地址A以后,它所对应的虚拟空间就随之确定了.也就是A+3G.可是事实上,在ioremap.c文件里面的实现并不是这样的.所用的函数是 __ioremap(unsigned long phys_addr, unsigned long size, unsigned long flags)实现的时候是为从phys_addr开始的size大小的物理地址分配一块虚拟地址.注意这里是分配,而不是指定.我所认为的分配应该是指定即根据phys_addr得到其所对应的滑含虚拟地址是phys_addr+3G. 本人认为一合理的解释是这样的:系统虚拟空间中映射的非IO卡上的地址空间满足3G差关系,而IO卡上的 存储空间就不满足了.

阅读全文

与为什么设备驱动要用虚拟地址相关的资料

热点内容
洗涤试管的仪器一般用什么 浏览:239
去神通阀门上班怎么样 浏览:605
轻卡统帅仪表asr有什么用 浏览:452
自动补偿装置套什么定额 浏览:27
法兰式阀门压力试验怎么做 浏览:442
大卡车上空调风大不制冷怎么回事 浏览:408
健身器材用手升降的有哪些 浏览:980
竹什么阀门 浏览:850
钢梁整体稳定实验中用什么仪器 浏览:789
什么机械 浏览:864
除尘器系列实验装置 浏览:624
冰柜制冷液泄露怎么解决 浏览:843
小明利用如下实验装置 浏览:417
制冷55千瓦多少匹 浏览:546
Dos工具箱93刷bios 浏览:344
的自动旋转喷灌装置的射程 浏览:834
美鹏机械有限公司最新招聘电话多少 浏览:88
空调制冷范围怎么选 浏览:83
石化仪器怎么做网上推广销售 浏览:448
用什么仪器检测支气管扩张最准 浏览:636