Linux 存储管理分析札记

X86架构、ARM架构、MIPS架构三者的区别 前几章详细介绍了X86架构、ARM 架构、MIPS架构的概念及其优缺点,今天像大家介绍三者的区别。浅浅地期待一下吧! 阅读详情

作者: comcat 发表日期: 2007-02-15 10:04    http://comcat.blog.openrays.org/blog.php?do=showone&tid=271

1. MIPS 与 X86 的 TLB 差别

其在于对 TLB 不命中时的处理上:

MIPS 会触发TLB Refill 异常,内核的 tlb_refill_handler 会以 pgd_current 为当前进程的 PGD 基址,索引获得转换失败的虚址对应的 PTE,并将其填入 TLB,完了CPU 把刚刚转换失败的虚地址再走一下 TLB 就OK了。

而 X86 在 TLB 不命中时,是由硬件 MMU 以 CR3 为当前进程的 PGD 基址,索引获得 PFN 后,直接输出 PA。同时 MMU 会填充 TLB 以加快下次转换的速度。

另外转换失败的虚址,MIPS 使用 BadVAddr 寄存器存放,X86 使用 CR2 存放。


2. 关于 MIPS32 页表的大小问题

系统每 fork 一个进程或者 clone 一个进程没有CLONE_VM标志,内核都会调用 __get_free_pages 为新进程分配一个页给页目录表,前512项初始化都指向invalid_pte_table(空页表,共有 PAGE_SIZE/sizeof(pte_t) 项),后面的都从 init 进程继承。而后内核会根据新进程所需的存储空间大小,为其分配页表(大小为一个页),分配内存页,设置相应的页表项,设置对应的页目录表项。

可以看到,只要进程数目固定页目录表所需的空间是固定的,每个进程页目录表为一个页大小;而进程总页表的大小要依赖于进程代码、数据的大小。

一个典型的 MIPS32 系统,页大小为4KB,单用户模式,仅有bash进程,其页表大小为 48KB 左右(cat /proc/meminfo|grep PageTables);页目录的大小可由下式计算:

PGD_SIZE = NR_PROCESS(exclude kernel thread) * PAGE_SIZE


3. MIPS TLB

MIPS TLB 的每项的主要数据有: | G | ASID | VPN | PFN | ,其中 VPN 为 virtual page number, PFN 为 physical frame number。 项与项之间没有次序,CPU 转换时是直接匹配的。不能称为 Page Table 。

而 Page Table 当年设计成 数组结构,以数组的下标作为虚页号是经过考虑的,即使今天看来,我们依然能够体会它的巧妙。


4. 内核在从汇编语言跳到C语言中时,其栈的栈顶是在哪里设置的?

内核在进入 start_kernel 前,将 esp 指向了 init_thread_union + THREAD_SIZE, init_thread_union 位于 .data.init_task 节,是个 union 结构,其大小为 THREAD_SIZE,定义的比较巧妙:

union thread_union {
struct thread_info thread_info;
unsigned long stack[THREAD_SIZE/sizeof(long)];
};


5. 内核态线程、内核线程以及进程的内核栈问题

linux 下线程库的实现,以常用的 Linuxthread 或者 NPTL 为例,这些库创建线程是使用这些标志 CLONE_VM | CLONE_FS | CLONE_FILES | CLONE_SIGHAND 调用 clone() 来实现的,就是一个轻量级进程。


在使用 fork, vfork, clone 这些函数创建进程或者轻量级进程时,内核都会调用 alloc_task_struct() 为其分配一个 task_struct; 调用 alloc_thread_info() ,表面上看好像是分配 thread_info 结构,实际上:

#define alloc_thread_info(tsk) kmalloc(THREAD_SIZE, GFP_KERNEL)

分配了 THREAD_SIZE 的空间,底端为 thread_info ,指向它的指针保存于 task_struct->thread_info 中。可以看到,task_struct->thread_info + THREAD_SIZE 即为进程或者轻量级进程的内核栈栈底。

无论是使用 clone 生成轻量级进程,还是使用 kernel_thread 创建内核线程,他们都会进入 do_fork,进而调用 alloc_thread_info(),因此他们都有内核栈,大小为 THREAD_SIZE,底端为 thread_info 。

因此linux 下,每个线程都会有一个内核栈,这个当线程数目很大时是个问题。

