SYTest

Retired DISLab
(버전 사이의 차이)
이동: 둘러보기, 찾기
 
(사용자 2명의 중간의 편집 4개 숨겨짐)
1번째 줄: 1번째 줄:
 
<uml>
 
<uml>
 +
page 2x2
  
 
class  Scsi_Host<< (S,#FF7700)/scsi/scsi_host.h >> {
 
class  Scsi_Host<< (S,#FF7700)/scsi/scsi_host.h >> {
65번째 줄: 66번째 줄:
 
unsigned long hostdata[0];
 
unsigned long hostdata[0];
 
}
 
}
Scsi_Host --> list_head
 
 
Scsi_Host --> scsi_host_cmd_pool
 
Scsi_Host --> scsi_host_cmd_pool
 
Scsi_Host --> mutex
 
Scsi_Host --> mutex
113번째 줄: 113번째 줄:
 
kmem_cache --> kmem_cache_cpu
 
kmem_cache --> kmem_cache_cpu
 
kmem_cache --> kmem_cache_order_objects
 
kmem_cache --> kmem_cache_order_objects
kmem_cache --> list_head
 
  
  
147번째 줄: 146번째 줄:
 
}
 
}
 
page --> address_space
 
page --> address_space
page --> list_head
 
 
page --> slab
 
page --> slab
page --> rcu_head
 
  
  
172번째 줄: 169번째 줄:
 
address_space --> radix_tree_root
 
address_space --> radix_tree_root
 
address_space --> rb_root
 
address_space --> rb_root
address_space --> list_head
 
 
address_space --> mutex
 
address_space --> mutex
 
address_space --> backing_dev_info
 
address_space --> backing_dev_info
192번째 줄: 188번째 줄:
 
unsigned long tags[RADIX_TREE_MAX_TAGS][RADIX_TREE_TAG_LONGS];
 
unsigned long tags[RADIX_TREE_MAX_TAGS][RADIX_TREE_TAG_LONGS];
 
}
 
}
radix_tree_node --> rcu_head
 
  
  
256번째 줄: 251번째 줄:
 
inode --> mutex
 
inode --> mutex
 
inode --> hlist_node
 
inode --> hlist_node
inode --> list_head
 
inode --> rcu_head
 
 
inode --> file_lock
 
inode --> file_lock
  
265번째 줄: 258번째 줄:
 
int (*permission) (struct inode *, int);
 
int (*permission) (struct inode *, int);
 
struct posix_acl * (*get_acl)(struct inode *, int);
 
struct posix_acl * (*get_acl)(struct inode *, int);
int (*readlink) (struct dentry *, char __user *,int);
+
(*readlink) (struct dentry *, char __user *,int) : int
void (*put_link) (struct dentry *, struct nameidata *, void *);
+
(*put_link) (struct dentry *, struct nameidata *, void *) : void
 
int (*create) (struct inode *,struct dentry *, umode_t, bool);
 
int (*create) (struct inode *,struct dentry *, umode_t, bool);
 
int (*link) (struct dentry *,struct inode *,struct dentry *);
 
int (*link) (struct dentry *,struct inode *,struct dentry *);
291번째 줄: 284번째 줄:
  
 
class dentry<< (S,#77FF00)/linux/dcache.h >> {
 
class dentry<< (S,#77FF00)/linux/dcache.h >> {
unsigned int d_flags;   
+
d_flags : unsigned int  
seqcount_t d_seq;       
+
d_seq : seqcount_t
struct hlist_bl_node d_hash;   
+
d_hash : struct hlist_bl_node  
 
struct dentry *d_parent;     
 
struct dentry *d_parent;     
 
struct qstr d_name;
 
struct qstr d_name;
316번째 줄: 309번째 줄:
 
dentry --> lockref
 
dentry --> lockref
 
dentry --> super_block
 
dentry --> super_block
dentry --> list_head
 
dentry --> rcu_head
 
 
dentry --> hlist_node
 
dentry --> hlist_node
  
410번째 줄: 401번째 줄:
 
struct rcu_head rcu;
 
struct rcu_head rcu;
 
}
 
}
super_block --> list_head
 
 
super_block --> file_system_type
 
super_block --> file_system_type
 
super_block --> super_operations
 
