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

操作系统的发展史 操作系统是一组能有效地组织和管理计算机软件和硬件资源,合理地对各类作业进行调度,以方便用户使用的程序的集合 1945-50年代中期 人工操作方式  程序员将事先已穿孔的纸带(或卡片)装入纸带输入机(或卡片输入机),再启动它们将纸带(或卡片)上的程序和数据输入计算机,然后启动计算机运行。仅当程序运行完毕并取走计算机结果后,才允许下一个用户上机。缺点:     1. 用户独占全机。一台计算机的... 阅读详情

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

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

(详情参见:《漫画 | 老婆离家三周,我开发了一个操作系统》)

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

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

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

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

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

1970-09-17 00:00:30.751

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

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

原因很简单:

(1) 存储效率低下

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

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

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

aba4a784ca13cd0807ed16d5763d9efe.png

解决办法

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

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

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

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

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

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

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

4a3e8c9620c7a543148bb79aedeac9ee.png

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

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

(1) 简化

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

(2) 便于存储和处理

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

(3) 兼容性

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

(4) 全球统一

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

b428c9583c1ec915e300819cfe8448a1.png

问题出现

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

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

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

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

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

18ee44f7200a3300e59e685219475766.png

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

9dd8a2df01f734c48aa24f9c53f751b7.gif


这被称为Y2K38问题。

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

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

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

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

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

31de44b718e07744840079c364d42549.png

尾声

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

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

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

后记:Ken Thompson和Dennis Ritchie一起确定Unix纪元时间的故事是我杜撰的,大家了解下Unix纪元时间就好,不要当真。

一文了解 操作系统发展史 最近在写一个Android、IOS、Fuchsia、HarmonyOS对比的报告,需要了解一下各操作系统的起源联系以及内核的对比,因此有了这个文章总结(算是学习笔记吧)。 一、各历史阶段的操作系统 我们都知道,操作系统自20世纪50年代诞生。操作系统诞生后经历了从专用操作系统(每个主机与应用场景均需要一个新的操作系统)到通用操作系统(一个操作系统覆盖很多设备与应用场景,如Windows、Linux等)的转变。 PC时代 由于Windows操作系统的广泛应用部署,微软于20世纪90年代成为全球市值最高的公司 阅读详情

相关推荐

操作系统网络过滤规则优化:减少50%CPU使用率

本文旨在帮助系统管理员和网络工程师理解网络过滤规则对系统性能的影响,并提供切实可行的优化方案。我们将重点讨论Linux系统的netfilter框架,但这些原理同样适用于其他操作系统。介绍网络过滤的基本概念分析传统过滤规则的性能问题提出优化策略和技术实现展示实际案例和性能数据讨论未来发展方向网络过滤规则:用于决定如何处理网络数据包的规则集合netfilter:Linux内核中的网络过滤框架iptables:用户空间工具,用于配置netfilter规则nftables。

操作系统内核探秘的博客 1085

50 岁的 C 语言,掌控 Windows、Linux、macOS 等操作系统半边天

已经50岁的C语言依然老当益壮。

优快云资讯 86万+

两路半桥LLC谐振变换器软开关Simulink仿真(模拟谐振参数不同、分裂电容)

