首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

MIPS架构深入理解10-向MIPS移植软件之内存

牛顿 这是向MIPS架构移植软件的问题系列之第三篇。...在前两篇文章 *《MIPS架构深入理解8-向MIPS架构移植软件之大小端问题》 *《MIPS架构深入理解9-向MIPS移植软件之Cache管理》 中,我们分别讨论了大小端模式和Cache对于移植代码的影响...MIPS架构提供了sync指令实现这个目的,它可以确保sync指令之前的访问先于之后的执行。...而MIPS架构更为激进,完全就是无序访问内存。这就要求我们系统开发人员必须手动保证内存的访问顺序是正确的。 2 访存顺序和写缓存 前面讨论了这么多理论,接下来让我们讨论点实际的内容吧。...对于兼容MIPS32/64规范的任何系统,这应该都是有效的。 但是,有效不等于高效。通过提高内存的读写速度也可以降低整体的负荷。有些特定的系统可能会提供更快的内存或者写缓存。

91510

MIPS架构深入理解5-内存管理

这就是Linux没有按照约定使用Context寄存器的原因。 XContext(PTEBase): 物理内存比较大时用的页表基址寄存器。...在小型的嵌入式系统上,TLB完全可以映射到固定的物理内存或者进行很少的转换,这时候,TLB就不需要作为一个缓存而存在了。 甚至有些大型OS也不使用上面这种处理方式,比如Linux。...因为它与Linux对于虚拟内存的管理策略不同。因为Linux内核的地址映射对所有进程都相同。后面我们再专门分析,基于MIPS架构的Linux内存管理方式。...上面的方式不是完全必须的,基于MIPS架构的Linux版本就没有使用这种方式。Linux内核多级页表管理虚拟内存的方式,我们会专门写一篇文章介绍。...6 MIPS架构中TLB的使用场景 如果你要运行的系统是全功能的操作系统,比如说Linux,对TLB的使用不需要你的关注。但是,对于实时OS,你可能想知道TLB是否有用。

1.6K20
您找到你想要的搜索结果了吗?
是的
没有找到

MIPS架构深入理解2-MIPS架构体系

对于子程序如何传递参数及如何返回,MIPS范围有一套约 定,堆栈中少数几个位置处的内容装入CPU寄存器,其相应内存位置保留未做定义,当这两个寄存器不够存 放返回值时,编译器通过内存来完成。...此处,又再一次体现了MIPS架构的设计理念:硬件尽量简单,辅以软件实现。编译器提供的辅助有: 加载32位立即数: 直接加载立即数。 从内存加载数据: 你可以编码一个load,实现从内存中读取变量。...2.7 基本地址空间 MIPS架构具有两种特权模式,用户模式和内核模式。现在,我们讨论MIPS架构对内存空间的分配使用情况。...在上图中,我们可以看出,64位内存地址的扩展部分都位于32位内存地址的中间,这是一个很奇怪的实现技巧。我们知道,MIPS架构在短整数向长整数扩展时,使用了带符号位的扩展方式。...事实上,这么大的地址空间大部分时候根本没有意义,除非你正在实现一个虚拟内存操作系统,要不然基本用不上;因此,许多MIPS64用户还是把指针定义为32位长度。

5.4K20

Linux - Linux内存管理

移除交换空间 ---- 概念 内存管理是Linux系统重要的组成部分。...为了解决内存紧缺的问题,Linux引入了虚拟内存的概念。为了解决快速存取,引入了缓存机制、交换机制等。...当需要用到原始内容时,这些信息会被重新从交换空间读入物理内存Linux内存管理采取的是分页存取机制。...要深入了解Linux内存运行机制,需要知道下面提到的几个方面。 首先,Linux系统会不时地进行页面交换操作,以保持尽可能多的空闲物理内存。...其次,Linux进行页面交换是有条件的,不是所有页面在不用时都交换到虚拟内存中,Linux内核根据“最近最经常使用”算法,仅仅将一些不经常使用的页面文件交换到虚拟内存中。

52.2K41

从一道mips题目学习搭建mips环境及ROP