super_block --> super_operations
528번째 줄: 518번째 줄:
  
  
class dquot_operations << (S,#77FF00) >> {
+
class dquot_operations << (S,#77FF00)/linust/quota.h >> {
 +
int (*write_dquot) (struct dquot *);            /* Ordinary dquot write */
 +
struct dquot *(*alloc_dquot)(struct super_block *, int);   
 +
void (*destroy_dquot)(struct dquot *);   
 +
int (*acquire_dquot) (struct dquot *);     
 +
int (*release_dquot) (struct dquot *);       
 +
int (*mark_dirty) (struct dquot *);         
 +
int (*write_info) (struct super_block *, int);
 +
qsize_t *(*get_reserved_space) (struct inode *);
 +
}
 +
dquot_operations --> dquot
 +
 
  
 +
class dquot << (S,#77FF00/linust/quota.h) >> {
 +
struct hlist_node dq_hash; 
 +
struct list_head dq_inuse;   
 +
struct list_head dq_free; 
 +
struct list_head dq_dirty;   
 +
struct mutex dq_lock;   
 +
atomic_t dq_count;         
 +
wait_queue_head_t dq_wait_unused;     
 +
struct super_block *dq_sb; 
 +
struct kqid dq_id;           
 +
loff_t dq_off;               
 +
unsigned long dq_flags;     
 +
struct mem_dqblk dq_dqb;     
 
}
 
}
 +
dquot --> hlist_node
 +
dquot --> mutex
 +
dquot --> super_block
 +
dquot --> kqid
 +
dquot --> mem_dqblk
  
class quotactl_ops << (S,#77FF00) >> {
+
class kqid << (S,#77FF00)/linust/quota.h >> {
 +
kuid_t uid;
 +
kgid_t gid;
 +
kprojid_t projid;
 +
}
  
 +
class mem_dqblk << (S,#77FF00)/linust/quota.h >> {
 +
qsize_t dqb_bhardlimit;
 +
qsize_t dqb_bsoftlimit;
 +
qsize_t dqb_curspace;
 +
qsize_t dqb_rsvspace;
 +
qsize_t dqb_ihardlimit;
 +
qsize_t dqb_isoftlimit;
 +
qsize_t dqb_curinodes;
 +
time_t dqb_btime;     
 +
time_t dqb_itime;   
 
}
 
}
  
class export_operations<< (S,#77FF00) >> {
 
  
 +
class quotactl_ops << (S,#77FF00))/linust/quota.h >> {
 +
int (*quota_on)(struct super_block *, int, int, struct path *);
 +
int (*quota_on_meta)(struct super_block *, int, int);
 +
int (*quota_off)(struct super_block *, int);
 +
int (*quota_sync)(struct super_block *, int);
 +
int (*get_info)(struct super_block *, int, struct if_dqinfo *);
 +
int (*set_info)(struct super_block *, int, struct if_dqinfo *);
 +
int (*get_dqblk)(struct super_block *, struct kqid, struct fs_disk_quota *);
 +
int (*set_dqblk)(struct super_block *, struct kqid, struct fs_disk_quota *);
 +
int (*get_xstate)(struct super_block *, struct fs_quota_stat *);
 +
int (*set_xstate)(struct super_block *, unsigned int, int);
 +
int (*get_xstatev)(struct super_block *, struct fs_quota_statv *);
 
}
 
}
  
class xattr_handler<< (S,#77FF00) >> {
+
class export_operations<< (S,#77FF00)/linux/exportfs.h >> {
 +
int (*encode_fh)(struct inode *inode, __u32 *fh, int *max_len, struct inode *parent);
 +
struct dentry * (*fh_to_dentry)(struct super_block *sb, struct fid *fid, int fh_len, int fh_type);
 +
struct dentry * (*fh_to_parent)(struct super_block *sb, struct fid *fid, int fh_len, int fh_type);
 +
int (*get_name)(struct dentry *parent, char *name, struct dentry *child);
 +
struct dentry * (*get_parent)(struct dentry *child);
 +
int (*commit_metadata)(struct inode *inode);
 +
}
 +
export_operations --> dentry
  
 +
class  xattr_handler<< (S,#77FF00)/linux/xattr.h >> {
 +
const char *prefix;
 +
int flags;      /* fs private flags passed back to the handlers */
 +
size_t (*list)(struct dentry *dentry, char *list, size_t list_size, const char *name, size_t name_len, int handler_flags);
 +
int (*get)(struct dentry *dentry, const char *name, void *buffer, size_t size, int handler_flags);
 +
int (*set)(struct dentry *dentry, const char *name, const void *buffer, size_t size, int flags, int handler_flags);
 
}
 
}
  
