Chinaunix首页 | 论坛 | 博客
  • 博客访问: 1366797
  • 博文数量: 245
  • 博客积分: 10021
  • 博客等级: 上将
  • 技术积分: 3094
  • 用 户 组: 普通用户
  • 注册时间: 2008-05-12 14:51
文章存档

2011年(2)

2009年(152)

2008年(91)

我的朋友

分类: LINUX

2009-02-13 15:14:19

什么是 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 的详细说明吧! ^_^。

    阅读(3437) | 评论(0) | 转发(0) |
    给主人留下些什么吧!~~