0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

Linus亲自改进Linux用户模式堆栈扩展

OSC开源社区 来源:OSC开源社区 2023-07-04 15:31 次阅读
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

时至今日,Linus Torvalds 实际上已经很少会亲自动手写内核代码;更多的是忙于监督上游的内核开发社区、审查代码、管理发布,并在邮件列表中进行讨论。不过近日,他就为 Linux 6.5 进行了将近 500 行的 code rework ,以改进用户模式的堆栈扩展代码。

4a990f7e-198f-11ee-962d-dac502259ad0.png

他在合并报告中解释称:

这修改了我们的用户模式堆栈扩展代码,使其在修改 VM 布局之前始终获取 mmap_lock 进行写入。

实际上这是我们在技术上应该做到的事情,但是因为我们并不严格地需要它,所以我们有点偷懒(“机会主义” 听起来好多了,不是吗?)。并且在我们需要的地方设置了这个 hack,会在不进行适当锁定的情况下就地扩展堆栈 vma。

而且效果很好。我们只需要改变 vm_start(或者,在 grow-up stacks 的情况下,vm_end),再加上一些使用 anon_vma 锁和 mm》page_table_lock 的特殊的临时锁,这一切都相当简单明了。

也就是说这一切都很好,直到 Ruihan Li 指出,现在 vma 布局使用 maple tree code,我们真的不只是改变 vm_start 和 vm_end 了,而且 locking 真的被打破了。

一劳永逸地解决这个问题并做适当的 locking 其实并不可怕,但有点痛苦。我们基本上有三种不同的堆栈扩展情况,它们的工作方式都略有不同。

目前,Linux 6.5 中的这个问题应该已经得到了解决。

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • Linux
    +关注

    关注

    88

    文章

    11825

    浏览量

    219615
  • 代码
    +关注

    关注

    30

    文章

    4977

    浏览量

    74420

原文标题:Linus亲自改进Linux用户模式堆栈扩展

文章出处:【微信号:OSC开源社区,微信公众号:OSC开源社区】欢迎添加关注!文章转载请注明出处。

收藏 人收藏
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

    评论

    相关推荐
    热点推荐

    低成本CAN扩展方案怎么选?CSM331A四种模式一次说清

    MCU需要CAN功能但预算有限?CSM331A协议转换芯片用SPI/UART就能扩展,四种模式从快到稳任你选。ZLG致远电子推出的CSM331A协议转换芯片,配合一个CAN收发器,就能通过SPI
    的头像 发表于 02-09 11:50 459次阅读
    低成本CAN<b class='flag-5'>扩展</b>方案怎么选?CSM331A四种<b class='flag-5'>模式</b>一次说清

    在学单片机时在堆栈遇到的问题分享

    编译器在生成代码使用两个堆栈:一个是用于子程序调用和中断操作的硬件堆栈,一个是用于以堆栈结构传递的参数临时变量和局部变量的软件堆栈。硬件堆栈
    发表于 01-23 07:47

    堆栈的原理揭秘

    1. 什么是堆栈?单片机应用中,堆栈是个特殊存储区,堆栈属于RAM空间的一部分,堆栈用于函数调用、中断切换时保存和恢复现场数据。堆栈中的物体
    发表于 01-23 07:08

    MD500-EM1 通信扩展用户手册

    电子发烧友网站提供《MD500-EM1 通信扩展用户手册.pdf》资料免费下载
    发表于 01-11 17:16 0次下载

    单片机堆栈解析

    什么是单片机堆栈? 在片内RAM中,常常要指定一个专门的区域来存放某些特别的数据,它遵循顺序存取和后进先出(LIFO/FILO)的原则,这个RAM区叫堆栈。 它的作用 子程序调用和中断服务时CPU
    发表于 12-09 06:52

    堆栈的定义,堆栈的使用方法

    堆栈的定义 堆栈也是用户使用的存储器的一部分,用于存放临时性的数据和一些其他信息。堆栈段的定义语法如下: 堆栈名SEGMENTSTACK
    发表于 11-21 06:49

    堆栈指针SP介绍

    =07H,不用重新赋值也是可以的,否则,为什么当初设计者会这么设计呢。由于51单片机的堆栈是向上增长的,所以,为了避免堆栈区与用户数据区互相影响,才将SP设置在60H以后,比较合理的是赋值为6FH,这样
    发表于 11-17 06:07

    Linux历史上10件最有意义的大事,你知道几件?

    个传奇。 今天,我们就带你回顾  Linux 发展史上最有意义的十件大事 ,看看它如何一步步改变了世界。 一、1991:Linus Torvalds发布第一版Linux内核 1991 年 8 月,芬兰
    的头像 发表于 10-20 11:10 540次阅读

    空闲线程堆栈出现内存溢出的问题,怎么解决?

    rtthread版本: 5.1.0 硬件: stm32f407vgt6 具体我也不知道什么原因引起的, 目前将堆栈调到1024后能为稳定运行 更新 设置1024堆栈, 运行久了也不行 我有什么操作会影响到空闲线程?
    发表于 10-11 10:36

    Linux企业网络安全防护体系建设

    构建完整的Linux安全防护体系不是简单的工具堆砌,而是需要从架构设计、监控告警、应急响应到持续改进的完整闭环。本文将分享我在大型企业环境中的实战经验。
    的头像 发表于 08-27 14:39 950次阅读

    华为工程师总结Linux笔记

    1-1 所示 1.2 Linux 操作系统简介 Linux 操作系统是基于 UNIX 以网络为核心的设计思想,是一个性能稳定的多用户网络操作系统,Linux 能运行各种工具软件
    发表于 07-14 15:28

    Linux嵌入式和单片机嵌入式的区别?

    较高,需要较大的内存和存储空间来运行Linux系统和应用程序。 5. 可扩展性 : 单片机嵌入式 :扩展性有限,通常只能通过增加外设来扩展功能。
    发表于 06-20 09:46

    Analog Devices Inc. EVAL-ESS1-SYS可扩展BMS解决方案套件

    Analog Devices EVAL-ESS1-SYS可扩展BMS解决方案套件包含创建完整BMS解决方案堆栈所需的全部构建块。随附的基于PC的图形用户界面提供直观的界面,使用户能够配
    的头像 发表于 05-23 11:02 1047次阅读
    Analog Devices Inc. EVAL-ESS1-SYS可<b class='flag-5'>扩展</b>BMS解决方案套件

    能否提供Linux下USB转SPI模式的测试程序?

    我已在 Linux 上成功配置了 CY7C65211 器件,使其在 USB 转 SPI 模式下运行。 使用 lsusb 命令,设备显示如下:总线 003 设备 002:ID 04b4:0004
    发表于 05-22 06:16

    Linux系统管理的核心概念

    在前一篇文章中,我们深入探讨了Linux中的文件操作命令,如cp、mv、rm,以及文本处理命令grep、wc和管道符。本文将继续深入Linux系统管理的核心概念,包括root用户的角色、用户
    的头像 发表于 05-15 17:05 853次阅读