class hlist_bl_head << (S,#77FF00) >> {
 
  
 +
class hlist_bl_head << (S,#77FF00)/linust/list_bl.h >> {
 +
struct hlist_bl_node *first;
 
}
 
}
class block_device << (S,#77FF00) >> {
+
hlist_blk_head --> hlist_bl_node
  
 +
 +
class block_device << (S,#77FF00)/linux/fs.h >> {
 +
dev_t bd_dev;  /* not a kdev_t - it's a search key */
 +
int bd_openers;
 +
struct inode * bd_inode;   
 +
struct super_block * bd_super;
 +
struct mutex bd_mutex;     
 +
struct list_head bd_inodes;
 +
void * bd_claiming;
 +
void * bd_holder;
 +
int bd_holders;
 +
bool bd_write_holder;
 +
struct block_device * bd_contains;
 +
unsigned bd_block_size;
 +
struct hd_struct * bd_part;
 +
unsigned bd_part_count;
 +
int bd_invalidated;
 +
struct gendisk * bd_disk;
 +
struct request_queue * bd_queue;
 +
struct list_head bd_list;
 +
unsigned long bd_private;
 +
int bd_fsfreeze_count;
 +
struct mutex bd_fsfreeze_mutex;
 
}
 
}
 +
block_device --> inode
 +
block_device --> super_block
 +
block_device --> mutex
 +
block_device --> hd_struct
 +
block_device --> gendisk
 +
block_device --> request_queue
 +
 +
 +
class hd_struct<< (S,#77FF00)/linux/genhd.h >> {
 +
sector_t start_sect;
 +
sector_t nr_sects;
 +
seqcount_t nr_sects_seq;
 +
sector_t alignment_offset;
 +
unsigned int discard_alignment;
 +
struct device __dev;
 +
struct kobject *holder_dir;
 +
int policy, partno;
 +
struct partition_meta_info *info;
 +
unsigned long stamp;
 +
atomic_t in_flight[2];
 +
atomic_t ref;
 +
struct rcu_head rcu_head;
 +
}
 +
hd_struct --> device
 +
hd_struct --> kobject
 +
hd_struct --> partition_meta_info
 +
 +
 +
class kobject << (S,#77FF00)/linux/kobject.h >> {
 +
const char *name;
 +
struct list_head entry;
 +
struct kobject *parent;
 +
struct kset *kset;
 +
struct kobj_type *ktype;
 +
struct kernfs_node *sd;
 +
struct kref kref;
 +
unsigned int state_initialized:1;
 +
unsigned int state_in_sysfs:1;
 +
unsigned int state_add_uevent_sent:1;
 +
unsigned int state_remove_uevent_sent:1;
 +
unsigned int uevent_suppress:1;
 +
}
 +
kobject --> kset
 +
kobject --> kobj_type
 +
kobject --> kernfs_node
 +
kobject --> kref
 +
 +
 +
class kset << (S,#77FF00)/linux/kobject.h >> {
 +
struct list_head list;
 +
spinlock_t list_lock;
 +
struct kobject kobj;
 +
const struct kset_uevent_ops *uevent_ops;
 +
}
 +
kset --> kobject
 +
 +
class kobj_type << (S,#77FF00)/linux/kobject.h >> {
 +
void (*release)(struct kobject *kobj);
 +
const struct sysfs_ops *sysfs_ops;
 +
struct attribute **default_attrs;
 +
const struct kobj_ns_type_operations *(*child_ns_type)(struct kobject *kobj);
 +
const void *(*namespace)(struct kobject *kobj);
 +
}
 +
kobj_type --> sysfs_ops
 +
kobj_type --> attribute
 +
kobj_type --> kobj_ns_type_operations
 +
 +
 +
class sysfs_ops << (S,#77FF00)/linux/sysfs.h >> {
 +
ssize_t (*show)(struct kobject *, struct attribute *, char *);
 +
ssize_t (*store)(struct kobject *, struct attribute *, const char *, size_t);
 +
}
 +
 +
 +
class attribute << (S,#77FF00)/linux/sysfs.h >> {
 +
const char              *name;
 +
umode_t                mode;
 +
}
 +
 +
 +
class kobj_ns_type_operations << (S,#77FF00)/linux/kobject_ns.h >> {
 +
enum kobj_ns_type type;
 +
bool (*current_may_mount)(void);
 +
void *(*grab_current_ns)(void);
 +
const void *(*netlink_ns)(struct sock *sk);
 +
const void *(*initial_ns)(void);
 +
void (*drop_ns)(void *);
 +
}
 +
 +
 +
