单位和容量:
任何的存储和计算都是基于容量的,容量的最小单位是bit,代表一个高低电压,但是bit太小没有实际意义,所以基本的计数单元是byte(8bit)
内存、磁盘这种大小的,用二进制byte;
Cpu这种频率的用十进制byte;
网络和IO使用bit,常用单位是Mbps(Mbit per second)
CPU的频率分为外频和倍频,CPU的运算频率为外频和倍频的乘积。由于倍频一般不允许修改,所以超频一般是修改外频的设置。
CPU所处理的数据输入必须来源与主存储器(内存),因为只有内存才能跟得上CPU的速度。内存使用的是双通道设计,如果手上内存不是同一型号的,要保证双通道的两根是同一型号。
由于内存数据要经过北桥才能到达CPU,CPU在运算时一些常用的数据提取还是不够快,所以CPU内部也带有二级缓存。我们常说的内存条,叫做DRAM(Dynamic Random Access Memory),而CPU中的内存是SRAM(StaticRandom Access Memory)
适配器上面还会有一个内存癿容量,这个显示适配器内存容量将会影响到最终你癿屏幕分辨率不颜色深度。由于还需要对画面做处理和运算,可是CPU本来就很繁忙了,而且处理图像又不是CPU的强项,于是还会给其配备GPU。关于CPU和GPU的差别可以参考《深度卷积网络》
英文编码表为ASCⅡ,每个英文、数字、或符号占1个byte,共有2**8=256个变化。虽然后来用ASCⅡ扩展来编码非英语语言(利用2byte来编码中文),但是支持的很不好经常乱码,所以后来又出来了Unicode,Unicode的实现方式称为Unicode转换格式(Unicode Transformation Format)也就是UTF-8
磁盘和分区:
Linux中每个硬件都会当作文件来管理,会放在/dev目录下,例如磁盘/dev/sd[a-p]这样来管理,其中英文字母是按照OS发现磁盘的顺序来决定的,而不是主板上卡槽的顺序。先发现的为/dev/sda,再发现的为/dev/sdb,依次类推。
如何对一块磁盘进行划区呢?
磁盘上第一扇区最重要,记录了2部分内容:
1 开启管理程序,可以加载系统文件等
2 本磁盘的分区目录
如果图像中磁盘是被第一个搜索到的磁盘,所以磁盘文件应该是/dev/sda,它又被划分为4个分区,4个分区的文件分别是:/dev/sda1、/dev/sda2、/dev/sda3、/dev/sda4
PS:由于第一扇区容量有限,最多只能保存4个分区的划分,我们可以使用extended的方式划更多的区,这里不再详解,因为我认为一般来说一块磁盘划4个区应该够用了。
这里有个疑问:虽然磁盘里保存了开机启动程序,但是磁盘作为硬件在开机时因为OS没有启动所以无法访问到磁盘,这不是死循环了么?
答案是:磁盘的第一扇区会有BIOS来识别访问。
再一个问题:目录文件损坏了咋整?
分3种情况,一一来想办法,按严重程度从低到高来描述:
第一种,根目录没有损坏,找到坏的分区,执行fsck /dev/sdaX
第二种,根目录坏了,在本机已经不能按照第一种来解决了,着另一台linux机器把磁盘插入并让系统检测到,不要mount,直接fsck /dev/sdaX
第三种,磁盘坏道硬件烂了只能交给专业人士能抢救多少回来就抢救多少吧。
文件和目录的权限:
权限被设置为用户权限、组权限、other权限3部分,每部分是rwx,用2进制加起来是7,root用户拥有至高无上的权利藐视一切。这些玩过linux的朋友都已经掌握了,我这里再测试几个关于目录的小案例。
1如果目录权限只有r能否进入?
首先拥有x才能进入到目录内,所以对于目录来讲x是最基础的权限,只有r是进入不到目录内的。
2 如果目录权限只给x,会怎么样?
可以看到有x就能够进入目录了,但是没有r是看不到目录里的任何内容,所以只有x意义也不大。
3 目录权限的w意味着什么?
目录如果拥有w权限,就算它不具备本目录内文件的w权限,也可以直接删除文件!
4 如果目录没有w权限,但里面的内容有rwx权限,能否删除文件?
测试结果是:不能
umask命令可以让我们知道当前用户创建出的文件和目录默认的权限
umask命令,以前没接触过,需要学习下,很好玩:
新建目录,默认是rwxrwxrwx;新建文件,默认是rw-rw-rw-
umask命令返回的数字是需要扣除的部分。
自己对照着案例用减法计算下就明白了。
一般设置root的umask为022,设置普通用户的umask是002,可以直接通过umask XXX的方式来修改当前的umask。
这里叨叨了这么多权限的问题,是因为文件系统与权限有着千丝万缕的联系,它们之间的知识点是相辅相成的。
文件系统:
文件系统有各式各样的样式,我们拿最流行的Ext2/Ext3为学习案例。
文件系统分为3块:
Inode:记录文档的属性、权限,里面有datablock的号码。
Data block:记录实际数据,每个datablock属于一个inode
Superblock:记录inode和datablock的总量、使用量、剩余量,以及文件系统的格式与相关信息
Block大小会带来的这些限制是我以前使用linux时忽略的,除开图表中的限制外,每个block
只能放置一个文档,也就是说未放满的部分就会造成浪费。
例如100个文件,每个文件只有50byte,每50byte都要放到一个block中占用1KB,所以100个文件会占用100KB,但真实内容只有5KB。
这个例子在windows下也一样,你新建个空文本文件,大小是0,你随便写入点内容,大小就变成了1KB。
每个目录也会占用inode,因为要通过inode来管理目录的属性和权限嘛。该inode指向一个或多个data block来保存目录里的子目录或者文件的inode,所以目录或者子文件个数越大,目录占用的data block也就越多。
一个inode的大小是有限的,只有128byte,它只能直接挂载12个data block,如果文件大到12个datablock存不下的情况,inode需要挂载一层、双层、甚至三层data block来存储剩余的应该存在inode里的内容。
如图:文件的入口是inode4,权限和属性部分记录在inode4中,而文件的内容存储在4个data block中。
两种Link方式:
Hard Link(硬链接)
就是两个文件指向了同一个inode,所以皮囊是2个文件,但是从inode这层开始就变成同样的内容了。
Hard Link的限制:不能连接目录,不能跨filesystem
Symbolic Link(符号链接,快捷方式)
建立一个独立的档案,这个档案会让数据读取指向它link的那个档案的别名。
Symbolic Link可以解决Hard Link不能连接目录的限制。
检测和维护:
检查文件系统是否有损坏:
命令:fsck
检查磁盘有没有坏道:
命令:badblocks –v /磁盘device
以上两个命令检查的层面不同,前者是filesystem层面,就是检查inode、data block、superblock区;后者是检查磁盘上的扇区和磁柱。
新磁盘mount完了记得要添加开机自动挂载启动项:
vi /etc/fstab
前两个参数pass,很好理解;
第三个参数是文件系统类型;
第四个参数是mount命令里的参数;
第五个参数0代表不做备份,1标识备份;
第六个参数0代表不做启动fsck,1标识要check
如果对某磁盘整块partition做备份或者拷贝,可以使用dd命令:
目的磁盘不需要格式化,可以直接进行filesystem的对拷:
dd if=/dev/hdc1 of=/dev/hdc9
考完后的/dev/hdc9中就有了hdc1中一样的数据,只需要找个地方mount上就能用了。
总结:
文件系统的重点是3个区,以及开机时机器如何通过BIOS来读取MBR从而进行Boot Loader、初始化硬件、启动内核的。