一、0S(内核的功能):平台类软件(通用软件)

进程管理:进程调度器(scheduler)维持一个任务结构(task_struct)

内存管理:如何使用线性地址空间,如何分段,如何分页,如何避免内存(页内,页外)碎片等

I/O管理:给设备提供驱动程序,以及让各设备注册I/O,完成中断

文件系统:ext4,reiserfs,xfs

驱动程序:驱动硬件设备

安全相关:SELinux,加密解密库

二、内核设计的两大流派

1、单内核设计(单一体系结构):将所有功能都做成一个整体在内核中

Linux是单内核(兼具微内核的特性):

模块化设计:核心+外围功能性模块组成

.ko:kernel object

内核支持动态装卸载模块

2、微内核(多体系结构):将各功能做成内核子系统

Windows是微内核:更适合线程类的编程

3、进程由fork()而来,而init负责管理用户空间的进程,这也是之所以init的PID(进程ID)号永远为1的原因,/sbin/init可执行文件

三、Linux系统的初始化流程

1、POST(Power On Self Test)加电自检:ROM+RAM

2、BIOS:Boot Sequence(启动次序)

3、MBR:

前446KB:bootloader

LILO:Linux Loader

不能引导位于1024 Cylinder以后的分区中的OS

GRUB:GRand Unified Bootloader

1st stage:位于MBR中,为了引导2nd stage

1.5 stage:位于boot基本磁盘分区中,为识别内核文件所在的文件系统提供文件系统识别扩展

2nd stage:位于boot基本磁盘分区中,GRUB的引导程序

boot分区大小:

CentOS5:100M

CentOS6:200M

Grub的功能:

选择要启动的内核或系统

交互式接口

基于密码的保护

grub.conf配置文件语法:

default=#:指定默认启动的内核或OS

timeout=#:等待用户选择要启动的内核或OS的时长,单位为秒

splahimage=/path/to/splashimage_file:指定使用的背景图片

hiddenmenu:隐藏菜单

title

root(hd0,0)

(Device,Part)

Device表示方式:在gurb中,全部以hd开头,并紧跟一个数字做各磁盘设备的标记,从0开始编号

Part:表示方式,代表分区,从0开始编号

kernel

指定内核文件及传递给内核的参数

参数:ro root=/path/to/DEVICE quiet(初始化信息以静默模式,不再输出)

initrd

文件:通常为cpio归档,并使用gzip压缩;通常以img作为文件名后缀

grub的安装:

第一种方式:

# grup

