临江网

 找回密码
 点这里注册

QQ登录

只需一步,快速开始

搜索
热搜: 临江老照片

编辑推荐

查看: 1426|回复: 0
打印 上一主题 下一主题

Linux Kernel核心中文手册 14-1

[复制链接]

1368

主题

0

好友

3367

积分

五品

Rank: 6Rank: 6

帖子
1397
积分
3367
注册时间
2007-5-22
跳转到指定楼层
楼主
发表于 2007-7-18 22:59:07 |只看该作者 |正序浏览
代码接上一页(14)

每一个 rtable 数据结构都存放向一个 IP 主机发送报文的路由的信息。 Rtable 数据结构在 IP route 缓存中使用。

参见 include/net/route.h

struct rtable

{

struct rtable *rt_next;

__u32 rt_dst;

__u32 rt_src;

__u32 rt_gateway;

atomic_t rt_refcnt;

atomic_t rt_use;

unsigned long rt_window;

atomic_t rt_lastuse;

struct hh_cache *rt_hh;

struct device *rt_dev;

unsigned short rt_flags;

unsigned short rt_mtu;

unsigned short rt_irtt;

unsigned char rt_tos;

} ;

semaphore

信号灯用于保护重要数据结构和代码区域。

参见 include/asm/semaphore.h

struct semaphore {

int count;

int waking;

int lock ; /* to make waking testing atomic */

struct wait_queue *wait;

} ;

sk_buff

sk_buff 数据结构当网络数据在协议层之间移动的过程中描述网络数据。

参见 include/linux/sk_buff.h

struct sk_buff

{

struct sk_buff *next; /* Next buffer in list */

struct sk_buff *prev; /* Previous buffer in list */

struct sk_buff_head *list; /* List we are on */

int magic_debug_cookie;

struct sk_buff *link3; /* Link for IP protocol level buffer chains */

struct sock *sk; /* Socket we are owned by */

unsigned long when; /* used to compute rtt's */

struct timeval stamp; /* Time we arrived */

struct device *dev; /* Device we arrived on/are leaving by */

union

{

struct tcphdr *th;

struct ethhdr *eth;

struct iphdr *iph;

struct udphdr *uh;

unsigned char *raw;

/* for passing file handles in a unix domain socket */

void *filp;

} h;

union

{

/* As yet incomplete physical layer views */

unsigned char *raw;

struct ethhdr *ethernet;

} mac;

struct iphdr *ip_hdr; /* For IPPROTO_RAW */

unsigned long len; /* Length of actual data */

unsigned long csum; /* Checksum */

__u32 saddr; /* IP source address */

__u32 daddr; /* IP target address */

__u32 raddr; /* IP next hop address */

__u32 seq; /* TCP sequence number */

__u32 end_seq; /* seq [+ fin] [+ syn] + datalen */

__u32 ack_seq; /* TCP ack sequence number */

unsigned char proto_priv[16];

volatile char acked, /* Are we acked ? */

used, /* Are we in use ? */

free, /* How to free this buffer */

arp; /* Has IP/ARP resolution finished */

unsigned char tries, /* Times tried */

lock, /* Are we locked ? */

localroute, /* Local routing asserted for this frame */

pkt_type, /* Packet class */

pkt_bridged, /* Tracker for bridging */

ip_summed; /* Driver fed us an IP checksum */

#define PACKET_HOST 0 /* To us */

#define PACKET_BROADCAST 1 /* To all */

#define PACKET_MULTICAST 2 /* To group */

#define PACKET_OTHERHOST 3 /* To someone else */

unsigned short users; /* User count - see datagram.c,tcp.c */

unsigned short protocol; /* Packet protocol from driver. */

unsigned int truesize; /* Buffer size */

atomic_t count; /* reference count */

struct sk_buff *data_skb; /* Link to the actual data skb */

unsigned char *head; /* Head of buffer */

unsigned char *data; /* Data head pointer */

unsigned char *tail; /* Tail pointer */

unsigned char *end; /* End pointer */

void (*destructor)(struct sk_buff *); /* Destruct function */

__u16 redirport; /* Redirect port */

} ;

sock

每一个 sock 数据结构都存放一个 BSD socket 中和协议相关的信息。例如,对于一个 INET socket ,这个数据结构会存放所有的 TCP/IP 和 UDP/IP 相关的信息

参见 include/linux/net.h

struct sock

