开源人linux系统运维培训中心

1.2. 自然语言和形式语言

自然语言(Natural Language)就是人类讲的语言,比如汉语、英语和法语。这类语言不是人为设计(虽然有人试图强加一些规则)而是自然进化的。形式 语言(Formal Language)是为了特定应用而人为设计的语言。例如数学家用的数字和运算符号、化学家用的分子式等。编程语言也是一种形式语言,是专门设计用来表达计算过程的形式语言。...

   时间 : 2016-03-30 | 浏览 : 380 次 [阅读全文]

11.12 本章小结

本章梳理了Nginx服务器程序中涉及的重要基础数据结构体。ngx_module_s结构体涉及模块组织,ngx_command_s和 ngx_conf_s结构体涉及指令解析,ngx_pool_s结构体是内存管理的主要结构,nginx_connection_s和 ngx_signal_t结构体分别涉及网络管理和信号管理,它们与进程间通信也...

   时间 : 2016-03-29 | 浏览 : 369 次 [阅读全文]

11.11 ngx_process_t结构体

该结构体是Nginx服务器程序用于存放工作进程信息的数据结构,每一个工作进程对应一个这样的结构体,所有的结构体构成一个ngx_process_t结构数组,也就是Nginx服务器的进程表。 我们在/nginx/src/os/unix/ngx_process.c文件中可以找到该结构体的定义:     ...

   时间 : 2016-03-29 | 浏览 : 463 次 [阅读全文]

11.10 ngx_signal_t结构体

Nginx服务器的启动、停止和升级都是通过信号控制的。在下一章中,我们会学习到信号控制源码的相关知识,因此在这里需要先介绍一下Nginx服务器程序存放信号信息的ngx_signal_t结构体。 该结构体的定义我们在/nginx/src/os/unix/ngx_process.c文件中可以找到:   &nbs...

   时间 : 2016-03-29 | 浏览 : 442 次 [阅读全文]

11.9.2 指令类型type

这里提到的指令类型和ngx_command_s结构体中的type含义不同。Nginx程序中的指令有哪些类型呢?它们以宏的形式定义在不同的源码头文件中。我们在/nginx/src/core/ngx_conf_file.h文件中可以找到:       #define NGX_DIRECT_CON...

   时间 : 2016-03-29 | 浏览 : 431 次 [阅读全文]

11.9.1 配置上下文*ctx

我们在第3章中就已经学习过,Nginx的配置文件是分块配置的,常见的有http块、server块、location块以及upsteam块和mail块等。每一个这样的配置块代表一个作用域。高一级配置块的作用域包含了多个低一级配置块的作用域,也就是有作用域嵌套的现象。这样,配置文件中的许多指令都会同时包含在多个作用域内。比如,http块中的指...

   时间 : 2016-03-29 | 浏览 : 425 次 [阅读全文]

11.9 ngx_conf_s结构体