内容概要:本文介绍了“两路半桥LLC谐振变换器软开关Simulink仿真”资源包,重点在于基于Simulink平台对两路半桥LLC谐振变换器进行高精度建模与动态仿真,特别考虑了谐振参数不一致及分裂电容等非理想工况对系统性能的影响。该仿真模型不仅涵盖了主电路拓扑、软开关实现机制与谐振网络设计,还深入分析了不同参数配置下系统的启动特性、稳态效率、动态响应及软开关条件的满足情况。通过参数扫描与对比仿真,帮助用户掌握LLC变换器的关键设计要素与优化方法,具备较强的工程指导价值和科研教学意义。; 适合人群:电力电子、电气工程及其自动化等相关专业的高校师生,以及从事高频开关电源、新能源变换器、车载充电机等领域的研发工程师和技术人员。; 使用场景及目标:① 掌握两路并联半桥LLC谐振变换器的建模与仿真方法;② 理解软开关技术在提升变换器效率与降低EMI方面的关键作用;③ 分析谐振参数偏差与分裂电容结构对系统均流特性、增益曲线及软开关范围的影响;④ 支持科研项目中的拓扑验证、控制策略开发与故障工况分析; 阅读建议:建议结合Simulink仿真模型与配套说明文档进行学习,重点关注谐振腔参数设置、驱动时序设计及软开关波形观测;可通过调整谐振电感、电容值或引入参数失配,观察系统行为变化,深入理解LLC变换器的稳定边界与优化设计原则。

华为p50鸿蒙系统5G5G,预装鸿蒙操作系统5G华为P50系列,华为P30再创超低价神话

原标题:预装鸿蒙操作系统5G华为P50系列,华为P30再创超低价神话预装鸿蒙操作系统5G华为P50系列,华为P30再创超低价神话!近日,华为P50系列的渲染图遭到了曝光,那么这款全新旗舰手机,都带来怎样的“猛料”呢? 从网上曝光的渲染图来看,华为P50系列依旧带来了广大用户情有独钟的全面屏设计。值得注意的是,该机的正面并没有打孔的设计,四周边框都很窄。作为一款高端旗舰,肯定不会采用中端旗舰都放弃的...

weixin_42175516的博客 235

手把手教你:在联想/戴尔笔记本上安装华为电脑管家,实现多屏协同(附详细避坑步骤)

本文详细指导如何在联想、戴尔等非华为笔记本上安装华为电脑管家,实现多屏协同功能。从硬件兼容性检查到定制化安装流程,再到功能调优与异常处理,提供了一套完整的解决方案,帮助用户突破品牌限制,享受华为生态的高效办公体验。

weixin_30251829的博客 859

科研绘图(二):R 语言实现小鼠脑图谱 3D 渲染,附完整代码与数据获取指南

在生物医学科研中,脑区的 3D 可视化是呈现实验结果、解析脑结构功能的重要手段。R 语言凭借rgl和Rvcg等工具包,可高效实现小鼠全脑及特定脑区(如 CA1 区)的立体渲染,且代码可复用性强。本文将从环境搭建、数据准备、代码实现到结果导出,手把手带你完成小鼠脑图谱 3D 绘图,小白也能快速上手!

good_rrrrr的博客 2024

华为鸿蒙系统p50,华为p50自带鸿蒙是什么意思_华为p50是鸿蒙系统吗

华为p50自带鸿蒙是什么意思,据说华为p50出厂自带鸿蒙系统,那么说到华为p50是鸿蒙系统吗,基本可以确定了,目前关于华为p50的消息网上有不少,大家感兴趣的话不妨多多关注!1、华为p50自带鸿蒙是什么意思近日,有消息表示华为P50系列将会与HarmonyOS操作系统共同上线,新机将出厂自带HarmonyOS系统。2、华为p50是鸿蒙系统吗华为p50是鸿蒙系统。有关华为P50系列新机的消息,爆料称...

weixin_33483567的博客 2306

VS配置RTKLIB(卫星定位开源代码)环境

@RTKlib代码调试教程-Visual Studio 2019 你好! 这是你第一次使用 Markdown编辑器 所展示的欢迎页。如果你想学习如何使用Markdown编辑器, 可以仔细阅读这篇文章,了解一下Markdown的基本语法知识。 ##RTKLIB-rtklib_2.4.3 提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 @RTKlib代码调试教程-Visual Studio 2019 提示:这里可以添加本文要记录的大概内容: 例如:随着人工智能的不断发展,机器学习这门技

qq_42209977的博客 4486

一个50岁中国操作系统开发者的故事丨openEuler英雄汇

