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 --> 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 | ||
− | |||
147번째 줄: | 146번째 줄: | ||
} | } | ||
page --> address_space | page --> address_space | ||
− | |||
page --> slab | page --> slab | ||
− | |||
172번째 줄: | 169번째 줄: | ||
address_space --> radix_tree_root | address_space --> radix_tree_root | ||
address_space --> rb_root | address_space --> rb_root | ||
− | |||
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]; | ||
} | } | ||
− | |||
256번째 줄: | 251번째 줄: | ||
inode --> mutex | inode --> mutex | ||
inode --> hlist_node | inode --> hlist_node | ||
− | |||
− | |||
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); | ||
− | + | (*readlink) (struct dentry *, char __user *,int) : int | |
− | + | (*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 : unsigned int |
− | + | d_seq : seqcount_t | |
− | struct hlist_bl_node | + | 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 --> hlist_node | dentry --> hlist_node | ||
410번째 줄: | 401번째 줄: | ||
struct rcu_head rcu; | struct rcu_head rcu; | ||
} | } | ||
− | |||
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 | + | 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 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 | + | 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)/linust/list_bl.h >> { | ||
+ | struct hlist_bl_node *first; | ||
} | } | ||
− | + | 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 --> 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 --> 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 --> 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 --> 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 --> 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 --> delayed_work | scsi_cmnd --> delayed_work | ||
scsi_cmnd --> scsi_data_buffer | scsi_cmnd --> scsi_data_buffer | ||
1,036번째 줄: | 1,249번째 줄: | ||
} | } | ||
− | |||
− | |||
− | |||
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; | ||
} | } | ||
− | + | ||
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]; | ||
} | } | ||
− | |||
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]; | ||
} | } | ||
− | |||
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 --> 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; | ||
} | } | ||
− | |||
1,134번째 줄: | 1,340번째 줄: | ||
struct completion done; | struct completion done; | ||
} | } | ||
− | |||
wq_flusher --> completion | wq_flusher --> completion | ||
1,160번째 줄: | 1,365번째 줄: | ||
struct workqueue_struct *rescue_wq; | struct workqueue_struct *rescue_wq; | ||
} | } | ||
− | |||
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 --> 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 --> work_struct | pool_workqueue --> work_struct | ||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
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 --> 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 --> 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 현재 판