第十周

  1. 请详细描述CentOS的启动流程

    启动第一步–加载BIOS 

       当打开计算机电源,计算机会首先加载BIOS信息,BIOS信息是如此的重要,以至于计算机必须在最开始就找到它,这是因为BIOS中包含了CPU的相关信息、设备启动顺序信息、硬盘信息、内存信息、时钟信息、PNP特性等等。在此之后,计算机心里就有谱了,知道应该去读取哪个硬件设备了。在BIOS将系统的控制权交给硬盘第一个扇区之后,就开始由Linux来控制系统了。

    启动第二部–读取MBR         

      硬盘上第0磁道第一扇区被称为MBR,也就是Master Boot Record,即主导记录,它的大小是512字节,可里面却存放了预启动信息、分区表信息。可分为两部分:第一部分为引导去,占了446个字节;第二部分为分区表,共66个字节,记录硬盘的分区信息。预引导区的作用之一是找到标记为活动的分区,并将活动分区的引导读入内存。       系统找到BIOS所指定的硬盘MBR后,就会将其复制到0*7c00地址所在的物理内存中。其实被复制到物理内存的内容就是Boot Loader,而具体到你的电脑,那就是lilo或者grub了。

    启动第二部–读取MBR         

      硬盘上第0磁道第一扇区被称为MBR,也就是Master Boot Record,即主导记录,它的大小是512字节,可里面却存放了预启动信息、分区表信息。可分为两部分:第一部分为引导去,占了446个字节;第二部分为分区表,共66个字节,记录硬盘的分区信息。预引导区的作用之一是找到标记为活动的分区,并将活动分区的引导读入内存。       系统找到BIOS所指定的硬盘MBR后,就会将其复制到0*7c00地址所在的物理内存中。其实被复制到物理内存的内容就是Boot Loader,而具体到你的电脑,那就是lilo或者grub了。

    启动第四步–加载内核      

      根据grub设定的内核映象所在路径, 系统读取内存映象,并进行解压缩操作。此时,屏幕一般会输出”Uncompressing Linux“的提示。当解压缩内核完成后,屏幕输出”OK,booting the kernel”。    系统将压缩后的内核放置在内存之中,并调用start_kernel()函数来启动一系列的出事化函数并初始化各种设备,完成Linux核心环境的建立,至此Linux内核已经建立起来了,基于Linux的程序应该可以正常运行了。    Start_kernel()定义在init/main.c中,它就类似于一般可执行程序中的main()函数,系统在此之前所做的仅仅是一些能让内核程序最低限度执行的初始化操作,真正的内核初始化过程是从这里才开始。函数start_kerenl()将会调用一系列的初始化函数,用来完成内核本身的各方面设置,目的是最终建立起基本完整的Linux核心环境。    在start_kenrel()的结尾,内核通过kenrel thread()创建出第一个系统内核线程(即1号进程),该线程执行的是内核中的init()函数,负责的是下一阶段的启动任务。最后调用cpues_idle()函数,进入了系统主循环体口默认将一直执行default_idele()函数中的指令,即CPU的halt指令,直到就绪队列中存在其他进程需要被调度是才会转向执行其他函数,此时,系统中唯一存在就绪状态的进程就是由kernel_hread()创建的init进程(内核线程),所以内核并不进入default_idle()函数,而是转向init()函数继续启动过程。

    启动第五步–用户层init依据inittab文件来设定运行等级   

      内核被加载后,第一个运行的程序便是/sbin/init,该文件会读取/etc/inittab文件,并依据文件来进行初始化工作。    其实/etc/inittab文件最主要的作用就是设定Linux的运行等级,其设定形式是“:id:5:initdefault:”,这就表明Linux需要运行在等级5上。Linux的运行等级设定如下:  0:关机  1:单用户模式  2:无网络支持的多用户模式 3:有网络支持的多用户模式 4:保留,未使用  5:有网络支持有X-Window支持的多用户模式 6:重新引导系统,即重启

    启动第六步–Init进程执行rc.sysinit    

      在设定了运行等级后,Linux系统执行的第一个用户层文件就是/etc/rc.sysinit脚本  程序,它做的工作非常多,包括设定PATH、设定网络配置(/etc/sysconfig/network)、启动swap分区、设定/proc等等。线程init的最终完成状态是能够使得一般的用户程序可以正常地被执行,从而真正完成可供应用程序运行的系统环境。准备好以上一切之后,系统开始进入用户层的初始化阶段。内核通过系统调用execve()加载执行相应的用户层初始化程序,依次尝试加载程序”/sbin/init”,”/etc/init”、“/bin/init”,和“/bin/sh”.只要其中有一个程序加载获得成功,那么系统就将开始用户层的初始化,而不会再回到init()函数段中。至此,init()函数结束,Linux内核的引导部分也到此结束。

    启动第七步–启动内核模块      

      具体是依据/etc/modules.conf文件或/etc/modules.d目录下的文件来装载内核模块。

    启动第八步–执行不同运行级别的脚本程序     

      根据运行级别的不同,系统会运行rc0.d到rc6.d中的响应的脚本程序,来完成相应的初始化工作和启动相应的服务。

    启动第九步–执行/etc/rc.d/rc.local     

      rc.lacal就是在一切初始化工作后,Linux留给用户进行个性化的地方,可以把设置和启动的东西放到这里

    启动第十步–执行/bin/login程序,进入登录状态     

      此时,系统已经进入到了等待用户输入username和password的时候了,已经可以用自己的帐号登入系统了。

