Mac 系统引导过程概述 & BootCamp 的秘密

前言 OS X 与 Windows 在引导流程上有很大的差别,而且在 Mac 上运行 Windows 需要经过特殊的处理。造成这种差异的原因在于磁盘分区表格式。 分区表 一个磁盘抛开物理组成部分的话,它就是一个地址序列,这个序列从 0~n-1 ,每个地址包含 512B(字节)的空间。一般我们将这些地址称作逻辑块地址(LBA),每块由 512B 组成。分区表告诉操作系统,磁盘的分区有几个,从哪里开始到哪里结束。当将一个磁盘插入已经含有操作系统的机器上时,操作系统会检索这个磁盘的分区表,并正确认识它的分区结构。一个磁盘是先有分区表,后有分区,然后才有文件系统,有了文件系统才能被操作系统读写删。 分区表格式与系统引导的关系 磁盘分区表格式目前主要有两种,分别是 MBR 分区表 和 GUID 分区表,两种分区表的主要区别在支持的分区数量上。前者仅支持4个主要分区,后者则可以扩展到超过128个。 MBR,即 Master Boot Record ,位置在磁盘的第一个逻辑扇区,即 LBA0 的位置。一个逻辑扇区仅有 512B(字节) ,而且分给 MBR 分区表 的只有 64B ,每个分区占分区表的 16B ,剩下的字节由 MBR 引导代码和其它组成。因为每个分区只有 16B 大小的分区表记录,所以寻址最大只能到 2.2TB 。下图的绿色部分 PBR,即 Partition Boot Record ,位置在每个磁盘分区的开始部分,占用扇区不定。这个扇区一般保存着操作系统引导程序的所在位置。下图的红色部分。 文件系统,File System ,操作系统对磁盘的所有操作都需要经过文件系统,删除文件指的是在文件系统里删除文件的索引条目,创建文件就是在在文件系统里添加索引条目并将具体数据写入磁盘。常见的文件系统格式有: FAT exFAT NTFS HFS+ 。文件系统位置一般在PBR之后。下图黄色部分 传统的 BIOS 引导操作系统过程如下图: 计算机器开机后,固化在 ROM 里的 BIOS 就会被加载到内存运行,BIOS 自检完毕以后加载 COMS 的参数,通过 COMS 的参数, BIOS 程序加载启动磁盘的 MBR 到内存里运行。通过运行 MBR 的代码,记录在 MBR 分区表中,标记为活动分区的磁盘分区 PBR 被加载到内存。与 MBR 类似,PBR 在运行后加载操作系统的引导程序到内存运行,例如 Windows 的 bootmgr 。当引导程序运行后,操作系统内核就被加载运行,完成从 BIOS 程序中接手的引导流程。 传统的 BIOS 比较低级,它不能像操作系统一样识别文件系统,所以磁盘必须要有一个固定的物理块作为引导块(Boot Block),这个引导块就是 MBR 。 GPT,即 Globally Unique Identifier Table ,全局唯一标识码分区表,简称 GPT 或 GUID 分区表(下面将混用这两个称呼)。由于 MBR 分区表 的局限性(还有 BIOS 的),GPT 诞生了。GPT 由 GPT 头和 GPT 主体,GPT 备份 组成。起始于磁盘 LBA1的位置,相对的 LBA0 仍然为 MBR ,但是这个 MBR 是被保护的,没有引导代码,仅仅有一个被标识为未知的分区,当支持 GPT 分区表的操作系统检索到这个 MBR 后就会自动忽略并跳到 LBA1 读取 GPT 分区表。如下图,由于篇幅的关系,表的长度比例不等同与实际在磁盘地址里的实际比例。 ...

February 28, 2020 · 3 min · Cat York

Microsoft SQL Server Versions List

