精华内容
下载资源
问答
  • AIX虚拟地址设置大全

    2009-12-03 21:18:54
    AIX虚拟地址设置大全,IBM原厂一手资料.PDF格式.
  • VM虚拟机中如何设置ip地址

    万次阅读 多人点赞 2018-05-14 20:26:11
    在cmd命令行中输入ipconfig可以看到我们的主机ip地址,但是我们创建了一台虚拟机,并且装好系统时,输入ifconfig(这里和windows下命令不一样,不要搞混了)时,会发现得不到ip地址,下面就说一下如何设置虚拟机的ip ...

    当我们在windows环境下,在cmd命令行中输入ipconfig可以看到我们的主机ip地址,但是我们创建了一台虚拟机,并且装好系统时,输入ifconfig(这里和windows下命令不一样,不要搞混了)时,会发现得不到ip地址,下面就说一下如何设置虚拟机的ip

    首先我们找到VM软件的顶部:虚拟机---》设置,然后在设置里面修改网络适配器为NET模式

    这个时候应该就可以连上网络并得到ip地址了,这个ip是主机电脑分配给虚拟机的,所以是可以连接上互联网的,你可以在linux中输入ping www.baidu.com可以ping的通,但是动态ip用起来不方便,我们一般设置为静态ip,即不变的

    我们右键网络图标,然后点击Edit Connections

    然后点击Edit-----》IPV4 Settings

    将Method改为手动,然后在Addresses中随便添加一个ip地址,如上图所示,设置好之后返回命令行,先关闭网络再重启网络后输入ifconfig就可以看到ip地址就是你刚刚设置的了,不会变化的

    注意:上边说的随便添加一个ip地址,在虚拟机中是可以ifconfig出来的,但是在windows主机下是不能ping通的,所以如果想能够远程连接到该虚拟机,应该把固定ip设为和windows主机一个ip字段的,即ip前三段一致,这样才能够连接到

     

     

    展开全文
  • 进程的虚拟地址在内核中通过三/四级页表到达物理地址。而内核的虚拟地址在NORMAL部分算是逻辑地址只是线性的映射。 这两者有什么关系么?或者说内核态为什么还要有虚拟地址存在? 开场白: 按照以前书上,或...
    进程的虚拟地址在内核中通过三/四级页表到达物理地址。
    而内核的虚拟地址在NORMAL部分算是逻辑地址只是线性的映射。
    

    这两者有什么关系么?或者说内核态为什么还要有虚拟地址存在?


    开场白:

    按照以前书上,或linux内核2.6 内核的逻辑地址用户空间逻辑地址 (逻辑地址有时也被叫虚拟地址) 都是位于 0x00000000~0xFFFFFFFF 这段虚拟地址空间 ,其中用户空间逻辑地址 位于 逻辑地址 0x00000000~ 0xBFFFFFFF ,共3g , 内核逻辑地址是 0xC0000000~0XFFFFFFFF,共1g。而且这个地址空间对于每个进程来说都是独立的。

    这里解释一下独立是什么含义。

    看一下这个图
    每个进程看到的 地址空间都是一样的,比如.text 都是从0x80048000 开始,然后用户栈都是从0xBFFFFFFF 向低地址增长,内核地址空间都是0xC0000000~0xFFFFFFFF。 每个进程看到的 地址空间都是一样的,比如.text 都是从0x80048000 开始,然后用户栈都是从0xBFFFFFFF 向低地址增长,内核地址空间都是0xC0000000~0xFFFFFFFF。

    但是,每个进程的逻辑地址0x08048000 ~ system break 以及stack中对应的内容应该是不一样的(除非两个共享地址空间,那就是线程了)。 那问题来了,不同进程 有相同的逻辑地址,但是却又不同的内容,这怎么实现呢?

    这就要靠 每个进程的的 页表了。每个进程都有一个自己的页表,使得 某逻辑地址对应于某个物理内存。 正因为 每个进程都有一个自己的页表,使得相同的逻辑地址映射到 不同的物理内存。对于线程 ,它也有自己的页表,只是页表的 逻辑地址 映射到的物理内存相同。

    那进程的页表是怎样的呢?首先,内核本身就有一个页表了,而且 对于normal_area 都是一一映射到物理内存的,具体可查一下网上资料关于低端内存和高端内存。 这里可以不用知道到底怎么映射,只需要知道 内核中有一个页表, 能把 内核逻辑地址映射到内核物理地址

    这个内核逻辑地址对于每一个进程来说都应该是一样的,所以 ,在创建进程表时候,就可以直接拷贝该内核的页表,作为该进程 的页表的一部分,另外对于 该进程的用户部分的页表,可以简单地理解为 把逻辑地址 映射到一个 空闲的 物理内存区域。

    每当切换到另一个进程时,就要设置这个进程的页表,通过 设置MMU的某些寄存器 ,然后 MMU 就可以把 cpu 发出的逻辑地址 转化为 物理地址了。

    虽然看起来 ,该进程 拥有 0x00000000~0xFFFFFFFF 的 逻辑地址空间 ,但是0xC0000000~0xFFFFFFFF 这段是内核的逻辑地址 ,在用户态时访问会出错,权限不够,如果想访问,需要切换到内核态 ,可以通过 系统调用等。系统调用代表某个进程运行于内核,此时,相当于该进程可以访问0xC0000000~0xFFFFFFFF 这个地址了(但实际上 只能访问 该进程的某个8KB的内核栈 ,这里不是很确定,因为每个进程都有自己独立的8KB的内核栈,你应该是不能访问别的内核的内核栈),此时可以把用户空间逻辑地址 在 内核逻辑地址 之间 进行内存拷贝。

    另外 0X00000000 ~0x08048000 是不能给用户访问的,这里面是一些C运行库的内容。访问会报segement fault 错误。

    另外linux 对只读的内容可以共享,在物理内存中只有一份拷贝。这样,即使在逻辑地址上看起来有很多c库等运行库在里面,但整个内存只有一份拷贝,当然,对于可写的数据段,每个进程都应该有独立一份。

    步入正题:

    1. 现在 Linux 内核是4级页表结构,3级页表的时代是10年前了。 X86_64 架构下,无论 Intel 还是 AMD 的 CPU, 都是四级的硬件页表,所以软件层面的页表至少要4级(否则,进程访问的空间将受限, 因为有一级页表被固定住了,所以3级页表时代,X86_64 只能访问 512GB 空间, 而 X86_64 的设计可访问空间达到 131 072( = 2^47) GB。打个比方就是,省,市,区,县 四级行政规划,硬要嵌套进三级规划,只能表达市,区,县三级,省一级给固定住了, 访问范围缩小了)。

    2. 不过你会问:i386 只有三级硬件页表:PUD -> PMD -> PTE, 怎么嵌入四级软件页表结构? 答案就是虚设一层。打个比方:北京是省级行政单位,如果要按省,市,区,县结构来表达某县,就是: 北京(省)北京(市)XX区XX县, 有一层完全就是占个位而已。有兴趣了解 Linux 页表的变迁历史,可以看我之前写过的文章: Linux内核4级页表的演进

    3. 内核空间,用户空间的地址都是虚拟地址,都要经过 MMU 的翻译,变成物理地址。用户空间的虚拟地址,就是按前面所述的走四级页表来翻译。 内核空间虚拟地址是所有进程共享的,重要的是,从效率角度看, 如果同样走四级页表翻译的流程,速度太慢;于是,内核在初始化时,就创建内核空间的映射(因为所有进程共享,有一份就够了),并且,采用的就是线性映射,而不是走页表翻译这种类似哈希表的方式。这样,内核地址的翻译,简化为一条偏移加减指令就行,相比走页表,效率大大提高(不过,内核空间并非完全不用页表,此处讲原理所以简化,详细的看尾注).

    4. 至于为什么用户空间不能也像内核空间这么做,原因是用户地址空间是随进程创建才产生的,它的页面可能散布在不同的物理内存中,无法这么做。另外,走页表的过程,不止是翻译的过程,还是一个权限检查的过程,对于不可控的用户态地址,这安全性检查必不可省。而内核空间,只有一份,所有可以提前固定下来一片连续的物理地址空间,按线性方法来映射。这是很正常的优化方法。

    5. 那么问题来了,在 Linux 刚引入的时候, i386 4G 的进程空间典型的是 3G user + 1G kernel 的划分,这教科书上都有说。 那按前面的线性方法, 1G 内核空间,只能映射 1G 物理地址空间,这对内核来说,太掣肘了。所以,折衷方案是, Linux 内核只对 1G 内核空间的前 896 MB 按前面所说的方法线性映射, 剩下的 128 MB 的内核空间, 采用动态映射[1]的方式,即按需映射的方式 ,这样,内核态的访问空间更多了。 这个直接映射的部分, 就是题主所说的 NORMAL 区, 就是所谓低端内存。到了 64 位时代, 内核空间大大增大, 这种限制就没了,内核空间可以完全进行线性映射,不过,基于[1]的缘故, 仍保留有动态映射这部分。


    [1] 动态映射不全是为了内核空间可以访问更多的物理内存,还有一个重要原因: 当内核需要连续多页面的空间时,如果内核空间全线性映射,那么,可能会出现内核空间碎片化而满足不了这么多连续页面分配的需求。基于此,内核空间也必须有一部分是非线性映射,从而在这碎片化物理地址空间上,用页表构造连续虚拟地址空间,这就是所谓vmalloc空间。

    结束语:

    从OS实现的角度做个补充(已上都是从硬件实现的原理为出发点的)。
    首先的首先,开启分页机制后内核也不能绕过该机制,所以内核也要有虚拟地址。
    首先,进程的虚拟地址和内核的虚拟地址有一点不同:内核的虚拟地址如果触发了缺页中断整个系统就panic了,而进程的虚拟地址不是这样。为什么这样设计呢?这是因为如果不做此限制,内核上下文中触发缺页中断后进行中断处理时还可能继续发生嵌套的缺页中断,如此会一直嵌套。
    其次,怎么避免在内核上下文中不产生缺页中断呢?最简单的方法就是把所有的物理内存映射到内核的某段虚拟地址空间,从此段空间内malloc的虚拟地址都已经映射好了不会触发缺页中断。其他的内核的虚拟地址访问产生的缺页中断,肯定是代码错误或者是硬件错误,只能panic。而最简单的映射方法就是物理地址加上固定的偏移就得到虚拟地址,偷懒的做法
    最后,实际的OS的实现上(比如FreeBSD)不会按照4k的页大小把所有的物理地址都预先映射出来,因为这样需要浪费不少内存作为页表。实际上是按照2M(64位系统)的页做映射,称之为direct mapping,需要做4k页面映射的时候,除了分配出一页,还可能需要申请一页作为页表,并把对应的物理地址写入作为页表的这一页的对应PSN处。如果没有direct mapping,上述做法的实现会很复杂。



    展开全文
  • 虚拟地址到物理地址的映射

    千次阅读 2018-03-07 19:17:54
    虚拟地址和物理地址========================================= CPU通过地址来访问内存中的单元,地址有虚拟地址和物理地址之分,如果CPU没有MMU(Memory Management Unit, 内存管理单元),或者有MMU但没有启用,CPU...

    虚拟地址和物理地址
    =========================================

        CPU通过地址来访问内存中的单元,地址有虚拟地址和物理地址之分,如果CPU没有MMU(Memory Management Unit, 内存管理单元),或者有MMU但没有启用,CPU核在取指令或访问内存时发出的地址将
    直接传到CPU芯片的外部地址引脚上,直接被内存芯片(以下称为物理内存,以便与虚拟内存区分)接收,
    这称为物理地址(Physical Address, 以下简称PA),如下图所示:
    图1. 物理地址示意图



        如果CPU启用了MMU,CPU核发出的地址将被MMU截获,从CPU到MMU的地址称为虚拟地址(Virtual Address, 以下简称VA),而MMU将这个地址翻译成另一个地址发到CPU芯片的外部地址引脚上,也就是将
    虚拟地址映射成物理地址,如下图所示:
    图2. 虚拟地址示意图



        MMU将虚拟地址映射到物理地址是以页(Page)为单位的,对于32位CPU通常一页为4K。例如,虚拟地址 0xB7001000~0xB7001FFF是一个页,可能被MMU映射到物理地址0x2000~0x2FFF, 物理内存中的一个物理页面也称为一个页框(Page Frame)

        Datasheet中介绍各种寄存器时,所附带的地址就是物理地址。

        既然虚拟地址最终要转换为物理地址,那么为何还需要虚拟地址呢?
          虚拟地址提供了权限检查功能:比如我们设置虚拟地址和物理地址之间的映射关系时,可以设置某块地址是只读的,只写的,只有CPU处于管理模式时才能访问等。这些功能可以让系统的内核,用户程序的运行空间相互独立:用户程序即使出错,也无法破坏内核;用户程序A崩溃了,也无法影响到用户程序B。

     

    当开启分段分页机制时,典型的x86寻址过程为

     

                 

            内存寻址的工作是由Linux内核和MMU共同完成的,其中Linux内核负责cr3,gdtr等寄存器的设置,页表的维护,页面的管理,MMU则进行具体的映射工作。

    展开全文
  • linux虚拟地址转物理地址

    千次阅读 2018-06-21 07:06:00
    80386虚拟地址和物理地址转换CPU的发展之前在看malloc内存分配函数的原理时,有涉及到分配虚拟内存,然后再映射到物理内存,当初也是看得一头雾水,因为对虚拟内存和物...

    80386虚拟地址和物理地址转换

    CPU的发展

    之前在看malloc内存分配函数的原理时,有涉及到分配虚拟内存,然后再映射到物理内存,当初也是看得一头雾水,因为对虚拟内存和物理内存不是很了解。所以这篇文章总结下我在学习虚拟内存和物理内存的一些收获。

    首先给出CPU的进化表,图片来自博客wjlkoorey的博客640?wx_fmt=png

    CPU发展从寻址物理地址;寻址段地址到物理地址转换;寻址逻辑地址转换为线性地址,再转换为物理地址。在8086之前的CPU,寻址都为物理地址,是并没有段的概念。当程序要访问内存时都是要给出内存的实际物理地址,这样在程序源代码中就会出现很多硬编码的物理地址。这样的程序可想而知,难重定位,可控性弱,结构丑陋,那个年代写这样的程序在我们现在看来是多么让人恼火的一件事儿。

    后来8086引入一个非常重要的概念--段,这样就实现了分段机制;8086CPU地址总线为16,这样寻址范围为2^16=64k,而8086的寻址空间为1M,那么是怎么实现的了?原来这时候cpu给出的地址为段地址,需要加上段地址(由cs,ds,ss,es)之后才构成物理地址。物理地址为=段地址:段内偏移量;段地址左移4位+段内偏移量,即可构成20位的物理地址。例如ES=0x1000,DI=0xFFFF,那么物理地址为:

    AD(Absolute Address)=(ES)*(0x10)+(DI)=0x1FFFF

    0x10为16,段地址*16(2^4),即向左移动4位。这样就可以对20位的1M内存空间进行寻址。

    而这这种方式的寻址最大地址为0xFFFF:0xFFFF=0x10FFEF,大于1M空间,这样如果访问大于1M的内存空间时,将会产生结果了?8086的做法是自动从物理内存0地址开始寻址,有人就是说[0x0000,0x10FFEF]地址是按0xFFFF取模寻址。下图说明这种情况:640?wx_fmt=png

    CPU发展的下一个里程碑是1985年80386的问世,从16位到32位CPU的飞跃,这中间80286就成了这次飞跃的跳板,80286地址上升到24位并且引入了保护模式。保护模式即规定进程能访问的内存,有些内存是不能访问的,例如进程不能访问内核代码。80386继承了80286的内存保护模式和分段机制,并且引入了分页虚拟机制。首先80386继承了80286的基础上添加两个段寄存器FS和GS。很显然,为了实现保护模式,段寄存器只存储段基地址是不够的,至少还需要段地址的长度还有一些诸如访问权限之类的其他信息。所以段寄存器存储的并不是真正的段基地址,而是存储每个段描述符的选择符,通过这个选择符在GDT表格中找到这个段的基地址。

    现在主流的x86CPU上的主流操作系统,Linux,FreeBSD,Windows等待都是工作在保护模式下,处理器只有在上电启动,引导阶段初始化时在会进入实时模式,实时模式任务处理之后,即进入保护模式。

    80386CPU逻辑地址转换为物理地址

    逻辑地址转化为线性地址

    80386cpu当需要访问内存时,首先给出的逻辑地址,然后通过MMU内存管理单元分段机制转换为线性地址,然后线性地址再通过MMU内存管理单元分页机制转换为物理地址。

    首先来看下cs,ds等段寄存器的内容,如下图所示:640?wx_fmt=png

    1. INDEX为在描述符表的索引,因为总共13位,所以描述符表总共可以存储8192个描述符,处理器将INDEX*8(一个描述符占8个字节)+GDTR(全局描述符表)/LDTR(局部描述符表)即为这个段的描述符。

    2. TI(TABLE INDICATOR)指明在哪个描述符查找段描述符;如果为0,则在GDT查找,如果为1,则在LDT查找。

    3. RPL(REQUESTOR'S PRIVILEGE LEVEL)请求权限,用于保护机制,0为最高优先级,3为最低优先级,linux只使用0和3优先级,分别表示内核态和用户态。

    当处理器需要访问内存时,给出的逻辑地址是:选择符+偏移量,然后通过MMU的分段机制,取出的逻辑地址的INDEX,乘以8,再加上GDTR存储的全局描述符表的基地址,即可获取这个段的描述符,然后存入描述符寄存器(一种对用户隐藏的寄存器,也称为不可编程寄存器),然后取出这个64位的段描述符的段基地址+偏移量,即可获得这个逻辑地址对应的线性地址,下图展示了转换过程:640?wx_fmt=png

    线性地址由目录项(DIR)+页表项(PAGE)+页内偏移(OFFSET)组成。在介绍页地址转物理地址时,先介绍下段描述符的格式,如下图所示:640?wx_fmt=png

    1. BASE:定义了4G的线程地址空间的基地址,处理器将描述符中三个BASE字段拼接成一个32位的值,这样就可以寻址4G的线性地址空间。

    2. LIMIT:定义了段的空间大小,由描述符中的两个字段拼接而成,形成一个20位的值,20位总共可以表示为1M个数值,而这个1M个数值的单位则由Granularity bit位决定:

    • 当granularity bit为0时,单位为1字节,这时limit表示的是1M的内存;

    • 当granularity bit为1时,此时单位为4kb,这时limit表示的是4g的内存;

    1. TYPE: 区别不同的描述符,即描述符的类型。

    2. DPL(Descriptor Privilege Level),描述符访问权限,用于保护机制。

    3. Segment-Present bit:如果这个bit设置为0,则这个描述符不能被使用来进行地址转换,如果这个描述符被载入段描述符,处理器将会发出一个异常,下图展示了bit=0时的描述符格式,处理器可以使用标有AVALABLE的位置存储描述符。640?wx_fmt=png

    4. Accessed bit:当这个描述符被访问时,设置为1.

    线性地址转化为物理地址

    之前,已经将逻辑地址转换为线性地址,接下来看下是如何从线性地址转化为物理地址,先给出下面示意图:640?wx_fmt=png

    一个线性地址由10位目录表+10位页表+12位偏移量组成,当给定一个线性地址时,

    1. 首先从控制寄存器CR3获取页目录基地址,然后加上线性地址的前10位页目录偏移量即可得到页表的基地址;

    2. 接着页表基地址+线性地址第二个10位的页表偏移,即可得到内存页的首地址;

    3. 最后内存页的首地址+线性地址的最后12位偏移量,即可得到最后的物理地址;

    这样就完成了从线性地址转为物理地址

    接下来,看下页表项的格式。先来看下空闲的页表项和存储数据的页表项的格式:640?wx_fmt=png640?wx_fmt=png三层页表都有着相同的格式,页帧地址为一块内存页的首地址,而内存页是4kb对齐的,所以页表项的低12位为0;而页目录项指向的是页表的首地址。

    1. Present bit表示这个页表项是否可以用于地址转换,p=1表示可以使用。当p=0时,表示这个页表项可以被进程使用。

    2. Accessed and Dirty Bits这些位表示一个页中数据的使用情况。当要对一个页写或读之前,处理器会在两个层次的页表格设置访问位;当要对一个地址进行写操作,而这个操作在第二表格某个表项指向的内存页中,这时处理器会设置第二个表格相对应的页表项的脏位,设置页目录的脏位是未定义的。操作系统可以根据这些位来决定当内存不够时,换出哪些物理内存。

    3. Read/Write和User/Supervisor Bits位在地址转换过程中,没有使用。

    页转换缓存

    为了提高系统,防止每次地址转换都需要访问页表,处理器还设置了TLB(Translation lookaside buffer)转换后备高速缓冲区,存储最近使用的线性地址到物理地址的映射;下面给出TLB的原理图:640?wx_fmt=png

    当CPU需要访问一个一个内存地址时,给出一个虚拟地址,先是到TLB中查找是否有对应的物理地址,如果有,即命中,直接用TLB中的对应物理地址访问缓存;如果在TLB中没有对应的物理地址,即未命中,则需要到内存页表求出物理地址,并将这个物理地址存入TLB中。访问cache时,如果Cache中有需要的数据,则直接返回需要的数据,如果Cache中没有需要访问的数据,则需要到内存获取数据返回给用户,并将获取的数据存入Cache中。

    所以,如果对计算机有足够的了解,那么就会发现计算机架构里面存在着好多的缓存设计,首先应用程序从磁盘获取数据时,在内核有一块内存存储最近访问的数据缓存;当CPU从主存获取数据时,也是先从缓冲区获取数据,然后在读进CPU。还有应用程序也有缓存,例如MySQL的存储引擎innodb也有一块缓冲区,存储磁盘数据;在web网站应用程序中,当从数据库获取数据时,先用memcache或者redis获取最近访问的数据等等。

    640?wx_fmt=jpeg


    展开全文
  • 下面这段代码主要用在虚拟地址映射比较固定的情况。该代码的作用主要是便于调试“内存被别的代码踩”,把这段被怀疑的内存设置为只读后,如果有别的程序写到该区域就会打印出Stack,很容易找出是谁踩了你的内存了,...
  • phpstudy虚拟目录的设置

    千次阅读 2017-08-19 13:20:55
    对phpstudy进行虚拟目录的设置
  • 默认虚拟内存是设置在C盘的,由于C盘本来空间比较小,而且安装软件越来越多的情况下C盘空间就不够用了,所以很多人就想把虚拟内存设置到D盘或者C盘以外的盘,这要怎么设置呢?虽然不同的操作系统设置的方法有所不同...
  • 的确,把项目放到webapps目录下非常方便,至少在部署一个项目时,直接把项目扔到webapps目录下所进行的操作会比设置虚拟路径容易的多。但是如果考虑到长久性的操作以及多个项目呢?  设置虚拟路径的
  • 虚拟地址和物理地址

    万次阅读 2018-04-28 10:11:43
    该文章转载于...一个新进程建立的时候,将会建立起自己的内存空间,此进程的数据,代码等从磁盘拷贝到自己的进程空间,哪些数据在哪里,都由进程控制表中的task_struct记录,task_s...
  • 物理地址与虚拟地址

    千次阅读 2009-02-16 16:18:00
    1.VirtualAlloc用来在进程的虚拟地址空间中保留(reserve)或者提交(commit)页。在保留时以64KB为粒度,即保留空间以64K为单位。而提交虚拟地址时,则以页(典型大小为4KB)为单位。2.VirtualCopy用来绑定一块物理内存...
  • 物理地址与虚拟地址的区别

    千次阅读 2014-10-17 23:43:34
    从最根本的角度来看,地址只分为两类:物理地址、虚拟地址。 S3C2410、S3C2440上电之后,是使用物理地址来访问的。数据手册中介绍各种寄存器时,所附带的地址就是物理地址。 虚拟地址是启动内存管理单元(MMU)后...
  • 本篇文章的环境背景为: 在Win7下创建虚拟机,...诚然,动态的局域网IP地址每次都要去 ifconfig 一下,用Putty访问也虚拟终端也需要每次都输入IP,很麻烦。本文将介绍如何设置静态的IP,这将给上述操作带来很大方便。
  • 虚拟地址是Linux内核虚拟出来的地址,经由MMU内存管理单元映射到实际的物理地址。MMU是实际的管理内存的硬件。 3、直接使用物理地址 如果直接使用物理地址的话: (1)安全风险 每个进程都可以访问0-4G的...
  • 物理地址:这里说的物理地址是内存中的内存单元实际地址,不是外部总线连接的...虚拟地址虚拟地址是CPU保护模式下的一个概念,保护模式是80286系列和之后的x86兼容CPU操作模式,在CPU引导完操作系统内核后,操作系...
  • Linux 内核 虚拟地址 物理地址 转换

    千次阅读 2015-12-12 15:10:02
    而且这种固定映射最大到896M的地址范围,也即从0xc0000000-0xf7ffffff的虚拟地址采用固定映射,称为内核逻辑地址.剩下的1G-896=128M范围的虚拟地址可以映射到任意物理地址.称为内核虚拟地址.当实际内存大于1G时(实际上...
  • 谈起内存管理,首先我们就要搞清楚虚拟地址和物理地址的关系。本文就是简单介绍下这两个基础概念。 物理地址 物理地址指实际存在的物理内存地址,比我有一个2G的内存芯片,那么系统的物理内存就是2G,我要访问该内存...
  • 虚拟地址与物理地址的区别

    千次阅读 2018-08-10 21:09:03
    4. MMU 请点评   现代操作系统普遍采用虚拟内存...首先引入两个概念,虚拟地址和物理地址。如果处理器没有MMU,或者有MMU但没有启用,CPU执行单元发出的内存地址将直接传到芯片引脚上,被内存芯片(以下称为...
  • 物理地址和虚拟地址

    千次阅读 2008-02-25 00:56:00
    每个进程有4GB的虚拟地址空间。基于分页机制,这4GB地址空间的一些部分被映射了物理内存,一些部分映射硬盘上的交换文件,一些部分什么也没有映射。程序中使用的都是4GB地址空间中的虚拟地址。而访问物理内存,需要...
  • VMware-重要设置-虚拟网络编辑器

    万次阅读 2019-10-20 11:51:05
    您可以使用虚拟网络编辑器执行以下操作:查看和更改关键网络连接设置,添加和移除虚拟网络以及创建自定义虚拟网络连接配置。在虚拟网络编辑器中所做的更改影响在主机系统中运行的所有虚拟机。 二、打开虚拟网络...
  • Linux虚拟地址空间分布

    千次阅读 2017-06-16 23:35:40
    Linux虚拟地址空间分布
  • 选中“高级”标签中的“Network Address”并按图中所示的数据格式修改“值”这一项数据(其实这就是虚拟网卡显示的物理地址),确定就OK了。 注意:这里修改的网卡地址必须是02或是0A开头,其它数据无效。 ...
  • 1.首先启动虚拟环境 pipenv shell 2.查看当前项目的虚拟环境路径 pipenv --venv home/liao/.local/share/virtualenvs/fisher-nvDqi6w7 3.打开pycharm设置,找到解释器...至此,该项目的虚拟环境路径就设置好了 ...
  • 虚拟地址、逻辑地址、线性地址、物理地址

    千次阅读 多人点赞 2015-11-22 10:58:56
    1. 两个内存概念 ...虚拟内存:简明的说,虚拟内存就是在硬盘上划分一块页面文件,充当内存。当程序在运行时,有一部分资源还没有用上或者同时打开几个程序却只操作其中一个程序时,系统没必要将程序
  • idea 设置虚拟路径和tomcat配置虚拟目录映射 1、点击工具栏的运行配置Edit Configurations 2、在弹出的Run/debug Configurations中选中tomcat容器,选择deployment这个tab 3、选择好目录后,更改为自己指定的...
  • Linux内核固定虚拟地址映射

    千次阅读 2018-05-20 23:10:09
    但是现在从虚拟地址空间CPU只能看到kernel image,如果此时想访问其他物理地址空间怎么办?用ioremap吗?要知道,此时内存子系统还没有初始化,ioremap无法工作。为了解决这一问题,Linux内核定义了一段固定的虚拟...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 441,643
精华内容 176,657
关键字:

怎样设置自己的虚拟地址