{

/* This must be first. */

struct sock *sklist_next;

struct sock *sklist_prev;

struct options *opt;

atomic_t wmem_alloc;

atomic_t rmem_alloc;

unsigned long allocation; /* Allocation mode */

__u32 write_seq;

__u32 sent_seq;

__u32 acked_seq;

__u32 copied_seq;

__u32 rcv_ack_seq;

unsigned short rcv_ack_cnt; /* count of same ack */

__u32 window_seq;

__u32 fin_seq;

__u32 urg_seq;

__u32 urg_data;

__u32 syn_seq;

int users; /* user count */

/*

* Not all are volatile, but some are, so we

* might as well say they all are.

*/

volatile char dead,

urginline,

intr,

blog,

done,

reuse,

keepopen,

linger,

delay_acks,

destroy,

ack_timed,

no_check,

zapped,

broadcast,

nonagle,

bsdism;

unsigned long lingertime;

int proc;

struct sock *next;

struct sock **pprev;

struct sock *bind_next;

struct sock **bind_pprev;

struct sock *pair;

int hashent;

struct sock *prev;

struct sk_buff *volatile send_head;

struct sk_buff *volatile send_next;

struct sk_buff *volatile send_tail;

struct sk_buff_head back_log;

struct sk_buff *partial;

struct timer_list partial_timer;

long retransmits;

struct sk_buff_head write_queue,

receive_queue;

struct proto *prot;

struct wait_queue **sleep;

__u32 daddr;

__u32 saddr; /* Sending source */

__u32 rcv_saddr; /* Bound address */

unsigned short max_unacked;

unsigned short window;

__u32 lastwin_seq; /* sequence number when we last

updated the window we offer */

__u32 high_seq; /* sequence number when we did

current fast retransmit */

volatile unsigned long ato; /* ack timeout */

volatile unsigned long lrcvtime; /* jiffies at last data rcv */

volatile unsigned long idletime; /* jiffies at last rcv */

unsigned int bytes_rcv;

/*

* mss is min(mtu, max_window)

*/

unsigned short mtu; /* mss negotiated in the syn's */

volatile unsigned short mss; /* current eff. mss - can change */

volatile unsigned short user_mss; /* mss requested by user in ioctl */

volatile unsigned short max_window;

unsigned long window_clamp;

unsigned int ssthresh;

unsigned short num;

volatile unsigned short cong_window;

volatile unsigned short cong_count;

volatile unsigned short packets_out;

volatile unsigned short shutdown;

volatile unsigned long rtt;

volatile unsigned long mdev;

volatile unsigned long rto;

volatile unsigned short backoff;

int err, err_soft; /* Soft holds errors that don't

cause failure but are the cause

of a persistent failure not

just 'timed out' */

unsigned char protocol;

volatile unsigned char state;

unsigned char ack_backlog;

unsigned char max_ack_backlog;

unsigned char priority;

unsigned char debug;

int rcvbuf;

int sndbuf;

unsigned short type;

unsigned char localroute; /* Route locally only */

/*

* This is where all the private (optional) areas that don't

* overlap will eventually live.

*/

union

{

struct unix_opt af_unix;

#if defined(CONFIG_ATALK) || defined(CONFIG_ATALK_MODULE)

struct atalk_sock af_at;

#endif

#if defined(CONFIG_IPX) || defined(CONFIG_IPX_MODULE)

struct ipx_opt af_ipx;

#endif

#ifdef CONFIG_INET

struct inet_packet_opt af_packet;

#ifdef CONFIG_NUTCP

struct tcp_opt af_tcp;

#endif

#endif

} protinfo;

/*

* IP 'private area'

*/

int ip_ttl; /* TTL setting */

int ip_tos; /* TOS */

struct tcphdr dummy_th;

struct timer_list keepalive_timer; /* TCP keepalive hack */

struct timer_list retransmit_timer; /* TCP retransmit timer */

struct timer_list delack_timer; /* TCP delayed ack timer */

int ip_xmit_timeout; /* Why the timeout is running */

struct rtable *ip_route_cache; /* Cached output route */

unsigned char ip_hdrincl; /* Include headers ? */

#ifdef CONFIG_IP_MULTICAST

int ip_mc_ttl; /* Multicasting TTL */

int ip_mc_loop; /* Loopback */

char ip_mc_name[MAX_ADDR_LEN]; /* Multicast device name */

struct ip_mc_socklist *ip_mc_list; /* Group array */

#endif

/*

* This part is used for the timeout functions (timer.c).

*/

int timeout; /* What are we waiting for? */

struct timer_list timer; /* This is the TIME_WAIT/receive

* timer when we are doing IP

*/

struct timeval stamp;

/*

* Identd

*/

struct socket *socket;

/*

* Callbacks

*/

void (*state_change)(struct sock *sk);

void (*data_ready)(struct sock *sk,int bytes);

void (*write_space)(struct sock *sk);

void (*error_report)(struct sock *sk);

} ;

socket

每一个 socket 数据结构都存放一个 BSD socket 的信息。它不会独立存在,实际上是 VFS inode 数据结构的一部分

参见 include/linux/net.h

struct socket {

short type; /* SOCK_STREAM, ... */

socket_state state;

long flags;

struct proto_ops *ops; /* protocols do most everything */

void *data; /* protocol data */

struct socket *conn; /* server socket connected to */

struct socket *iconn; /* incomplete client conn.s */

struct socket *next;

struct wait_queue **wait; /* ptr to place to wait on */

struct inode *inode;

struct fasync_struct *fasync_list; /* Asynchronous wake up list */

struct file *file; /* File back pointer for gc */

} ;

