Linux核心数据结构
block_dev_struct
向核心登记块设备,它还被buffer cache实用 所有此类结构都位于blk_dev数组中
struct blk_dev_struct {
void (*request_fn)(void);
struct request * current_request;
struct request plug;
struct tq_struct plug_tq;
};
buffer_head
关于buffer cache中一块缓存的信息
#define BH_Uptodate 0
#define BH_Dirty 1
#define BH_Lock 2
#define BH_Req 3
#define BH_Touched 4
#define BH_Has_aged 5
#define BH_Protected 6
#define BH_FreeOnIO 7
struct buffer_head {
unsigned long b_blocknr;
kdev_t b_dev;
kdev_t b_rdev;
unsigned long b_rsector;
struct buffer_head *b_next;
struct buffer_head *b_this_page;
unsigned long b_state;
struct buffer_head *b_next_free;
unsigned int b_count;
unsigned long b_size;
char *b_data;
unsigned int b_list;
unsigned long b_flushtime;
unsigned long b_lru_time;
struct wait_queue *b_wait;
struct buffer_head *b_prev;
struct buffer_head *b_prev_free;
struct buffer_head *b_reqnext;
};
device
系统中每个网络设备都用一个设备数据结构来表示
struct device{
char *name;
unsigned long rmem_end;
unsigned long rmem_start;
unsigned long mem_end;
unsigned long mem_start;
unsigned long base_addr;
unsigned char irq;
volatile unsigned char start,
interrupt;
unsigned long tbusy;
struct device *next;
int (*init)(struct device *dev);
unsigned char if_port;
unsigned char dma;
struct enet_statistics* (*get_stats)(struct device *dev);
unsigned long trans_start;
unsigned long last_rx;
unsigned short flags;
unsigned short family;
unsigned short metric;
unsigned short mtu;
unsigned short type;
unsigned short hard_header_len;
void *priv;
unsigned char broadcast[MAX_ADDR_LEN];
unsigned char pad;
unsigned char dev_addr[MAX_ADDR_LEN];
unsigned char addr_len;
unsigned long pa_addr;
unsigned long pa_brdaddr;
unsigned long pa_dstaddr;
unsigned long pa_mask;
unsigned short pa_alen;
struct dev_mc_list *mc_list;
int mc_count;
struct ip_mc_list *ip_mc_list;
__u32 tx_queue_len;
unsigned long pkt_queue;
struct device *slave;
struct net_alias_info *alias_info;
struct net_alias *my_alias;
struct sk_buff_head buffs[DEV_NUMBUFFS];
int (*open)(struct device *dev);
int (*stop)(struct device *dev);
int (*hard_start_xmit) (struct sk_buff *skb,
struct device *dev);
int (*hard_header) (struct sk_buff *skb,
struct device *dev,
unsigned short type,
void *daddr,
void *saddr,
unsigned len);
int (*rebuild_header)(void *eth,
struct device *dev,
unsigned long raddr,
struct sk_buff *skb);
void (*set_multicast_list)(struct device *dev);
int (*set_mac_address)(struct device *dev,
void *addr);
int (*do_ioctl)(struct device *dev,
struct ifreq *ifr,
int cmd);
int (*set_config)(struct device *dev,
struct ifmap *map);
void (*header_cache_bind)(struct hh_cache **hhp,
struct device *dev,
unsigned short htype,
__u32 daddr);
void (*header_cache_update)(struct hh_cache *hh,
struct device *dev,
unsigned char * haddr);
int (*change_mtu)(struct device *dev,
int new_mtu);
struct iw_statistics* (*get_wireless_stats)(struct device *dev);
};
device_struct
此结构被块设备和字符设备用来向核心登记(包含设备名称以及可对此设备进行的文件操作) chrdevs和blkdevs 中的每个有效分别表示一个字符设备和块设备
struct device_struct {
const char * name;
struct file_operations * fops;
};
file
每个打开的文件、套接口都用此结构表示
struct file {
mode_t f_mode;
loff_t f_pos;
unsigned short f_flags;
unsigned short f_count;
unsigned long f_reada, f_ramax, f_raend, f_ralen, f_rawin;
struct file *f_next, *f_prev;
int f_owner;
struct inode * f_inode;
struct file_operations * f_op;
unsigned long f_version;
void *private_data;
};
files_struct
描叙被某进程打开的所有文件
struct files_struct {
int count;
fd_set close_on_exec;
fd_set open_fds;
struct file * fd[NR_OPEN];
};
fs_struct
struct fs_struct {
int count;
unsigned short umask;
struct inode * root, * pwd;
};
gendisk
包含关于某个硬盘的信息 用于磁盘初始化与分区检查时
struct hd_struct {
long start_sect;
long nr_sects;
};
struct gendisk {
int major;
const char *major_name;
int minor_shift;
int max_p;
int max_nr;
void (*init)(struct gendisk *);
struct hd_struct *part;
int *sizes;
int nr_real;
void *real_devices;
struct gendisk *next;
};
inode
此VFS inode结构描叙磁盘上一个文件或目录的信息
struct inode {
kdev_t i_dev;
unsigned long i_ino;
umode_t i_mode;
nlink_t i_nlink;
uid_t i_uid;
gid_t i_gid;
kdev_t i_rdev;
off_t i_size;
time_t i_atime;
time_t i_mtime;
time_t i_ctime;
unsigned long i_blksize;
unsigned long i_blocks;
unsigned long i_version;
unsigned long i_nrpages;
struct semaphore i_sem;
struct inode_operations *i_op;
struct super_block *i_sb;
struct wait_queue *i_wait;
struct file_lock *i_flock;
struct vm_area_struct *i_mmap;
struct page *i_pages;
struct dquot *i_dquot[MAXQUOTAS];
struct inode *i_next, *i_prev;
struct inode *i_hash_next, *i_hash_prev;
struct inode *i_bound_to, *i_bound_by;
struct inode *i_mount;
unsigned short i_count;
unsigned short i_flags;
unsigned char i_lock;
unsigned char i_dirt;
unsigned char i_pipe;
unsigned char i_sock;
unsigned char i_seek;
unsigned char i_update;
unsigned short i_writecount;
union {
struct pipe_inode_info pipe_i;
struct minix_inode_info minix_i;
struct ext_inode_info ext_i;
struct ext2_inode_info ext2_i;
struct hpfs_inode_info hpfs_i;
struct msdos_inode_info msdos_i;
struct umsdos_inode_info umsdos_i;
struct iso_inode_info isofs_i;
struct nfs_inode_info nfs_i;
struct xiafs_inode_info xiafs_i;
struct sysv_inode_info sysv_i;
struct affs_inode_info affs_i;
struct ufs_inode_info ufs_i;
struct socket socket_i;
void *generic_ip;
} u;
};
ipc_perm
此结构描叙对一个系统V IPC对象的存取权限
struct ipc_perm
{
key_t key;
ushort uid;
ushort gid;
ushort cuid;
ushort cgid;
ushort mode;
ushort seq;
};
irqaction
用来描叙系统的中断处理过程
struct irqaction {
void (*handler)(int, void *, struct pt_regs *);
unsigned long flags;
unsigned long mask;
const char *name;
void *dev_id;
struct irqaction *next;
};
linux_binfmt
用来表示可被Linux理解的二进制文件格式
struct linux_binfmt {
struct linux_binfmt * next;
long *use_count;
int (*load_binary)(struct linux_binprm *, struct pt_regs * regs);
int (*load_shlib)(int fd);
int (*core_dump)(long signr, struct pt_regs * regs);
};
mem_map_t
用来保存每个物理页面的信息
typedef struct page {
struct page *next;
struct page *prev;
struct inode *inode;
unsigned long offset;
struct page *next_hash;
atomic_t count;
unsigned flags;
unsigned dirty:16,
age:8;
struct wait_queue *wait;
struct page *prev_hash;
struct buffer_head *buffers;
unsigned long swap_unlock_entry;
unsigned long map_nr;
} mem_map_t;
mm_struct
用来描叙某任务或进程的虚拟内存
struct mm_struct {
int count;
pgd_t * pgd;
unsigned long context;
unsigned long start_code, end_code, start_data, end_data;
unsigned long start_brk, brk, start_stack, start_mmap;
unsigned long arg_start, arg_end, env_start, env_end;
unsigned long rss, total_vm, locked_vm;
unsigned long def_flags;
struct vm_area_struct * mmap;
struct vm_area_struct * mmap_avl;
struct semaphore mmap_sem;
};
pci_bus
表示系统中的一个PCI总线
struct pci_bus {
struct pci_bus *parent;
struct pci_bus *children;
struct pci_bus *next;
struct pci_dev *self;
struct pci_dev *devices;
void *sysdata;
unsigned char number;
unsigned char primary;
unsigned char secondary;
unsigned char subordinate;
};
pci_dev
表示系统中的每个PCI设备,包括PCI-PCI和PCI-PCI桥接器
struct pci_dev {
struct pci_bus *bus;
struct pci_dev *sibling;
struct pci_dev *next;
void *sysdata;
unsigned int devfn;
unsigned short vendor;
unsigned short device;
unsigned int class;
unsigned int master : 1;
unsigned char irq;
};
request
被用来向系统的块设备发送请求 它总是向buffer cache读出或写入数据块
struct request {
volatile int rq_status;
#define RQ_INACTIVE (-1)
#define RQ_ACTIVE 1
#define RQ_SCSI_BUSY 0xffff
#define RQ_SCSI_DONE 0xfffe
#define RQ_SCSI_DISCONNECTING 0xffe0
kdev_t rq_dev;
int cmd;
int errors;
unsigned long sector;
unsigned long nr_sectors;
unsigned long current_nr_sectors;
char * buffer;
struct semaphore * sem;
struct buffer_head * bh;
struct buffer_head * bhtail;
struct request * next;
};
rtable
用来描叙向某个IP主机发送包的路由信息 此结构在IP路由cache内部实用
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
保护临界区数据结构和代码信号灯
struct semaphore {
int count;
int waking;
int lock ;
struct wait_queue *wait;
};
sk_buff
用来描叙在协议层之间交换的网络数据
struct sk_buff
{
struct sk_buff *next;
struct sk_buff *prev;
struct sk_buff_head *list;
int magic_debug_cookie;
struct sk_buff *link3;
struct sock *sk;
unsigned long when;
struct timeval stamp;
struct device *dev;
union
{
struct tcphdr *th;
struct ethhdr *eth;
struct iphdr *iph;
struct udphdr *uh;
unsigned char *raw;
void *filp;
} h;
union
{
unsigned char *raw;
struct ethhdr *ethernet;
} mac;
struct iphdr *ip_hdr;
unsigned long len;
unsigned long csum;
__u32 saddr;
__u32 daddr;
__u32 raddr;
__u32 seq;
__u32 end_seq;
__u32 ack_seq;
unsigned char proto_priv[16];
volatile char acked,
used,
free,
arp;
unsigned char tries,
lock,
localroute,
pkt_type,
pkt_bridged,
ip_summed;
#define PACKET_HOST 0
#define PACKET_BROADCAST 1
#define PACKET_MULTICAST 2
#define PACKET_OTHERHOST 3
unsigned short users;
unsigned short protocol;
unsigned int truesize;
atomic_t count;
struct sk_buff *data_skb;
unsigned char *head;
unsigned char *data;
unsigned char *tail;
unsigned char *end;
void (*destructor)(struct sk_buff *);
__u16 redirport;
};
sock
包含BSD套接口的协议相关信息 例如对于一个INET(Internet Address Domain)套接口此数据结构 包含TCP/IP和UDP/IP信息
struct sock
{
struct sock *sklist_next;
struct sock *sklist_prev;
struct options *opt;
atomic_t wmem_alloc;
atomic_t rmem_alloc;
unsigned long allocation;
__u32 write_seq;
__u32 sent_seq;
__u32 acked_seq;
__u32 copied_seq;
__u32 rcv_ack_seq;
unsigned short rcv_ack_cnt;
__u32 window_seq;
__u32 fin_seq;
__u32 urg_seq;
__u32 urg_data;
__u32 syn_seq;
int users;
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;
__u32 rcv_saddr;
unsigned short max_unacked;
unsigned short window;
__u32 lastwin_seq;
__u32 high_seq;
volatile unsigned long ato;
volatile unsigned long lrcvtime;
volatile unsigned long idletime;
unsigned int bytes_rcv;
unsigned short mtu;
volatile unsigned short mss;
volatile unsigned short user_mss;
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;
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;
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;
int ip_ttl;
int ip_tos;
struct tcphdr dummy_th;
struct timer_list keepalive_timer;
struct timer_list retransmit_timer;
struct timer_list delack_timer;
int ip_xmit_timeout;
struct rtable *ip_route_cache;
unsigned char ip_hdrincl;
#ifdef CONFIG_IP_MULTICAST
int ip_mc_ttl;
int ip_mc_loop;
char ip_mc_name[MAX_ADDR_LEN];
struct ip_mc_socklist *ip_mc_list;
#endif
int timeout;
struct timer_list timer;
struct timeval stamp;
struct socket *socket;
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
包含BSD套接口的信息 它不独立存在,一般位于一个VFS inode结构中
struct socket {
short type;
socket_state state;
long flags;
struct proto_ops *ops;
void *data;
struct socket *conn;
struct socket *iconn;
struct socket *next;
struct wait_queue **wait;
struct inode *inode;
struct fasync_struct *fasync_list;
struct file *file;
};
task_struct
用来描叙系统中的进程或任务
struct task_struct {
volatile long state;
long counter;
long priority;
unsigned long signal;
unsigned long blocked;
unsigned long flags;
int errno;
long debugreg[8];
struct exec_domain *exec_domain;
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;
int leader;
int groups[NGROUPS];
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;
unsigned long min_flt, maj_flt, nswap, cmin_flt, cmaj_flt, cnswap;
int swappable:1;
unsigned long swap_address;
unsigned long old_maj_flt;
unsigned long dec_flt;
unsigned long swap_cnt;
struct rlimit rlim[RLIM_NLIMITS];
unsigned short used_math;
char comm[16];
int link_count;
struct tty_struct *tty;
struct sem_undo *semundo;
struct sem_queue *semsleeping;
struct desc_struct *ldt;
struct thread_struct tss;
struct fs_struct *fs;
struct files_struct *files;
struct mm_struct *mm;
struct signal_struct *sig;
#ifdef __SMP__
int processor;
int last_processor;
int lock_depth;
#endif
};
timer_list
用来为进程实现实时时钟
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)包含着已经排队的任务信息 它被设备驱动用来描叙那些无需立刻 执行的任务
struct tq_struct {
struct tq_struct *next;
int sync;
void (*routine)(void *);
void *data;
};
vm_area_struct
表示某进程的一个虚拟内存区域
struct vm_area_struct {
struct mm_struct * vm_mm;
unsigned long vm_start;
unsigned long vm_end;
pgprot_t vm_page_prot;
unsigned short vm_flags;
short vm_avl_height;
struct vm_area_struct * vm_avl_left;
struct vm_area_struct * vm_avl_right;
struct vm_area_struct * vm_next;
struct vm_area_struct * vm_next_share;
struct vm_area_struct * vm_prev_share;
struct vm_operations_struct * vm_ops;
unsigned long vm_offset;
struct inode * vm_inode;
unsigned long vm_pte;
};
尊贵的董事大人
英文标题不为空时 视为本栏投稿
需要关键字 描述 英文标题