本文以一道简单的mips pwn题,讲解mips环境搭建及mips ROP的构造。...32位的;LSB表示是小端,如果是MSB则表示大端;MIPS32 version 1 (SYSV)表示MIPS的版本,MIPS版本有MIPS32/64、MIPS I到V等等;题目是动态链接的,所以我们需要对应的动态链接库...直接运行程序是运行不起来的,这是因为mips架构的elf文件需要在mips环境中才能运行,而且还需要相应的动态链接库。所以下面我们来一起搭建mips环境。要注意题目是什么环境,搭建的就得是什么环境。...mips $ sudo ifconfig ens33 down mips $ sudo brctl addbr virbr0 mips $ sudo brctl addif virbr0 ens33...mips $ sudo brctl stp virbr0 off mips $ sudo brctl setfd virbr0 1 mips $ sudo brctl sethello virbr0

2.8K20

Linux内存描述之内存节点node--Linux内存管理(二)

CPU访问本地内存的速度比访问远程内存的速度要快 Linux适用于各种不同的体系结构, 而不同体系结构在内存管理方面的差别很大....因此linux内核需要用一种体系结构无关的方式来表示内存....因此linux内核把物理内存按照CPU节点划分为不同的node, 每个node作为某个cpu结点的本地内存, 而作为其他CPU节点的远程内存, 而UMA结构下, 则任务系统中只存在一个内存node, 这样对于...系统中的NUMA结点都是从0开始编号的 3.1 linux-2.4中的实现 pgdat_next指针域和pgdat_list内存结点链表 而对于NUMA结构的系统中, 在linux-2.4.x之前的内核中所有的节点...-3.x~4.x的实现 node_data内存节点数组 在新的linux3.x~linux4.x的内核中,内核移除了pg_data_t的pgdat_next之指针域, 同时也删除了pgdat_list链表

7.6K20

Linux内存描述之内存页面page--Linux内存管理(四)

1 Linux如何描述物理内存 Linux把物理内存划分为三个层次来管理 层次 描述 存储节点(Node) CPU被划分为多个节点(node), 内存则被分簇, 每个CPU对应一个本地物理内存, 即一个...内存中的每个节点都是由pg_data_t描述,而pg_data_t由struct pglist_data定义而来, 该数据结构定义在include/linux/mmzone.h, line 615, 每个结点关联到系统中的一个处理器...简单来说, 页是一个数据块, 可以存放在任何页框(内存中)或者磁盘(被交换至交换分区)中 我们今天就来详细讲解一下linux下物理页帧的描述 2 页帧 内核把物理页作为内存管理的基本单位....因此在后来linux-2.4.x的更新中, 删除了这个字段, 取而代之的是page->flags的最高ZONE_SHIFT位和NODE_SHIFT位, 存储了其所在zone和node在内存区域表zone_table...3.2 内存页标识pageflags 其中最后一个flag用于标识page的状态, 这些状态由枚举常量enum pageflags定义, 定义在include/linux/page-flags.h?

8K11

Linux内存描述之概述--Linux内存管理(一)

2 (N)UMA模型中linux内存的机构 Linux适用于各种不同的体系结构, 而不同体系结构在内存管理方面的差别很大. 因此linux内核需要用一种体系结构无关的方式来表示内存....Linux内核通过插入一些兼容层, 使得不同体系结构的差异很好的被隐藏起来, 内核对一致和非一致内存访问使用相同的数据结构 2.1 (N)UMA模型中linux内存的机构 非一致存储器访问(NUMA)模式下...而内存管理的其他地方则认为他们就是在处理一个(伪)NUMA系统. 2.2 Linux物理内存的组织形式 Linux把物理内存划分为三个层次来管理 层次 描述 存储节点(Node) CPU被划分为多个节点..., 我们会在后面典型架构(x86)上内存区域划分详细讲解x86_32上的内存区域划分 因此Linux内核对不同区域的内存需要采用不同的管理方式和映射方式, 为了解决这些制约条件,Linux使用了三种区:...2.6 高端内存 由于能够被Linux内核直接访问的ZONE_NORMAL区域的内存空间也是有限的,所以LINUX提出了高端内存(High memory)的概念,并且允许对高端内存的访问

6.8K30

Linux内存描述之内存区域zone--Linux内存管理(三)

因此相对于任何一个CPU访问本地内存的速度比访问远程内存的速度要快, 而Linux为了兼容NUMAJ结构, 把物理内存相依照CPU的不同node分成簇, 一个CPU-node对应一个本地内存pgdata_t..., 我们会在后面典型架构(x86)上内存区域划分详细讲解x86_32上的内存区域划分 因此Linux内核对不同区域的内存需要采用不同的管理方式和映射方式, 因此内核将物理地址或者成用zone_t表示的不同地址区域...Linux使用enum zone_type来标记内核所支持的所有内存区域 3.1 内存区域类型zone_type zone_type结构定义在include/linux/mmzone.h, 其基本信息如下所示...位系统中, Linux内核虚拟地址空间只有1G, 而0~895M这个986MB被用于DMA和直接映射, 剩余的物理内存被成为高端内存....Linux必须处理如下两种硬件存在缺陷而引起的内存寻址问题: 一些硬件只能用某些特定的内存地址来执行DMA 一些体系结构其内存的物理寻址范围比虚拟寻址范围大的多。

