热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

华为内部面试题库(14)

1、关于虚拟地址空间的说法错误的是()A.进程地址空间是用多少分配多少,4G仅仅是最大限额B.进程的地址空间并不一定对应实际的物理页C.不

1、 关于虚拟地址空间的说法错误的是()

A.     进程地址空间是用多少分配多少,4G仅仅是最大限额

B.     进程的地址空间并不一定对应实际的物理页

C.     不同进程的不同虚拟地址可以映射到相同的物理页

D.     不同进程的相同虚拟地址不能映射到相同的物理页

解答:D

 

2、 关于mmap设备的说法,错误的是()

A.     映射一个设备,意味着使用户空间的一段地址关联到设备内存上

B.     串口设备和其他面向流的设备就可以实现mmap抽象

C.     被映射的区域必须是PAGE_SIZE的整数倍,而且必须位于起始于 PAGE_SIZE整数倍地址的物理内存内

D.     有两种建立页表的方法:使用remap_page_range函数可一次建立所有的页表,或者通过nopage VMA方法每次建立一个页表

解答:B。

   分析:对于驱动程序来说,内存映射可以提供给用户程序直接访问设备内存的能力。映射一个设备,意味着使用户空间的一段地址关联到设备内存上。无论何时,只要程序在分配的地址范围内进行读取或者写入,实际上就是对设备的访问。

   并不是所有的设备都能进行mmap抽象。例如,串口设备和其他面向流的设备就无法实现这种抽象。mmap的另一个限制是映射都是以 PAGE_SIZE为单位的。内核只能在页表一级处理虚拟地址;因此,被映射的区域必须是PAGE_SIZE的整数倍,而且必须位于起始于 PAGE_SIZE整数倍地址的物理内存内。如果区域的大小不是页大小的整数倍,内核就通过生成一个稍微大一些的区域来容纳它。

   mmap方法是file_operations结构中的一员,并且在执行mmap系统调用时就会调用该方法。在调用实际方法之前,内核会完成很多工作,而且该方法的原型与系统调用的原型由很大区别。

  文件操作声明如下:

  int (*mmap) (struct file * filp, struct vm_area_struct *vma);

  其中vma参数包含了用于访问设备的虚拟地址区间的信息。大部分工作已经由内核完成了,要实现mmap,驱动程序只要为这一地址范围构造合适的页表即可,如果需要的话,就用一个新的操作集替换vma->vm_ops。

  有两种建立页表的方法:使用remap_page_range函数可一次建立所有的页表,或者通过nopage VMA方法每次建立一个页表。

 

3、 下列说法错误的是()

A.     对于一个CPU来说,只需要有当前进程的页表,就可以实现其虚拟地址到物理地址的转化

B.     发生中断时,需要进行地址空间切换

C.     内核线程没有进程地址空间,也没有相关的内存描述符,内核线程对应的进程描述符中mm域也为空

D.     inux中实现了快表(TLB),其本质是一个缓冲器,作为一个将虚拟地址映射到物理地址的硬件缓存

解答:B。

分析:中断处理不需要切换进程空间,直接在当前进程空间进行中断处理。

 

4、 地址空间布局分布从低到高顺序正确的是()

A.     "物理内存区", "虚拟内存分配区", "高端页面映射区", "专用页面映射区", "系统保留映射区"

B.      "虚拟内存分配区","物理内存区" , "专用页面映射区","高端页面映射区", ,"系统保留映射区"

C.      "物理内存区", "高端页面映射区", "虚拟内存分配区", "专用页面映射区", "系统保留映射区"

D.     "物理内存区", "高端页面映射区", "虚拟内存分配区", "专用页面映射区", "系统保留映射区"

解答:A

分析:

1) Linux将整个4G线性地址空间分为用户空间和内核空间两部分, 而内核地址空间又被划分为"物理内存区", "虚拟内存分配区", "高端页面映射区", "专用页面映射区", "系统保留映射区"几个区域. 