Full List Source: https://sqlserverbuilds.blogspot.com/ Summary Table: Release RTM (no SP) Latest CU SQL Server 2025SQL Server 17 Public Preview SQL Server 2022SQL Server latest versionSQL Server 16 codename Dallas Release date: 2022-11-16 Support end date: 2028-01-11 Ext. end date: 2033-01-11 16.0.1000.6 CU20 (16.0.4205.1, July 2025) SQL Server 2019SQL Server 15 codename Aris Seattle Release date: 2019-11-04 Support end date: 2025-02-28 Ext. end date: 2030-01-08 15.0.2000.5 CU32 (15.0.4430.1, February 2025) SQL Server 2017SQL Server 14 codename vNext Release date: 2017-10-02 Support end date: 2022-10-11 Ext. end date: 2027-10-12 14.0.1000.169 CU31 (14.0.3456.2, September 2022) Starting from SQL Server 2017 Service Packs will no longer be released SP1 SP2 SP3 SP4 SQL Server 2016SQL Server 13 Release date: 2016-06-01 Support end date: 2021-07-13 Ext. end date: 2026-07-14 13.0.1601.5 + CU9 13.0.4001.0 or 13.1.4001.0+ CU15 13.0.5026.0 or 13.2.5026.0+ CU17 13.0.6300.2 or 13.3.6300.2 Obsolete versions – out of support SQL Server 2014SQL Server 12 Release date: 2014-04-01 Support end date: 2019-07-09 Ext. end date: 2024-07-09 12.0.2000.8 + CU14 12.0.4100.1 or 12.1.4100.1+ CU13 12.0.5000.0 or 12.2.5000.0+ CU18 12.0.6024.0 or 12.3.6024.0+ CU4 SQL Server 2012SQL Server 11 codename Denali Release date: 2012-03-06 Support end date: 2017-07-11 Ext. end date: 2022-07-12 11.0.2100.60 + CU11 11.0.3000.0 or 11.1.3000.0+ CU16 11.0.5058.0 or 11.2.5058.0+ CU16 11.0.6020.0 or 11.3.6020.0+ CU10 11.0.7001.0 or 11.4.7001.0 SQL Server 2008 R2SQL Server 10.5 codename Kilimanjaro Release date: 2010-04-21 Support end date: 2014-07-08 Ext. end date: 2019-07-09 10.50.1600.1 10.50.2500.0 or 10.51.2500.0 10.50.4000.0 or 10.52.4000.0 10.50.6000.34 or 10.53.6000.34 SQL Server 2008SQL Server 10 codename Katmai Release date: 2008-08-07 Support end date: 2014-07-08 Ext. end date: 2019-07-09 10.0.1600.22 10.0.2531.0 or 10.1.2531.0 10.0.4000.0 or 10.2.4000.0 10.0.5500.0 or 10.3.5500.0 10.0.6000.29 or 10.4.6000.29 SQL Server 2005SQL Server 9 codename Yukon Release date: 2005-11-07 Support end date: 2011-04-12 Ext. end date: 2016-04-12 9.0.1399.06 9.0.2047 9.0.3042 9.0.4035 9.0.5000 SQL Server 2000SQL Server 8 codename Shiloh Release date: 2000-11-30 Support end date: 2008-04-08 Ext. end date: 2013-04-09 8.0.194 8.0.384 8.0.532 8.0.760 8.0.2039 SQL Server 7.0SQL Server 7 codename Sphinx Release date: 1998-11-27 Support end date: 2005-12-31 Ext. end date: 2011-01-11 7.0.623 7.0.699 7.0.842 7.0.961 7.0.1063 SQL Server 6.5SQL Server 6.50 codename Hydra Release date: 1996-06-30 Support end date: 2002-01-01 6.50.201 6.50.213 6.50.240 6.50.258 SP4 6.50.281 SP5 6.50.416 SQL Server 6.0SQL Server 6 codename SQL95 Release date: 1995-06-13 Support end date: 1999-03-31 6.00.121 6.00.124 6.00.139 6.00.151

February 27, 2020 · 2 min · Cat York

SQL Server 清除/切断日志文件 Set Recovery to Simple with no-wait

该方法可以简单粗暴的将SQL Server的巨大Log文件缩减为2M, 根据事务恢复将失效. USE[master] GO ALTER DATABASE [XXXXX] SET RECOVERY SIMPLE WITH NO_WAIT GO ALTER DATABASE [XXXXX] SET RECOVERY SIMPLE —简单模式 GO USE [XXXXX] GO DBCC SHRINKFILE (N’XXXXX_log’ , 2, TRUNCATEONLY) —设置压缩后的日志大小为2M,可以自行指定 GO USE[master] GO ALTER DATABASE [XXXXX] SET RECOVERY FULL WITH NO_WAIT GO ALTER DATABASE [XXXXX] SET RECOVERY FULL —还原为完全模式

February 25, 2020 · 1 min · Cat York

数学之美:两点之间最快的路径