class kernfs_node << (S,#77FF00)/linux/kernfs.h >> {
 +
atomic_t                count;
 +
atomic_t                active;
 +
struct kernfs_node      *parent;
 +
const char              *name;
 +
struct rb_node          rb;
 +
union {
 +
struct completion      *completion;
 +
struct kernfs_node      *removed_list;
 +
} u;
 +
const void              *ns;    /* namespace tag */
 +
unsigned int            hash;  /* ns + name hash */
 +
union {
 +
struct kernfs_elem_dir          dir;
 +
struct kernfs_elem_symlink      symlink;
 +
struct kernfs_elem_attr        attr;
 +
};
 +
void                    *priv;
 +
unsigned short          flags;
 +
umode_t                mode;
 +
unsigned int            ino;
 +
struct kernfs_iattrs    *iattr;
 +
}
 +
kernfs_node --> rb_node
 +
kernfs_node --> completion
 +
kernfs_node --> kernfs_elem_dir
 +
kernfs_node --> kernfs_symlink
 +
kernfs_node --> kernfs_elem_attr
 +
kernfs_node --> kernfs_iattrs
 +
 +
 +
class kref << (S,#77FF00)/linux/kobject.h>> {
 +
 +
}
 +
 +
 +
class partition_meta_info << (S,#77FF00) >> {
 +
 +
}
 +
 +
class gendisk << (S,#77FF00) >> {
 +
 +
}
 +
 +
  
 
class mtd_info << (S,#77FF00) >> {
 
class mtd_info << (S,#77FF00) >> {
696번째 줄: 913번째 줄:
 
struct list_head all_q_node;
 
struct list_head all_q_node;
 
}
 
}
request_queue --> list_head
 
 
request_queue --> request
 
request_queue --> request
 
request_queue --> elevator_queue
 
request_queue --> elevator_queue
709번째 줄: 925번째 줄:
 
request_queue --> queue_limits
 
request_queue --> queue_limits
 
request_queue --> mutex
 
request_queue --> mutex
request_queue --> rcu_head
 
 
request_queue --> percpu_counter
 
request_queue --> percpu_counter
  
755번째 줄: 970번째 줄:
 
device --> dev_pm_domain
 
device --> dev_pm_domain
 
device --> device_dma_parameters
 
device --> device_dma_parameters
device --> list_head
 
 
device --> dma_coherent_mem
 
device --> dma_coherent_mem
 
device --> dev_archdata
 
device --> dev_archdata
808번째 줄: 1,022번째 줄:
 
struct bio *tail;
 
struct bio *tail;
 
}
 
}
 +
bio_list --> bio
  
  
865번째 줄: 1,080번째 줄:
 
struct request *next_rq;
 
struct request *next_rq;
 
}
 
}
request --> list_head
 
 
request --> call_single_data
 
request --> call_single_data
 
request --> work_struct
 
request --> work_struct
885번째 줄: 1,099번째 줄:
 
}
 
}
 
blk_plug --> list_head
 
blk_plug --> list_head
 +
  
 
class scsi_device << (S,#FF7700)/scsi/scsi_device >> {
 
class scsi_device << (S,#FF7700)/scsi/scsi_device >> {
971번째 줄: 1,186번째 줄:
 
scsi_device --> Scsi_Host
 
scsi_device --> Scsi_Host
 
scsi_device --> request_queue
 
scsi_device --> request_queue
scsi_device --> list_head
 
 
scsi_device --> scsi_cmnd
 
scsi_device --> scsi_cmnd
 
scsi_device --> scsi_target
 
scsi_device --> scsi_target
1,006번째 줄: 1,220번째 줄:
 
scsi_cmnd --> scsi_pointer
 
scsi_cmnd --> scsi_pointer
 
scsi_cmnd --> scsi_device
 
scsi_cmnd --> scsi_device
scsi_cmnd --> list_head
 
 
scsi_cmnd --> delayed_work
 
scsi_cmnd --> delayed_work
 
scsi_cmnd --> scsi_data_buffer
 
scsi_cmnd --> scsi_data_buffer
1,036번째 줄: 1,249번째 줄:
 
}
 
}
  
class list_head << (S,#77FF00)/scripts/kconfig/list.h >> {
 
struct list_head *next, *prev;
 
}
 
  
 
