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

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

3天内不再提示

50多年前,大神在操作系统中埋的雷快要爆了

dyquk4xk2p3d 来源:良许Linux 2023-08-21 16:31 次阅读
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

1969年,贝尔实验室的大神Ken Thompson的老婆休假,带着儿子回娘家,时间长达三周。

趁这段时间,他决定开发一个操作系统:Uni

正在如火如荼地敲代码的时候,Ken突然卡壳了,这是一件非同寻常的事情,之前的开发都是一帆风顺,行云流水的。

因为他意识到有个非常重大的问题,必须马上解决。

这个问题就是:如何在Unix中表示日期和时间?

这个问题非常重要,因为日期和时间管理对于任何操作系统来说都是关键功能,包括文件时间戳、程序调度、日志记录等。

最容易想到,也是最简单的办法就是用一个字符串来表示,例如:

1970-09-17 0030.751

有年月日,时分秒,还有细粒度的微妙,并且可读性非常强。

但是这种方式明显不符合Unix的设计原则:简洁,一致性,易于使用。

原因很简单:

(1) 存储效率低下

字符串需要占用大量的空间,处理起来也更复杂

(2) 计算复杂性读比较高

比如要计算两个时间的差值,需要先解析字符串,然后进行更复杂的日期和时间计算。

解决办法

正当Ken一筹莫展之际,Dennis Ritchie端着咖啡走了过来:“兄台,遇到什么事情了?”

Ken把问题的来龙去脉讲了一遍。

Dennis沉吟道:“嗯,这确实是一个问题,得有一个简洁易用的,符合Unix设计原则的方案....”

突然,Dennis一拍大腿:“用一个整数来表示日期和时间怎么样?”

聪明异常的Ken立刻秒懂,眼睛发光:“对,先确定一个开始时间(纪元),然后这个整数表示从纪元开始到当前时间流逝的秒数!”

Dennis说:“这个纪元可以设定为:1970年1月1日0000,那个时候Unix肯定发布了。”

如果这个整数是:1631280731,那就表示2021-09-10 1331 UTC

4fd379f4-3fb2-11ee-ac96-dac502259ad0.png

Ken Thompson决定把这种方式成为Unix Epoch Time(Unix 纪元时间)。

用一个整数来表示时间戳,有几个主要的优势:

(1) 简化

通过将日期和时间表示为一个单一的整数,可以大大简化日期和时间的计算。例如,计算两个日期之间的差异就只需要对两个整数进行减法运算。

(2) 便于存储和处理

整数易于存储(占用的空间较少)且便于在各种编程语言中处理。

(3) 兼容性

Unix时间戳可以在不同的操作系统和平台之间轻松地进行交换和比较。

(4) 全球统一

Unix时间戳是从同一时刻(1970年1月1日0000 UTC)开始的,所以它提供了一种在全球范围内统一的时间表示方式。

问题出现

当然,Unix时间戳也有其限制。例如,它不能很好地处理闰秒,而且直接查看Unix时间戳并不能很好地理解当前的日期和时间。

在上世纪六七十年代,电脑主要还是16位的,Ken Thompson把Unix时间戳确定为32位整数,他觉得已经够大了,再说了谁会知道Unix操作系统能用多久呢?

让人想不到的是Unix一直存活了下来,它的很多概念对整个计算机科学和软件开发领域产生了深远的影响,包括时间和日期的处理方式。类Unix的开源操作系统Linux继承了Unix的衣钵,甚至统治了服务器端的OS市场。

开发Linux的时候,也是采用了32位的整数来记录时间戳。

现在一个大问题来了,32位的有符号整数最大值是2147483647 ,只能让我们用到2038年1月19号 0307 UTC

50117722-3fb2-11ee-ac96-dac502259ad0.png

下面这个动图展示了整数溢出以后的效果:

503c09ce-3fb2-11ee-ac96-dac502259ad0.gif

这被称为Y2K38问题。

解决方案也非常简单,就像IPV6一样,用128位IP,可以给地球上每一粒沙子都赋予一个IP地址,并且还有大量剩余。

Unix Epoch time 可以把32位的整数变成64位。

使用64位整数,可以表示到接近290亿年后的时间,不知道那个时候地球还是否存在?

大概是从Linux 5.6版本开始,Linux内核开始全面支持64位时间戳的系统调用,但是升级了内核以后,并不意味着完事大吉,应用程序和库在编写的时候如果使用了time_t类型(早期是32位的),现在需要改成64位整数,然后重新编译,要不然依然会产生溢出问题。

嵌入式系统最有可能受到Y2K38问题的影响,一般的服务器软件通常会定期进行升级,打补丁,但是嵌入式软件一旦随着硬件发布出去,就很少更改,很可能会运行到2038年。

尾声

在Unix Epoch Time确定下来30年后,一个准备转行Java程序员的年轻人打开了Java 的Date类。

Date内部实际上存储的就是一个长整型的数(long),它表示的是自1970年1月1日 0000 (即Unix Epoch时间)以来的毫秒数。

他觉得非常奇怪:为什么是1970年1月1日 0000呢?是谁确定了这么一个古怪的日期呢?

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

    关注

    13

    文章

    4693

    浏览量

    89569
  • 操作系统
    +关注

    关注

    37

    文章

    7328

    浏览量

    128625
  • UNIX
    +关注

    关注

    0

    文章

    296

    浏览量

    42876

原文标题:50 多年前,大神在操作系统中埋的雷,快要爆了…

文章出处:【微信号:良许Linux,微信公众号:良许Linux】欢迎添加关注!文章转载请注明出处。

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