Python实战社群Java实战社群长按识别下方二维码,按需求添加扫码关注添加客服进Python社群▲扫码关注添加客服进Java社群▲作者丨小智嘉宾丨陈棋德陈棋德,一位 50 岁的操作系...

<sdffdsfsdfdfs>sfsfsfsdfsdffds</sdfsDS>Fsd 437

QT如何使用CTK插件搭建应用程序框架?

CTK框架,QT框架,插件系统

cs821984831的博客 736

华为OD机试真题2025双机位A卷 C++ 实现【采购订单】

在一个采购系统中,采购申请(PR)需要经过审批后才能生成采购订单(PO)。每个PR包含商品的单价(假设相同商品的单价一定是一样的)及数量信息。系统要求对商品进行分类处理:单价高于100元的商品需要单独处理,单价低于或等于100元的相同商品可以合并到同一采购订单PO中。针对单价低于100的小额订单,如果量大可以打折购买。

MISAYAONE的博客 675

华为p50鸿蒙os1020,鸿蒙操作系统+麒麟1020华为P50系列,华为P30大米价无情让路

原标题:鸿蒙操作系统+麒麟1020华为P50系列,华为P30大米价无情让路鸿蒙操作系统+麒麟1020华为P50系列,华为P30大米价无情让路!有网友放出了一组华为P50效果图,单挖孔摄像头,后置五摄,其中一颗是潜望式摄像头。此外,华为P50还有一根触控笔,可以从底部右侧插入。整体来说,华为P50最吸引人的部分应该是屏幕,非常窄的边框,屏占比非常高。 其实,华为一年设计好多专利,一般来说新机上市之后...

weixin_33562004的博客 184

拉曼光谱入门:10.显微拉曼与共聚焦技术

本文系统阐述了显微拉曼光谱技术与共聚焦原理的融合机制,详细解析了从激光激发、针孔空间滤波到光谱采集的完整光路架构,阐明了共聚焦设计在提升三维空间分辨率、抑制荧光背景及实现微区无损层析方面的核心优势,并探讨了关键光学器件的性能边界与系统技术局限。

qq_53529450的博客 168

操作系统:操作系统发展历史与现状

系统有一套常驻内存的监督程序。操作员把若干作业合成一批,安装在输入设备上,启动监督程序,然后由监督程序。启动这批作业,以单道方式运行。(任何时刻在内存当中只可能是一道作业,执行完一道再执行下一道):作业的执行步骤(编译、装配、运行)。:用作业控制语言编写的作业执行程序。:用于说明作业如何执行的语言。:用户的一次上机行为。............

奈川直子 4922

Python 安装 PyTorch(GPU)详细教程

本章教程,介绍如何安装PyTorch GPU版本的具体教程。

猿小白的博客 1636

彻底解决JDK安装包点击后无反应

jdk双击无法安装,jdk双击没反应,jdk安装包双击后没反应。

renkai721的专栏 8939

装机量突破1000万!龙蜥操作系统市占率近50%

国产服务器操作系统发展报告(2025)》调研显示,“云+AI”正在重塑和加速服务器操作系统的发展,未来三年,预计国产服务器操作系统相关市场规模将突破300亿元,国产化率从35%提升至65%,实现从细分领域到通用市场、从能用到好用的跨越式发展。近日,在2025龙蜥操作系统大会上,中国智能计算产业联盟正式发布《国产服务器操作系统发展报告(2025)》,报告显示,在用户当前使用的服务器操作系统中,龙蜥生态相关社区版和商业版的市场占比近50%,装机量已突破1000万。

xinyuan82的博客 397

OV9734 DATASHEET,完整规格书

OV9734完整规格书,包括电气参数,尺寸规格,寄存器配置表等

已经预装鸿蒙的手机,华为P50系列最新信息,已经开始量产,预装鸿蒙操作系统...

