1. 图文并茂说明Linux进程概念
进程的含义:将程序动态的运行起来,就转成进程,(即程序的执行过程)过程: 包含进程的创建,进程的运行以及进程消亡。
进程一般由程序、数据集合和进程控制块三部分组成。
进程一般包含两种,前台进程和后台进程。
内存:是运行进程的空间,CPU待处理的数据和运行的程序暂时存储的空间。
下图是Linux的进程状态运行顺序图:
(1)主进程
centos7中linux第一个进程是systemd,所有的父进程都归systemd管。
(2) 父进程
运行一个程序就会出现一个进程,这个进程就是父进程,所有的父进程归主进程(systemd)管,父进程不处理具体的业务
(3) 子进程
父进程会产生一个或多个子进程来处理请求和业务,待子进程处理完成任务后,关闭子进程,回收分配给子进程的系统资源(cpu,内存....)
(4) 僵尸进程
僵尸进程是一个不好的进程,也不处理业务,也不告知父进程回收系统资源。僵尸进程可以通过关闭父进程来间接的关闭僵尸进程。
(5) 孤儿进程
也是一个不好的进程,父进程故障了,子进程无父进程管理,由systemd主进程直接接管。
(6)守护进程
持续运行的进程,一般是系统必须运行的服务,例如:network和sshd服务。
另外几个常见的查看进程的命令:ps -e
top命令:
ps aux
2.Linux内存概念:
下图是进程中的内存分布图:
代码区
程序(函数)代码所在,由编译而得到的二进制代码被载入至此.代码区是只读的!有执行权限.值得注意的是,字符串字面值(如"Hello World")就存储在这个区。- 数据段和BSS段
合称静态区(全局区),用来存储静态(全局)变量.区别是 前者(数据段)存储的是已初始化的静态(全局)变量,可读写.后者(BSS段)存储的是未初始化的静态(全局)变量,可读写. 堆
自由存储区.不像全局变量和局部变量的生命周期被严格定义,堆区的内存分配和释放是由程序员所控制的。栈
由系统自动分配和释放.存储局部(自动)变量。下图所示为内存调用及执行过程中总共出现的五种状态:创建状态--就绪状态--阻塞状态-执行状态--终止状态。
linux查看内存的常用命令举例:
3.Linux的启动流程详解:
先通过一张图来简单了解下整个系统启动的流程,整个过程基本可以分为POST-->BIOS-->MBR(GRUB)-->Kernel-->Init-->Runlevel。下面会详细说明每个过程的作用。
核心要素:
启动加载器 bootloader
bootloader: 引导加载器,它是一个引导程序,仅是启动OS,提供菜单,允许用户选择要启动系统或不同的内核版本;把用户选定的内核装载到内存中的特定空间中,解压、展开,并把系统控制权移交给内核Linux中的bootloader。
GRUB的启动阶段:
1st stage:MBR的前446个字节(放不了文件系统的驱动,因为没进操作系统)
1.5 stage:MBR 之后的扇区,让stage1中的bootloader能识别stage2所在的分区上的文件系统
secondary boot loader :2nd stage,分区文件/boot/grub/
GRUB的版本: GRand Unified Bootloader, CentOS 5,6 GRUB 0.97: GRUB Legacy, CentOS 7 以后使用GRUB 2.0。
CentOS6启动流程:
(1) 加载BIOS的硬件信息,获取第一个启动设备
(2) 读取第一个启动设备MBR的引导加载程序(grub)的启动信息
(3) 加载核心操作系统的核心信息,核心开始解压缩,并尝试驱动所有的硬件设备
(4) 核心执行init程序,并获取默认的运行信息
(5)init程序执行/etc/rc.d/rc.sysinit文件,重新挂载根文件系统
(6)启动核心的外挂模块
(7)init执行运行的各个批处理文件(scripts)
(8) init执行/etc/rc.d/rc.local
(9)执行/bin/login程序,等待用户登录
(10)登录之后开始以Shell控制主机
CentOS7及centos7之后的系统版本启动流程:
(1) UEFi或BIOS初始化,运行POST开机自检
(2) 选择启动设备
(3) 引导装载程序, centos7是grub2,加载装载程序的配置文件:
/etc/grub.d/
/etc/default/grub
/boot/grub2/grub.cfg
(4) 加载initramfs驱动模块
(5) 加载内核选项
(6)内核初始化,centos7使用systemd代替init
(7) 执行initrd.target所有单元,包括挂载/etc/fstab
(8) 从initramfs根文件系统切换到磁盘根目录
(9) systemd执行默认target配置,配置文件/etc/systemd/system/default.target
(10)systemd执行sysinit.target初始化系统及basic.target准备操作系统
(11) systemd启动multi-user.target下的本机与服务器服务
(12) systemd执行multi-user.target下的/etc/rc.d/rc.local
(13) Systemd执行multi-user.target下的getty.target及登录服务
(14)systemd执行graphical需要的服务