linux内核锁死怎么解决

由于时间在Linux中的表示方式,带符号的32位数字无法支持20:38(UTC)3:14:07之后的时间。 2038年 (Y2038或Y2K38)问题是关于时间数据类型表示的。 解决方案是使用64位时间戳。

我在内核开发人员Arnd Bergmann担任Outreachy实习生时就开始研究该问题。 Outreachy是一个仁慈的程序,可以帮助新程序员进入开源开发。 内核项目的导师通常是经验丰富的内核开发人员,例如Arnd。

我选择解决Y2038问题,因为它使我可以接触内核中的所有子系统,甚至更多。 该问题还涉及用户空间,C库,POSIX和C标准。 我发现问题实际上与层之间的接口有关。

我们解决的领域之一是虚拟文件系统(VFS)。 VFS是文件系统抽象层。 因此,即使某些文件系统(例如ext4)可以在32位系统上表示2038年以后的时间戳,但是如果没有VFS层的支持,它们也无法做到。

对VFS的更改是获得共识和合并所需时间最长的修补程序系列之一。

提出解决方案

问题: inode时间戳的内核内表示在struct timespec中 ,这不是Y2038安全的。 建议的解决方案:将表示形式更改为struct timespec64 ,这是Y2038安全的。

该系列的第一个版本由Arnd在2014年发布 。 当时,存在一些未解决的问题,以及有关添加时间戳范围检查的一些反馈。

2016年1月,我发布了第一个对此的评论请求(RFC),询问是否对上述方法有任何反对意见。 这不是内核社区的典型RFC。 系列求职信解释了拟议的变更,并提供了一些有关如何进行变更的示例。 关于我们在本系列中试图传达的内容有些困惑。

我发布了另一个系列(实际上是三个系列),以三种不同的方式解决该问题。 这是早期系列的精简版本,仅解决了核心问题。 这也是非典型的。 内核开发人员Thomas Gleixner说,他稍微偏爱一种解决问题的方法,因此我们以这种方式完成了所有补丁。

但是我们必须摆脱一些旧的接口才能进行更改。 当我发布一系列此类内容时,Linus Torvalds 不喜欢其中一个接口( current_fs_time(sb) ),因为它将超级块作为访问时间戳粒度的参数。 但是时间戳实际上是索引节点的功能,而不是超级块的功能。 因此,我们摆脱了这个API。

现在必须重新制作原始系列。 卖旗日补丁似乎是解决问题的蛮力方法。 但是我们最终只是这样做了。 通过使用Coccinelle脚本,我们甚至更进一步。 这更改了80多个文件。 面临的挑战是使更改变得基本,以避免退化。 我们终于在2018年6月最终合并了补丁程序 ,并且没有听说此更改有任何退步。

在整个练习结束时,我们摆脱了三个内核API,重新安排了一些文件系统时间戳处理,处理了打印格式以支持更大的时间戳,分析了32位体系结构对象转储,并重写了至少五个版本从零开始的系列。 这只是我们为内核解决的问题之一。 但是Y2038一直是我最喜欢的项目之一。


迪帕Dinamani将提出如何防止时间用尽的追求使我对Linux内核的各个角落 ,在linux.conf.au ,1月21日至25日在新西兰基督城。

翻译自: https://opensource.com/article/19/1/year2038-problem-linux-kernel

linux内核锁死怎么解决