2、为运行于虚拟机上的CentOS 6添加一块新硬件,提供两个主分区;

  (1) 为硬盘新建两个主分区;并为其安装grub;

  (2) 为硬盘的第一个主分区提供内核和ramdisk文件; 为第二个分区提供rootfs;

  (3) 为rootfs提供bash、ls、cat程序及所依赖的库文件;

  (4) 为grub提供配置文件;

  (5) 将新的硬盘设置为第一启动项并能够正常启动目标主机;

3、制作一个kickstart文件以及一个引导镜像。描述其过程。

4、写一个脚本

  (1) 能接受四个参数:start, stop, restart, status

   start: 输出“starting 脚本名 finished.

   …

  (2) 其它任意参数,均报错退出;

blob.png

    

5、写一个脚本,判断给定的用户是否登录了当前系统;

  (1) 如果登录了,则显示用户登录,脚本终止;

  (2) 每3秒钟,查看一次用户是否登录;

blob.png

6、写一个脚本,显示用户选定要查看的信息;

   cpu) display cpu info

   mem) display memory info

   disk) display disk info

   quit) quit

   非此四项选择,则提示错误,并要求用户重新选择,只到其给出正确的选择为止;

blob.png

7、写一个脚本

  (1) 用函数实现返回一个用户的UID和SHELL;用户名通过参数传递而来;

  (2) 提示用户输入一个用户名或输入“quit”退出;

    当输入的是用户名,则调用函数显示用户信息;

    当用户输入quit,则退出脚本;进一步地:显示键入的用户相关信息后,再次提醒输出用户名或quit: 

    blob.png

8、写一个脚本,完成如下功能(使用函数)

   (1) 提示用户输入一个可执行命令的名字;获取此命令依赖的所有库文件;

   (2) 复制命令文件至/mnt/sysroot目录下的对应的rootfs的路径上,例如,如果复制的文件原路径是/usr/bin/useradd,则复制到/mnt/sysroot/usr/bin/目录中;

   (3) 复制此命令依赖的各库文件至/mnt/sysroot目录下的对应的rootfs的路径上;规则同上面命令相关的要求; 

blob.png

原创文章,作者:N24_xingxiu,如若转载,请注明出处:http://www.178linux.com/65637

(0)
N24_xingxiuN24_xingxiu
上一篇 2017-01-03 10:13
下一篇 2017-01-03 11:05

相关推荐

  • 14程序包的编译安装

    在有些源代码程序没有被编译成rpm的时候,或者其他人写了一个源代码程序,要把它安装在服务器上要怎么做呢? 那就需要对源代码进行编译安装了。 C代码编译安装三步骤: 1、./configure: (1)通过选项传递参数,指定启用特性、安装路径等;执行时会参考用户的指定以及makefile.in文件生成makefile (2) 检查依赖到的外部环境,如依赖的软件…

    Linux干货 2016-11-27
  • 计算机基础

    计算机系统 计算机系统由两大部分组成硬件系统(Hartware)和软件系统(Software) 硬件系统:主要由中央处理器、存储器、输入输出控制系统和各种外部设备组成。中央处理器是对信息进行高速运算处理的主要部件,其处理速度可达每秒几亿次以上操作。存储器用于存储程序、数据和文件,常由快速的主存储器(容量可达数百兆字节,甚至数G字节)和慢速海量辅助存储器(容量…

    Linux干货 2017-05-20
  • 文本处理(1)

    文本处理工具最全整理上半部

    Linux干货 2018-03-15
  • Google 开源技术protobuf

    1.  Protobuf简介        protobuf是google提供的一个开源序列化框架,类似于XML,JSON这样的数据表示语言,其最大的特点是基于二进制,因此比传统的XML表示高效短小得多。虽然是二进制数据格式,但并没有因此变得复杂,开发人员通过按照一定的语法定义结构化的消息格式,然后送给命令行…

    系统运维 2015-04-04
  • Linux脚本基础练习

    马哥教育网络班+ 第7周课堂练习 Linux脚本基础练习 练习: 1、创建一个10G分区,并格式为ext4文件系统; (1)要求其block大小为2048,预留空间百分比为2,卷标为MYDATA,默认挂载属性包含acl (2)挂载至/data/mydata目录 要求挂载时禁止程序自动运行,且不更新文件的访问时间戳 第一步,在虚拟机中挂载一块20G的新硬盘 &…

    Linux干货 2016-11-09
  • 网卡名称更改

    网卡是计算机进行网络通信的必须的设备。在CentOS6及其更早的系统中,网卡设备在系统中的名称命名为eth#(#为0,1,2…之类的数字)。在内核版本为3.0.0及其以后的Linux发行版中,网卡设备在系统中名称变得很长,变得不好识别以及不利于管理。为了更好的管理,我们将新的网络设备命名改为传统的命名。 网卡名称更改 在CentOS系统中操作 在RHEL7系…

    Linux干货 2016-11-23

评论列表(1条)

  • 马哥教育
    马哥教育 2017-01-04 16:29

    写的很好,如果可以画图来解释一下系统的启动步骤的话会更好,建议写脚本的时候多加一些判断条件