zoukankan      html  css  js  c++  java
  • 20191310李烨龙第七八章读书笔记

    第七八章读书笔记


    知识点归纳

    1.文件操作级别

    ​ 1.硬盘级别——针对系统,较为底层

    ​ fdisk:分区

    ​ mkfs:格式化磁盘分区

    ​ fsck:检查维修系统

    ​ 碎片整理:压缩系统文件

    ​ 2.操作系统内核中的文件系统函数

    ​ 3.系统调用——用户模式程序使用系统调用来访问内核函数

    ​ 每个库函数都会发出一个系统调用,使进程进入内核模式来执行相应的内核函数。当进程结束执行内核函数时,会返回到用户模式并返回所需结果。两种模式切换会耗费大量操作和时间,所以要尽可能不虚此行。

    ​ 4.I/O函数库——建立在系统调用之上,帮助用户读/写单独的字符、行或数据结构记录等。

    FILE mode : fopen, fread; fwrite, fseek, fclose, fflush
    char mode : getc, getchar, ugetc; putc, putchar
    line mode : gets, fgets; puts, fputs
    formatted : scanf, fscanf, sscanf; printf, fprintf,sprintf
    

    ​ 5.用户命令——是一个可执行程序(exclude cd),通常会调用I/O库。

    ​ 6.sh脚本

    2.低级别文件操作(此处结合实践内容)

    ​ 1.分区

    ​ 一个块存储设备可以分为几个逻辑单元,称为分区。各分区可以格式化为特定的文件系统,也可以安装在不同的操作系统上。分区表位于第一个扇区的字节便宜446(0x1BE)处,该山区陈伟设备的主引导记录(MBR)。表有四个目录,每个目录由一个16字节的分区结构体定义。

    ​ 如果分区为拓展类型,则可以划分为更多的分区。拓展分区在区域内形成一个链表,第一个扇区是一个本地MBR。每个本地MBR在字节偏移量0x1BE处也有一个分区表,包含两个目录,第一个目录定义了拓展分区的起始扇区和大小,第二个目录指向下一个本地MBR。

    tips:CHS值是什么?
    CHS:Cylinder/Head/Sector
    柱面/磁头/扇区 的意思LBA:是一种模式而不是一种值 逻辑块寻址模式
    

    ​ 2.格式化分区(mkfs,Make文件系统)

    ​ 每个分区都有特定的文件系统类型,但是分区还不能使用。为了存储文件,必须为特定的文件系统准备好分区。

    mkfs -t TYPE [-b bsize] device nblocks
    

    在一个nblocks设备上创建一个TYPE文件系统,每个块都是bsize字节,默认块大小为1KB。

    ​ 3.挂载分区

    ​ man 8 losetup:显示用于系统管理的losetup实用工具命令。

    3.EXT2文件系统

    ​ 1.EX2文件系统数据结构

    ​ Block#0:引导块—容纳从磁盘应道操作系统的引导程序。

    ​ Block#1:超级块—用于容纳关于整个文件系统的信息。

    ​ Block#2:块组描述符块—EXT2将磁盘块分成几个组,每组由8192个块,每组用一个块组描述符结构体描述。

    ​ Block#8:块位图—表示磁盘块或者索引节点的位序列,用于分配和回收项。

    ​ Block#10:索引(开始)节点块

    4.系统调用

    ​ 在操作系统中,进程以两种模式进行,内核模式(Kmode)和用户模式(Umode)。

    ​ 常用系统调用:

    stat     获取文件状态信息
    open     打开一个文件进行读、写、追加
    close    关闭打开的文件描述符
    read     读取打开的文件描述符
    write    写入打开的文件描述符
    lseek    重新定位文件描述符的读/写偏移量
    dup      将文件描述符复制到可用的最小描述编号中
    dip2     将oldfd复制到newfd中,如果newfd一打开,先将其关闭
    link     将新文件硬链接到旧文件
    unlink   减少文件的链接数;如果链接数达到零,则删除文件
    symlink  为文件创建一个符号链接
    readlink 读取符号链接文件的内容
    umask    设置文件创建掩码;文件权限为 (mask&~umasl)
    

    ​ 文件描述符

    ​ 文件描述符(file descriptor)是内核为了高效管理已被打开的文件所创建的索引,用于指代被打开的文件,对文件所有 I/O 操作相关的系统调用都需要通过文件描述符。

    img


    问题与解决思路


    实践内容

    1.fdisk实践

    ​ 创建分区

    image-20211009211936591

    ​ 打印分区表

    image-20211009212023594

    ​ 显示所有文件系统类型的十六进制唯一值

    image-20211009212144825

    ​ 写入修改磁盘分区

    image-20211009212234069

    2.mkfs实践

    ​ 使用1440(1KB)个块将mydisk格式化为EXT2文件系统,Linux的mkfs会在根目录下创建一个默认的lost+found目录。接着挂载到根文件系统中的现有目录中,/mnt目录通常用于挂载其他文件系统,由于虚拟文件系统不是真正的设备,它们必须作为循环设备挂载。挂载后的设备使用完成后,将cd从/mnt中取出。

    image-20211009213548854

    ​ 不带任何参数的mount会显示Linux系统所有挂载设备。

    image-20211009213945227

    ​ 虚拟磁盘如果包含多个分区,需要将这些分区与虚拟设备关联起来。

    此处还不是很明确

    image-20211009214650245

    3.链接文件实践

    ​ 硬链接,可以直接在新路径下创建文件并链接到旧路径。

    ​ 硬链接特征:

    • 源文件和硬链接文件使用相同的 Inode 和 Block
    • 修改任意一个文件,另一个都改变
    • 删除任意一个文件,另一个都能使用
    • 硬链接标记不清,很难确认硬链接文件位置,不建议使用
    • 硬链接不能链接目录
    • 硬链接不能跨分区

    image-20211010144352722

    ​ 软链接特征:

    • 软链接和源文件使用不同的 Inode 和 Block
    • 两个文件修改任意一个,另一个都改变
    • 删除软链接,源文件不受影响;删除源文件,软链接不能使用
    • 软链接没有实际数据,只保存源文件的 Inode,不论源文件多大,软链接大小不变
    • 软链接的权限是最大权限 lrwxrwxrwx.,但是由于没有实际数据,最终访问时需要参考源文件权限
    • 软链接可以链接目录
    • 软链接可以跨分区
    • 软链接特征明显,建议使用软连接

    image-20211010145809852

  • 相关阅读:
    Unity3d热更新全书-加载(一)从AssetBundle说起
    Unity3D热更新全书-脚本(三) C#LightEvil语法与调试
    Unity3D热更新全书-脚本(二) 两级分化
    Unity3D热更新全书-脚本(一) 初识脚本
    Unity3D热更新全书-何谓热更新,为何热更新,如何热更新
    C#Light/Evil合体啦
    C#最良心脚本语言C#Light/Evil,XamarinWP8Unity热更新最良心方案,再次进化.
    C#Light 再推荐,顺便介绍WP8 功能展示项目
    任意两张带透明图像的一种形状过渡效果
    FileFilter
  • 原文地址:https://www.cnblogs.com/sisterben/p/15389418.html
Copyright © 2011-2022 走看看