前言

~~~~~~~~        话说,在linux的内核深处,隐藏着一个美妙的故事,隐藏着一个父亲对儿女深沉的父爱。linus作为linux之父,创造了影响世界的linux内核。天才的代码世界里,不仅有数以万计的函数,还有着生活温馨的一面。下面本文就从linux内核中初窥linux魔力数之小故事。

魔力数之探究

~~~~~~~~        在我们重启linux系统时,总会调用一个函数:reboot。reboot不仅可以实现Restart的功能,也可以实现关机功能的。那又是怎么关机的呢?话说关机不就是延迟不确定的重启吗,关机之后总要启动的,只是这个启动还没到来,时间是不确定的。
~~~~~~~~        下面看下“kernel/sys.c”中的reboot函数,其源代码如下:

内核版本:linux-2.6.34
/** Reboot system call: for obvious reasons only root may call it,* and even root needs to set up some magic numbers in the registers* so that some mistake won't make this reboot the whole machine.* You can also set the meaning of the ctrl-alt-del-key here.** reboot doesn't sync: do that yourself before calling this.*/
SYSCALL_DEFINE4(reboot, int, magic1, int, magic2, unsigned int, cmd,void __user *, arg)
{char buffer[256];int ret = 0;/* We only trust the superuser with rebooting the system. */if (!capable(CAP_SYS_BOOT))return -EPERM;/* For safety, we require "magic" arguments. */if (magic1 != LINUX_REBOOT_MAGIC1 ||(magic2 != LINUX_REBOOT_MAGIC2 &&magic2 != LINUX_REBOOT_MAGIC2A &&magic2 != LINUX_REBOOT_MAGIC2B &&magic2 != LINUX_REBOOT_MAGIC2C))return -EINVAL;/* Instead of trying to make the power_off code look like* halt when pm_power_off is not set do it the easy way.*/if ((cmd == LINUX_REBOOT_CMD_POWER_OFF) && !pm_power_off)cmd = LINUX_REBOOT_CMD_HALT;mutex_lock(&reboot_mutex);switch (cmd) {case LINUX_REBOOT_CMD_RESTART:kernel_restart(NULL);break;case LINUX_REBOOT_CMD_CAD_ON:C_A_D = 1;break;case LINUX_REBOOT_CMD_CAD_OFF:C_A_D = 0;break;case LINUX_REBOOT_CMD_HALT:kernel_halt();do_exit(0);panic("cannot halt");case LINUX_REBOOT_CMD_POWER_OFF:kernel_power_off();do_exit(0);break;case LINUX_REBOOT_CMD_RESTART2:if (strncpy_from_user(&buffer[0], arg, sizeof(buffer) - 1) < 0) {ret = -EFAULT;break;}buffer[sizeof(buffer) - 1] = '\0';kernel_restart(buffer);break;#ifdef CONFIG_KEXECcase LINUX_REBOOT_CMD_KEXEC:ret = kernel_kexec();break;
#endif#ifdef CONFIG_HIBERNATIONcase LINUX_REBOOT_CMD_SW_SUSPEND:ret = hibernate();break;
#endifdefault:ret = -EINVAL;break;}mutex_unlock(&reboot_mutex);return ret;
}

~~~~~~~~        上述源码中magic1和imagic2即魔力数变量,LINUX_REBOOT_MAGIC1、INUX_REBOOT_MAGIC2、LINUX_REBOOT_MAGIC2A、LINUX_REBOOT_MAGIC2B、LINUX_REBOOT_MAGIC2C即是魔力数宏定义。其宏定义在reboot.h文件中,如下;

/** Magic values required to use _reboot() system call.*/#define LINUX_REBOOT_MAGIC1 0xfee1dead
#define LINUX_REBOOT_MAGIC2 672274793
#define LINUX_REBOOT_MAGIC2A    85072278
#define LINUX_REBOOT_MAGIC2B    369367448
#define LINUX_REBOOT_MAGIC2C    537993216

~~~~~~~~        第一个常量 0xfee1dead是不是很奇怪,有点英文的感觉。怎么看着像feel head呢?这个常量是不是很酷。Feel Dead。Linus大神是著名的语言大师,常常语出惊人,用非常简短的语言说出了卡的都有想砸电脑的冲动这种境况,越来越觉得这个魔力数的精辟!!因为这个函数是用来重启的,如果不feel dead,干嘛要重启呢?
接下来看看下面4个魔力数,等等,为什么突然用10进制来表示呢,越看越觉得不对劲呢,难道是想隐藏什么?再看其命名规则,又2衍生出3个子定义,2A、2B和2C。说到这里,我想大家已经猜出其一二。先转化成16进制瞅瞅。

 672274793=0x28121969

~~~~~~~~        这个常量是不是也很特别,0x28121969,是不很像是日期,对的,这就是Linus大神的出生年月日,1969年12月28日。明年,Linus大神50岁了,时光如流水啊,当年的毛头小伙,就要50岁了。三十而立,四十不惑,五十而知天命。Linus大神显然提前完成了“知天命”的目标。也许他就是上天派下来革Windows的命的。
再来看下一个:

85072278=0x5121996

~~~~~~~~         1996年12月5日,这个日期是什么呢?是Linus大女儿的生日。
~~~~~~~~        把时光倒退回1993年,那时Linus还是24岁的棒小伙,应该是大学毕业不久吧,当时知道Linux的还不多。有一天,Linus亲自授课,宣传Linux的用法。课程结束时,Linus留了一个课后测验,要求参加者做好了以邮件形式交卷。结果,有一位上课的美女在交测验结果的同时向Linus发出了一个约会的邀请,于是一场培训成就了一段美妙的姻缘,这个女生(Tove)成了Linus的太太。值得一提的是,Linus太太武功高强,曾经6次夺得芬兰国家级别的跆拳道比赛冠军。
1997年6月,第二届亚特兰大Linux展示会(Atalanta Linux Showcase,简称ALS)在美国举行,这是Linux发展早期的一个年度盛会。在周五晚上的感谢晚宴上,Linus全家出席,在会议的相册中,可以看到幸福的一家人。

(照片来自网络)
~~~~~~~~        照片中,Tove深情地看着Linus。Linus抱着的就是他们的大女儿,名叫Patricia Torvalds。Linus把她称作Linus v2.0。在位于母校网站的一个个人主页上( https://www.cs.helsinki.fi/u/torvalds/),Linus放了几张Patricia婴儿时的照片,可以点开看看__,好久没有更新了。从网页上的信箱(torvalds@transmeta.com)来看,当时Linus还没有全职做Linux,还在Transmeta公司工作。
~~~~~~~~         2015年8月,opensource.com特别采访了已经在读大学的Patricia。
https://opensource.com/life/15/8/patricia-torvalds-interview
~~~~~~~~        报道提到,Patricia热爱计算机科学,已经在多个IT公司实习,技术方面小有成就,大有子承父业的雄心壮志。

(图片来自网络)
另外两个参数:

369367448=0x16041998
537993216=0x20112000

~~~~~~~~        这两个魔力数就是linus的二女儿和三女儿的生日,1998年4月16日,2000年11月20日。上面照片中站在中间便是Patricia,她旁边的另两个年轻女生是她的两个妹妹。
~~~~~~~~        从这个内核中的小故事可以看出,Linus大神是个很爱家的男人,家庭在他心目中有个极高的位置。他把自己心爱的家庭成员生日封存在了他的伟大作品之中,流传百世;父爱至深,源远流长。

linux之生日

~~~~~~~~        Linux操作系统诞生于1991 年10 月5 日,是第一次正式向外公布的时间。马上又是linux的生日了,下面就引自网络上的一个段子,提前预祝linux破壳日快乐O(∩_∩)O哈哈~

你TM自己编译去吧,O(∩_∩)O哈哈~666666666
漫画转自:http://tieba.baidu.com/p/4882364662?traceid=

linux——魔力数之父爱深沉相关推荐

  1. linux修改最大进程,linux 进程数最大值修改方法

    实际的系统进程数上限收到3个配置项的影响: 1.threads-max (/proc/sys/kernel/threads_max) 这个值表示物理内存决定的系统进程数上限,fork_init中有: ...

  2. Linux下数百种Windows软件的免费替代品列表

    Linux下数百种 Windows 软件的免费替代品列表 程序所执行任务的描述 Windows Linux 1) 网络连接 网页浏览器 微软 IE,网景 Netscape / Mozilla, Ope ...

  3. linux 目录最大文件数,Linux目录数和文件数限制(目录上最大文件数)

    Linux目录数和文件数限制(目录下最大文件数) Linux目录数和文件数限制(目录下最大文件数) 一.目录数限制: 在同一个路径下,一级子目录的个数限制为 31998 .如果你的应用生成的目录可能会 ...

  4. 【转载】Linux系统目录数和文件数限制

    腾逸   https://www.cnblogs.com/zt007/p/6639322.html Linux系统目录数和文件数限制 对于系统管理员来说,了解系统的一些限制是非常有必要的,这样可以根据 ...

  5. zabbix监控java线程池,linux线程数限制与zabbix监控

    Linux最大线程数限制及当前线程数查询 最大线程数计算方式: n = total_memory/128k; Linux用户线程数限制而导致的程序异常为 java.lang.OutOfMemoryEr ...

  6. Linux——文件句柄数设置

    在使用Linux时我们需要同时打开多个文件,来适配高并发的需求,这时就需要设置一下文件句柄数了,默认打开的是1024 文件句柄,文件描述符,会随着进程数增加而增加. Linux是有文件句柄限制的,而且 ...

  7. linux进程数和句柄数

    注:linux版本CentOS7 目录 一.进程和句柄概念 二.Linux资源限制 1. 用户资源限制 2.service 资源限制 3. 系统资源限制 三. 进程数限制 1. 用户进程数限制 2. ...

  8. linux 爱数备份,爱数之备份软件

    备份被称为数据安全的最后一道屏障,可以有效降低数据丢失带来的损失. 应用容灾可以极大的减少关键服务器故障带来的业务连续性问题, 这两种方案大多数是相互独立的需要分别投资建设,爱数则可以统一解决! -- ...

  9. linux 爱数备份,爱数云备份服务AnyBackupCloud_云市场-华为云

    商品说明 版本: V6.0 交付方式: License 适用于: Linux 上架日期: 2020-10-23 交付SLA: 3 自然日 爱数备份云解决方案 结合华为云的基本服务,将本地数据备份或迁移 ...

最新文章

  1. ​2012年至今,细数深度学习领域这些年取得的经典成果!
  2. 阿里云首席架构师唐洪:拥抱开源的云端更具生命力
  3. 在VS2010调试javascript程序时的各种问题
  4. Android开发环境搭建全程演示(jdk+eclipse+android sdk)
  5. anylogic中如何构建复杂网络_如何对复杂网络建模所需要的数据进行预处理
  6. python3从零开始学习_从零开始学习PYTHON3讲义(十五)让画面动起来
  7. C语言控制台应用程序绘制曲线,C语言控制台绘制曲线的实现代码
  8. Netlink 0002 -- 什么是Netlink
  9. Linux内核探索之路——关于方法
  10. systemVerilog的typedef用法
  11. FreeCAD源码分析:FreeCADBase模块
  12. php 月份查询生日_PHP判断日期(生日)格式是否正确合法的方法
  13. cortex a7 a53_镜头测试:蔡司红T28/2.8+索尼微单A7实拍北京景山公园
  14. DBCO-PALA-g-PEG DBCO-聚硫辛酸-聚乙二醇
  15. Ubuntu20.04 Server+Xubuntu-desktop英文环境下安装百度五笔
  16. Power BI-同比、环比、累计值
  17. eureka集群高可用配置
  18. 只用div+CSS做淘宝手机端首页
  19. 快速替换修改代码快捷键
  20. JZOJ3238. 超空间旅行

热门文章

  1. CMP指令、标志位、JCC指令总结
  2. 【Codewars】All Inclusive?
  3. 红外测试操作步骤_红外光谱仪标准操作规程
  4. 数据库牛人牛新庄的成长历程(转)
  5. 偏序集-Dilworth定理
  6. qemu /lib/ld-linux-aarch64.so.1: No such file or directory
  7. USB入门系列之四 —— USB的线缆以及插头、插座
  8. 例程 19 红外遥控
  9. [模拟电路]衰减器设计
  10. windows驱动数字签名之WHQL完整流程 | WHQL认证环境部署以及HLK测试