2) 在标准配置下, 物理区最大长度为896M, 系统的物理内存被顺序映射在物理区中, 在支持扩展页长(PSE)和全局页面(PGE)的机器上, 物理区使用4M页面并作为全局页面来处理. 当系统物理内存大于896M时, 超过物理区的那部分内存称为高端内存, 低端内存和高端内存用highmem_start_page变量来定界, 内核在存取高端内存时必须将它们映射到"高端页面映射区". 

3) Linux保留内核空间最顶部128K区域作为保留区, 紧接保留区以下的一段区域为专用页面映射区, 它的总尺寸和每一页的用途由fixed_address枚举结构在编绎时预定义, 用__fix_to_virt(index)可获取专用区内预定义页面的逻辑地址. 在专用页面区内为每个CPU预定义了一张高端内存映射页, 用于在中断处理中高端页面的映射操作. 

4) 距离内核空间顶部32M, 长度为4M的一段区域为高端内存映射区, 它正好占用1个页帧表所表示的物理内存总量, 它可以缓冲1024个高端页面的映射. 在物理区和高端映射区之间为虚存内存分配区, 用于vmalloc()函数, 它的前部与物理区有8M隔离带, 后部与高端映射区有8K的隔离带. 

5) 当系统物理内存超过4G时, 必须使用CPU的扩展分页(PAE)模式所提供的64位页目录项才能存取到4G以上的物理内存. 在PAE模式下, 线性地址到物理地址的转换使用3级页表, 第1级页目录由线性地址的最高2位索引, 每一目录项对应1G的寻址空间, 第2级页目录项以9位索引, 每一目录项对应2M的寻址空间, 第3级页目录项以9位索引, 每一目录项对应4K的页帧. 除了页目录项所描述的物理地址扩展为36位外, 64位和32位页目录项结构没有什么区别. 在PAE模式下, 包含PSE位的中级页目录项所对应的页面从4M减少为2M. 

 

5、 关于IO与内存空间说法错误的是()

A.     I/O空间是相对于内存空间而言的,它通过特定的指令in、out来访问

B.     内存空间可以直接通过地址、指针来访问

C.     内存空间是可选的,而I/O空间是必须的

D.     I/O空间单元必须表示成大于PAGE_OFFSET的地址

解答:C。

     分析:在X86处理器中存在着I/O空间的概念,I/O空间是相对于内存空间而言的,它通过特定的指令in、out来访问。端口号标识了外设的寄存器地址。Intel语法的in、out指令格式为:
    IN 累加器, {端口号│
DX}
    OUT {端口号│DX},累加器

    目前,大多数嵌入式微控制器如ARM、PowerPC等中并不提供I/O空间,而仅存在内存空间。内存空间可以直接通过地址、指针来访问,程序和程序运行中使用的变量和其他数据都存在于内存空间中。即便是在X86处理器中,虽然提供了I/O空间,如果由我们自己设计电路板,外设仍然可以只挂接在内存空间。此时,CPU可以像访问一个内存单元那样访问外设I/O端口,而不需要设立专门的I/O指令。因此,内存空间是必须的,而I/O空间是可选的。 内核程序作用于虚拟地址,因此I/O空间单元必须表示成大于PAGE_OFFSET的地址

转:https://www.cnblogs.com/wangfengju/archive/2013/05/20/6173044.html



推荐阅读
  • 深入探讨CPU虚拟化与KVM内存管理
    本文详细介绍了现代服务器架构中的CPU虚拟化技术,包括SMP、NUMA和MPP三种多处理器结构,并深入探讨了KVM的内存虚拟化机制。通过对比不同架构的特点和应用场景,帮助读者理解如何选择最适合的架构以优化性能。 ... [详细]
  • 配置Windows操作系统以确保DAW(数字音频工作站)硬件和软件的高效运行可能是一个复杂且令人沮丧的过程。本文提供了一系列专业建议,帮助你优化Windows系统,确保录音和音频处理的流畅性。 ... [详细]
  • 深入理解Java中的volatile、内存屏障与CPU指令
    本文详细探讨了Java中volatile关键字的作用机制,以及其与内存屏障和CPU指令之间的关系。通过具体示例和专业解析,帮助读者更好地理解多线程编程中的同步问题。 ... [详细]
  • DNN Community 和 Professional 版本的主要差异
    本文详细解析了 DotNetNuke (DNN) 的两种主要版本:Community 和 Professional。通过对比两者的功能和附加组件,帮助用户选择最适合其需求的版本。 ... [详细]
  • 尽管某些细分市场如WAN优化表现不佳,但全球运营商路由器和交换机市场持续增长。根据最新研究,该市场预计在2023年达到202亿美元的规模。 ... [详细]
  • PHP 5.5.0rc1 发布:深入解析 Zend OPcache
    2013年5月9日,PHP官方发布了PHP 5.5.0rc1和PHP 5.4.15正式版,这两个版本均支持64位环境。本文将详细介绍Zend OPcache的功能及其在Windows环境下的配置与测试。 ... [详细]
  • 本文详细介绍了如何在Ubuntu系统中下载适用于Intel处理器的64位版本,涵盖了不同Linux发行版对64位架构的不同命名方式,并提供了具体的下载链接和步骤。 ... [详细]
  • MySQL索引详解与优化
    本文深入探讨了MySQL中的索引机制,包括索引的基本概念、优势与劣势、分类及其实现原理,并详细介绍了索引的使用场景和优化技巧。通过具体示例,帮助读者更好地理解和应用索引以提升数据库性能。 ... [详细]
  • 基于KVM的SRIOV直通配置及性能测试
    SRIOV介绍、VF直通配置,以及包转发率性能测试小慢哥的原创文章,欢迎转载目录?1.SRIOV介绍?2.环境说明?3.开启SRIOV?4.生成VF?5.VF ... [详细]
  • 技术分享:从动态网站提取站点密钥的解决方案
    本文探讨了如何从动态网站中提取站点密钥,特别是针对验证码(reCAPTCHA)的处理方法。通过结合Selenium和requests库,提供了详细的代码示例和优化建议。 ... [详细]
  • python的交互模式怎么输出名文汉字[python常见问题]
    在命令行模式下敲命令python,就看到类似如下的一堆文本输出,然后就进入到Python交互模式,它的提示符是>>>,此时我们可以使用print() ... [详细]
  • 火星商店问题:线段树分治与持久化Trie树的应用
    本题涉及编号为1至n的火星商店,每个商店有一个永久商品价值v。操作包括每天在指定商店增加一个新商品,以及查询某段时间内某些商店中所有商品(含永久商品)与给定密码值的最大异或结果。通过线段树分治和持久化Trie树来高效解决此问题。 ... [详细]
  • 本文详细介绍了如何使用Python编写爬虫程序,从豆瓣电影Top250页面抓取电影信息。文章涵盖了从基础的网页请求到处理反爬虫机制,再到多页数据抓取的全过程,并提供了完整的代码示例。 ... [详细]
  • 理解存储器的层次结构有助于程序员优化程序性能,通过合理安排数据在不同层级的存储位置,提升CPU的数据访问速度。本文详细探讨了静态随机访问存储器(SRAM)和动态随机访问存储器(DRAM)的工作原理及其应用场景,并介绍了存储器模块中的数据存取过程及局部性原理。 ... [详细]
  • 从 .NET 转 Java 的自学之路:IO 流基础篇
    本文详细介绍了 Java 中的 IO 流,包括字节流和字符流的基本概念及其操作方式。探讨了如何处理不同类型的文件数据,并结合编码机制确保字符数据的正确读写。同时,文中还涵盖了装饰设计模式的应用,以及多种常见的 IO 操作实例。 ... [详细]
author-avatar
翔溢_142
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有