⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 31.html

📁 linux 0.11中文版 有注释
💻 HTML
📖 第 1 页 / 共 3 页
字号:
<a name='L85'><b>typedef</b> <b>char</b> buffer_block[<a href='../R/8.html' title='Multiple refered from 26 places.'>BLOCK_SIZE</a>];  <i><font color='green'>// 块缓冲区。</font></i>
<a name='L86'>
<a name='L87'><i><font color='green'>// 缓冲区头数据结构。(极为重要!!!)</font></i>
<a name='L88'><i><font color='green'>// 在程序中常用bh 来表示buffer_head 类型的缩写。</font></i>
<a name='L89'><b>struct</b> buffer_head
<a name='L90'><font color='red'>{</font>
<a name='L91'>  <b>char</b> *b_data;                 <i><font color='green'>/* pointer to data block (1024 bytes) */</font></i><i><font color='green'>//指针。</font></i>
<a name='L92'>  <b>unsigned</b> <b>long</b> b_blocknr;      <i><font color='green'>/* block number */</font></i><i><font color='green'>// 块号。</font></i>
<a name='L93'>  <b>unsigned</b> <b>short</b> b_dev;         <i><font color='green'>/* device (0 = free) */</font></i><i><font color='green'>// 数据源的设备号。</font></i>
<a name='L94'>  <b>unsigned</b> <b>char</b> b_uptodate;     <i><font color='green'>// 更新标志:表示数据是否已更新。</font></i>
<a name='L95'>  <b>unsigned</b> <b>char</b> b_dirt;         <i><font color='green'>/* 0-clean,1-dirty */</font></i><i><font color='green'>//修改标志:0 未修改,1 已修改.</font></i>
<a name='L96'>  <b>unsigned</b> <b>char</b> b_count;        <i><font color='green'>/* users using this block */</font></i><i><font color='green'>// 使用的用户数。</font></i>
<a name='L97'>  <b>unsigned</b> <b>char</b> b_lock;         <i><font color='green'>/* 0 - ok, 1 -locked */</font></i><i><font color='green'>// 缓冲区是否被锁定。</font></i>
<a name='L98'>  <b>struct</b> task_struct *b_wait;   <i><font color='green'>// 指向等待该缓冲区解锁的任务。</font></i>
<a name='L99'>  <b>struct</b> buffer_head *b_prev;   <i><font color='green'>// hash 队列上前一块(这四个指针用于缓冲区的管理)。</font></i>
<a name='L100'>  <b>struct</b> buffer_head *b_next;   <i><font color='green'>// hash 队列上下一块。</font></i>
<a name='L101'>  <b>struct</b> buffer_head *b_prev_free;      <i><font color='green'>// 空闲表上前一块。</font></i>
<a name='L102'>  <b>struct</b> buffer_head *b_next_free;      <i><font color='green'>// 空闲表上下一块。</font></i>
<a name='L103'><font color='red'>}</font>;
<a name='L104'>
<a name='L105'><i><font color='green'>// 磁盘上的索引节点(i 节点)数据结构。</font></i>
<a name='L106'><b>struct</b> d_inode
<a name='L107'><font color='red'>{</font>
<a name='L108'>  <b>unsigned</b> <b>short</b> i_mode;        <i><font color='green'>// 文件类型和属性(rwx 位)。</font></i>
<a name='L109'>  <b>unsigned</b> <b>short</b> i_uid;         <i><font color='green'>// 用户id(文件拥有者标识符)。</font></i>
<a name='L110'>  <b>unsigned</b> <b>long</b> i_size;         <i><font color='green'>// 文件大小(字节数)。</font></i>
<a name='L111'>  <b>unsigned</b> <b>long</b> i_time;         <i><font color='green'>// 修改时间(自1970.1.1:0 算起,秒)。</font></i>
<a name='L112'>  <b>unsigned</b> <b>char</b> i_gid;          <i><font color='green'>// 组id(文件拥有者所在的组)。</font></i>
<a name='L113'>  <b>unsigned</b> <b>char</b> i_nlinks;       <i><font color='green'>// 链接数(多少个文件目录项指向该i 节点)。</font></i>
<a name='L114'>  <b>unsigned</b> <b>short</b> i_zone[9];     <i><font color='green'>// 直接(0-6)、间接(7)或双重间接(8)逻辑块号。</font></i>
<a name='L115'><i><font color='green'>// zone 是区的意思,可译成区段,或逻辑块。</font></i>
<a name='L116'><font color='red'>}</font>;
<a name='L117'>
<a name='L118'><i><font color='green'>// 这是在内存中的i 节点结构。前7 项与d_inode 完全一样。</font></i>
<a name='L119'><b>struct</b> m_inode
<a name='L120'><font color='red'>{</font>
<a name='L121'>  <b>unsigned</b> <b>short</b> i_mode;        <i><font color='green'>// 文件类型和属性(rwx 位)。</font></i>
<a name='L122'>  <b>unsigned</b> <b>short</b> i_uid;         <i><font color='green'>// 用户id(文件拥有者标识符)。</font></i>
<a name='L123'>  <b>unsigned</b> <b>long</b> i_size;         <i><font color='green'>// 文件大小(字节数)。</font></i>
<a name='L124'>  <b>unsigned</b> <b>long</b> i_mtime;        <i><font color='green'>// 修改时间(自1970.1.1:0 算起,秒)。</font></i>
<a name='L125'>  <b>unsigned</b> <b>char</b> i_gid;          <i><font color='green'>// 组id(文件拥有者所在的组)。</font></i>
<a name='L126'>  <b>unsigned</b> <b>char</b> i_nlinks;       <i><font color='green'>// 文件目录项链接数。</font></i>
<a name='L127'>  <b>unsigned</b> <b>short</b> i_zone[9];     <i><font color='green'>// 直接(0-6)、间接(7)或双重间接(8)逻辑块号。</font></i>
<a name='L128'><i><font color='green'>/* these are in memory also */</font></i>
<a name='L129'>  <b>struct</b> task_struct *i_wait;   <i><font color='green'>// 等待该i 节点的进程。</font></i>
<a name='L130'>  <b>unsigned</b> <b>long</b> i_atime;        <i><font color='green'>// 最后访问时间。</font></i>
<a name='L131'>  <b>unsigned</b> <b>long</b> i_ctime;        <i><font color='green'>// i 节点自身修改时间。</font></i>
<a name='L132'>  <b>unsigned</b> <b>short</b> i_dev;         <i><font color='green'>// i 节点所在的设备号。</font></i>
<a name='L133'>  <b>unsigned</b> <b>short</b> i_num;         <i><font color='green'>// i 节点号。</font></i>
<a name='L134'>  <b>unsigned</b> <b>short</b> i_count;       <i><font color='green'>// i 节点被使用的次数,0 表示该i 节点空闲。</font></i>
<a name='L135'>  <b>unsigned</b> <b>char</b> i_lock;         <i><font color='green'>// 锁定标志。</font></i>
<a name='L136'>  <b>unsigned</b> <b>char</b> i_dirt;         <i><font color='green'>// 已修改(脏)标志。</font></i>
<a name='L137'>  <b>unsigned</b> <b>char</b> i_pipe;         <i><font color='green'>// 管道标志。</font></i>
<a name='L138'>  <b>unsigned</b> <b>char</b> i_mount;        <i><font color='green'>// 安装标志。</font></i>
<a name='L139'>  <b>unsigned</b> <b>char</b> i_seek;         <i><font color='green'>// 搜寻标志(lseek 时)。</font></i>
<a name='L140'>  <b>unsigned</b> <b>char</b> i_update;       <i><font color='green'>// 更新标志。</font></i>
<a name='L141'><font color='red'>}</font>;
<a name='L142'>
<a name='L143'><i><font color='green'>// 文件结构(用于在文件句柄与i 节点之间建立关系)</font></i>
<a name='L144'><b>struct</b> file
<a name='L145'><font color='red'>{</font>
<a name='L146'>  <b>unsigned</b> <b>short</b> f_mode;        <i><font color='green'>// 文件操作模式(RW 位)</font></i>
<a name='L147'>  <b>unsigned</b> <b>short</b> f_flags;       <i><font color='green'>// 文件打开和控制的标志。</font></i>
<a name='L148'>  <b>unsigned</b> <b>short</b> f_count;       <i><font color='green'>// 对应文件句柄(文件描述符)数。</font></i>
<a name='L149'>  <b>struct</b> m_inode *f_inode;      <i><font color='green'>// 指向对应i 节点。</font></i>
<a name='L150'>  <a href='../S/45.html#L32' title='Defined at 32 in include/sys/types.h.'>off_t</a> f_pos;                  <i><font color='green'>// 文件位置(读写偏移值)。</font></i>
<a name='L151'><font color='red'>}</font>;
<a name='L152'>
<a name='L153'><i><font color='green'>// 内存中磁盘超级块结构。</font></i>
<a name='L154'><b>struct</b> super_block
<a name='L155'><font color='red'>{</font>
<a name='L156'>  <b>unsigned</b> <b>short</b> s_ninodes;     <i><font color='green'>// 节点数。</font></i>
<a name='L157'>  <b>unsigned</b> <b>short</b> s_nzones;      <i><font color='green'>// 逻辑块数。</font></i>
<a name='L158'>  <b>unsigned</b> <b>short</b> s_imap_blocks; <i><font color='green'>// i 节点位图所占用的数据块数。</font></i>
<a name='L159'>  <b>unsigned</b> <b>short</b> s_zmap_blocks; <i><font color='green'>// 逻辑块位图所占用的数据块数。</font></i>
<a name='L160'>  <b>unsigned</b> <b>short</b> s_firstdatazone;       <i><font color='green'>// 第一个数据逻辑块号。</font></i>
<a name='L161'>  <b>unsigned</b> <b>short</b> s_log_zone_size;       <i><font color='green'>// log(数据块数/逻辑块)。(以2 为底)。</font></i>
<a name='L162'>  <b>unsigned</b> <b>long</b> s_max_size;     <i><font color='green'>// 文件最大长度。</font></i>
<a name='L163'>  <b>unsigned</b> <b>short</b> s_magic;       <i><font color='green'>// 文件系统魔数。</font></i>
<a name='L164'><i><font color='green'>/* These are only in memory */</font></i>
<a name='L165'>  <b>struct</b> buffer_head *s_imap[8];        <i><font color='green'>// i 节点位图缓冲块指针数组(占用8 块,可表示64M)。</font></i>
<a name='L166'>  <b>struct</b> buffer_head *s_zmap[8];        <i><font color='green'>// 逻辑块位图缓冲块指针数组(占用8 块)。</font></i>
<a name='L167'>  <b>unsigned</b> <b>short</b> s_dev;         <i><font color='green'>// 超级块所在的设备号。</font></i>
<a name='L168'>  <b>struct</b> m_inode *s_isup;       <i><font color='green'>// 被安装的文件系统根目录的i 节点。(isup-super i)</font></i>
<a name='L169'>  <b>struct</b> m_inode *s_imount;     <i><font color='green'>// 被安装到的i 节点。</font></i>
<a name='L170'>  <b>unsigned</b> <b>long</b> s_time;         <i><font color='green'>// 修改时间。</font></i>
<a name='L171'>  <b>struct</b> task_struct *s_wait;   <i><font color='green'>// 等待该超级块的进程。</font></i>
<a name='L172'>  <b>unsigned</b> <b>char</b> s_lock;         <i><font color='green'>// 被锁定标志。</font></i>
<a name='L173'>  <b>unsigned</b> <b>char</b> s_rd_only;      <i><font color='green'>// 只读标志。</font></i>
<a name='L174'>  <b>unsigned</b> <b>char</b> s_dirt;         <i><font color='green'>// 已修改(脏)标志。</font></i>
<a name='L175'><font color='red'>}</font>;
<a name='L176'>
<a name='L177'><i><font color='green'>// 磁盘上超级块结构。上面125-132 行完全一样。</font></i>
<a name='L178'><b>struct</b> d_super_block
<a name='L179'><font color='red'>{</font>
<a name='L180'>  <b>unsigned</b> <b>short</b> s_ninodes;     <i><font color='green'>// 节点数。</font></i>
<a name='L181'>  <b>unsigned</b> <b>short</b> s_nzones;      <i><font color='green'>// 逻辑块数。</font></i>

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -