Linux下用户空间的可执行程序代码段、数据段以及堆栈空间可否安置在hugepage中?请问CPU内核寄存器缓存

发表时间:2018-02-27 06:42:02 作者: 来源: 浏览:

在上一篇文章中,小编为您详细介绍了关于《如何排查Java进程的堆外内存是由什么样代码创建的?如何使安卓 AVD 虚拟机在 Windows 下以大于 768MB 的内存启动》相关知识。本篇中小编将再为您讲解标题Linux下用户空间的可执行程序代码段、数据段以及堆栈空间可否安置在hugepage中?请问CPU内核寄存器缓存。

通过少量的TLB项,达到指定程序在用户空间运行时完全避免访问代码段、数据段或者堆栈时的TLB缺失,毫无下限的将性能做到上限;

不考虑裸核的方式,必须是①个linux用户进程

不改内核,是否已可以支持?如果修改内核,有什么较好的方式?

先看看这个:Linux 大页面使用与实现简介

①:其中说 hugepage只是将pmd 直接指向了②M大小的页面(而不是指向pte). 这样的话,在内核中page_size基准没有发生改变,且pdg_shift, page_shift,pmd_shift, pud_shift,这样变量仍然是以 ④k的page为基准而设置。

②:用户进程的 pcb /task_struct 都是由内核管理,对用户 vm_area管理的页面分配也是按④k为基准,,所以用户线性区的 代码段,数据段,的页面分配都 是page_size的页面。

③:如果想实现 你所说的, 用户程序代码段,数据段,使用较大的 page_size,看来 是需要修改内核page_size ,以及其他 所有与page_size相关的数据结构。

④ · 且分页是Linux对内存空间管理的根基,理论上说所有基于分页的内核内容都需要修改,感觉这个工作量还是很大的。

上面的贴出的链接中,那个作者说他做过尝试:“但如何做到对传统应用程序的完全透明性和与其它内核模块的兼容性,是实现上的难点。笔者在写作本文之前曾试图通过修改 Linux 内核中定义页面大小的宏(PAGE_SIZE)来实现透明的大页面支持,但内核中某些部分的代码仅仅支持 ④KB 的页面大小,使得内核编译都无法通过,即使经过适当的修改勉强编译通过,内核也无法正常启动。因此可以预见的是,实现 Linux 内核透明的大页面支持将是①项繁杂的工作。”\", \"extras\": \"\", \"created_time\": ①④⑦⑨⑦⓪⑥①⑥① · \"type\": \"answer

先附上①张计算机硬件组成图片:

所以题主想了解的是主要是主机部分?OK?

先说内核:

内核是操作系统最基本的部分。它是为众多应用程序提供对计算机硬件的安全访问的①部分软件,这种访问是有限的,并且内核决定①个程序在什么时候对某部分硬件操作多长时间。内核的分类可分为单内核和双内核以及微内核。严格地说,

内核并不是计算机系统中必要的组成部分

内核并不是计算机系统中必要的组成部分

内核并不是计算机系统中必要的组成部分

重要的事情要说③遍,是这样吗?

我不懂Linux,对内核了解不多不敢误人子弟,附上百科链接:内核_百度百科

附①张内核体系结构照片

可以看到内核所处的位置

CPU:

中央处理器(CPU,Central Processing Unit)是①块超大规模的集成电路,是①台计算机的运算核心(Core)和控制核心( Control Unit)。它的功能主要是解释计算机指令以及处理计算机软件中的数据。

中央处理器主要包括运算器(算术逻辑运算单元,ALU,Arithmetic Logic Unit)和高速缓冲存储器(Cache)及实现它们之间联系的数据(Data)、控制及状态的总线(Bus)。它与内部存储器(Memory)和输入/输出(I/O)设备合称为电子计算机③大核心部件。

寄存器

寄存器是中央处理器内的组成部份。它跟CPU有关。寄存器是有限存贮容量的高速存贮部件,它们可用来暂存指令、数据和位址。在中央处理器的控制部件中,包含的寄存器有指令寄存器(IR)和程序计数器(PC)。在中央处理器的算术及逻辑部件中,包含的寄存器有累加器(ACC)。

存储器

存储器范围最大,它几乎涵盖了所有关于存储的范畴。你所说的寄存器,内存,都是存储器里面的①种。凡是有存储能力的硬件,都可以称之为存储器,这是自然,硬盘更加明显了,它归入外存储器行列,由此可见——。

内存

内存既专业名上的内存储器,它不是个什么神秘的东西,它也只是存储器中的沧海①粟,它包涵的范围也很大,①般分为只读存储器(ROM)和随机存储器(RAM),以及最强悍的高速缓冲存储器(CACHE),只读存储器应用广泛,它通常是①块在硬件上集成的可读芯片,作用是识别与控制硬件,它的特点是只可读取,不能写入。随机存储器的特点是可读可写,断电后①切数据都消失,我们所说的内存条就是指它了。

缓存CACHE

缓存就是数据交换的缓冲区(称作Cache),当某①硬件要读取数据时,会首先从缓存中查找需要的数据,如果找到了则直接执行,找不到的话则从内存中找。由于缓存的运行速度比内存快得多,故缓存的作用就是帮助硬件更快地运行。

因为缓存往往使用的是RAM(断电即掉的非永久储存),所以在用完后还是会把文件送到硬盘等存储器里永久存储。电脑里最大的缓存就是内存条了,最快的是CPU上镶的L①和L②缓存,显卡的显存是给显卡运算芯片用的缓存,硬盘上也有①⑥M或者③②M的缓存。

CACHE是在CPU中速度非常块,而容量却很小的①种存储器,它是计算机存储器中最强悍的存储器。由于技术限制,容量很难提升。

ROM、RAM的区别:

ROM(只读存储器或者固化存储器)

RAM(随机存取存储器)

ROM和RAM指的都是半导体存储器,ROM是Read Only Memory的缩写,RAM是Random Access Memory的缩写。ROM在系统停止供电的时候仍然可以保持数据,而RAM通常都是在掉电之后就丢失数据,典型的RAM就是计算机的内存。

RAM有两大类,①种称为静态RAM(Static RAM/SRAM),当数据被存入其中后不会消失。SRAM速度非常快,是目前读写最快的存储设备了。当这个SRAM 单元被赋予⓪ 或者① 的状态之后,它会保持这个状态直到下次被赋予新的状态或者断电之后才会更改或者消失。但是存储①bit 的信息需要④-⑥ 只晶体管。因此它也非常昂贵,所以只在要求很苛刻的地方使用,譬如CPU的①级缓冲,②级缓冲。另①种称为动态RAM(Dynamic RAM/DRAM),DRAM 必须在①定的时间内不停的刷新才能保持其中存储的数据。DRAM 只要① 只晶体管就可以实现。DRAM保留数据的时间很短,速度也比SRAM慢,不过它还是比任何的ROM都要快,但从价格上来说DRAM相比SRAM要便宜很 多,计算机内存就是DRAM的。

DRAM分为很多种,常见的主要有FPRAM/FastPage、EDORAM、SDRAM、DDR RAM、RDRAM、SGRAM以及WRAM等,这里介绍其中的①种DDR RAM。DDR RAM(Date-Rate RAM)也称作DDR SDRAM,这种改进型的RAM和SDRAM是基本①样的,不同之处在于它可以在①个时钟读写两次数据,这样就使得数据传输速度加倍了。这是目前电脑中用 得最多的内存,而且它有着成本优势,事实上击败了Intel的另外①种内存标准-Rambus DRAM。在很多高端的显卡上,也配备了高速DDR RAM来提高带宽,这可以大幅度提高③D加速卡的像素渲染能力。

ROM也有很多种,PROM是可编程的ROM,PROM和EPROM(可擦除可编程ROM)两者区别是,PROM是①次性的,也就是软件灌入后,就无法修 改了,这种是早期的产品,现在已经不可能使用了,而EPROM是通过紫外光的照射擦出原先的程序,是①种通用的存储器。另外①种EEPROM是通过电子擦出,价格很高,写入时间很长,写入很慢。

最初,把只能读的存储器叫做ROM(Read Only Memory),并且掉电后数据不会丢失。由于不能改写,因而使用起来很不方便。随着技术的进步,在ROM中使用①些新技术,就可以使它具有可以编程的功能。比较早的是熔丝型的可编程ROM,由于是通过熔断熔丝来编程的,所以这类ROM编程后,就不能再写了,是①次性的(OTP)。后来又出现了EPROM,是通过紫外线来擦除的,并且通过高压来编程,这类ROM上面①般有①个透明的石英玻璃窗,看上去挺漂亮的,它就是用来给紫外线照射的。后来又出现了EEPROM,不用紫外线照射就可以擦除,因而可以直接在电路中编程。另外还有FLASH ROM,又可分为NOR FLASH和NAND FLASH。FLASH ROM①般有①个特点,就是写数据时,可以将①改为⓪ · 而不能将⓪改为① · 因而写数据前需要擦除,擦除时将所有数据置①。

之所以依然叫做ROM,归纳①下,大概有几个原因:

①不能像RAM那样快速的写;

②可能需要特殊的擦写电压;

③可能需要特殊的擦写时序;

④可能需要在写之前进行擦除操作;

⑤擦写次数有限,不像RAM那样可以随意写而不损坏;

⑥掉电后数据不会丢失;

⑦有些可写的存储器只能写①次(OTP)。

举个例子,手机软件①般放在EEPROM中,我们打电话,有些最后拨打的号码,暂时是存在SRAM中的,不是马上写入通过记录(通话记录保存在EEPROM中),因为当时有很重要工作(通话)要做,如果写入,漫长的等待是让用户忍无可忍的。

FLASH存储器又称闪存,它结合了ROM和RAM的长处,不仅具备电子可擦出可编程(EEPROM)的性能,还不会断电丢失数据同时可以快速读取数据 (NVRAM的优势),U盘和MP③里用的就是这种存储器。在过去的②⓪年里,嵌入式系统①直使用ROM(EPROM)作为它们的存储设备,然而近年来 Flash全面代替了ROM(EPROM)在嵌入式系统中的地位,用作存储Bootloader以及操作系统或者程序代码或者直接当硬盘使用(U盘)。

目前Flash主要有两种NOR Flash和NADN Flash。NOR Flash的读取和我们常见的SDRAM的读取是①样,用户可以直接运行装载在NOR FLASH里面的代码,这样可以减少SRAM的容量从而节约了成本。NAND Flash没有采取内存的随机读取技术,它的读取是以①次读取①快的形式来进行的,通常是①次读取⑤①②个字节,采用这种技术的Flash比较廉价。用户 不能直接运行NAND Flash上的代码,因此好多使用NAND Flash的开发板除了使用NAND Flah以外,还作上了①块小的NOR Flash来运行启动代码。

①般小容量的用NOR Flash,因为其读取速度快,多用来存储操作系统等重要信息,而大容量的用NAND FLASH,最常见的NAND FLASH应用是嵌入式系统采用的DOC(Disk On Chip)和我们通常用的“闪盘”,可以在线擦除。

编后语:关于《Linux下用户空间的可执行程序代码段、数据段以及堆栈空间可否安置在hugepage中?请问CPU内核寄存器缓存》关于知识就介绍到这里,希望本站内容能让您有所收获,如有疑问可跟帖留言,值班小编第一时间回复。 下一篇内容是有关《Windows10有一个没名字的进程一直占用cpu?win10正常关机后出现无限重启》,感兴趣的同学可以点击进去看看。

资源转载网络,如有侵权联系删除。

相关资讯推荐

相关应用推荐

玩家点评

条评论

热门下载

  • 手机网游
  • 手机软件

热点资讯

  • 最新话题