掉节操的星期一又来了,所以呢一起来观赏一下数学之骚美。 这事儿和17世纪的一道谜题有关,直到后来微积分被建立起来以后才得正解。虽然问题不难,但结果惊艳。 我先来问一个比较「二」的问题: 两点之间最短的路径是什么? 喏,别猜疑我是在逗你们,或拿非欧几何抖机灵,真心希望你们两手一摊就说是一条直线。 铁线上的珠子 现在我们来看一下这次节目我们要探讨的问题: 如果AB两点是在空间中垂直放置的,那么这两点之间的最快路径是什么? 举几个图,如果我们将两点之间用铁线连接,上面穿一颗圆润的珠子,那么以下哪种姿势的路径可以让珠子以最快的速度从A点滑降到B点? 注意,此问题中要加上重力加速度(但是不考虑摩擦力和空气阻力)的情况下,考察那条铁线上的珠子最快降落到B点,给你两分钟时间…… 会不会是第一种直线的方式呢?无论如何,我们都知道这是两点之间最短的路径。所以珠子需要移动的距离是最短的,而且珠子不需要改变运行方向跑偏,严格按照起始的方向埋头滑到底。 会不会是第二种抛物线形式的路径最快?抛物线是种水平位移与垂直运动成平方关系的运动路径,更符合物体在自然界重力作用下的坠落轨迹(事实上,那些讹你钱让你吐一地的「失重体验」飞行,飞的就是这种路径。) 还有第三种跳台滑雪式的路径,它会是最快的一个么?走这种路径有个优势,就是在一开始会获得较高的加速度,当加速度达到最大的时候,把这种优势转化为较短的时间滑过后半程的水平位移上。 是不是还有种可能,实际上对于下坠来说,其实路径根本就无所谓?你看,反正是能量守恒的事情,同等高度的情况下,珠子具有的势能也是一样的,那么最后获得的动能也是一样的,那么我们能不能说其实路径的选择对速度是没有影响的? 最后,会不会这些路径都不是最快的?其实还有其他的可能?比如一个完美的圆弧? 诶?听上去貌似都有点道理!您觉得呢?鼠标别撒手,跟我继续看下去…… 牛顿、贝努里、惠更斯、莱布尼茨、钦豪申、罗比达(反正都是些远古学霸) 在17世纪末,扎堆出现了一大批杰出的数学家:牛顿、贝努里、惠更斯、莱布尼茨、钦豪申、罗比达……他们都在做这道题,出题的人是雅各布·伯努利他弟,约翰·伯努利: “我,约翰·伯努利,想找到世界上最棒的数学家。没有比出道难题更为难人,更能公平公正地爽到我了,能解决这个问题的人必能扬名立万,千古流芳。成为能与帕斯卡,费马等牛人齐名的大V。请允许我代表整个数学界提出这个尤其能在今天考验大家的数学技巧和思维耐力的问题。如果有人能把答案递交与我,我会将其公开,并授予其应得的奖赏。” 这个约翰·伯努利是谁?好像口气很吊的样子,反正你们就当他是知乎的黄继新就行了,要不是他,牛顿的万有引力还能早些获得承认,他们一家人都是大学霸,兄弟,父子之间还互相瞧不上眼。 史载是牛顿第一个找到了正确解法和答案。伽利略几十年前已经给出了自己的结论,但由于手里没有微积分,得出了错误的答案,所以咱也别自惭愧,不知道也很正常。 最速曲线 (Brachistochrone Curve) 这个问题存在一个最优解,这条曲线有一个拗口的名字,叫 Brachistonchrone 曲线(词源来自希腊语,brachistos是最短的意思,chronos 意思是时间)。这的确念起来累舌头,但先别皱眉,莱布尼茨还想更佶屈聱牙地叫它 Tachystopote …… 最速曲线的形状接近那个「跳台滑雪」(上图第三个),起始近乎的垂直加速让珠子获得了快速通过后半程水平位移的能力,平均速度最快。上图的动画里,红色的就是那条「最速曲线」。(伽利略的结论错在认为完美的圆弧才是最快的路径。) 关于变量的计算 在这里要得到的最优解的计算,不是要将一个函数里的某个变量最小化,而是需要一个函数来把其他变量最小化。这就是「变分法」。关于变分法的介绍很多,所以我在这里就快速展示一下这个过程,反正 @sein也不按字数发粮票…… 计算的基本思路是「能量守恒」。坠落的珠子把势能变成动能。如果我们把这条弯曲的路径长度记做s,每一段无线小的路径记做ds,得: 不同的路径都会有不同的函数,在这里,我们的目标是找到那个最小的y的函数表达式。 我们知道路径是连续的(没有坑洼和突然的起伏),而且我们知道只有一个变量就是加速度,所以得到一个二阶导数 d2y/dx2,而且我们知道起点和终点的值。 抄个近道直接给你们答案吧,下面是关于夹角θ切线的参数方程 等式中K是一个保证曲线经过终点(xB,yB)的系数。 摆线(Cycloid) 上式所得到的图像,就是下图我们所看到的「摆线」,美不胜收…… 所谓摆线,描述的是某个圆上的一点,在圆沿直线运动时候的滑过的轨迹。 想象你的车跑在这样形状的一个坡上,轱辘就是那个黑点,那它运动速度最快的区间就是在这条摆线的 0≤θ≤π 的范围里,从垂直下降到回归水平位置的这段路径上(见下图)。 这到底有毛用? 最速曲线对于建造过山车有巨大的指导意义,那些造过山车的工程师总要绞尽脑汁在有限的垂降距离里,尽快达到最高速爽到你。如我们刚才所证的,「最速曲线(Brachistochrone Curve)」是两点之间最快的路径。 这在竞技体育上也大有用处。如果你是一个滑雪运动员,目标是最短时间冲线,你根本就不在乎两点间的最短路径,而是最快路径。如果你沿着最速曲线的路径下滑,你会获得更多的加速度优势。 能看到这里的都是好同学 这事儿还能更带劲。 在均一力场的框架下,「最速曲线(Brachistochrone Curve)」有时候也被称之为「等时曲线(tautochrone)」(依旧感谢希腊人,taut的意思是「相等」)。 你可以把物体放在「等时曲线」的任何位置上,它们都将以 相同的时间 滑落到同一个位置。 ...

April 21, 2014 · 1 min · Junius

一条Linux命令 一段人类文明

1582年2月,罗马教廷要求从1582 年10月中减去10天

May 30, 2006 · 1 min · Cat York