zoukankan      html  css  js  c++  java
  • 面试题1

    1. 基础知识

        系统中最小的单位是Bit(位元、位)

        1 Byte(字节)= 8 Bits

        1 Kilobyte(KB)= 1024 Bytes

        Ext2中inode和block(实际记录文件内容的区域,1kb、2kb、4kb):inode大小是:128 Bytes,inode记录一个block需要花费4 Bytes。    为了记录更多的block,操作系统将inode记录block的区域划分为12个直接,1个间接,1个双间接,一个三间接记录区。(eg:将block设为     1kb,能容纳最大的文件是:12*1+256(1 Kb/4Bytes)*1+256*256*1+256*256*256*1(Kb)=16843020 Kb=16448 Mb=16       Gb)。

      2. 问题

        1.block大小为4 Kb的Ext3文件系统最大分区和最大文件分别是多少?

          答:http://zhumeng8337797.blog.163.com/blog/static/100768914201112805015563/

    其中point本来也是数据块,现在拿来做数据块的索引用,其中ext3的头文件定义为: __u32 i_block[EXT3_N_BLOCKS];/* Pointers to blocks */,所以可以计算ext3文件系统的极限:
    最大分区:
             因为定义的是无符号32位数,所以可能定位的block范围为2^32,也就是4G,如果一个block大小为4KB,所以为4G * 4KB = 16TB
    最大文件:
             前面直接指向12个数据块,一级间接块最大为block size / 4,block size就是数据块的大小,因为一个索引是4个字节,所以除以4,这样计算下来,最大的文件可以使用的总块数为:12 + (block size/4) + (block size/4)^2 + (block size/4)^3,如果block size大小为4K,则为(12 + 2^10 + 2^20 + 2^30) * 2^12 约等于4T。
    
             为了突破ext3这个大小限制,ext4使用了48位的数据块索引空间,同时使用了如下结构代替inode索引的方式:
    struct ext3_extent {
    __u32 ee_block; /* first logical block extent covers */
    __u16 ee_len;   /* number of blocks covered by extent */
    __u16 ee_start_hi; /* high 16 bits of physical block */
    __u32 ee_start; /* low 32 bigs of physical block */
    };
    这样查找数据块的时候就不是每个块建立一个索引,而且使用连续的数据块,也就是分别指示起始位置,以及连续的块数,这样在大文件的时候,磁盘io效率以及查找数据块效率上都有很大的提高,所以ext4的文件系统也比ext3出色。因为使用了48位的索引空间,所以在4KB块大小的情况下,文件系统的极限是2^48 * 4KB = 1EB,不过,目前由于工具的限制,只能使用16TB的分区。
  • 相关阅读:
    AJAX问题总结(针对JAVA)
    关于IE浏览器的缓存问题
    tomcat和jdk版本兼容问题。
    Java中的索引和数据库的索引区别
    Eclipse 连接Oracle 11g 时报ORA-12505错误的解决办法
    Tomcat 8 & JNDI Datasource
    【LeetCode】019. Remove Nth Node From End of List
    【前端UI框架】EasyUI
    装饰者模式
    【LeetCode】234. Palindrome Linked List
  • 原文地址:https://www.cnblogs.com/jhooon/p/3652317.html
Copyright © 2011-2022 走看看