[ Pobierz całość w formacie PDF ]
.h and thecode is in fs *.The bu er cache is implemented in fs buffer.c along with theupdate kernel daemon.NetworkThe networking code is kept in net with most of the include les in include net.The BSD socket code is in net socket.c and the IP version 4 INET socket code isin net ipv4 af inet.c.The generic protocol support code including the sk buffhandling routines is in net core with the TCP IP networking code in net ipv4.The network device drivers are in drivers net.ModulesThe kernel module code is partially in the kernel and partially in the modules pack-age.The kernel code is all in kernel modules.c with the data structures and ker-nel demon kerneld messages in include linux module.h and include linux -kerneld.h respectively.You may want to look at the structure of an ELF object lein include linux elf.h.pppstruct buffer_head *b_this_page; * circular list of buffers in onepage ** Second cache line: *unsigned long b_state; * buffer state bitmap above *struct buffer_head *b_next_free;unsigned int b_count; * users using this block *unsigned long b_size; * block size ** Non-performance-critical data follows.*char *b_data; * pointer to data block *unsigned int b_list; * List that this buffer appears *unsigned long b_flushtime; * Time when this dirty buffer* should be written *unsigned long b_lru_time; * Time when this buffer was* last used.*struct wait_queue *b_wait;struct buffer_head *b_prev; * doubly linked hash list *struct buffer_head *b_prev_free; * doubly linked list of buffers *struct buffer_head *b_reqnext; * request queue *;deviceSeeinclude linux Every network device in the system is represented by a device data structure.netdevice.hstruct device** This is the first field of the "visible" part of this structure* i.e.as seen by users in the "Space.c" file.It is the name* the interface.*char *name;* I O specific fields *unsigned long rmem_end; * shmem "recv" end *unsigned long rmem_start; * shmem "recv" start *unsigned long mem_end; * shared mem end *unsigned long mem_start; * shared mem start *unsigned long base_addr; * device I O address *unsigned char irq; * device IRQ number ** Low-level status flags.*volatile unsigned char start, * start an operation *interrupt; * interrupt arrived *unsigned long tbusy; * transmitter busy *struct device *next;* The device initialization function.Called only once.*int *init struct device *dev ;* Some hardware also needs these fields, but they are not part ofthe usual set specified in Space.c.*unsigned char if_port; * Selectable AUI,TP, *unsigned char dma; * DMA channel *struct enet_statistics* *get_stats struct device *dev ;** This marks the end of the "visible" part of the structure.All* fields hereafter are internal to the system, and may change at* will read: may be cleaned up at will.** These may be needed for future network-power-down code.*unsigned long trans_start; * Time jiffies oflast transmit *unsigned long last_rx; * Time of last Rx *unsigned short flags; * interface flags BSD *unsigned short family; * address family ID *unsigned short metric; * routing metric *unsigned short mtu; * MTU value *unsigned short type; * hardware type *unsigned short hard_header_len; * hardware hdr len *void *priv; * private data ** Interface address info.*unsigned char broadcast MAX_ADDR_LEN ;unsigned char pad;unsigned char dev_addr MAX_ADDR_LEN ;unsigned char addr_len; * hardware addr len *unsigned long pa_addr; * protocol address *unsigned long pa_brdaddr; * protocol broadcast addr*unsigned long pa_dstaddr; * protocol P-P other addr*unsigned long pa_mask; * protocol netmask *unsigned short pa_alen; * protocol address len *struct dev_mc_list *mc_list; * M' cast mac addrs *int mc_count; * No installed mcasts *struct ip_mc_list *ip_mc_list; * IP m' cast filter chain *__u32 tx_queue_len; * Max frames per queue ** For load balancing driver pair support *unsigned long pkt_queue; * Packets queued *struct device *slave; * Slave device *struct net_alias_info *alias_info; * main dev alias info *struct net_alias *my_alias; * alias devs ** Pointer to the interface buffers.*struct sk_buff_head buffs DEV_NUMBUFFS ;* Pointers to interface service routines.*int *open struct device *dev ;int *stop struct device *dev ;int *hard_start_xmit struct sk_buff *skb,ppstruct 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 structdevice struct data structures are used to register character and block devices theyhold its name and the set of le operations that can be used for this device.Eachvalid member of the chrdevs and blkdevs vectors represents a character or blockSeedevice respectively.fs devices.cstruct device_structconst char * name;struct file_operations * fops;;leSeeinclude linux Each open le, socket etcetera is represented by a file data structure.fs.hstruct filemode_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; * pid or -pgrp where SIGIO should be sent *struct inode * f_inode;struct file_operations * f_op;unsigned long f_version;void *private_data; * needed for tty driver, and maybe others *;les structSeeThe files struct data structure describes the les that a process has open.include linuxsched.hstruct files_structint count;fd_set close_on_exec;fd_set open_fds;struct file * fd NR_OPEN ;;Seefs structinclude linuxsched.hstruct fs_structint count;unsigned short umask;struct inode * root, * pwd;;gendiskThe gendisk data structure holds information about a hard disk.They are usedSeeinclude linuxduring initialization when the disks are found and then probed for partitions.genhd.hstruct hd_structlong start_sect;long nr_sects;;struct gendiskint major; * major number of driver *const char *major_name; * name of major driver *int minor_shift; * number of times minor is shifted toget real minor *int max_p; * maximum partitions per device *int max_nr; * maximum number of real devices *void *init struct gendisk * ;* Initialization called before wedo our thing *struct hd_struct *part; * partition table *int *sizes; * device size in blocks, copied toblk_size *int nr_real; * number of real devices *ppvoid *real_devices; * internal use *struct gendisk *next;;inodeSeeinclude linux The VFS inode data structure holds information about a le or directory on disk.fs
[ Pobierz całość w formacie PDF ]