task_struct

每一个 task_struct 描述系统中的一个任务或进程

参见 include/linux/sched.h

struct task_struct {

/* these are hardcoded - don't touch */

volatile long state; /* -1 unrunnable, 0 runnable, >0 stopped */

long counter;

long priority;

unsigned long signal;

unsigned long blocked; /* bitmap of masked signals */

unsigned long flags; /* per process flags, defined below */

int errno;

long debugreg[8]; /* Hardware debugging registers */

struct exec_domain *exec_domain;

/* various fields */

struct linux_binfmt *binfmt;

struct task_struct *next_task, *prev_task;

struct task_struct *next_run, *prev_run;

unsigned long saved_kernel_stack;

unsigned long kernel_stack_page;

int exit_code, exit_signal;

/* ??? */

unsigned long personality;

int dumpable:1;

int did_exec:1;

int pid;

int pgrp;

int tty_old_pgrp;

int session;

/* boolean value for session group leader */

int leader;

int groups[NGROUPS];

/*

* pointers to (original) parent process, youngest child, younger sibling,

* older sibling, respectively. (p->father can be replaced with

* p->p_pptr->pid)

*/

struct task_struct *p_opptr, *p_pptr, *p_cptr,

*p_ysptr, *p_osptr;

struct wait_queue *wait_chldexit;

unsigned short uid,euid,suid,fsuid;

unsigned short gid,egid,sgid,fsgid;

unsigned long timeout, policy, rt_priority;

unsigned long it_real_value, it_prof_value, it_virt_value;

unsigned long it_real_incr, it_prof_incr, it_virt_incr;

struct timer_list real_timer;

long utime, stime, cutime, cstime, start_time;

/* mm fault and swap info: this can arguably be seen as either

mm-specific or thread-specific */

unsigned long min_flt, maj_flt, nswap, cmin_flt, cmaj_flt, cnswap;

int swappable:1;

unsigned long swap_address;

unsigned long old_maj_flt; /* old value of maj_flt */

unsigned long dec_flt; /* page fault count of the last time */

unsigned long swap_cnt; /* number of pages to swap on next pass */

/* limits */

struct rlimit rlim[RLIM_NLIMITS];

unsigned short used_math;

char comm[16];

/* file system info */

int link_count;

struct tty_struct *tty; /* NULL if no tty */

/* ipc stuff */

struct sem_undo *semundo;

struct sem_queue *semsleeping;

/* ldt for this task - used by Wine. If NULL, default_ldt is used */

struct desc_struct *ldt;

/* tss for this task */

struct thread_struct tss;

/* filesystem information */

struct fs_struct *fs;

/* open file information */

struct files_struct *files;

/* memory management info */

struct mm_struct *mm;

/* signal handlers */

struct signal_struct *sig;

#ifdef __SMP__

int processor;

int last_processor;

int lock_depth; /* Lock depth.

We can context switch in and out

of holding a syscall kernel lock... */

#endif

} ;

timer_list

timer_list 数据结构用于实现进程的实时计时器。

参见 include/linux/timer.h

struct timer_list {

struct timer_list *next;

struct timer_list *prev;

unsigned long expires;

unsigned long data;

void (*function)(unsigned long);

} ;

tq_struct

每一个任务队列( tq_struct )数据结构都存放正在排队的工作的信息。通常是一个设备驱动程序需要的任务,但是不需要立即完成。

参见 include/linux/tqueue.h

struct tq_struct {

struct tq_struct *next; /* linked list of active bh's */

int sync; /* must be initialized to zero */

void (*routine)(void *); /* function to call */

void *data; /* argument to function */

} ;

vm_area_struct

 

每一个 vm_area_struct 数据结构描述一个进程的一个虚拟内存区

参见 include/linux/mm.h

struct vm_area_struct {

struct mm_struct * vm_mm; /* VM area parameters */

unsigned long vm_start;

unsigned long vm_end;

pgprot_t vm_page_prot;

unsigned short vm_flags;

/* AVL tree of VM areas per task, sorted by address */

short vm_avl_height;

struct vm_area_struct * vm_avl_left;

struct vm_area_struct * vm_avl_right;

/* linked list of VM areas per task, sorted by address */

struct vm_area_struct * vm_next;

/* for areas with inode, the circular list inode->i_mmap */

/* for shm areas, the circular list of attaches */

/* otherwise unused */

struct vm_area_struct * vm_next_share;

struct vm_area_struct * vm_prev_share;

/* more */

struct vm_operations_struct * vm_ops;

unsigned long vm_offset;

struct inode * vm_inode;

unsigned long vm_pte; /* shared mem */

} ;
分享到: QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏0 顶0 踩0

发表回复

高级模式
B Color Image Link Quote Code Smilies
验证码 换一个

回顶部