ARM、X86和MIPS主流架构优缺点分析 三种主流芯片架构1. ARMARM是高级精简指令集的简称(Advanced RISC Machine),它是一个32位的精简指令集架构,但也配备16位指令集,一般来讲比等价32位代码节省达35%,却能保留32位系统的所有优势。 ARM处理器的主要特点是: 体积小、低功耗、低成本、高性能——ARM被广泛应用在嵌入式系统中的最重要的原因 支持Thumb(16位)/ARM(32位)双指令集,能很好的兼容 阅读详情

相关推荐

CATIA二次开发CAA:(一)开发环境搭建

CATIA+CAA+RADE+VS2012

ysm1987的博客 1万+

x86 vs mips

x86 vs mips 计算机CPU两代指令集: CISC:目的是用最少的机器指令来完成所需的计算任务。同时指令集丰富。 代表 架构 X86、 RISC:基于一个事实“一个典型程序运算过程所使用的80%指令只占一个处理器指令系统的20%”。RISC就是选取常用指令,剔除不常使用的指令,降低运算器的复杂度和面积。 代表架构 ARM、MIPS、PowerPC、RISC-V 例子:a*=b 编译后的汇...

海棠花的博客 1837

C++ 工程实践(9):数据抽象

陈硕 (giantchen_AT_gmail)http://blog.youkuaiyun.com/Solstice  http://weibo.com/giantchen陈硕关于 C++ 工程实践的系列文章: http://blog.youkuaiyun.com/Solstice/category/8

陈硕的Blog 1万+

计算机体系结构——虚拟存储(二)

本文主要介绍MIPS和LoongArch处理器对虚拟存储的支持,包括TLB entry格式、指令、例外、Refill过程及汇编代码、多级页表查找过程

shiwq1127的博客 1333

用 ABAP OAuth 2.0 Client 直连 SAP SuccessFactors:从体系到落地的一条龙实践指南

ABAP SMI允许在后端对外部服务的OData端点进行定义与自定义化配置,并以受信连接的方式暴露给ABAP应用调用。它并不替代OAuth,而是扮演端点与自定义参数的集中化定义者,最终认证依旧由完成。对于需要在ABAP后端发起临时或补充型OData调用的场景,SMI是一个轻量而清晰的集成入口。scope的客户端应用已经完成注册,API DomainCompany ID、证书或密钥都已归档。ABAP的Profile与Client已建立并绑定,OA2C_GRANT可见绿色访问状态。SMI。

2007 年 ~ 2025 年,深耕 SAP 技术 18 年 286

【LLM评估篇】Ceval | GAIA | MMLU benchmarks

- 一些大模型的评估模型: - 多轮:MTBench - 关注评估:agent bench - 长文本评估:longbench,longeval - 工具调用评估:toolbench - 安全评估:cvalue,safetyprompt等 本文还介绍了其他主流的大模型评估指标等及其使用

发现问题,并解决问题,批判性思维 6945

汇编学习:从最简单的函数说起:对比x86,arm和MIPS

前言 最简单的函数 x86下汇编指令 ARM下汇编指令 MIPS下汇编指令 Hello World x86中汇编指令 ARM汇编 知识点1: 知识点2: 知识点3:ADR指令: ADRL: LDR指令: 知识点4:BL指令 知识点5:LDM/STM指令 LDMFD 指令 MIPS汇编 知识点1: 知识点2: 知识点3: 知识点4: 知识点5: 前言...

richard1230的博客 5422

基于Simulink进行微电网中DC-DC变换器的仿真建模

微电网:包括可再生能源发电设备、储能系统和负载,可以独立于大电网运行,也可以并网运行。重要性提高能源可靠性:通过本地化供电减少对外部电网的依赖。促进可再生能源利用:支持高效整合多种可再生能源。挑战多源管理:不同类型的能源产生方式各异,需设计灵活的电源管理系统。能量转换效率:需要高效的能量转换装置来确保能源的有效利用。首先明确要模拟的任务内容。设计一个能够在不同输入条件下为微电网提供稳定输出电压的DC-DC变换器。根据微电网的工作状态调整控制策略以维持最佳性能。

amy_mhd的博客 155

第39部分-Linux x86 64位汇编 跳转/调用/中断/循环