扫码添加小助手

加入工程师交流群

    评论

    相关推荐
    热点推荐

    单片机的操作系统

    单片机操作系统主要分为实时操作系统(RTOS)和嵌入式操作系统两类,以下是常见选择: 实时操作系统(RTOS) ‌ FreeRTOS ‌:轻量级开源内核(最小内核约6 KB RAM)
    发表于 11-14 06:18

    嵌入式实时操作系统的特点

    任务的系统。 实时嵌入式操作系统与传统的桌面操作系统相比,更注重对实时任务的响应和精确控制。它们资源利用、可靠性、可预测性、任务调度和中断处理等方面提供
    发表于 11-13 06:30

    如何选择合适的实时操作系统

    选择合适的实时操作系统(RTOS,Real-Time Operating System)可能会影响你不同行业的职业发展路径。
    的头像 发表于 09-09 14:47 801次阅读

    奔图亮相2025操作系统产业大会

    2025年8月26日,以"麒麟遨天·共承长"为主题的2025操作系统产业大会在北京隆重开幕。奔图作为本次大会唯一进行现场打印演示的品牌,携多款自主研发产品重磅亮相,全面展示国产打印设备与银河麒麟
    的头像 发表于 09-01 09:23 1201次阅读

    树莓派操作系统:版本、特性及设置完整指南!

    树莓派操作系统是什么?树莓派操作系统是由树莓派基金会专为树莓派开发的官方操作系统。它基于DebianLinux发行版,并针对树莓派的ARM架构进行了专门优化。树莓派操作系统有多个版本,
    的头像 发表于 07-28 18:26 826次阅读
    树莓派<b class='flag-5'>操作系统</b>:版本、特性及设置完整指南!

    鸿道Intewell操作系统:人形机器人底层操作系统

    操作系统的实时性赋能东土科技的鸿道(Intewell)工业操作系统作为国内唯一通过汽车、工业控制、医疗、轨道交通四项功能安全认证的系统,为标准体系的技术层架构提供
    的头像 发表于 05-16 14:44 549次阅读

    使用Chaquo插件Android操作系统安装OpenVINO工具套件遇到报错,怎么解决?

    使用 chaquo 插件 Android* 操作系统安装 OpenVINO™ 时遇到以下错误: ERROR: Could not find a version that satisfies
    发表于 03-05 06:06

    实时操作系统RTOS选型指南及实例分析

    操作系统实现控制、计算和云服务的融合统一,为控制层多种类型的设备提供统一的互联互通服务能力。鸿道Intewell操作系统经过多年高实时性和可控性验证并稳定运行,是目前国内唯一通过汽车
    的头像 发表于 02-27 15:21 1022次阅读

    鸿道Intewell操作系统的Linux实时拓展方案

    鸿道Intewell操作系统是科东软件自主研发的新型工业实时操作系统,历经30多年研发积累,采用业界领先的微内核架构,具备高实时、高安全及强扩展的特性,是目前国内唯一通过汽车、工业控制、医疗仪器、轨道交通四项功能安全认证的
    的头像 发表于 02-27 10:08 617次阅读
    鸿道Intewell<b class='flag-5'>操作系统</b>的Linux实时拓展方案

    【「鸿蒙操作系统设计原理与架构」阅读体验】01-初始华为鸿蒙

    的诞生创造条件,同时也提出了新的要求。 操作系统是连接计算机硬件和软件的桥梁,计算机系统处于非常重要的位置。
    发表于 01-25 11:05

    国产银河麒麟操作系统V10和星光麒麟V1.0操作系统如何选择?

    国产银河麒麟操作系统和星光麒麟操作系统都是由中国电子旗下科技企业麒麟软件有限公司(简称“麒麟软件”)开发的国产自主可控的操作系统。麒麟软件介绍:麒麟软件以安全可信操作系统技术为核心,面
    的头像 发表于 01-24 09:14 4221次阅读
    国产银河麒麟<b class='flag-5'>操作系统</b>V10和星光麒麟V1.0<b class='flag-5'>操作系统</b>如何选择?

    deepin操作系统介绍

    希望从自己的能力和对桌面操作系统的理解,能给 Linux 的用户与开发者更多的选择。我们也相信 deepin 能够得到更多用户的认可与喜爱,成为开源世界的最佳选择。  一、 deepin 操作系统 先说 Linux 操作系统,它
    的头像 发表于 12-23 09:08 3223次阅读
    deepin<b class='flag-5'>操作系统</b>介绍

    名单公布!【书籍评测活动NO.53】鸿蒙操作系统设计原理与架构

    接口)完成与操作系统的交互,从而达成与计算机硬件及其他软件之间的交互。 “用户”和“生态”操作系统的设计占有举足轻重的地位。对智能终端操作系统
    发表于 12-16 15:10

    龙芯中科亮相2024操作系统大会

    近日,2024操作系统大会在北京中国大饭店举办。作为操作系统行业高规格的年度盛会和信息技术应用创新产业的风向标,大会已迈入第五届。本届大会以“创变·求真”为主题,旨在探讨以生成式AI为代表的虚拟技术为
    的头像 发表于 12-16 13:39 950次阅读

    2024操作系统大会盛大启幕

    2024 中国操作系统大会在北京中国大饭店盛大启幕。作为操作系统行业高规格的年度盛会和信息技术应用创新产业的风向标,大会已迈入第五届。本届大会以“创变·求真”为主题,旨在探讨以生成式 AI 为代表的虚拟技术为操作系统和基础软件领
    的头像 发表于 12-11 14:36 793次阅读