linux内核锁死怎么解决_解决Linux内核中的2038年问题相关推荐

  1. linux运维工程师培训课程_《Linux运维工程师必学技能》完整版视频课程专题(1.0)...

    高性能负载均衡集群HAProxy实战视频课程 13节 4小时7分钟 课程目标: 欢迎大家加入 51CTO学院Linux交流群575837909,与喜欢学习Linux小伙伴们做朋友,一起为梦想增值.高性 ...

  2. windows linux cpu 抢占式 时间片_嵌入式Linux中进程调度怎样来解析

    合作微信:xydf321456 Linux是一套免费使用和自由传播的类Unix操作系统,是一个基于POSIX和UNIX的多用户.多任务.支持多线程和多CPU的操作系统.它能运行主要的UNIX工具软件. ...

  3. arm linux udp 自发自收_嵌入式linux编程开发必备知识

    嵌入式linux是嵌入式开发必不可少的一份子,在科技高速发展的今天,嵌入式已然已经成为了最热门的技术之一了.对于想要学习好嵌入式的学员来说,现在学习好linux是很有必要的,因为这个是嵌入式的核心.那 ...

  4. linux QT 结束当前进程_嵌入式linux编程开发必备知识

    嵌入式linux是嵌入式开发必不可少的一份子,在科技高速发展的今天,嵌入式已然已经成为了最热门的技术之一了.对于想要学习好嵌入式的学员来说,现在学习好linux是很有必要的,因为这个是嵌入式的核心.那 ...

  5. linux平均负载什么意思_在Linux中什么是平均负载?

    linux平均负载什么意思 Load Average in Linux is a metric that is used by Linux users to keep track of system ...

  6. linux:使用yum安装_首次使用Linux:30个安装案例

    linux:使用yum安装 Linux内核在8月25日(星期六)再大一岁.26年前,创建者和BDFL Linus Torvalds可能已经感觉到Linux只能满足一个人的需求. 但是今天我们知道,它改 ...

  7. linux mysql 文件夹权限_找到linux文件夹

    FineReport关于Linux下字体乱码终极解决方案 1:在windows下找到系统使用到的字体,这里以楷体举例 •到c盘的windows文件夹的Fonts文件夹里面存放了windows中用到的所 ...

  8. linux扩展磁盘空间命令_在Linux上监视磁盘空间– SQL Server DBA的有用命令

    linux扩展磁盘空间命令 In this article, we will explore the different Linux commands related to the disk spac ...

  9. enter sleep mode黑屏怎么解决_【linux】 不要再暴力关机了,讲讲我最近遇到的问题和完美解决方案...

    欢迎关注我的个人公众号:AI蜗牛车 前言 结束了每天的紧张的工作,这两天真的有些肝. 这两天打打字,突然感觉手指头疼起来了,想意识到成天打了十多个小时的键盘, 手指头都疲劳了= = 之后这两天基本上除 ...

最新文章

  1. 总结机器学习优质学习文章Top50!
  2. Flask驱动的静态站点生成器(译)
  3. Windows10 yolox 安装
  4. no scp yes 不提示_linux脚本实现scp命令自动输入密码和yes/no等确认信息
  5. canvas绘制图形
  6. Python之路【第十六篇续】Django进阶篇
  7. 写出杨辉三角_认识杨辉三角
  8. 舰船目标检测的学习笔记(legacy)
  9. [zt] HTTP 协议及其POST与GET操作差异 C#中如何使用POST、GET等
  10. ASO优化教程:产品预热与应用提交aso主要优化,ASO优化
  11. group by 和 having 用法
  12. 大数据核心技术之分布式基础入门
  13. iptables配置docker服务端口访问限制
  14. Raid5磁盘阵列数据恢复成功案例/服务器数据恢复方案
  15. WINCC 7.5 SP2 与 S7-1500的通讯不上的处理
  16. 学习笔记—增量式PID详细实现(C语言)
  17. html设置pdf预览名字,浏览器预览PDF文件的个性化设置
  18. linux 将sda分区扩容
  19. ft232h引脚_电平转换芯片FT4232H
  20. 图像配准(Image Registration)——深度学习方法

热门文章

  1. 【3】docker-compose
  2. 浅析Condition与等待通知机制
  3. springcloud使用feign进行远程服务调用
  4. T-SQL高级查询语句
  5. 如何查看/统计当前AD域控制器的活动用户
  6. erlang的cpu调优
  7. 实用的网站***步骤
  8. linux命令格式与快捷键
  9. HTTPS是如何工作的
  10. CentOS 下使用yum 命令安装MySQL