什么是超级块,在linux内核中如何实现的

什么是超级块,在linux内核中如何实现的,第1张

超级块是存储对应文件系统数据的结构,存储的元数据包括包括文件系统大小,块大小,以及空闲及已使用的块的数量inode表的大学及位置等消息下面是对应的内核源码

struct super_block {

struct list_heads_list /* Keep this first */

dev_ts_dev /* search index_not_ kdev_t */

unsigned chars_dirt

unsigned chars_blocksize_bits

unsigned longs_blocksize

loff_ts_maxbytes /* Max file size */

struct file_system_type*s_type

const struct super_operations*s_op

const struct dquot_operations*dq_op

const struct quotactl_ops*s_qcop

const struct export_operations *s_export_op

unsigned longs_flags

unsigned longs_magic

struct dentry*s_root

struct rw_semaphores_umount

struct mutexs_lock

ints_count

atomic_ts_active

#ifdef CONFIG_SECURITY

void*s_security

#endif

const struct xattr_handler **s_xattr

struct list_heads_inodes /* all inodes */

struct hlist_heads_anon /* anonymous dentries for (nfs) exporting */

#ifdef CONFIG_SMP

struct list_head __percpu *s_files

#else

struct list_heads_files

#endif

/* s_dentry_lru and s_nr_dentry_unused are protected by dcache_lock */

struct list_heads_dentry_lru /* unused dentry lru */

ints_nr_dentry_unused /* # of dentry on lru */

struct block_device*s_bdev

struct backing_dev_info *s_bdi

struct mtd_info*s_mtd

struct list_heads_instances

struct quota_infos_dquot /* Diskquota specific options */

ints_frozen

wait_queue_head_ts_wait_unfrozen

char s_id[32] /* Informational name */

void *s_fs_info /* Filesystem private info */

fmode_ts_mode

/* Granularity of c/m/atime in ns.

Cannot be worse than a second */

u32 s_time_gran

/*

* The next field is for VFS *only*. No filesystems have any business

* even looking at it. You had been warned.

*/

struct mutex s_vfs_rename_mutex /* Kludge */

/*

* Filesystem subtype. If non-empty the filesystem type field

* in /proc/mounts will be "type.subtype"

*/

char *s_subtype

/*

* Saved mount options for lazy filesystems using

* generic_show_options()

*/

char *s_options

}

超级块(SuperBlock)包括文件系统的总体信息,比如大小(其准确信息依赖文件系统)。MBR(MasterBootRecord),中文意为主引导记录。硬盘的0磁道的第一个扇区称为MBR,它的大小是512字节,而这个区域可以分为两个部分。第一部分为pre-boot区(预启动区),占446字节;第二部分是Partitiontable区(分区表),占66个字节,该区相当于一个小程序,作用是判断哪个分区被标记为活动分区,然后去读取那个分区的启动区,并运行该区中的代码。他是不属于任何一个 *** 作系统,也不能用 *** 作系统提供的磁盘 *** 作命令来读取它。但我们可以用ROM-BIOS中提供的INT13H的2号功能来读出该扇区的内容,也可用软件工具Norton8.0中的DISKEDIT.EXE来读取。附:liunx和unix是为了做服务器用途的,它必须保证365*24运行,它的设计就决定不需要整理磁盘碎片。一个分区或磁盘能作为文件系统使用前,需要初始化,并将记录数据结构写到磁盘上。这个过程就叫建立文件系统。大部分UNIX文件系统种类具有类似的通用结构,即使细节有些变化。其中心概念是超级块superblock,i节点inode,数据块datablock,目录块directoryblock,和间接块indirectionblock。超级块包括文件系统的总体信息,比如大小(其准确信息依赖文件系统)。i节点包括除了名字外的一个文件的所有信息,名字与i节点数目一起存在目录中,目录条目包括文件名和文件的i节点数目。i节点包括几个数据块的数目,用于存储文件的数据。i节点中只有少量数据块数的空间,如果需要更多,会动态分配指向数据块的指针空间。这些动态分配的块是间接块;为了找到数据块,这名字指出它必须先找到间接块的号码。UNIX文件系统通常允许在文件中产生孔(hole),意思是文件系统假装文件中有一个特殊的位置只有0字节,但没有为这文件的这个位置保留实际的磁盘空间(这意味着这个文件将少用一些磁盘空间)。这对小的二进制文件经常发生,Linux共享库、一些数据库和其他一些特殊情况。(孔由存储在间接块或i节点中的作为数据块地址的一个特殊值实现,这个特殊地址说明没有为文件的这个部分分配数据块,即,文件中有一个孔。)


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/yw/8615964.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-04-18
下一篇 2023-04-18

发表评论

登录后才能评论

评论列表(0条)

保存