linux——魔力数之父爱深沉

前言

         ~~~~~~~~         话说,在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_KEXEC
	case LINUX_REBOOT_CMD_KEXEC:
		ret = kernel_kexec();
		break;
#endif

#ifdef CONFIG_HIBERNATION
	case LINUX_REBOOT_CMD_SW_SUSPEND:
		ret = hibernate();
		break;
#endif

	default:
		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=

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值