grub> root (hd#,#)

grub> setup (hd#)

grub> quit

第二种方式:

# chroot /mnt/sysimage

# grub-install --root-directory=/ /dev/sda(指磁盘)

然后64KB:分区表

最后2KB:5A(特殊标记,用来表示分区表是否有效)

kernel文件:必须要放在基本磁盘分区上(CentOS5:initrd,CentOS6:initramfs)

4、/sbin/init

/lib/modules

initrd:

rd:ram disk,把内存当做磁盘来使用

/sbin/init:

/etc/inittab

/etc/rc.d/rc.sysinit脚本

(CentOS5:/etc/inittab,CentOS6:/etc/init/*.conf)

init:

CentOS 5:SysV格式的系统初始化程序

串行化:A --> B --> C

需要A启动完成后才能启动B,B启动完成后才能启动C

CentOS 6:Upstart并不兼容SysV

基于dbus通信

并行初始化:A启动了不用等到A启动完成就启动B

/etc/inittab中定义的操作:

设定默认运行级别

指定系统运行的初始脚本

启动指定级别下的要启动的服务,并关闭需要停止的服务

/etc/init.d/

/etc/rc.d/rcN.d(0-6)

S##

K##

定义Ctrl+Alt+Delete组合的动作

初始化字符终端

终端:对应的设备

/dev/tty#,/dev/ttyS#,/dev/console,/dev/pts/#

调用:login-->/etc/issue

启动图形终端

X-Window,调用桌面管理器

CentOS 7:SystemD参考了OS X中并行初始化的特性,又能完全兼容SysV

5、系统初始化脚本/etc/rc.d/rc.sysinit

设置主机名

打印文本欢迎信息

激活SELinux和udev

激活swap

挂载/etc/fstab定义的本地文件系统

检测根文件系统并对其以读写方式重新挂载

设置系统时钟

挂载键盘映射

根据/etc/sysctl.conf设置内核参数

激活RAID和LVM设备

清理操作

Linux系统初始流程的更多相关文章

  1. 9.Linux系统引导流程

    一.Linux系统引导流程 当我们按下主机电源键的那时候开始,主板上的CMOS/BIOS模块将进行固件自检,以此检查各个硬件是否正确连接. 在Linux引导流程中,一般可以分为以下几个主要过程: 1. ...

  2. 使用VM虚拟机安装Linux系统详细流程

    最近新换了个电脑,所以需要重新安装虚拟机和Linux系统,话不多说,看流程吧 1.安装vm,这个就不说了,打开VM 2.点击安装虚拟机 3.选择自定义安装 4.选择稍后安装 5.选择要安装的系统 6. ...

  3. linux系统开机流程详解

    今天,我们主要来谈谈计算机系统的启动流程 1.BIOS启动 BIOS是写入到主板上的一个韧体(韧体就是写入到硬件上的一个软件程序).开机的时候,BIOS是计算机系统会主动执行的第一个程序.BIOS主要 ...

  4. linux系统引导流程

    1.固件:硬件和软件结合.加电自检是我们按下电源会检测硬件像cpu.内存.网卡等信息.(从硬件层次检测硬件是否可用) 固件设置实例:设置时间 软件时间和硬件时间: [root@VM_0_12_cent ...

  5. Linux系统初始化流程

    POST-->BIOS(Boot Sequence)-->MBR(bootloader)-->Kernel(initrd)-->/sbin/init(/etc/inittab) ...

  6. Linux系统初始配置标准化

    Inux系统标准化 配置环境:4台Centos7.6版本的虚拟机,刚刚最小化安装完成,未作任何操作,分别是node1.node2.node3.node4 本文打算利用ansible工具对这四台虚拟机进 ...

  7. Linux——系统引导流程学习简单笔记

    开启电源: 固件 firmware(CMOS/BIOS) → POST 加电自检 对硬件就行检查 ↓ 自举程序 BootLoader(GRUB) → 载入内核 ↓ 载入内核 Kernel 1:驱动硬件 ...

  8. linux系统开机流程

    基本步骤:上电->bios->MBR引导->GRUB菜单->加载内核->运行init进程初始化->启动/etc/rc.d*脚本与相关配置文件->执行rc.lo ...

  9. Linux系统开机启动流程

    (来源学习Linux时,自己做的笔记) Linux系统有7个运行级别(runlevel)运行级别0:系统停机状态,系统默认运行级别不能设为0,否则不能正常启动运行级别1:单用户工作状态,root权限, ...

随机推荐

  1. CDH5.4.5运行Phoenix导入CSV文件

    1.安装phoenix 在界面上设置Phoenix的parcel包: http://52.11.56.155:7180/cmf/settings?groupKey=config.scm.parcel. ...

  2. 嵌入式 python异常except语句用法与引发异常 zz

    http://blog.sina.com.cn/s/blog_8795b0970101dj0a.html

  3. Plupload上传组件 + javaweb实现上传源码以及DEMO

    Plupload 是一个Web浏览器上的界面友好的文件上传模块,可显示上传进度.图像自动缩略和上传分块.可同时上传多个文件: 上网找了很多Plupload的DEMO都无法正常使用, 而且Pluploa ...

  4. Asp.net MVC 数据注解与验证

    数据注解特性定义在名称空间System.ComponentModel.DataAnnotations中(有些特性定义在其他名称空间中),它们提供了服务器端验证的功能,当在模型的属性上使用这些特性时,框 ...

  5. jQuery初级篇(一)

    知识说明: jQuery库是一个javascript库文件,它比起javascript来,写的更少,但做得更多,下面便对刚开始学习jQuery,一些基础知识整理出来,供后期翻阅. 一.      jQ ...

  6. C#中(int)、int.Parse()、int.TryParse()和Convert.ToInt32()的区别 <转>

    作者:Statmoon 出处:http://leolis.cnblogs.com/   在编程过程中,数据转换是经常要用到的,C#中数据转换的方法很多,拿将目标对象转换为整型(int)来讲,有四种方法 ...

  7. c++程序员必知的几个库

    c++程序员必知的几个库 1.C++各大有名库的介绍——C++标准库 2.C++各大有名库的介绍——准标准库Boost 3.C++各大有名库的介绍——GUI 4.C++各大有名库的介绍——网络通信 5 ...

  8. MyEclipse中直接打开class文件的方法

    安装步骤: 1>下载jad.exe(这是一个class文件的反编译工具,但是是命令行运行编译,使用起来不是很方便:), 将其拷贝到%JAVA_HOME%/bin目录下(其他目录也可). 2> ...

  9. ubuntu下安装配置OpenCV

    Cmake的安装 我用的是ubuntu-software自动下载安装的. Ubuntu 下安装 OpenCV 首先下载安装相关包,然后下载OpenCV 系统:ubuntu16.04 OpenCV:2. ...

  10. ECMAScript6 中 类的封装与继承

    ECMASCRIPT6中实现了class关键字,这样使我们更容易也更形象的进行类的操作 <script type="text/javascript"> class OF ...