Bind960P1源代码分析之一@整体架构.docx

Bind960P1源代码分析之一@整体架构.docx

  1. 1、本文档共28页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多

Bind-9.6.0-P1源代码分析之一:整体架构(初稿)

一、说明

参考/lxr/http/source/bin/named/main.c

这是bind解析程序的入口

事件bind程序也事件驱动型,以任务作为主要的执行。

当一个解析请求到来时,就会通过事件的产生来触发任务dispatch处理。这样的处理有相应

if(event-ev_action!=NULL){861

UNLOCK(task-lock);862

(event-ev_action)(task,event);

863

LOCK(task-lock);

这里action就是执行函数

本文主要关注整体的运行结构,主要参考文件是main.c

二、启动入口

870int

871main(intargc,char*argv[]){命令行参数传入以上为设置错误消息

isc_assertion_setcallback(assertion_failed);

isc_error_setfatal(library_fatal_error);

isc_error_setunexpected(library_unexpected_error);

初始化系统日志,权限等

ns_os_init(program_name);

初始化工作

dns_result_register();

dst_result_register();

isccc_result_register();

命令行参数分析,如-g将日志输出到front-end905 parse_command_line(argc,argv);

{注意以下的内存机制,isc_mem可见/lxr/http/source/lib/isc/mem.c#L113定义注意以/lxr/http/source/lib/isc/mem.c#L725

用到了锁机制

830 LOCK(lock);

831 ISC_LIST_INITANDAPPEND(contexts,ctx,link);832 UNLOCK(lock);

833

内存生成采用标准的系统调用malloc和free,但考虑到多线程下的竞争情况,对内存块访问需要锁机制。Ns_g_mctx是信号量,要求ns_g_mctx!=NULL*ns_g_mctx=NULL

}

result=isc_mem_create(0,0,ns_g_mctx);

if(result!=ISC_R_SUCCESS)

ns_main_earlyfatal(isc_mem_create()failed:%s,

isc_result_totext(result));

对设置

isc_mem_setname(ns_g_mctx,main,NULL);924//setup是重要的一部分,见分析三

925 setup();

接下来就是解析主体程序了,是通过循环来做的,直到错误或者接收到退出信号。递

/*

928

*Startthingsrunningandthenwaitforashutdownrequest

929

*orreload.

930

*/

931

do{

932

result=isc_app_run();是重要部分,见分析四

933

934

if(result==ISC_R_RELOAD){//通过我们会做这种操

作,当配置了一个新的zone文件时

935 ns_server_reloadwanted(ns_g_server);936 }elseif(result!=ISC_R_SUCCESS){

937 UNEXPECTED_ERROR( FILE , LINE ,

938 isc_app_run():%s,

939

isc_result_totext(result));940 /*

941 *Forceexit.

942 */

943 result=ISC_R_SUCCESS;

944 }

945 }while(result!=ISC_R_SUCCESS);946

948if(ns_smf_want_disable==1){949result=

948

if

(ns_smf_want_disable==1){

949

result=ns_smf_get_instance(instance,1,

ns_g_mctx);950

if(result==ISC_R_SUCCESSinstance!=NULL)

{

951 if(smf_disable_instance(instance

您可能关注的文档

文档评论(0)

hao187 + 关注
官方认证
内容提供者

该用户很懒,什么也没介绍

认证主体武汉豪锦宏商务信息咨询服务有限公司
IP属地上海
统一社会信用代码/组织机构代码
91420100MA4F3KHG8Q

1亿VIP精品文档

相关文档