linux32位内核,Linux 5.6是准备在2038年后运行的32位系统的第一个内核

除了Linux 5.6带来的所有出色的工作之外,我们还发现了另一个重大改进:Linux 5.6将成为在2038年之后运行的第一个32位系统的主流内核。

2038年1月19日将出现了“2038年”问题,其中Unix时间戳不再适合有符号的32位整数。多年来,Linux内核开发人员一直在努力缓解此问题(通常也称为“Y2038”问题),但是对于Linux 5.6(以及可能反向移植到5.4/5.5稳定分支),Linux内核开发人员是第一个使用32位内核的人应该准备好超过此阈值进行操作。

00ced7b4f0558c2def2c7b86806d3359.png

参与Y2038 Linux内核工作的Arnd Bergmann宣布:“该系列的一些相关部分被收集到nfsd,xfs,alsa和v4l2树中。linux-mm中的最后一组补丁删除了现在未使用的time_t /在为linux-5.6合并所有五个分支之后的timeval/timespec类型和辅助函数,确保没有新用户被合并,因此linux-5.6或我向5.4的补丁移植应该是第一个可以用作32位系统的基础,这个32位系统的设计运行时间超过2038年,还有一些需要注意的地方。

这些警告包括需要针对64位time_t构建用户空间,这将在GNU C库2.32和Musl libc 1.2中实现。为了避免Y2038问题,在用户空间应用程序方面,他们必须使用所有现代Linux内核系统调用。

很高兴看到Y2038的工作在Linux 5.6上达到了顶点,希望所有的32位系统都能在未来18年内更新到5.6内核或更晚。

关于“Y2038”问题

32位的Unix操作系统和Linux操作系统时间溢出问题又称为2038年问题(the Year 2038 problem)。如果你想知道什么是2038问题的话,你需要知道一些技术上的东西。这个bug是由用来写Unix/Linux的C语言引起的,C语言中用 time_t 来代表时间和日期,time_t 是整数(int)型的,它用来记载从1970年1月1日到2000年所经历的秒数。

这个数据是以32位存储的,第一位是符号位,其余的31位用来存数字,而这31位数字可以存储的最大数字为2147483647。

从1970年开始计算,这31位的数字可以表示的秒数最多可以用到2038年01月19日03时14分07秒,当时间到达这个数字的时候系统将会出现问题,到时候数字不会自动增加,而是会变为-2147483647,而这串数字代表的时间是1901年12月13日20时45分52秒,这会导致很多的程序出现问题,甚至崩溃。

2038年问题不仅比千年虫更隐蔽,而且比之前千年虫问题更具有破坏力,因为千年虫问题只会导致应用层的程序出现问题,比如信用卡支付系统,或者管理系统。而2038这个bug,将会影响系统最底层的时间控制的功能。

要解决这个问题,最简单的方式是扩展Unix时间的长度,用64位数字来表示它。64位二进制数的实际可用位数是63位,最大表示到公历的UTC时间292,277,026,596年12月4日15时30分08秒. 如果那个时候人类文明还存在的话,公元纪年很可能已经因为太难用而被抛弃了. 理想的情况是到2038年,64位系统已经成为主流,从而避免特意去修正这个问题所需要的大量开销。否则,人们就必须把新的64位时间拆分成两部分并分别保存在两个变量里,这是一个麻烦而且效率低下的选择。

0b1331709591d260c1c78e86d0c51c18.png

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值