`
cloudtech
  • 浏览: 4619187 次
  • 性别: Icon_minigender_1
  • 来自: 武汉
文章分类
社区版块
存档分类
最新评论

目标机的内存管理

 
阅读更多

目标机的内存管理



要允许目标机的binaries在不同平台执行,未必需要重新编译文件。如果源文件是以big-endian格式编码的,且如果给定平台是little-endian,那么目标机上的Run-time应该负责相应的转换。

虚拟机要支持可移植性特征,需要在软件中实现完整的内存保护。

当目标机的Run-time被调用时,它从本地操作系统分配内存来为单个应用程序构建人工的地址空间。此地址空间确切地被分成三部分:text 部分、heap 部分、stack 部分。地址依次从低到高,text部分起始地址为0。
在编译时test部分的地址是固定的,而stack和heap部分的地址大小是可调节的。

虚拟机支持命令行选项,允许调整stack和heap的尺寸,要求是非负值。运行时还检查确定stack不会溢出到heap部分,或溢出到被禁止的地址空间顶部。

保护本地平台要做的另一件事是,固定一定数量的有效内存到地址空间。一旦分配了text、heap和stack地址后,立刻做这件事。Unix系统使用sbrk()函数。

当虚拟机初始载入一个应用程序到内存,它做一次性检查,确定程序的binary编码指令的合法性。这种一次性检查就是字节码校验(Bytecode Verification)。虚拟机检查看指令操作数是否有正确的值,还检查确定地址符号没有越界,所有的指令操作代码均有效。

要消除内存延迟(Memory Latency)造成的一些危险,最好是把Run-time载入到物理内存。在目标机建立地址空间之前,目标机做一个调用,查看空闲的物理内存大小,如果有效的物理内存不足,则虚拟机不启动。

最为复杂的是heap管理。可以考虑使用显示内存管理模式。理由如下:
1)大多数垃圾收集器的实现都采用了多线程环境,耗用不少CPU周期。如果目标机不是多线程环境呢?

2)虚拟机的设计目标是可移植性、简单性、高性能。类似与BDW收集器之类的保守垃圾收集器并不简单,不能马上就实现移植。从本质上讲,垃圾收集器需要run-time系统做额外的工作来跟踪已分配的内存。这些额外的工作引入了额外的指令,降低了系统性能。


机器设计

中央处理器能以基于寄存器或基于Stack的机器来实现。基于寄存器的处理器,如Intel的奔腾处理器;而基于Stack的处理器,如Harris半导体的RTX32P,它有两个片上Stack来执行基本的操作。

基于Stack的处理器在嵌入式领域往往更为流行,因为它们可支持更小的程序,更受限的资源。比如一个基于Stack的处理器指令如IADD,从Stack弹出两个整数,然后求和,并把和压入Stack,指令如下:
ADD $R1, $R2, $R3
此指令求得$R2和$R3的和,并放入$R1。
基于Stack的IADD指令只需一个单字节就可完成该工作。而基于寄存器的ADD指令至少需要四个字节。
所以显然基于Stack的机器编译程序所需的时间比基于寄存器的机器编译时间更短。

基于Stack的计算机执行函数调用也更高效。因为函数参数本身就存放在Stack内。而基于寄存器的计算机,其函数参数必须存取,并手动放入到Stack,需要做更多的工作。

基于Stack的计算机其上下文切换耗费资源也更小。而基于寄存器的计算机,上下文切换前必须手动保存所有寄存器的状态,RISC架构往往有大量的寄存器,其上下文切换需要集中内存操作。而基于Stack的计算机则没有这些问题。

并非基于寄存器的架构就一无是处,它有一个更大的优势:更快。寄存器位于CPU内,存取值操作非常块。Intel的新64处理器,如Itanium,有上百个片上寄存器,而基于Stack的处理器,几乎总是从内存存取数据,这显然比较慢。

比较表
————————————————————————————————————————————————
--------- 基于Stack的处理器 基于寄存器的处理器
————————————————————————————————————————————————
Benefits 更小的内存占用 基本操作非常快
更快的函数调用 (整体性能更好)
更快的上下文切换 执行更透明
Costs 基本操作比较慢 memory-intensive上下文切换
work-intensive函数调用
————————————————————————————————————————————————

分享到:
评论

相关推荐

    内存管理内存管理内存管理

    内存管理内幕 dragonimp's blog coder.developer.[designer].ArchitecturE.manager.^_^... posts - 29, comments - 121, trackbacks - 27 My Links Home Contact Login News !!! Article ...

    Linux系统2.6内核改进的内存管理剖析

    这些变化一起促生了 2.6 内核中的内存管理器,它的设计目标是更高的性能、效率和稳定性。有一些变化,比如 Highmem PTE 和大内存页,目的是减少内存管理带来的开销。其他变化,比如反向映射,提高了某些关键领域的...

    操作系统(内存管理)

    文将对 Linux™ 程序员可以使用的内存管理技术进行概述,虽然关注的重点是 C 语言,但同样也适用于其他语言。文中将为您提供如何管理内存的细节,然后将进一步展示如何手工管理内存,如何使用引用计数或者内存池来半...

    glibc内存管理ptmalloc源代码分析

    3.1.2 内存管理器的设计目标 3.1.3 常见C内存管理程序 3.2 Ptmalloc内存管理概述 3.2.1 简介 3.2.2 内存管理的设计假设 3.2.3 内存管理数据结构概述 3.2.4 内存分配概述 3.2.5 内存回收概述 3.2.6 配置选项...

    6内存管理.xmind

    内存管理的功能 内存空间的分配与回收 内存空间的扩充(实现虚拟性) 虚拟存储技术、自动覆盖技术 地址转换 操作系统负责实现逻辑地址到物理地址的转换 三种方式 绝对装入 可重定位装入 动态运行...

    内存管理选择题.txt

    编址的目标程序,是重定位装入程序的输入。重定位装入程序按照分配区域的起 始地址逐一调整目标程序指令中的地址部分。目标程序经过重定位后,不仅进到 分配给自己的绝对地址空间中,而且程序指令里的地址部分全部...

    操作系统课程设计实验报告:内存管理

    本次课程设计需要完成操作系统的内存管理,具体分为如下三个子模块: 1、物理内存管理:理解位示图;理解物理内存的管理机制; 2、分页机制:深入理解内存“分页机制”;认识页目录、页表及地址变换; 3、地址映射与...

    内存加速 Memory Booster (Full Version) 5.9.3

    它主要是为了帮助用户解决Android手机内存管理上的各种问题。它通过整理内存碎片、修复因某些程序导致的内存泄漏问题来进行内存回收。 主要功能: - 及时报告与监测内存状态:内存加速器会通过及时更新图表显示手机...

    虚拟内存管理器:设计的虚拟内存管理器,可将逻辑地址转换为物理地址

    虚拟内存管理器设计了虚拟内存管理器,可将逻辑地址转换为物理地址。 该项目包括编写一个将逻辑地址转换为物理地址的程序。 该程序将从包含逻辑地址的文件中读取并使用TLB以及页表,将每个逻辑地址转换为其相应的...

    操作系统之内存管理.zip

    管理系统,作为一种高效的企业运营管理工具,旨在通过集成化、系统化的手段,对组织内部的各类资源进行规划、协调、控制和优化,以实现企业战略目标,提升运营效率,增强核心竞争力。以下是对管理系统的详细介绍: ...

    CppND-内存管理-聊天机器人

    CPPND:内存管理聊天机器人 这是:内存管理的第三门课程的... 您的目标是从内存管理的角度使用课程知识来优化ChatBot程序。 一共有五项特定任务要完成,下面将详细介绍。 本地运行的依赖项 cmake> = 3.11 所有操作系

    MemoryManager:我正在编写一个内存管理器,以简化C ++的工作。 目标是创建一些东西来替代new和delete并保持速度,同时还要处理垃圾回收并防止内存碎片

    内存管理器我正在编写一个内存管理器,以简化C ++的工作。 目标是创建一些东西来替代new和delete,并维持或提高速度,同时还处理垃圾收集并防止内存碎片。功能/任务清单: 统计记录:是丢失的内存跟踪:是构造函数:...

    内存虚拟硬盘(小内存系统慎用)!

    安装方法很简单,小白3分钟内也能弄懂哦!...最后一步,实现最终目标,将IE浏览器临时文件放入这个虚拟盘中。 在internet选项里 选择 浏览历史记录 属性 来移动临时文件夹到这个目录。 设置完成之后会注销 重新登录

    GCview, gc/内存管理可视化和监控框架.zip

    GCview, gc/内存管理可视化和监控框架 GCviewgc/... 在Apache软件许可证 2.0下许可GCview是一种通用且易于适应性的可视化和监控框架,目标是( 但不限于) 到内存管理系统( 垃圾收集器,malloc/free实现,硬件缓存,等

    内存管理聊天机器人

    内存管理聊天机器人 这是:内存管理的第三门课程的... 您的目标是从内存管理的角度使用课程知识来优化ChatBot程序。 一共有五项特定任务要完成,下面将详细介绍。 本地运行的依赖项 cmake> = 3.11 所有操作系统: mak

    操作系统:2018年Spring操作系统-分配(电梯调度,内存管理和文件管理)|操作系统课程项目(电梯调度,内存管理,文件管理)

    作业2-内存管理请求调页模拟。假设每个页面可存放10条指令,分配给一个作业的内存块为4。模拟一个作业的执行过程,该作业有320条指令,即它的地址空间为32页,目前所有页还没有调入内存。模拟过程:在模拟过程中,...

    Linux内存IO

    Linux内存管理基础 I/O内存的访问 目标 理解Linux内存管理原理 掌握内核和用户空间内存分配函数的使用 掌握I/O内存的访问方法和步骤 第一章:内核地址空间 第二章:进程地址空间 第三章:I/O内存的访问

    扩展的内存管理机制设计实验1

    2. 内存碎片(外部碎片)是危害系统稳定的重要原因之一 3. 预先规划是达到以上目标的一种良好手段 4. 内存泄漏的防治主要依赖于内存使用上严谨的编程习惯 2.

    rmm:RAPIDS内存管理器

    RAPIDS内存管理器(RMM)的目标是提供: 通用接口,可自定义和内存分配接口的的集合使用该接口进行内存分配的的集合有关RMM提供的接口以及如何在C ++代码中使用RMM的信息,请参见。 注意:有关最新的稳定确保您位于...

    JAVA中的内存分配策略

    静态存储分配是指在编译时就能确定每个数据目标在运行时刻的存储空间需求,因 而在编译时就可以给他们分配固定的内存空间.这种分配策略要求程序代码中不允许有 可变数据结构(比如可变数组) 的存在,也不允许有嵌套或者...

Global site tag (gtag.js) - Google Analytics