Linux是如何启动的
今天早上在上操作系统课的时候,老师有提到计算机从按下开关键到最后由操作系统全然接管的整个过程。
只是讲课毕竟是十分抽象的,由于之前自己也看过这方面的内容,可是老是记不住,所以今天晚上就花了点时间,把《鸟哥的Linux私房菜》的相关部分又看了一遍。
以下就把核心流程给过一遍吧。
我们都知道,操作系统对计算机的管理起到了决定性的作用。
但是,操作系统在关机状态下存在磁盘中的,而执行又是在内存中执行的。那么能够想象的是。在刚刚按下开机键时。内存中是不存在操作系统的。这时候一个很自然的想法,就是要将硬盘中的操作系统载入到内存中。
可此时又是谁来管理调度这一切的呢?
这里我们就不得不提到一个叫做BIOS(basic input output system)的东西了,翻译成中文就是基本输入输入系统。它事实上是一段烧录到主板的ROM芯片上的一段程序。
开机时首先读取的就是BIOS程序。然后BIOS程序还会载入一个叫CMOS的东西。用来取得主机的硬件配置。然后它还会进行自我检測。接下来就是最最关键的部分了。由于计算机终于肯定是由操作系统控制的,那么我们怎么找到操作系统呢?最后BIOS会找到第一个可启动的设备,通常是磁盘。然后读取该磁盘的第一个扇区中一个叫MBR(MasterBoot
Record)的东西,即主引导分区块。接下来我们就来谈谈这个MBR。
MBR事实上就是硬盘的第一扇区上一个大小为446byte的磁盘空间。当中能够用来存放引导载入程序(Boot loader)。
这里须要注意的是。我们都知道一块磁盘上面往往能够装多个操作系统,这时我们就要对磁盘进行分区,然后不同的分区里能够装不同的操作系统。而每一个操作系统系统的Boot loader都是不一样的。所以通常在每一个磁盘分区的開始也会有一个相应的引导扇区(Boot Sector)。
因此为了满足多重引导的需求,MBR中的Boot loader往往提供例如以下三种功能:
1.提供菜单:让用户能够选择不同的开机选项
2.载入内核文件:即直接把该引导程序相应的操作系统内核载入
3.转交给其它loader:就是把控制权转交给其它分区的loader。然后载入对应的内核
到此为止。我们就能用boot loader来读取内核文件了。然后Linux就会将内核文件解压缩到内存中,然后利用内核的功能检測与測试周边设备。注意,尽管開始BIOS已经进行过一次硬件检測了,可是Linux内核不一定会使用。此时。内核才真正開始接管BIOS后的工作了。
最后。在内核进行完硬件检測和驱动的载入之后会主动调用/sbin/init生成传说中的1号进程 init 。而init通过一系列的配置文件对系统的主机名,网络设置,语系处理,文件系统格式以及其它的服务进行启动,终于完毕对软件运行环境的构建。因为不同操作系统的配置文件区别较大,这里就不赘述了。
总之,计算机从开机到由操作系统进行全然控制的过程基本上就是这种啦。
參考书籍:《鸟哥的Linux私房菜》
Linux是如何启动的的更多相关文章
- 探索 Linux 系统的启动过程
引言 之所以想到写这些东西,那是因为我确实想让大家也和我一样,把 Linux 桌面系统打造成真真正正日常使用的工具,而不是安装之后试用几把再删掉.我是真的在日常生活和工作中都使用 Linux,比如在 ...
- windows下制作linux U盘启动盘或者安装优盘(转)
windows下制作linux U盘启动盘或者安装优盘(转) Linux发行版排行榜:http://iso.linuxquestions.org/ [方案一]:UltraISO(不推荐,在Window ...
- 腾讯云Linux系统中启动自己安装的tomcat
腾讯云Linux系统中启动自己安装的tomcat 首先通过工具查看一下安装的tomcat的位置 进入命令行之后输入以下指令: 此时,tomcat已经启动了.
- [转] 浅谈Linux系统的启动流程
原文:http://blog.csdn.net/justdb/article/details/9621271 版权声明:本文为博主原创文章. Linux系统的启动时通过读取不同的配置文件,执行相应的S ...
- Linux内核分析之跟踪分析Linux内核的启动过程
一.实验过程 使用实验楼虚拟机打开shell cd LinuxKernel/ qemu -kernel linux-/arch/x86/boot/bzImage -initrd rootfs.img ...
- 详解linux系统的启动过程及系统初始化
一.linux系统的启动流程 关于linux系统的启动流程我们可以按步进行划分为如下: POST加电自检 -->BIOS(Boot Sequence)-->加载对应引导上的MBR(boot ...
- linux下如何启动/停止/重启mysql:
一.启动方式1.使用linux命令service 启动:service mysqld start2.使用 mysqld 脚本启动:/etc/inint.d/mysqld start3.使用 safe_ ...
- 走进Linux之systemd启动过程
Linux系统的启动方式有点复杂,而且总是有需要优化的地方.传统的Linux系统启动过程主要由著名的init进程(也被称为SysV init启动系统)处理,而基于init的启动系统被认为有效率不足的问 ...
- Linux系统快速启动方案
========================= 基本常识 ========================= Linux系统基本启动流程: 1. CPU从ROM(如果有的 ...
- CentOS(四)--Linux系统的启动级别
对于绝大多数Linux程序员来说,进入Linux系统后一般看到的是黑乎乎的界面(开发模式),因为系统如果启动选择开发模式,会减少启动时间,优化内存等.但是通常我们刚安装完Linux系统,然后进去以后是 ...
随机推荐
- Java开发者易犯错误Top10
本文总结了Java开发者经常会犯的前十种错误列表. Top1. 数组转换为数组列表 将数组转换为数组列表,开发者经常会这样做: List<String> list = Arrays.asL ...
- nginx反向代理nginx,RealServer日志打印真实ip
title: nginx反向代理nginx,RealServer日志打印真实ip date: 2016-05-11 19:15:37 tags: --- nginx反向代理nginx,RealServ ...
- OD: Shellcode Encoding
Shellcode 受到的限制 1. 大多数情况下 shellcode 中不允许出现 0x00 截断符,这个可以通过特殊指令来做到. 2. 有时候 shellcode 必须为可见的 ASCII 字符或 ...
- <div> 如何布局两个标签的布局
想做一个div的曾背景颜色是黄绿色,内部有<a>标签. 代码如下: <div align="center" style=" width: 900px;h ...
- (转)ASP.NET 伪静态
1.伪静态:http://www.cnblogs.com/Default.html 目的就是为了赢得更多的收入,至于真否,待SEOer 解答,正如文字所说,伪静态就是假的静态. 2.准备工作:下载Ur ...
- 触发器内insert,delete,update判断执行不同的内容
create trigger tr_aon afor insert,update,delere asbegin IF EXISTS(SELECT 1 FROM inserted) AND NOT EX ...
- java.lang.NoSuchMethodError: com.google.common.collect.Maps.newConcurrentMap()Ljava/util/concurrent/ConcurrentMap;
在storm启动topo的时候,报错: java.lang.NoSuchMethodError: com.google.common.collect.Maps.newConcurrentMap()Lj ...
- Ueditor使用方法
1.到百度下载文件,有各种版本.下载.net版本 2.将所需文件导入工程中 分别是:themes文件夹.third-party文件夹.ueditor.all.min.js.ueditor.config ...
- C/C++中字符串存储位置
代码: #include <iostream> #include <cstdio> using namespace std; void fun(char **p){ //cha ...
- Sql Server 连接池及其用法
其实我们一直在使用SqlServer的连接池.在连接字符串中,Pooling为是否启用连接池,默认值为true,表示启用. 与连接池相关的两个重要参数是 Min Pool Size和 Max Pool ...