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呢?是谁确定了这么一个古怪的日期呢?

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

    关注

    12

    文章

    3863

    浏览量

    84677
  • 操作系统
    +关注

    关注

    37

    文章

    6290

    浏览量

    121898
  • UNIX
    +关注

    关注

    0

    文章

    295

    浏览量

    41061

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

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

收藏 人收藏

    评论

    相关推荐

    带你认识实时操作系统(rtos)

    实时操作系统(RTOS)是为嵌入式系统和实时应用提供一个稳定、可预测和高效运行环境的操作系统。实时操作系统确保了系统能够在严格的时间限制内响
    的头像 发表于 04-16 16:30 139次阅读
    带你认识实时<b class='flag-5'>操作系统</b>(rtos)

    深度解析全球操作系统格局

    操作系统是负责协调、管理和控制计算机硬件与软件资源的程序,是整个计算机的核心系统软件。 按照操作系统面向的设备类型,通用操作系统主要包括桌面操作系统
    的头像 发表于 01-18 15:00 288次阅读
    深度解析全球<b class='flag-5'>操作系统</b>格局

    详解实时操作系统和非实时操作系统

    实时操作系统,当外界事件和数据产生时,系统能以足够快的速度予以处理,其处理结果能在规定的时间内控制生产结果或对系统做出响应,并控制所有实时任务协调一致运行的操作系统
    的头像 发表于 12-26 09:54 1915次阅读
    详解实时<b class='flag-5'>操作系统</b>和非实时<b class='flag-5'>操作系统</b>

    LabVIEW不同操作系统上使VI、可执行文件或安装程序

    :对于使用Linux操作系统的用户,LabVIEW同样提供相应版本。LabVIEW一些流行的Linux发行版上得到支持,例如Ubuntu和Red Hat Enterprise Linux。 在这
    发表于 12-02 21:47

    linux属于什么操作系统

    Linux属于一种类UNIX操作系统。Linux,全称GNU/Linux,是一套免费使用和自由传播的类Unix操作系统,是一个基于POSIX和Unix的多用户、多任务、支持多线程和多CPU的操作系统
    的头像 发表于 11-08 11:01 1755次阅读

    开源操作系统大全

    开源操作系统即公开源代码的操作系统软件,它遵循开源协议使用、编译和发布。自由和开放源代码软件中最著名的是 Linux ,它是一种类 Unix 的操作系统。Linux 可安装在各种计算机硬件设备
    发表于 10-27 15:13

    鸿蒙操作系统的前世今生

    研发鸿蒙操作系统的号角。 2019年8月9号,华为正式发布HarmonyOS 1.0,该系统率先部署智慧屏上。2019年8月10日,(原)荣耀正式发布荣耀智慧屏、荣耀智慧屏Pro,
    发表于 10-08 19:55

    嵌入式操作系统IJLC/OS一Ⅱ通信电源监控应用

    系统可编程nash,4 kByte的SRAM和EEPROM。同时带有8路10位A/D转换器及1个可用于程序下载的SPI串行口.并且已应用于中兴的第三代组合电源ZXDU300A(3.0),为
    发表于 09-20 06:46

    硬件看门狗操作系统下是怎么用的?

    关于软件看门狗:裸机程序下软件看门狗,大家都会在必要的地方喂狗保证看门狗有效;但在微操作系统下,程序的流向都是操作系统下调度的,这种情况下怎么估算喂狗最大时间,位置,也就是
    发表于 09-07 16:49

    多个任务程序如何在RTX实时操作系统运行

    应用程序: 演示多个任务程序如何在 RTX(实时eXective) 实时操作系统运行 。 BSP 版本: NUC230/240 Series BSP v3.01.002 硬件: NuTiny
    发表于 08-22 08:18

    汽车操作系统和中间件的关系

    如果嵌入式操作系统(比如FreeRTOS, uCOS或Autosar CP的内核)的开发难度和工作量是1, 那么大型操作系统的开发难度和工作量就是99, 从体量就能看出,一个完整的嵌入式操作系统最多几十M, 而一个大型
    发表于 07-21 11:16 441次阅读
    汽车<b class='flag-5'>操作系统</b>和中间件的关系

    Linux桌面系统市场份额首次突破3%

    Linux 的历史可以追溯到 30 多年前,目前已成为服务器操作系统领域的主导力量。鉴于其卓越的性能、稳定性、可靠性和安全性,Linux 系统已被服务器 / 云 / 物联网环境广泛采用;并且还正迅速成为许多桌面用户(尤其是开发人
    的头像 发表于 07-18 14:37 451次阅读
    Linux桌面<b class='flag-5'>系统</b>市场份额首次突破3%

    将ChatGPT移植到30年前操作系统,是怎样的画风?

    此外,该程序使用 TLS 1.3 原生连接到 OpenAI API 服务器——这就是为什么能在三十年前操作系统上运行 WinGPT,因为绝大部分处理工作都在 OpenAI 的服务器而不是本地完成。
    的头像 发表于 07-03 15:59 270次阅读
    将ChatGPT移植到30<b class='flag-5'>年前</b>的<b class='flag-5'>操作系统</b>,是怎样的画风?

    经典的移动终端操作系统有哪些

    移动终端操作系统,也就是指手机、平板电脑等设备所使用的操作系统。 在移动互联网高度发达的今天,我们使用移动终端操作系统的时长,可能已经远远超过了Windows等桌面操作系统
    发表于 06-20 11:20 1291次阅读
    经典的移动终端<b class='flag-5'>操作系统</b>有哪些

    聊聊操作系统

    说到操作系统,大家都不会陌生。我们天天都在接触操作系统——用台式机或笔记本电脑,使用的是windows和macOS系统;用手机、平板电脑,则是android(安卓)和iOS系统
    的头像 发表于 05-12 11:13 1035次阅读
    聊聊<b class='flag-5'>操作系统</b>