class delayed_work << (S,#77FF00)/linux/workqueue.h >> {
 
class delayed_work << (S,#77FF00)/linux/workqueue.h >> {
1,056번째 줄: 1,266번째 줄:
 
work_func_t func;
 
work_func_t func;
 
}
 
}
work_struct --> list_head
+
 
  
 
class timer_list << (S,#77FF00)/linux/timer.h >> {
 
class timer_list << (S,#77FF00)/linux/timer.h >> {
1,089번째 줄: 1,299번째 줄:
 
struct list_head vec[TVR_SIZE];
 
struct list_head vec[TVR_SIZE];
 
}
 
}
tvec_root --> list_head
 
  
 
class tvec << (S,#77FF00)kernel/timer.c >> {
 
class tvec << (S,#77FF00)kernel/timer.c >> {
 
struct list_head vec[TVN_SIZE];
 
struct list_head vec[TVN_SIZE];
 
}
 
}
tvec --> list_head
 
  
 
class workqueue_struct << (S,#77FF00)/kernel/workqueue.c >> {
 
class workqueue_struct << (S,#77FF00)/kernel/workqueue.c >> {
1,113번째 줄: 1,321번째 줄:
 
struct pool_workqueue *dfl_pwq;
 
struct pool_workqueue *dfl_pwq;
 
}
 
}
workqueue_struct --> list_head
 
 
workqueue_struct --> mutex
 
workqueue_struct --> mutex
 
workqueue_struct --> wq_flusher
 
workqueue_struct --> wq_flusher
1,126번째 줄: 1,333번째 줄:
 
struct list_head wait_list;
 
struct list_head wait_list;
 
}
 
}
mutex --> list_head
 
  
  
1,134번째 줄: 1,340번째 줄:
 
struct completion done;     
 
struct completion done;     
 
}
 
}
wq_flusher --> list_head
 
 
wq_flusher --> completion
 
wq_flusher --> completion
  
1,160번째 줄: 1,365번째 줄:
 
struct workqueue_struct *rescue_wq;
 
struct workqueue_struct *rescue_wq;
 
}
 
}
worker --> list_head
 
 
worker --> hlist_node
 
worker --> hlist_node
 
worker --> work_struct
 
worker --> work_struct
1,185번째 줄: 1,389번째 줄:
 
struct timer_list mayday_timer;
 
struct timer_list mayday_timer;
 
}
 
}
worker_pool --> list_head
 
 
worker_pool --> timer_list
 
worker_pool --> timer_list
  
1,212번째 줄: 1,415번째 줄:
 
pool_workqueue --> worker_pool
 
pool_workqueue --> worker_pool
 
pool_workqueue --> workqueue_struct
 
pool_workqueue --> workqueue_struct
pool_workqueue --> list_head
 
 
pool_workqueue --> work_struct
 
pool_workqueue --> work_struct
pool_workqueue --> rcu_head
 
 
 
 
class rcu_head << (S,#77FF00)/linux/types.h >> {
 
#define rcu_head callback_head
 
}
 
rcu_head --> callback_head
 
  
  
1,341번째 줄: 1,535번째 줄:
 
task_struct --> sched_rt_entity
 
task_struct --> sched_rt_entity
 
task_struct --> sched_dl_entity
 
task_struct --> sched_dl_entity
task_struct --> list_head
 
 
task_struct --> pid_link
 
task_struct --> pid_link
 
task_struct --> completion
 
task_struct --> completion
1,360번째 줄: 1,553번째 줄:
 
task_struct --> io_context
 
task_struct --> io_context
 
task_struct --> task_io_accounting
 
task_struct --> task_io_accounting
task_struct --> rcu_head
 
 
task_struct --> pipe_inode_info
 
task_struct --> pipe_inode_info
 
task_struct --> page_frag
 
task_struct --> page_frag
  
  
 +
 +
class rcu_head << (S,#77FF00)/linux/types.h >> {
 +
#define rcu_head callback_head
 +
}
 +
note left: So many structs reference this. So I don't draw line to this.
 +
rcu_head --> callback_head
 +
 +
 +
class list_head << (S,#77FF00)/scripts/kconfig/list.h >> {
 +
struct list_head *next, *prev;
 +
}
 +
note left: So many structs reference this. So I don't draw line to this.
  
  
 
</uml>
 
</uml>

2014년 5월 14일 (수) 21:18 현재 판

개인 도구
이름공간
변수
행위
둘러보기
구성원
연구
연구실
기타
도구모음
인쇄/내보내기