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系统,然后进去以后是 ...
随机推荐
- C语言学习笔记---谭浩强
前段时间有机会去面试了一次,真是备受“打击”(其实是启发),总的来说就是让我意识到了学习工具和学习技术的区别.所以最近在看一些数据结构和算法,操作系统,python中的并行编程与异步编程等东西.然而数 ...
- java中IO递归写入
package cn.stat.p1.file; import java.io.BufferedWriter; import java.io.File; import java.io.FileWrit ...
- 近期Responsive web design项目经验分享-高分辨率图片处理篇
在高分辨率的情况下 商品的图片难免会失真 怎样才能让商品的图片在高分辨率的情况下 效果不失真 提供用户更好的体验呢 我发现了一个解决方案 不知道是不是你想要的 先上图片对比下效果 左侧是使用后 ...
- 利用.htaccess绑定域名到子目录
前提首先得把域名绑定绑定了,比如把dev.ccvita.com解析到211.136.108.190这个IP其次是在网站管理面板里,为网站绑定dev.ccvita.com最后编辑配置.htaccess文 ...
- 使用APMServ本地搭建多个网站
October 27, 2014 使用APMServ本地搭建多个网站教程 把我写好的代码直接粘贴到 httpd.conf 文件的末尾.然后保存就可以了.代码如下: <VirtualHost *: ...
- CSS - 针对不同浏览器的写法
火狐浏览器: @-moz-document url-prefix() { /*这段区域的样式代码只在firefox起作用*/ .x{ width: 100px; height: 100px; back ...
- scala 入门(2)--数组相关操作
scala 无论从数组的定义还是操作方面来说都跟java非常相似,但又有其独特的强大之处… 1. 定长数组 对于长度不变的数组,可以用scala中的Array. //scala 里使用new实例化对象 ...
- ubuntu 12.04 下搭接Qt 嵌入式开发环境
1.安装前的准备工作 (1)有ubuntu12.04 的系统镜像(也可以其他linux 如Fedorea9),都是安装好的 (2)虚拟机VMWare 或 VirtualBox ,两者都可以,都是安装好 ...
- Mysql 新建用户以及授权远程连接操作
1:以root身份登陆mysql终端 mysql -uroot -pmysql 2:创建wx用户,注意密码要加单引号 mysql> create user wx identified by 'w ...
- windows 挂载linux nfs
windwos挂载linux主机NFS 启动windos NFS客户端服务: 1. 打开控制面板->程序->打开或关闭windows功能->NFS客户端 勾选NFS客户端,即开启wi ...