该结构体用于Nginx在解析配置文件时描述每个指令的属性,也是Nginx程序中非常重要的一个数据结构,我们在/nginx/src/core/ngx_conf_file.h文件中可以找到它的定义:       struct ngx_conf_s  {    &n...

   时间 : 2016-03-29 | 浏览 : 401 次 [阅读全文]

11.8 ngx_cycle_s结构体

该结构体是Nginx程序启动过程中使用的主要结构体。Nginx程序启动的核心过程基本上是围绕该结构体开始的。我们在/nginx/src/core/ngx_cycle.h文件中可以找到该结构体的完整定义:     struct ngx_cycle_s {      ...

   时间 : 2016-03-29 | 浏览 : 408 次 [阅读全文]

11.7 ngx_connection_s结构体

该结构体用于描述一个网络连接。我们已经知道,Nginx服务器使用事件驱动模型来处理网络连接请求。每当Nginx服务器产生一个新的socket时,就会构造一个ngx_connection_s结构体,将该socket的属性和数据信息保存下来。该结构体的完整定义在/nginx/src/core/ngx_connection.h文件中可以找到,其...

   时间 : 2016-03-29 | 浏览 : 451 次 [阅读全文]

11.6 ngx_event_s结构体

该结构体存储了网络连接IO(事件)状态的详细信息。在Nginx中,所有的ngx_event_s结构体组成了两个全局链表:一个完成连接读操作的描述,另一个完成连接写操作的描述。该结构体定义在文件/nginx/src/event/ngx_event.h中:       struct ngx_ev...

   时间 : 2016-03-29 | 浏览 : 422 次 [阅读全文]

11.5.3 ngx_http_conf_addr_t结构体

在学习ngx_http_conf_port_t结构体时,我们将监听端口相同的地址存放在一个数组中,数组的每个监听地址配置信息都存放在一个ngx_http_conf_addr_t结构体中,包括监听的所有server块的ngx_http_core_srv_conf_t结构,以及hash、wc_head和wc_tail这些hash结构。该结构体...

   时间 : 2016-03-29 | 浏览 : 404 次 [阅读全文]

11.5.2 ngx_http_conf_port_t结构体

该结构体用于描述监听端口的配置信息,定义在文件/nginx/src/http/ngx_http_core_module.h中:     typedef struct {           ngx_int_t &...

   时间 : 2016-03-29 | 浏览 : 394 次 [阅读全文]

11.5.1 ngx_listening_s结构体

该结构体用于描述Nginx服务器在运行过程中使用的网络套接字socket的详细属性信息。每个这样的结构体会对应Nginx配置中配置的多个虚拟主机,以及对应一个ngx_connection_s结构体。该结构体的完整定义在/nginx/src/core/ngx_connection.h文件中可以找到,成员比较复杂,我们只介绍与后面学习相关的重...

   时间 : 2016-03-29 | 浏览 : 368 次 [阅读全文]

11.5 Nginx socket相关的数据结构

与Nginx服务器网络套接字socket操作有关的基本数据结构有三个结构体:分别是ngx_listening_s结构体、 ngx_http_conf_addr_t结构体和ngx_http_conf_port_t结构体。我们在本章首先学习这三个数据结构的重要成员组成, 在本书后面的相关章节,会详细学习Nginx服务器网络套接字socke...

   时间 : 2016-03-29 | 浏览 : 384 次 [阅读全文]

11.4.3 ngx_pool_cleanup_s结构体

ngx_pool_s结构体中的* cleanup成员指向用于内存回收的链表。ngx_pool_cleanup_s结构体的定义在文件/nginx/src/core/ngx_palloc.h中也可以找到:       struct ngx_pool_cleanup_s {   &nb...

   时间 : 2016-03-29 | 浏览 : 367 次 [阅读全文]

11.4.2 ngx_pool_large_s结构体

ngx_pool_s结构体中的*large成员指向一个链表。ngx_pool_large_s结构体的定义在/nginx/src/ core/ngx_palloc.h中可以找到:       struct ngx_pool_large_s {      ...

   时间 : 2016-03-29 | 浏览 : 330 次 [阅读全文]

11.4.1 ngx_pool_data_t结构体

该结构体中d成员的结构体类型ngx_pool_data_t描述了该内存块中数据的存储结构,也就是每个链表节点具体存储数据的结构,它们形成了Nginx内存池的主体链表结构。其定义在文件/nginx/src/ core/ngx_palloc.h中可以找到:       typedef struc...

   时间 : 2016-03-29 | 浏览 : 368 次 [阅读全文]

11.4 ngx_ pool_s结构体

Nginx对内存的管理是通过自身实现的内存池结构来完成的。内存池实际上是一个链表结构,由多块小的内存块通过链表的形式组成。ngx_pool_s结构体用来描述内存池的管理分配。结构体中可以包括内存数据块、大体积内存数据块指针、用于内存回收的cleanup指针等重要链表结构。可以在/nginx/src/core/ngx_palloc.h中...

   时间 : 2016-03-29 | 浏览 : 370 次 [阅读全文]

11.3.3 mail模块

这一模块在指令集的定义形式上与http模块是完全相同的。对mail指令的解析处理依据/nginx/ src/mail/ngx_mail.c文件中的以下指令集数组进行:       static ngx_command_t  ngx_mail_commands[] = {  ...

   时间 : 2016-03-29 | 浏览 : 323 次 [阅读全文]

11.3.2 event模块

这一模块的指令集与上一模块的指令集在处理方式上基本相同。由于event模块中不会再嵌套其他模块,因此定义的指令集包括两部分,一部分是对events指令的定义,另一部分是对event模块内指令集的定义。 在解析配置文件时,遇到"events{"指令,Nginx服务器程序依据以下指令集数组对该条指令进行解析:   &n...

   时间 : 2016-03-29 | 浏览 : 331 次 [阅读全文]

11.3.1 http模块

http模块定义的指令集数组在/nginx/src/http/ngx_http.c文件中可以找到:     static ngx_command_t  ngx_http_commands[] = {         &nb...

   时间 : 2016-03-29 | 浏览 : 336 次 [阅读全文]

11.3 3个基本模块的指令集数组结构

在Nginx服务器程序中,不同的模块基于ngx_command_t结构体定义了各自的指令集数组。为了学习方便,我们将http、event和 mail模块的指令集数组结构归纳一下。对于其他模块,比如前面章节中提到的http类ngx_http_gzip_module模块、 ngx_http_rewrite_module模块和ngx_htt...

   时间 : 2016-03-29 | 浏览 : 302 次 [阅读全文]

11.2.3 conf和offset

这两个成员都是用来配置偏移量的。我们知道set指针指向的函数一般要转换指令的参数并将转换后的值保存到配置结构体中,offset就是用来指定该值保存在配置结构体中的具体位置的。该值一般是Nginx程序通过调用offsetof()函数计算得出的。 conf成员用来指定配置文件结构体中各其他类型指令配置结构体在该结构体中的偏移量。Ngin...

   时间 : 2016-03-29 | 浏览 : 332 次 [阅读全文]

近期评论