什么是 daemon 与服务 (service)
如果您常常上网去查看一些资料的话,尤其是关于 Unix-Like 的相关作业系统,如
FreeBSD, Unix, Linux 等等,应该会常常听到 daemons 这个字眼,那么 daemon
是什么东西呀!?怎么这么常被见到?呵呵,Daemon 的字面上的意思就是『守护神、恶魔?』还真是有点奇怪呦!
^_^""
先来谈一谈 daemon 这个玩意儿是个啥咚咚?还记得我们在 程序与资源管理
一文当中提到过程序的概念,程序有的在 bash 当中执行程式而触发的,也有开机的时候,
系统自行触发而在背景当中执行的。当然也有系统管理员在开机完成后,登入系统来触发的等等。
不论怎么说,这个 daemon 其实就是一个『在背景当中执行的程序』啦!
比较特殊的是,所谓的 daemon 通常是负责系统上面的某个服务 (service) ,
好让系统可以接受来自使用者或者是网路用户端(client)的要求,而加以工作。
那么什么又是服务 (service)?所谓的服务很简单啦,意思是说,主机提供的功能。
这些功能主要分为系统上面的,以及针对网路的服务。针对系统上面的服务,例如我们第四篇提到的 crond
与 atd 等等,他主要负责 Linux 主机上面的工作排程;至于网路服务呢?
包括远端连线 SSH 伺服器,或者是全球资讯网 WWW 伺服器等等,这些让用户端连接上来取得资料的服务,
就是网路服务啦!
那您了解了,之所以要有主机伺服器就是希望他可以提供我们一些网路服务,或者是主机端自己的服务,
好让我们使用者或者是一般用户可以工作的更愉快!而主机要提供这些服务,必须要有相对应的 daemon
来进行服务需求的监听,例如要提供工作排程的服务,就得要有 atd 或者是 crond 这两个 daemon 才行;
而 daemon 的启动,其实就是某个程式 (program) 的执行,配合这个程式的设定档,
就能够有效的启动该程式,载入常驻到记忆体当中成为 daemon ,并提供相对的服务棉!
一般来说,当我们以 run level 3 或者是 run level 5 完整开机进入 Linux 主机后,
系统已经提供我们很多的服务了!包括列印服务、工作排程服务、邮件管理服务等等;
那么这些服务是如何被启动的?他们的工作型态如何?底下我们就来谈一谈棉!
Tips: 很多时候,我们不会很细的去切分什么是 daemon 而什么是 service,
简单的来说,你可以将 service 与 daemon 视作相同的东西!
反正就是某个在背景当中执行的程式,他可以提供某些功能就是了! ^_^
|
|
daemon 的主要分类
如果依据 daemon 的启动与管理方式,基本上,可以将 daemon 分为可独立启动的 stand alone ,
与透过统一安全机制管理的 Super daemon 两大类,这两类 daemon 的说明是这样的∶
stand_alone∶
就字面上的意思来说,stand alone 就是『独立的启动』的意思,也就是说,该
daemon 启动之后,就直接常驻在记忆体当中棉!他虽然会一直的占用系统的资源,
但最大的优点就是,他会一直启动的啦!所以当有要求来的时候,他就会很快速的回应棉!常常用在这一种
daemon 的网路服务如常见的全球资讯网 WWW 的 daemon (httpd) 这一个即是一例!
因为他需要比较快的回应速度啊!
super daemon∶
相对于 stand alone 的执行方式,这一种服务的启动方式则是藉由统一的一个 daemon
来负责唤起该服务!这一个统一负责的
daemon 就是 inet 这支服务啦!不过,在后来的 Linux 发展套件中,则是使用
xinet 这个设定棉!我们这里以 FC4 的 xinet 来做说明。当有网路的服务要求来的时候,该要求会先送给
xinet 这个服务,然后 xinet 根据该网路要求送来的资料封包的内容 ( 该内容会记录
IP 与 port ) 来将资料封包送给实际运作的服务!而该服务这个时候才会启动的!最常见到的就是
ftp 这支网路服务啦!
这种 daemon 最大的优点就是当没有资料封包来的时候,该服务不会一直占据系统资源
( 该服务会在 sleeping 的状态吧! ) ,但是相对的,他的反应时间也会比较慢,
因为还要花费一段时间去『唤醒』该服务呀!
那么这两种启动的方式哪一个比较好呢?见仁见智啦!而且还要看该主机的工作负荷与实际的用途说!
例如当你的主机是用来作为
WWW 伺服器的,那么 httpd 自然就以 stand alone 的启动方式较佳!事实上,我们常常开玩笑的说明
stand alone 与 super daemon 的情况,可以银行的窗口来作为说明的范例!
stand alone ∶
在银行里面,假设有一种单一服务的窗口,例如存钱窗口,所以,当你需要存钱的时候,
直接前往该窗口,就有『专人』为您服务啦!
super daemon ∶
在银行里面假设还有另外一种复合型态的窗口,同时提供转帐、资金调度、
提款等等的业务,那当你需要其中一项业务的时候,就需要前往该窗口,
但是坐在窗口的这个营业员,拿到你的需求单之后,往后面一丢『喂!那个转帐的仁兄!该你的工作了』
那么那个仁兄就开始工作去!然而里头还有资金调度与提款等负责业务的仁兄呢?他们在干嘛?
嘿嘿!看看报、喝喝茶棉!
那么这里就会引出另外一个问题啦!假设银行今天的人潮特别的汹涌,
所以这个窗口后面除了你之外还有很多的人!那么想一想,这个窗口是要『一个完成再来下一个』
还是『全部都把你们的单据拿来,我全部处理掉』呢?呵呵!是不是不太一样?基本上,
针对这种 super daemon 的处理模式有两种,分别是这样∶
- multi-threaded∶
就是我们提到的,全部的客户之要求都给他拿来,一次给他交办下去,所以一个服务同时会负责好几个程序。
- single-threaded∶
这个就是目前我们『人类的银行』最常见的方式啦,不论如何,反正一个一个来,
第一个没有处理完之前,后面的请排队!嘿嘿!所以如果
client 的要求突然大增的话,那么这些晚到的 client 可得等上一等!
另外,需要注意的是,既然银行里头有这两种窗口同时存在,所以棉,在 Linux
系统里面,这两种 daemon 是可以同时存在的啦!也就是说,某些服务可以使用
stand alone 来启动,而有其他的服务则可以使用 xinet ( 或者是 inet )
大致的情况就是这样啦!了乎!?
不过,如果以 daemon 的工作状态来区分,则主要分为两类∶- signal-control
这种 daemon 是透过讯号来管理的,只要有任何需求进来,他就会立即启动去处理!
例如印表机的服务 (cupsd)
- interval-control
这种 daemon 则主要是『每隔一段时间就主动的去执行某项工作』,
所以,即使你设定好设定档之后,他也不会立刻执行,而是某个时间点才会去工作。举例来说,
atd 与 crond 就是这种 (每分钟执行一次!)
另外,如果您对于开发程式很有兴趣的话,那么可以自行查阅一下『 man 3 daemon 』
看看系统对于 daemon 的详细说明吧! ^_^。
阅读(3456) | 评论(0) | 转发(0) |