第39部分-Linux x86 64位汇编 跳转/调用/中断/循环 跳转 JMP指令把指令指针的值改变为JMP指令中指定的内存位置。 单一汇编跳转指令被汇编为跳转操作码的3种不同类型之一。 短跳转 近跳转 远跳转 由当前指令的内存位置和目的点的内存位置之间的距离决定的。 依据跳过的字节数目决定使用哪种跳转类型。 当偏移量小于128字节时候,用短跳转。 在分段内存模式下,当跳转到另一个段中的指令时使用元跳转。 近跳转用于所有其他跳转。 使用汇编语言助记符指令时,不需要担心跳转的长度,单

badman250的专栏 1214

《PLECS仿真与实战:从建模到高端应用》-专栏文件目录

《PLECS仿真与实战:从建模到高端应用》是一本系统介绍PLECS电力电子仿真软件的实用指南。全书共10章,首先介绍软件安装与基础操作,包括RC电路仿真等入门内容;随后深入讲解各类电力电子电路的建模与仿真,涵盖整流、交交变换、直流变换、逆变等电路;最后探讨PWM控制建模和直流调速系统等高端应用。书中配有丰富的示例程序和波形分析方法,附录还包含电力电子器件、代码生成等实用资料。该书适合电力电子领域工程师和学生系统学习电路仿真技术。

541

【系统架构设计师】2026年上半年真题论文:论高并发系统的设计与实践

本文围绕高并发系统架构设计展开,重点论述了电商秒杀系统的实战经验。文章采用"痛点-解决方案-效果"的逻辑结构,从缓存设计、异步处理、限流降级、数据库优化等6个维度详细阐述了应对高并发的技术策略。其中,重点介绍了多级缓存体系、基于消息队列的异步处理机制和微服务拆分实践,并辅以实际案例说明如何解决超卖、缓存雪崩等典型问题。全文强调高并发设计需要系统性思维,通过空间换时间、异步换吞吐、横向换能力等原则,最终实现系统吞吐量从500TPS提升至20000TPS的性能突破。

数据知道的博客 1157

关于汇编跳转指令的说明

虽然jmp指令提供了控制转移,但是它不允许进行任何复杂的判断。80x86条件跳转指令提供了这种判断。条件跳转指令是创建循环和实现其他条件执行语句,如if…endif的基本要素。 条件跳转指令检查一个或多个标志位,判断它们是否匹配某个特殊条件(就像setcc指令):如果标志匹配成功,该指令就将控制转移到目标位置;如果匹配失败,CPU忽略该条件跳转指令而继续执行...

weixin_34283445的博客 1157

OpenClaw插件开发指南:扩展AI智能体的无限可能

OpenClaw插件开发指南介绍了如何扩展AI智能体的功能。该插件系统支持多种类型(功能、集成、工具、界面、工作流插件),具有模块化、低耦合等优势。开发环境需要安装SDK和工具包,通过plugin.json配置插件信息,主文件实现核心功能。API提供智能体管理、任务执行等接口,示例演示了文本处理插件的创建流程。开发者可基于此框架灵活扩展OpenClaw的能力。

一键难忘的博客 561

转载:X86、ARM、RISC-V,MIPS傻傻分不清楚?一文带你看懂!

X86、ARM、RISC-V,MIPS架构说明

ChunleiYi的博客 9026

廖雪峰Python教程[完整版]

廖雪峰的python教程整理的,已经排好版了,而且还是完整的,适合小白

pscad IEEE标准系统搭建说明

pscad IEEE标准系统搭建说明,包含典型的IEEE 9节点、14节点、30节点、39节点和118节点系统。内含标准测试系统的原始数据和潮流结果。

mips架构和arm架构和x86架构的区别

ARM架构,曾称进阶精简指令集机器(Advanced RISC Machine)更早称作Acorn RISC Machine,是一个32位精简指令集(RISC)处理器架构。X86架构(The X86 architecture)是微处理器执行的计算机语言指令集,指一个intel通用计算机系列的标准编号缩写,也标识一套通用的计算机指令集合。‌ARM架构和x86架构的主要区别在于设计理念、应用领域、指令集、性能与功耗、兼容性和生态系统。‌。

专注技术学习与经验分享,记录成长,共同进步。 3424

SIMATIC S7-1200, S7-1500 PID 控制[手册]

SIMATIC S7-1200, S7-1500 PID 控制[手册]

【x86架构】内存管理

x86架构内存管理介绍。

