| 网站首页 | 业界新闻 | 技术文章 | 视频教程 | 下载频道 | 程序源码 | 个人空间 | 编程论坛 |
 
 
 
您现在的位置: 编程中国 >> 技术教程 >> 操作系统 >> Linux >> 正文
  ►  Linux Data Structures(Linux数据结构)
Linux Data Structures(Linux数据结构)
作者:佚名    阅读人次:……    文章来源:未知    发布时间:2005-11-3    网友评论()条
 



ipc_perm

ipc_perm数据结构描述一个系统V IPC对象的访问权限

参见include/linux/ipc.h

 

struct ipc_perm

{

key_t key;

ushort uid; /* owner euid and egid */

ushort gid;

ushort cuid; /* creator euid and egid */

ushort cgid;

ushort mode; /* access modes see mode flags below */

ushort seq; /* sequence number */

};

 

irqaction

irqaction数据结构描述系统的中断处理程序

参见include/linux/interrupt.h

 

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理解的每一个二进制文件格式都用一个linux_binfmt数据结构表示

参见include/linux/binfmt.h

 

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

mem_map_t数据结构(也叫做page)用于存放每一个物理内存页的信息

参见include/linux/mm.h

 

typedef struct page {

/* these must be first (free area handling) */

struct page *next;

struct page *prev;

struct inode *inode;

unsigned long offset;

struct page *next_hash;

atomic_t count;

unsigned flags; /* atomic flags, some possibly

updated asynchronously */

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; /* page->map_nr == page - mem_map */

} mem_map_t;

 

mm struct

mm_struct数据结构用于描述一个任务或进程的虚拟内存

参见include/linux/sched.h

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总线用一个pci_bus数据结构表示

参见include/linux/pci.h

struct pci_bus {

struct pci_bus *parent; /* parent bus this bridge is on */

struct pci_bus *children; /* chain of P2P bridges on this bus */

struct pci_bus *next; /* chain of all PCI buses */

struct pci_dev *self; /* bridge device as seen by parent */

struct pci_dev *devices; /* devices behind this bridge */

void *sysdata; /* hook for sys-specific extension */

unsigned char number; /* bus number */

unsigned char primary; /* number of primary bridge */

unsigned char secondary; /* number of secondary bridge */

unsigned char subordinate; /* max number of subordinate buses */

};

 

pci_dev

系统中的每一个PCI设备,包括PCI-PCI和PCI-ISA桥设备都用一个pci_dev数据结构代表

参见include/linux/pci.h

/*

* There is one pci_dev structure for each slot-number/function-number

* combination:

*/

struct pci_dev {

struct pci_bus *bus; /* bus this device is on */

struct pci_dev *sibling; /* next device on this bus */

struct pci_dev *next; /* chain of all devices */

void *sysdata; /* hook for sys-specific extension */

unsigned int devfn; /* encoded device & function index */

unsigned short vendor;

unsigned short device;

unsigned int class; /* 3 bytes: (base,sub,prog-if) */

unsigned int master : 1; /* set if device is master capable */

/*

* In theory, the irq level can be read from configuration

* space and all would be fine. However, old PCI chips don't

* support these registers and return 0 instead. For example,

* the Vision864-P rev 0 chip can uses INTA, but returns 0 in

* the interrupt line and pin registers. pci_init()

* initializes this field with the value at PCI_INTERRUPT_LINE

* and it is the job of pcibios_fixup() to change it if

* necessary. The field must not be 0 unless the device

* cannot generate interrupts at all.

*/

unsigned char irq; /* irq generated by this device */

};

 

request

request用于向系统中的块设备发出请求。请求都是从/向buffer cache读/写数据块

参见include/linux/blkdev.h

 

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; /* READ or WRITE */

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;

};

 

上一页  [1] [2] [3] [4] [5] 下一页

 

 
文章录入:静夜思    责任编辑:静夜思 
  • 上一篇文章:

  • 下一篇文章:

  •  
    相关文章
    原创地带
    24小时热门帖子