原标题:华为P50系列最新信息,已经开始量产,预装鸿蒙操作系统如今时间已经步入5月份,华为即将要发布的p50系列,毫无疑问是如今最受关注的智能手机。关于这款手机的消息在网上不断地传出,首先就是这款手机有可能在5月份就发布或者是推迟到6月份,具体发布时间不得而知,但相信也就在这两个月时间之内了。毕竟按照正常情况下,华为春季款旗舰手机p50系列早就应该发布了。华为去年的p40发布时间是在三四月份儿,今...

weixin_35411480的博客 138

廖雪峰Python教程[完整版]

廖雪峰的python教程整理的,已经排好版了,而且还是完整的,适合小白

Probability and Statistics - 4th edition

Probability and Statistics - 4th edition

p50鸿蒙系统,华为P50将拥有两种版本 国内仅支持鸿蒙系统

原标题:华为P50将拥有两种版本 国内仅支持鸿蒙系统P50系列将有P50、P50 Pro至少两个型号,可能还有超大杯的P50 Pro+,都是居中挖孔全面屏,但形态各不相同:P50微曲面,P50 Pro双曲面,P50 Pro+四曲面。尽管面临种种困难,华为每年上半年的新旗舰P50系列还是正在赶来,而且会发生相当大的变化,尤其是操作系统,鸿蒙OS终于要担当大任了。推特爆料者Yash Raj Chaud...

weixin_35740442的博客 1028

STM32F407中文手册

STM32f407中文手册 本参考手册面向应用开发人员,提供有关使用 STM32F405xx/07xx、STM32F415xx/17xx、 STM32F42xxx 和 STM32F43xxx 微控制器存储器与外设的完整信息。STM32F405xx/07xx、STM32F415xx/17xx、STM32F42xxx 和 STM32F43xxx 构成一个微 控制器系列,各产品具有不同的存储器大小、封装和外设。有关订购信息以及器件的机械与电气特性,请参见数据手册。有关 ARM Cortex™-M4F 内核的信息,请参见《Cortex™-M4F 技术参考手册》。

【操作系统】详谈操作系统的发展历程

【操作系统】第一章——计算机系统概述 详谈操作系统的发展历程……

蒙奇D索大的博客 1750

领势而上,HUAWEI Mate 50系列正式发布

华为今日宣布推出2022年全新旗舰手机HUAWEI Mate 50系列,引领多项技术创新,传承Mate十年基因,为用户带来超越期待与想象的巅峰体验。“逾山越海,通天彻地”,HUAWEI Mate 50系列,突破地面网络限制,成为全球首款支持北斗卫星消息的大众智能手机 。“影像风格,自成一派”,HUAWEI Mate 50系列搭载的超光变XMAGE影像系统,首创十档可调物理光圈,成为Mate史上最...

趣味科技v 3万+

Unix 激荡 50 年:驱动 Android、iOS 的操作系统是如何从失败开始的?

如今,Unix 为 iOS 和 Android 提供了强大的动力——它的传奇始于一只鳄鱼和三名研究人员。作者 | RICHARD JENSEN编译 | 黄浩然,责编 | ...

优快云资讯 1106

操作系统是怎么发展来的

UNIX操作系统便是在这一时期诞生的,它对后来的操作系统设计产生了深远的影响。苹果公司的Mac OS引入了图形用户界面(GUI),而微软的Windows操作系统随后也采用了GUI,成为了全球最流行的个人电脑操作系统。操作系统的发展历程反映了计算需求、技术进步和用户期望的变化,从最初的简单作业管理到现在的智能、互联和高度用户定制化,操作系统将继续演进以适应未来的计算挑战。操作系统的发展可以追溯到20世纪50年代初期,经历了从最早的批处理系统到现代复杂多任务操作系统的多个阶段。

guojunwu1977的博客 833
上一篇: 一个美国程序员的财务自由之路
下一篇: 肝了三年微服务,准备进大厂,结果变单体了?
码农翻身
码农翻身 《码农翻身》作者 《码农翻身》作者
博客等级 码龄8年 3万+粉丝 1084原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值