9K31

Linux内存管理

本篇介绍 本篇介绍下Linux内存管理,用系统角度看内存的寻址和分配机制。 内容介绍 内存管理应该是系统中最难的模块之一了,而且历史也悠久,就先来简单回顾下。...分页机制可以完全避免内存碎片问题么? 公布下答案: 的确有分页机制就可以完全不需要分段机制,目前linux是在分段的基础上实现了分页,这个也有考虑到是兼容性问题。...; /* for /proc/PID/auxv */ struct percpu_counter rss_stat[NR_MM_COUNTERS]; struct linux_binfmt...mmap流程如下: image.png 缺页异常 linux 是在不得不使用物理内存的时候才会分配物理内存。这句话该怎么理解呢?...因此看到物理可用内存不足并不表示需要换物理内存条了。

13.6K51

MIPS架构深入理解1-MIPS和RISC架构体系介绍

所以,MIPS架构占用更多的内存空间。 第二,MIPS架构的流水线设计排除了对内存变量进行任何操作的指令的实现。内存数据的获取只能在阶段4,这对于算术逻辑单元有点延迟。...内存访问只能通过load或store指令进行。(MIPS架构的汇编也是最简单易懂的代码之一) 尽管有这些问题,但是MIPS架构的设计者也在思考,如何使CPU可以被编译器更加简单高效地优化。...1.5.1 MIPS指令集的限制 所有的指令都是32位长度: 这意味着没有指令仅占用2个或3个字节的内存空间(也就是说,通常情况下,MIPS架构的二进制文件比X86架构大百分之二十或三十),也没有指令超过...MIPS架构采取的方式就是,提供一组load/store指令,分别加载字节、半字或WORD大小的内存变量。...MIPS架构把中断看作为异常的一种,MIPS的异常涵盖了CPU想要中断所有顺序的执行,调用软件处理程序所产生的所有事件。比如中断、试图访问物理地址不存在的虚拟内存或者其它事情都可以产生异常。

7K11

Linux 内存管理

操作系统内存管理包括物理内存管理和虚拟内存管理:       我们这篇主要介绍Linux的虚拟内存管理。...物理内存管理在另外一篇:《操作系统内存管理(思维导图详解)》       1、程序的进程在内存的数据结构  一.Linux 进程在内存数据结构 ---- 1、存储(没有调入内存)阶段:       可以看到一个可执行程序在存储...Linux仅把可执行映像的一小部分 装入物理 内存. 当需要访问未装入的页面时 . 系统产生一个缺页中断 , 把需要的页读入 物理内存。 ...把页装入物理内存。   ·   五.swap对换空间 ----      32位Linux系统的每个进程可以有4 GB的虚拟 内存空间 ....例如:32位Linux的每个用户进程都可以访问4GB的线性地址空间, 而实际的物理内存可能远远少于4GB. 采用分页机制 ,Linux仅把可执行映像的一小部分装入物理内存

7.5K10

Linux内存修改

虚拟内存是为了满足物理内存不足采用的策略,利用磁盘空间虚拟出一块逻辑内存,用作虚拟内存的空间也就是交换分区。...作为物理内存的扩展,Linux会在物理内存不足时,使用交换分区的逻辑内存,内核会把暂时不用的内存块信息写到交换空间,这样物理内存就得到了释放,这块儿内存就可以用于其他目的,而需要用到这些内容的时候,这些信息就会被重新从交换分区读入物理内存...Linux内存管理采用的是分页存取机制,为了保证物理内存得到充分的利用,内核会在适当的时间把物理内存中不经常使用的数据块儿自动交换到虚拟内存中,而将充分使用的信息保留到物理内存中。...例如通过阿里云安装的系统,不会自动给我们分配Swap虚拟内存空间;Swap分区或虚拟内存文件,是在系统物理内存不够用的时候,由系统内存管理程序将那些很长时间没有操作内存数据,临时保存到Swap分区虚拟内存文件中...当那些程序要再次重新运行时,会再从Swap分区或虚拟内存文件中恢复之前保存的数据到内存中。

13.3K41
领券