这两天翻阅了一些资料,试图想搞清Mac OS X和Linux操作系统各自的启动过程,下面是我自己的一些学习笔记。
首先说说Mac OS X,它的系统启动过程分为两大阶段:系统初始化+用户会话。顾名思义,前者是启动操作系统所需要的过程,后者则是为了初始化用户环境。
大体流程如下:
听过这样一个说法,计算机的启动是一个很矛盾的过程:必须先运行程序,然后计算机才能启动,但是计算机不启动就无法运行程序!因此,工程师们把一小段程序装入内存,然后计算机才能正常运行。
在OS X系统中也是这样,Mac计算机的固件被称为BootROM,是一个位于计算机主板上的flash memory芯片。在真正启动操作系统之前,固件就像一个迷你操作系统先运行起来,而它要做的第一件事就是POST。POST测试内建的硬件组件,eg:处理器、系统内存、外设端口etc。(这一阶段顺利完成的标志就是:听到一声启动音,然后在所有屏幕上显示淡灰色背景。)
流程图中的虚线区块是针对系统磁盘采用了FileVault 2加密而言,在此情况下,OS X的引导程序无法被访问,因此系统将从OS X恢复分区启动,该分区中有一个特殊的EFI引导文件,显示一个类似登录窗口的屏幕。解密后,EFI固件被允许访问引导文件。
默认情况下,固件会加载系统引导文件,找到了引导文件后,EFI将会启动引导程序,OS X就开始启动了。(该阶段,主屏幕会显示一个暗灰色的苹果标志。)
引导程序通过Mac的固件启动,它负责加载OS X内核,以及最基本的内核扩展(KEXT)。为加快进程,引导程序会尽可能的加载缓存下来的文件,这显然要比重新加载整个系统快得多。(该阶段顺利完成的标志是一个小的、灰色的旋转齿轮图标。)
当引导程序成功加载了内核与基本的KEXT后,内核就会接管启动进程。因为已有足够的KEXT,内核能够读取整个文件系统,以便加载更多的KEXT,然后开始启动BSD UNIX系统的核心。[此处还未深究]
系统初始化的最后一步,内核会启动第一个非内核进程—系统launchd,它是所有其他进程的父进程,它的第一个任务就是通过启动所有其他系统进程来完成系统初始化。
接下来就到了用户会话过程。Loginwindow负责显示登录界面;用户launchd用于进行用户环境的初始化并启动任何用户级别的进程或应用程序;最后,用户登录到系统之后,就到了会话环境中,而前两个进程会始终运行着。
网上有的资料将OS X的启动分为了近30个过程,不明觉厉,但好像也是将以上各个过程讲得更详细一些、各个进程都指明了吧。
然后是Linux,因为花在这上面的时间相对而言少一些,因此概括讲下。(部分摘自网络)
BIOS是基本输入输出系统,存于ROM,计算机通电后,第一件事就是读取它。与OS X一样,BIOS先进行硬件自检,自检完成后,按照启动顺序,搜索处于活动状态并且可以引导的设备,通常,Linux系统都是从硬盘上引导的。
GRUB和LILO都是引导加载程序。引导加载程序用于引导操作系统启动。
接下来的步骤就是加载内核映像到内存中,内核映像并不是一个可执行的内核,而是一个压缩过的内核映像。在这个内核映像前面是一个例程,它实现少量硬件设置,并对内核映像中包含的内核进行解压缩,然后将其放入高端内存中。
init进程是系统所有进程的起点,内核在完成核内引导以后,即在本进程空间内加载init程序。init进程可用于扮演终结父进程的角色,同时在进入某个特定的运行级别时运行相应的程序,以此对各种运行级别进行管理。
Init的工作是根据/etc/inittab来执行相应的脚本,进行系统初始化,如设置键盘、字体、装载模块,设置网络等。
最后,login程序会提示使用者输入账号及密码,接着编码并确认密码的正确性,如果账号与密码相符,则为使用者初始化环境,并将控制权交给shell,即等待用户登录。
本想比较一下Linux与Mac OS X二者的区别,无奈时间、精力不足,而且用win7这么多年,Linux也用了半年多,但对于这两个系统的差别感知还停留在界面上,无法做到从专业角度深层次地比较。只好想着随着对操作系统的进一步学习,两者的差别在我看来也会逐渐明显吧。
欢迎批评指正~
相关推荐
Bash漏洞,又称Shellshock,是指在2014年被发现的一个严重安全漏洞,它影响了广泛使用的Bash shell,这是一个在Unix-like操作系统,包括Linux和Mac OS X中的命令行解释器。这个漏洞的存在使得攻击者能够通过环境变量...
Bash是Unix-like操作系统,包括Linux和Mac OS X的默认命令行解释器。这个漏洞的存在时间长达22年,直到2014年9月被公开,引发了全球范围内的关注。 **Bash漏洞的原理** Bash漏洞主要源于一个设计缺陷,允许攻击者...
1. **Qt库基础**:Qtopia的核心是Qt库,这是一个跨平台的应用程序开发框架,支持多种操作系统,包括Linux、Windows、Mac OS X等。Qt库提供了一整套的图形用户界面(GUI)组件和工具,使得开发者可以方便地创建功能...
* 跨平台的,支持多种操作系统,包括Windows、MAC OS、Linux等 * 丰富的语言接口,支持多种开发语言,包括VC++、Python等 * 强大的图像处理功能,支持图像特征提取、图像分类、目标检测、图像分割等功能 * 开源免费...
计算机中常见的操作系统主要包括Windows、UNIX、Linux和Mac OS。Windows系统因其用户友好性和广泛的应用成为个人电脑的主流选择,而UNIX系统在大型机和服务器领域占据重要地位,其标准和移植性促进了系统的发展。...
OpenCV库由Intel微处理器研究实验室的视觉交互组开发,其代码经过优化,不仅可以在多种操作系统上运行,如Windows、Linux、Mac OS等,而且拥有强大的移植性,适用于各种开发环境。库内包含了超过500个函数,涵盖C++...
由于其开源本质,Python已经被移植到几乎所有主流操作系统上,如Windows、Mac OS、Linux等。开发者编写的应用程序,只要避免使用特定平台的特性,一般无需修改就可以在各种系统平台上运行。 另一个关键特性是Python...
开发者可以在任何安装了JVM的操作系统上运行Java程序,无论是Windows、Linux还是Mac OS,大大提高了软件的移植性和兼容性。 其次,Java是面向对象的语言,它支持封装、继承和多态等面向对象的基本概念。封装使得...
Python跨平台,可以在Windows、Linux/Unix、Mac OS X等多种操作系统上运行。它广泛应用于Web开发、数据分析、人工智能、自动化脚本等多个领域,得益于其丰富的第三方库支持。 2. Anaconda: Anaconda是一个针对...
`cross-env`使得在Windows、Linux和Mac OS等操作系统上设置`NODE_ENV`变量变得简单。 接下来,我们需要在`config/`目录下创建针对不同环境的配置文件。例如,创建`test.env.js`、`pre.env.js`和`prod.env.js`。在`...
在Unix/Linux系统中,只使用`\n`作为换行符,而在Mac OS老版本中,则使用`\r`。如果文件被错误地识别为其他系统的格式,`\r\n`可能不会按预期工作。 2. 文件打开模式不正确:`fopen()`函数的第二个参数是打开文件的...
FPC是一个自由和开放源代码的Pascal编译器,支持多种平台,包括Windows、Linux、Mac OS X等。它支持Pascal的多个版本,包括Delphi语法。FPC不仅是一个编译器,还包含一个完整的开发环境,可以用于创建桌面应用程序、...