jiangwei0512的博客 5864

Statistics and Machine Learning Toolbox

Statistics and Machine Learning Toolbox(带书签),MATLAB统计学习工具

X86、MIPS、ARM三种cpu的体系结构和特点

本文简单介绍了X86、MIPS、ARM三种cpu的体系结构和特点

Leon的博客 3326

吉林大学操作系统上机(实验二:处理机调度——实时调度算法EDF和RMS)

每做一个实验都不禁感叹奇妙非常,以下仅为学习记录,不足出错欢迎指出 实验二 处理机调度——实时调度算法EDF和RMS 实验目的 深入理解处理机调度算法,了解硬实时概念,掌握周期性实时任务调度算法EDF(Earliest Deadline First)和RMS(Rate Monotonic Scheduling)的可调度条件,并能在可调度情况下给出具体调度结果。 实验内容 在Linux环境中采用用户级线程模拟实现EDF和RMS两种实时调度算法。给定一组实时任务,按照EDF算法和RMS算法分别判断是否可调度,在

KQ的博客 1万+

解读x86、ARM和MIPS三种主流芯片架构

指令集可分为复杂指令集(CISC)和精简指令集(RISC)两部分,代表架构分别是x86、ARM和MIPS。 本文引用地址:http://www.eepw.com.cn/article/268232.htm   ARMRISC是为了提高处理器运行速度而设计的芯片体系,它的关键技术在于流水线操作即在一个时钟周期里完成多条指令。相较复杂指令集CISC而言,以RISC为架构体系的ARM指令集的指令格式

o7_yue的专栏 2901

计算机操作系统课后题答案第三章,计算机操作系统教程习题与实验指导(第3版)...

操作系统习题解答篇第一章 操作系统概述1.1 学习指导1.2 习题解答第二章 进程、线程与作业2.1 学习指导2.2 习题解答第三章 中断与处理器调度3.1 学习指导3.2 习题解答第四章 互斥、同步与通信4.1 学习指导4.2 习题解答第五章 死锁与饥饿5.1 学习指导5.2 习题解答第六章 存储管理6.1 学习指导6.2 习题解答第七章 文件系统7.1 学习指导7.2 习题解答第八章 设备与输...

weixin_36003021的博客 1804

三种主流芯片架构

三种主流芯片架构简单比较 三种主流芯片架构   1. ARM ARM是高级精简指令集的简称(Advanced RISC Machine),它是一个32位的精简指令集架构,但也配备16位指令集,一般来讲比等价32位代码节省达35%,却能保留32位系统的所有优势。ARM处理器的主要特点是: (1)体积小、低功耗、低成本、高性能——ARM被广泛应用在嵌入式系统中的最重要的原因 支持Thumb(...

a7257825的博客 4089

MIPS、ARM、X86三大架构

MIPS、ARM、X86三大架构    RISC平台的发展已经有长达几十年的历史了。其最早诞生于80年代的MIPS主机,随着技术的不断发展,RISC平台的应用领域逐步扩展,小到手机, 大到工控设备都可以见到他的身影。随着RISC平台的发展还诞生了与之相适应的应用软件,最终组成了现在人们较为熟知的嵌入式系统。当前桌面级消费者最为 熟知的Atom凌动平台便是嵌入式代表之一。但是与今天我们所要谈到的两

GHDNUI 4万+

linux之内存分析

MMU是Memory Management Unit的缩写,中文名是内存管理单元,它是中央处理器(CPU)中用来管理虚拟存储器、物理存储器的控制线路,同时也负责虚拟地址映射为物理地址,以及提供硬件机制的内存访问授权,多用户多进程操作系统。物理地址:(英语:physical address),也叫实地址(real address)、二进制地址(binary address),它是在地址总线上,以电子形式存在的,使得数据总线可以访问主存的某个特定存储单元的内存地址。虚拟地址:虚拟地址是相对于物理地址来说的。

gy794627991的博客 2328

详细分析Linux内存知识并释放内存

本篇文章主要分析内存 如果是磁盘空间,推荐阅读:服务器出现根目录磁盘满了解决方法

码农研究僧的博客 8723
上一篇: 龙芯下汇编语言编程(1)
下一篇: MIPS GCC 嵌入式汇编(龙芯适用)
LonlyGod
博客等级 码龄15年 32粉丝 1原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值