solaris启动过程详解

在Sparc平台下,Solaris系统中有一个类似PC BIOS的芯片程序(EEPROM OpenBoot)负责识别分区、文

件系统和加载内核,在Solaris 2.6之后的版本中,默认的内核文件存放在/platform/`arch`/kernel/unix
位置,`arch`指令是指明系统的硬件体系,目前一般是i86pc(Intel IA32)或sun4u(Sun UntraSparc)。

在Intel体系中,因为没有eeprom firmware,所以系统提供了一个模拟eeprom的引导程序,来负责

内核的定位和加载,这个程序是工作在实模式下的,系统必须要给他提供一个fat12/16格式的boot分区,
在系统引导完成之后可以在/boot/solaris下找到他的配置文件。(Solaris IA使用默认内核/kernel/unix)

 

整个系统启动过程如下:
===========================================================================
init 0 openboot模式 -> (引导内核,加载硬件驱动) 可以选择从cdrom引导进入维护模式
|
V
init 1 单用户模式 -> (加载/分区) 登陆进入维护模式,或按Ctrl+D进入多用户模式
|
V
init 2 网络工作站模式 -> (连接网络,运行网络工作站服务) 运行/etc/rc2脚本连接网络
| |
| ->-> 启动S69inet服务,运行部分inetd网络服务
V
init 3 网络服务器模式 -> (运行髦滞绶? 运行/etc/rc3脚本启动网络服务器

<2>启动
Solaris的启动进程是按照SYS V格式控制的,启动过程分为若干个运行级别(S,1-6),当系统内核
运行完毕,加载好所有的驱动之后,就会把控制权移交给/sbin/init进程(PID:1),也就是所有进
程的父进程,然后由init读取/etc/inittab,依次执行/etc/rc1(2,3)启动脚本,最终到达inittab
中指定的默认运行级别。rc脚本会读取/etc/rc*.d中的启动脚本,启动脚本以大写字母S开头,在rc
运行期间就会被执行,S后面的两位数字域决定启动顺序,因为启动进程之间有一定的依赖关系 (以K
开头意味着进入这个级别时,服务将会被杀掉,其余字母开头的被忽略)。

虽然同属于SYSV系统引导方式,但是Solaris的引导过程和我们常见的Linux却有很大差别,并且和

传统Unix的init级别也略有不同。在Linux中,系统运行级别是并行式的,也就是系统加载完内核和
mount /文件系统之后,就会直接跳转到相应的默认运行级别,而不依次执行各个级别的启动脚本。但
在Solaris中,采取了一种串行化的引导方式,就是依次执行init 1/2/3,直到默认运行级别,在每
个级别中的所有启动脚本都会被执行。所以在这里我以一种和传统Unix划分方式不同的说明方法,
把Solaris的启动级别称为: 1,单用户模式 2,网络工作站模式 3,网络服务器模式

下面是/etc中所有的启动运行脚本简要说明
===========================================================================
init inittab rc0 rc1 rc2 rc3 rc5 rc6 rcS init.d
init 系统启动超级进程
inittab 进程启动配置文件
rc0 - rc6 各启动级别的启动脚本
rcS 单用户模式启动脚本
init.d 启动脚本存放目录

rc0.d: eeprom OpenBoot状态,可以进入硬件维护模式,或关闭机器。

rc1.d: 单用户模式,可以对系统进行软件维护。
S01MOUNTFSYS +加载文件系统
S10lu =当运行live update后清理系统

rc2.d: 多用户模式,启动网络工作站服务。 (最后会启动dtlogin允许图形界面工作站)

S01MOUNTFSYS
S05RMTMPFILES + 清空/tmp文件系统
/tmp是系统缓存文件目录,和swap分区共享空间,如果分区满的话会
对系统性能造成很大影响

S10lu =

S20sysetup + 设置系统初始参数

设置hostname等
S21perf = 性能记账服务(无效)
开启accton记账服务,默认无效

S30sysid.net + 配置基本网络参数
设置系统ip地址等

S40llc2 + 启动Class II logical link control driver

逻辑链路控制程序驱动

S42ncakmod = 启动Solaris Network Cache and Accelerator (NCA)

NCA网络缓存加速驱动,可以提高HTTP Server吞吐率

S47pppd - 启动拨号访问服务器进程
串行线拨号访问服务器

S69inet = 启动inetd进程
Internet服务超级进程,配置文件/etc/inetd.conf,启动一系列
服务,如telnet/ftp等

s70uucp - 启动uucp
uucp服务,无用

S71rpc + 启动rpcbind服务
rpcbind (RPC Portmap服务),如果需要CDE的话,这个进程是必需的

S71sysid.sys + 配置一些系统参数

S71ldap.client - 启动LDAP客户端

S72directory - 启动目录服务

S72inetsvc + 启动inet server,包含named/nis

启动名字解析服务,包含named和nis两部分

s72slpd - 启动slpd
打印服务系统的一部分

S72autoinstall = 启动自动安装守护进程
当放入sun兼容的媒体介质时,会自动启动安装脚本

S73cachefs.daemon - 启动cachefsd
NFS缓存服务,可以提高NFS吞吐率

S73nfs.client = 启动nfs客户端
NFS客户端程序

S74syslog + 启动syslog
系统日志守护进程,必需

s74autofs - 启动auto mount fsd
当使用NFS时,这个进程会自动加载或卸载无用的用户网络文件系统
配置文件/etc/auto_home和auto_master
但是当没有使用nfs时,这个进程会对系统管理造成一些负面影响

s74xntpd - 启动网络时间同步服务

S75cron + 启动crontab服务
系统任务自动调度守护进程

S75savecore +

S76nscd + 启动nscd,名字服务缓存
DNS名字缓存服务

S80kdmconfig = 启动kdmconfig
如果系统启动时X-Window配置文件丢失,这个进程会启动X-Window配置

S80spc - 启动lpd打印守护进程
打印服务系统的一部分

s80lp - 启动lpd打印调度守护进程
打印服务系统的一部分

S85lmgrd + 启动flexlm license服务器
Solaris License管理服务器

S85power + 启动电源守护进程

S88utmpd + 启动utmpd

s88sendmail - 启动sendmail

S89PRESERVE =
保留,无效

S90wbem = 启动wbem,基于web的管理界面
WBEM,Solaris系统管理界面服务器,可以使用/usr/sadm/bin/smc
启动客户端程序连接管理

S93cacheos.finish -

S94ncalogd = 启动Solaris Network Cache and Accelerator LOGd

NCA进程日志

S95IIim + 启动输入法守护进程
Solaris国际化支持的一部分,启动东亚语言输入法

S95svm.sync + 启动 devfsadm ,devfs同步进程

监控系统硬件,使/dev与/devices设备文件同步

S99audit + 启动BSM审计进程
Solaris Base Securiey Modula,启动Solaris C2安全审计
默认未启动

S99dtlogin = 启动CDE登录进程
Solaris CDE图形界面启动进程

rc3.d: 多用户模式,启动网络服务器模式
S15nfs.server - 启动nfs服务器
NFS网络文件服务器

S13kdc.master - 启动Kerberos服务器
S14kdc - 启动Kerberos服务器
Kerberos认证服务器

S16boot.server - 启动bootp服务器
boot网络启动服务

S34dhcp = 启动dhcp
DHCP服务器

S50apache - 启动apache服务器

S76snmpdx - 启动snmp服务器
启动SNMP服务,允许远程网络管理

S77dmi - 启动snmp - dmi服务
SNMP子服务

S89sshd + 启动sshd服务器
SSH服务器

S80mipagent - 启动Mobile IP 代理
S90samba - 启动samba服务器
Samba CIFS网络文件服务器

*在上面的启动脚本说明中,第二个域说明服务的必要性,个人的经验总结。
+代表必须服务,系统正常运行必须
=代表可选服务,由用户环境决定
-代表无效,不必要,或不安全的服务

<3>进程
下面是系统启动后的默认进程情况,因为Solaris是一个系统环境相对较稳定的系统,所以每次启动
之后,系统的基本进程和服务情况应该都差不多的,下面是常见的进程和服务说明。
===========================================================================
# ps -el
F S UID PID PPID C PRI NI ADDR SZ WCHAN TTY TIME CMD
19 T 0 0 0 0 0 SY fec287cc 0 ? 0:01 + sched
*系统进程调度
8 S 0 1 0 0 40 20 de7a9808 319 de95ce16 ? 0:00 + init
*init进程
19 S 0 2 0 0 0 SY de7a9108 0 fec4d4b8 ? 0:00 + pageout
*内存换页进程
19 S 0 3 0 2 0 SY de7a8a08 0 fecea0bc ? 0:06 + fsflush
*文件系统同步进程
8 S 0 372 1 0 40 20 de7a8308 448 de955d68 ? 0:00 + sac
*sac监控进程,和ttymon一起提供终端登陆功能
8 S 0 381 355 0 40 20 de7a7c08 1581 de9c80a8 ? 0:01 = dtlogin
*CDE登陆进程
8 S 0 187 1 0 40 20 de7a7508 649 de955ee8 ? 0:00 + cron
*crontab任务调度守护进程
8 S 0 63 1 0 40 20 de7a6e08 680 de95c456 ? 0:00 + sysevent
*??
8 S 0 77 1 0 40 20 de7a6708 730 deb1ccb6 ? 0:02 = picld
*??
8 S 0 129 1 0 40 20 de7a6008 542 de5f083a ? 0:00 + rpcbind
*rpc监控总进程,= portmat
8 S 0 178 1 0 40 20 de7a1810 930 deb1c496 ? 0:00 + syslogd
*syslog系统日志守护进程
8 S 0 152 1 0 40 20 de7a1110 489 de5f077a ? 0:00 = inetd
*internet服务超级守护进程
8 S 0 195 1 0 40 20 de7a0a10 673 debedcd6 ? 0:00 = nscd
*名字服务缓存进程
8 S 1 161 1 0 40 20 de7a0310 613 de5f097a ? 0:00 - statd
*rpc.statd,NFS文件服务状态同步子进程
8 S 0 231 1 0 40 20 de79fc10 338 de79fc7c ? 0:00 = htt
*httd,输入法进程
8 S 0 163 1 0 40 20 de79f510 540 de5f067a ? 0:00 - lockd
*rpc.lockd,NFS文件服务锁状态子进程
8 S 0 208 1 0 40 20 de79ee10 339 debd34d6 ? 0:00 + powerd
*电源管理服务,类似PC的APM
8 S 0 225 224 0 40 20 de79e710 434 de5f05fa ? 0:00 - smcboot
*??MobileIP服务?
8 S 0 215 1 0 40 20 de79e010 275 de5f04ba ? 0:00 + utmpd
*utmp登陆用户监控进程
8 S 0 364 1 0 40 20 de79ca18 945 dee6aea6 ? 0:00 - snmpXdmi
*snmp服务子进程
8 S 0 234 231 0 40 20 de79c318 805 decce876 ? 0:00 = htt_serv
*输入法服务器
8 S 0 362 1 0 40 20 de79bc18 815 dedb0f82 ? 0:00 - dmispd
*??
8 S 0 334 1 0 40 20 de79b518 538 fed1e2de ? 0:00 + auditd
*BSM审计守护进程
8 S 0 400 398 0 40 20 ded93a38 73 ded93aa4 pts/2 0:01 sh
*sh...
8 S 0 397 381 1 40 20 ded93338 2502 dedb0b42 ? 0:02 dtgreet
*CDE服务子进程
8 R 0 398 379 1 50 20 ded92c38 1409 ? 0:02 + sshd
*ssh服务器
8 S 0 382 355 0 40 20 ded92538 583 dedb0e42 ?? 0:00 + fbconsol
*framebuffer显示输出驱动
8 S 0 378 372 0 40 20 ded91738 447 ded62216 ? 0:00 + ttymon
*tty监控服务,和sac一起提供终端登陆功能,类似于其他Unix中的getty
8 S 0 376 352 0 40 20 ded91038 649 deeecbce ? 0:01 - mibiisa
*snmp服务子进程
8 S 0 377 355 1 40 20 ded90840 4467 dedb0d42 ? 0:12 = Xsun
*Solaris X服务器
8 S 0 380 1 0 40 20 ded90140 786 ded62bd6 ? 0:01 + devfsadm
*/dev (devfs)同步进程
8 S 0 355 1 0 40 20 ded8fa40 1245 dedb0cc2 ? 0:00 = dtlogin
*CDE登录守护进程

<4>inetd
inetd进程启动了一系列的系统服务,而在Solaris中因为有很多RPC服务也在inetd中启动,因此
inetd显得特别复杂,而其中的服务大多数都是不必要的 (全部都可以关闭)
===========================================================================
#systat stream tcp nowait root /usr/bin/ps ps -ef
#系统进程监控服务,允许远程察看进程

#netstat stream tcp nowait root /usr/bin/netstat netstat -f inet

#网络状态监控服务,允许远程察看网络状态

#time stream tcp6 nowait root internal

#time dgram udp6 wait root internal
#网络时间服务,允许远程察看系统时间

#echo stream tcp6 nowait root internal

#echo dgram udp6 wait root internal
#网络测试服务,回显字符串

#discard stream tcp6 nowait root internal

#discard dgram udp6 wait root internal
#网络测试服务,丢弃输入

#daytime stream tcp6 nowait root internal

#daytime dgram udp6 wait root internal
#网络测试服务,显示时间

#chargen stream tcp6 nowait root internal

#chargen dgram udp6 wait root internal
#网络测试服务,回应随机字符串

#RPC类服务
#
#100232/10 tli rpc/udp wait root /usr/sbin/sadmind sadmind
#远程系统管理服务

#100083/1 tli rpc/tcp wait root /usr/dt/bin/rpc.ttdbserverd rpc.ttdbserverd

#CDE tooltalk服务

#100221/1 tli rpc/tcp wait root /usr/openwin/bin/kcms_server kcms_server

#Sun KCMS Profile服务

#fs stream tcp wait nobody /usr/openwin/lib/fs.auto fs

#X-Window字体服务器

#100235/1 tli rpc/ticotsord wait root /usr/lib/fs/cachefs/cachefsd cachefsd

#NFS缓存服务

#dtspc stream tcp nowait root /usr/dt/bin/dtspcd /usr/dt/bin/dtspcd

#CDE dtspc服务

#100068/2-5 dgram rpc/udp wait root /usr/dt/bin/rpc.cmsd rpc.cmsd

#CDE cmsd服务

#100229/1 tli rpc/tcp wait root /usr/sbin/rpc.metad rpc.metad

#100230/1 tli rpc/tcp wait root /usr/sbin/rpc.metamhd rpc.metamhd
#100242/1 tli rpc/tcp wait root /usr/sbin/rpc.metamedd rpc.metamedd
#SLVM Mediator系列服务,无用

#printer stream tcp6 nowait root /usr/lib/print/in.lpd in.lpd

#打印机守护进程

#shell stream tcp nowait root /usr/sbin/in.rshd in.rshd

#shell stream tcp6 nowait root /usr/sbin/in.rshd in.rshd
#R远程登录系列服务,rsh
#login stream tcp6 nowait root /usr/sbin/in.rlogind in.rlogind
#R远程登录系列服务,rlogin
#exec stream tcp nowait root /usr/sbin/in.rexecd in.rexecd
#exec stream tcp6 nowait root /usr/sbin/in.rexecd in.rexecd
#R远程登录系列服务,rexec

#comsat dgram udp wait root /usr/sbin/in.comsat in.comsat

#邮件通知服务
#talk dgram udp wait root /usr/sbin/in.talkd in.talkd
#本地通讯服务进程,talk
#finger stream tcp6 nowait nobody /usr/sbin/in.fingerd in.fingerd
#finger守护进程,允许远程查询登陆用户信息

#rstatd/2-4 tli rpc/datagram_v wait root /usr/lib/netsvc/rstat/rpc.rstatd rpc.rstatd

#rpc远程状态查询
#rusersd/2-3 tli rpc/datagram_v,circuit_v wait root /usr/lib/netsvc/rusers/rpc.rusersd rpc.rusersd

#rpc远程用户查询,类似rusers和finger
#walld/1 tli rpc/datagram_v wait root /usr/lib/netsvc/rwall/rpc.rwalld rpc.rwalld

#rpc广播发送,类似wall
#sprayd/1 tli rpc/datagram_v wait root /usr/lib/netsvc/spray/rpc.sprayd rpc.sprayd

#rpc网络吞吐量测试程序

#100234/1 tli rpc/ticotsord wait root /usr/lib/gss/gssd gssd

#GSS声音服务守护进程

#tftp dgram udp6 wait root /usr/sbin/in.tftpd in.tftpd -s /tftpboot

#tftp服务器

#name dgram udp wait root /usr/sbin/in.tnamed in.tnamed

#named,DNS服务器

#telnet stream tcp6 nowait root /usr/sbin/in.telnetd in.telnetd

#telnet服务器

#100155/1 tli rpc/ticotsord wait root /usr/lib/smedia/rpc.smserverd rpc.smserverd

#smedia服务器

#ftp stream tcp6 nowait root /usr/sbin/in.ftpd in.ftpd -a

#ftp服务器

#rexd/1 tli rpc/tcp wait root /usr/sbin/rpc.rexd rpc.rexd

#rpc.rexd ,rpc远程命令执行服务,类似rexec

#100134/1 tli rpc/ticotsord wait root /usr/lib/krb5/ktkt_warnd ktkt_warnd

#Kerberos消息服务

#rquotad/1 tli rpc/datagram_v wait root /usr/lib/nfs/rquotad rquotad

#nfs 磁盘限额服务

#100150/1 tli rpc/ticotsord wait root /usr/sbin/ocfserv ocfserv

#OCF智能卡守护进程

#uucp stream tcp nowait root /usr/sbin/in.uucpd in.uucpd

#uucp服务器

#krb5_prop stream tcp nowait root /usr/lib/krb5/kpropd kpropd

#Kerberos数据库同步进程

时间: 2014-06-19

solaris启动过程详解的相关文章

《嵌入式 Linux应用程序开发标准教程(第2版)》——2.2 Linux启动过程详解

2.2 Linux启动过程详解 嵌入式 Linux应用程序开发标准教程(第2版) 在了解了Linux的常见命令之后,下面详细讲解Linux的启动过程.Linux的启动过程包含了Linux工作原理的精髓,而且在嵌入式开发过程中非常需要这方面的知识. 2.2.1 概述 用户开机启动Linux过程如下: (1)当用户打开PC(intel CPU)的电源时,CPU将自动进入实模式,并从地址0xFFFF0000开始自动执行程序代码,这个地址通常是ROM-BIOS中的地址.这时BIOS进行开机自检,并按BI

Android应用框架之应用启动过程详解_Android

在Android的应用框架中,ActivityManagerService是非常重要的一个组件,尽管名字叫做ActivityManagerService,但通过之前的博客介绍,我们知道,四大组件的创建都是有AMS来完成的,其实不仅是应用程序中的组件,连Android应用程序本身也是AMS负责启动的.AMS本身运行在一个独立的进程中,当系统决定要在一个新的进程中启动一个Activity或者Service时就会先启动这个进程.而AMS启动进程的过程是从startProcessLocked启动的. 1

VxWorks启动过程详解(下)

上一节主要是从映像的分类和各种映像的大致加载流程上看VxWorks的启动过程,这一节让我们从函数级看一下VxWorks的启动过程: 1. Boot Image + Loadable Images:   下面是具体的流程图:  其中第一阶段的执行流程使用的是上图的左边的源文件中的那些函数(romInit->romStart->usrInit->sysHwinit->usrKernelinit->usrRoot);第二阶段执行流程使用的是上图中右边源文件中的那些函数(sysIni

VxWorks启动过程详解(上)

vxworks有三种映像: VxWorks Image的文件类型有三种  Loadable Images:由Boot-ROM引导通过网口或串口下载到RAM  ROM-based Images(压缩/没有压缩):即将Image直接烧入ROM,运行时将Image拷入RAM中运行. ROM-Resident Images:Image的指令部分驻留在ROM中运行,仅将数据段部分拷入RAM. 注意这里说的三种映像都是包含真正操作系统VxWorks的映像,其中后两种可以直接启动并运行起来,但是第一种不行,它

S3C2410下WinCE6.0的启动过程详解

通过前两篇文章的介绍,我们已经知道NBOOT用来引导EBOOT,继而EBOOT加载并引导WinCE操作系统(NK).那么,WinCE6.0的启动过程又是怎样的呢?本文基于S3C2410的平台做一个详细的分析.需要说明的是,WinCE6.0的整个启动过程对于同一类型的MCU来说大同小异,如S3C2410和PXA270同属ARM平台的MCU,所以他们的启动过程是类似的,可以说唯一的不同就在OAL处,而WinCE操作系统的启动正是从OAL开始的.      OAL(OEM Adaptation Lay

Android应用框架之应用启动过程详解

在Android的应用框架中,ActivityManagerService是非常重要的一个组件,尽管名字叫做ActivityManagerService,但通过之前的博客介绍,我们知道,四大组件的创建都是有AMS来完成的,其实不仅是应用程序中的组件,连Android应用程序本身也是AMS负责启动的.AMS本身运行在一个独立的进程中,当系统决定要在一个新的进程中启动一个Activity或者Service时就会先启动这个进程.而AMS启动进程的过程是从startProcessLocked启动的. 1

DOS启动过程详解

电脑刚启动时,要先从某个磁盘上将一些系统程序读入内存后才能正常工作,我们将这个磁盘叫做启动盘. 通常,我们用A盘或C盘作为启动盘,在特殊情况下,硬盘的其它盘符和少数电脑的光盘也可以作启动盘.制作启动盘需要使用sys命令,可以参看后面的命令部分. DOS系统启动时,要先从启动盘中读取两个系统文件IO.SYS.MSDOS.SYS,然后在启动盘的根目录下寻找并执行 CONFIG.SYS.COMMAND.COM.AUTOEXEC.BAT三个文件.其中IO.SYS.MSDOS.SYS和 COMMAND.C

DOS的启动过程详解分析_DOS/BAT

电脑刚启动时,要先从某个磁盘上将一些系统程序读入内存后才能正常工作,我们将这个磁盘叫做启动盘. 通常,我们用A盘或C盘作为启动盘,在特殊情况下,硬盘的其它盘符和少数电脑的光盘也可以作启动盘.制作启动盘需要使用sys命令,可以参看后面的命令部分. DOS系统启动时,要先从启动盘中读取两个系统文件IO.SYS.MSDOS.SYS,然后在启动盘的根目录下寻找并执行 CONFIG.SYS.COMMAND.COM.AUTOEXEC.BAT三个文件.其中IO.SYS.MSDOS.SYS和 COMMAND.C

Android的init过程详解(一)init的初始化

本文使用的软件版本 Android:4.2.2 Linux内核:3.1.10 本文及后续几篇文章将对Android的初始化(init)过程进行详细地.剥丝抽茧式地分析,并且在其中穿插了大量的知识,希望对读者了解Android的启动过程又所帮助.本章主要介绍了与硬件相关初始化文件名的确定以及属性服务的原理和实现. Android本质上就是一个基于Linux内核的操作系统.与Ubuntu Linux.Fedora Linux类似.只是Android在应用层专门为移动设备添加了一些特有的支持.既然An