为您推荐:
精华内容
最热下载
问答
  • 5星
    469KB weixin_46414659 2021-04-02 17:24:37
  • 5星
    5.08MB qq_52889967 2021-07-21 15:04:15
  • 5星
    14.06MB guoruibin123 2021-06-29 14:32:12
  • 5星
    14.4MB qq_37740841 2021-08-07 21:45:39
  • 5星
    30.67MB weixin_42558510 2021-05-13 14:46:55
  • 5星
    313.9MB zhiwenganyong 2021-06-15 09:53:01
  • 5星
    3.77MB GZXGYZ 2021-08-16 09:49:24
  • 5星
    82.04MB GZXGYZ 2021-03-17 22:28:57
  • 5星
    83.82MB weixin_40228600 2021-04-30 14:12:58
  • 10.88MB guoruibin123 2021-04-24 08:52:12
  • 4.1.6 文件的基本操作 4.1.7 文件共享 4.1.8 文件保护 4.1.9 文件系统的层次结构 4.2.1 磁盘的结构 4.2.2 磁盘调度算法 4.2.3 减少磁盘延迟时间的方法 4.2.4 磁盘的管理 4.1.1 初识文件管理 问题: 计算机中存放了...

    目录

    • 4.1.1 初识文件管理
    • 4.1.2 文件的逻辑结构
    • 4.1.3 文件目录
    • 4.1.4 文件的物理结构(上)
    • 4.1.4 文件的物理结构(下)
    • 4.1.5 文件存储空间管理
    • 4.1.6 文件的基本操作
    • 4.1.7 文件共享
    • 4.1.8 文件保护
    • 4.1.9 文件系统的层次结构
    • 4.2.1 磁盘的结构
    • 4.2.2 磁盘调度算法
    • 4.2.3 减少磁盘延迟时间的方法
    • 4.2.4 磁盘的管理

    4.1.1 初识文件管理

    1. 问题:
    2. 计算机中存放了各种各样的文件,一个文件有哪些属性?
    3. 文件内部的数据应该怎样组织起来?
    4. 文件之间又应该又应该怎么组织起来?
    5. 从下往上看,OS应提供哪些功能,才能方便用户、应用程序使用文件?(create、read、write、delete、open、close)
    6. 从上往下看,文件数据应该怎么存放在外存(磁盘)上?
    7. 解决一:文件的属性
    8. 文件名:由创建文件的用户决定文件名,主要是为了方便用户找到文件,同一目录下不允许有重名文件。
    9. 标识符:一个系统内的各文件标识符唯一,对用户来说毫无可读性,因此标识符只是操作系统用于区分各个文件的一种内部名称。
    10. 类型:指明文件的类型。
    11. 位置:文件存放的路径(让用户使用)、在外存中的地址(操作系统使用,对用户不可见”
    12. 大小:指明文件大小
    13. 创建时间、上次修改时间文件所有者信息
    14. 文件所有者信息
    15. 保护信息:对文件进行保护的访问控制信息
    16. 解决二:文件内部的数据应该怎样组织起来
    17. 无结构文件(如文本文件)—―由一些二进制或字符流组成,又称“流式文件”(eg:txt文件)
    18. 有结构文件(如数据库表)—一由一组相似的记录组成,又称“记录式文件”(eg:excel文件)
    19. 解决五:从上往下看,文件数据应该怎么存放在外存(磁盘)上
    20. 与内存一样,外存也是由一个个存储单元组成的,每个存储单元可以存储一定量的数据(如1B)。每个存储单元对应一个物理地址
    21. 类似于内存分为一个个“内存块”,外存会分为一个个“块/磁盘块/物理块”。每个磁盘块的大小是相等的,每块一般包含2的整数幂个地址(如本例中,一块包含210个地址,即1KB)。同样类似的是,文件的逻辑地址也可以分为(逻辑块号,块内地址),操作系统同样需要将逻辑地址转换为外存的物理地址(物理块号,块内地址)的形式。块内地址的位数取决于磁盘块的大小
    22. 操作系统以“块”为单位为文件分配存储空间,因此即使一个文件大小只有10B,但它依然需要占用1KB的磁盘块。外存中的数据读入内存时同样以块为单位
      4.1.2 文件的逻辑结构
    23. 所谓的“逻辑结构”,就是指在用户看来,文件内部的数据应该是如何组织起来的。而“物理结构”指的是在操作系统看来,文件的数据是如何存放在外存中的。
    24. 无结构文件:
    25. 文件内部的数据就是一系列二进制流或字符流组成。又称“流式文件”。如:Windows操作系统中的.txt文件。
    26. 有结构文件:
    27. 由一组相似的记录组成,又称“记录式文件”。每条记录又若干个数据项组成。如:数据库表文件。一般来说,每条记录有一个数据项可作为关键字(作为识别不同记录的ID)根据各记录的长度(占用的存储空间)是否相等,又可以分为定长记录和可变长记录两种。
    28. 顺序文件:文件中的记录一个接一个地顺序排列(逻辑上),记录可以是定长的或可变长的。各个记录在物理上可以顺序存储或链式存储。
      i. 顺序存储:逻辑上相邻的记录物理上也相邻(类似顺序表)
    29. 可变长记录:无法实现随机存取。每次只能从第一个记录开始依次往后查找
    30. 定长记录:
      a. 可实现随机存取。记录长度为L,则第i个记录存放的相对位置是iR
      b. 若采用串结构,无法快速找到某关键字对应的记录
      c. 若采用顺序结构,可以快速找到某关键字对应的记录(如折半查找)
      ii. 链式存储:逻辑上相邻的记录物理上不一定相邻(类似于链表)
    31. 无论是定长/可变长记录,都无法实现随机存取,每次只能从第一个记录开始依次往后查找
      iii. 串结构:记录之间的顺序与关键字无关(存入的时间决定)
      iv. 顺序结构:记录之间的顺序按关键字顺序排列
    32. 索引文件:
      i. 索引表本身是定长记录的顺序文件。因此可以快速找到第i个记录对应的索引项。
      ii. 建立一张索引表以加快文件检索速度。每条记录对应一个索引项。
      iii. 文件中的这些记录在物理上可以离散地存放。
      iv. 由于索引文件有很快的检索速度,因此主要用于对信息处理的及时性要求比较高的场合。
    33. 索引书序文件:
      i. 索引文件的缺点;每个记录对应一个索引表项,因此索引表可能会很大比如:文件的每个记录平均只占8B,而每个索引表项占32个字节,那么索引表都要比文件内容本身大4倍,这样对存储空间的利用率就太低了。
      ii. 索引顺序文件是索引文件和顺序文件思想的结合。索引顺序文件中,同样会为文件建立一张索引表,但不同的是;并不是每个记录对应一个索引表项,而是一组记录对应一个索引表项。
      iii. 多级索引顺序文件
    34. 为了进一步提高检索效率,可以为顺序文件建立多级索引表。例如,对于一个含10个记录的文件,可先为该文件建立一张低级索引表,每100个记录为一组,故低级索引表中共有10000个表项(即10000个定长记录),再把这10000个定长记录分组,每组100个,为其建立顶级索引表,
    35. 故顶级索引表中共有100个表项。
      4.1.3 文件目录
    36. 文件控制块(实现文件目录的关键数据结构)
    37. FCB的有序集合称为“文件目录”,一个FCB就是一个文件目录项。
    38. FCB中包含了文件的基本信息(文件名、物理地址、逻辑结构、物理结构等),存取控制信息(是否可读/可写、禁止访问的用户名单等)),使用信息(如文件的建立时间、修改时间等)。
    39. 目录结构
    40. 单级目录结构
      i. 早期操作系统并不支持多级目录,整个系统中只建立一张目录表,每个文件占一个目录项。
      ii. 单级目录实现了“按名存取”,但是不允许文件重名。
    41. 两级目录结构
      i. 主文件目录:允许不同用户的文件重名。文件名虽然相同,但是对应的其实是不同的文件
    42. 主文件目录记录用户名及相应用户文件目录的存放位置
    43. 用户文件目录由该用户的文件PCB组成
    44. 两级目录结构允许不同用户的文件重名,也可以在目录上实现实现访问限制(检查此时登录的用户名是否匹配)。但是两级目录结构依然缺乏灵活性,用户不能对自己的文件进行分类
      ii. 用户文件目录:
    45. 多级目录结构(树形目录结构)
      i. 不同目录下的文件可以重名
      ii. 用户(或用户进程)要访问某个文件时要用文件路径名标识文件,文件路径名是个字符串。各级目录之间用“/”隔开。
      iii. 从根目录出发的路径称为绝对路径。
      iv. 从当前目录出发的“相对路径”。
      v. 树形目录结构可以很方便地对文件进行分类,层次结构清晰,也能够更有效地进行文件的管理和保护。但是,树形结构不便于实现文件的共享。为此,提出了“无环图目录结构”。
    46. 无环图目录结构
      i. 在树形目录结构的基础上,增加一些指向同一节点的有向边,使整个目录成为一个有向无环图。可以更方便地实现多个用户间的文件共享。
      ii. 可以用不同的文件名指向同一个文件,甚至可以指向同一个目录(共享同一目录下的所有内容)
      iii. 需要为每个共享结点设置一个共享计数器,用于记录此时有多少个地方在共享该结点。用户提出删除结点的请求时,只是删除该用户的FCB、并使共享计数器减1,并不会直接删除共享结点。
    47. 索引结点(对文件控制块FCB的优化)
    48. 其实在查找各级目录的过程中只需要用到“文件名”这个信息,只有文件名匹配时,才需要读出文件的其他信息。因此可以考虑让目录表“瘦身”来提升效率。
    49. 索引结点:除了文件名之外的文件描述信息都存在这
    50. 目录项中只包含文件名、索引结点指针,因此每个目录项的长度大幅减小
    51. 由于目录项长度减小,因此每个磁盘块可以存放更多个目录项,因此检索文件时磁盘I/O的次数就少了很多
      4.1.4 文件的物理结构(上)
    52. 连续分配
    53. 链接分配
    54. 隐式链接
    55. 显式链接
    56. 索引分配
      4.1.4 文件的物理结构(下)

    4.1.5 文件存储空间管理

    1. 存储空间的划分与初始化
    2. 文件卷(逻辑卷)的概念
    3. 目录区与文件区
    4. 几种管理方法
    5. 空闲表法
    6. 空闲链表法
      i. 空闲盘块链
      ii. 空闲盘区链
    7. 位示图法
    8. 成组链接法
      4.1.6 文件的基本操作

    4.1.7 文件共享

    1. 基于索引结点(硬链接)
    2. 索引结点中设置一个链接计数变量count,用于表示链接到本索引结点上的用户目录项数。
    3. 若count =2,说明此时有两个用户目录项链接到该索引结点上,或者说是有两个用户在共享此文件。若某个用户决定“删除”该文件,则只是要把用户目录中与该文件对应的目录项删除,且索引结点的count值减1。
    4. 若count>0,说明还有别的用户要使用该文件,暂时不能把文件数据删除,否则会导致指针悬空。
    5. 当count =0时系统负责删除文件。
    6. 基于符号链(软链接)
    7. Link类型的文件,记录了文件1的存放路径“C:/User1/aaa”类似于 Windows 操作系统的“快捷方式”
    8. 操作系统根据路径一层层查找目录,最终找到共享文件
    9. 即使软链接指向的共享文件已被删除,Link 型文件依然存在,只是通过Link型文件中的路径去查找共享文件会失败(找不到对应目录项)
    10. 由于用软链接的方式访问共享文件时要查询多级目录,会有多次磁盘I/O,因此用软链接访问
      4.1.8 文件保护
    11. 口令保护
    12. 口令一般存放在文件对应的FCB或索引结点中。用户访问文件前需要先输入“口令”,操作系统会将用户提供的口令与FCB中存储的口令进行对比,如果正确,则允许该用户访问文件
    13. 优点:保存口令的空间开销不多,验证口令的时间开销也很小。
    14. 缺点:正确的“口令”存放在系统内部,不够安全。
    15. 加密保护
    16. 使用某个“密码”对文件进行加密,在访问文件时需要提供正确的“密码”才能对文件进行正确的解密。
    17. 访问控制
    18. 在每个文件的FCB(或索引结点)中增加一个访问控制列表(Access-Control List, ACL),该表中记录了各个用户可以对该文件执行哪些操作。
    19. 精简的访问列表:以“组”为单位,标记各“组”用户可以对文件执行哪些操作。如:分为系统管理员、文件主、文件主的伙伴、其他用户几个分组。
    20. 当某用户想要访问文件时,系统会检查该用户所属的分组是否有相应的访问权限。
    展开全文
    hdq1745 2021-10-24 17:44:41
  • 实现了简单的文件系统操作。 没有实现磁盘块之间的连接,目录与磁盘属于一对一链接,没法指定磁盘块存放并且文件内容超出磁盘块就无法存储了。 #include<iostream> #include<string> using namespace ...

    实现了简单的文件系统的操作。
    没有实现磁盘块之间的连接,目录与磁盘属于一对一链接,没法指定磁盘块存放并且文件内容超出磁盘块就无法存储了。

    #include<iostream>
    #include<string>
    using namespace std;
    
    const int MaxsizeOfIndex = 10;			//目录的大小
    const int MaxsizeOfDiskBlock = 2000;	//磁盘块的大小
    
    //磁盘
    typedef struct Disk {			
    	char disk[MaxsizeOfDiskBlock];		//磁盘块中存储的内容
    };
    
    //目录
    typedef struct Index{		
    	int empty;				//当前目录是否有文件
    	char name[10];			//文件名
    };
    
    Disk d[MaxsizeOfIndex];									//磁盘块号
    Index f[MaxsizeOfIndex];								//目录
    
    //函数的声明
    void create();
    void Delete();
    void open();
    void write();
    void write_add();
    void delete_content();
    void show_file_system();
    
    int main() {
    	int op_type;   //操作种类
    
    	//文件系统初始化,全部标记为未使用
    	for (int i = 0; i < MaxsizeOfIndex; i++) {
    		f[i].empty = 0;  
    	}
    
    	//文件系统操作
    	while (1) {
    		cout << "1.创建文件" << " 2.删除文件" << " 3.读文件" << " 4.写入文件" << " 5.添加文件内容" <<" 6.删除文件内容" <<" 7.结束" << endl;
    		cout << "请输入:";
    		cin >> op_type;			//输入操作码
    		switch (op_type)
    		{
    		case 1:create(); break;
    		case 2:Delete(); break;
    		case 3:open(); break;
    		case 4:write(); break;
    		case 5:write_add(); break;
    		case 6:delete_content(); break;
    		default:
    			break;
    		}
    		if (op_type == 7) 
    			break;
    		show_file_system();
    	}
    	return 0;
    }
    
    //创建文件(创建索引)
    void create() {
    	int state = 0;										//标记是否正常创建文件,后面所有state均为标记,标记功能是否正常运行
    	char write_state = 'N';                             //写入标记,创建完文件询问是否需要直接写入
    	char Delete_state = 'N';                            //删除标记,空间不足,询问是否删除
    	for (int i = 0; i < MaxsizeOfIndex; i++) {
    		if (f[i].empty == 0) {							//找到空区域
    			f[i].empty = 1;								//标记为已用
    			cout << "请输入文件名:";					//输入想要创建的文件的名称 
    			cin >> f[i].name;							
    			state = 1;                                  //标记为正常创建
    			cout << "是否要输入文件内容(Y/N):";		//询问创建之后要不要输入
    			cin >> write_state;
    			if (write_state == 'Y') {
    				cout << "请输入文件内容:";             //为了不用重复输入文件名,这里没有调用write(),感觉可以使用同名函数
    				cin >> d[i].disk;
    			}
    			break;
    		}
    	} 
    	if (state == 0) {									//没有空区域,询问是否删除
    		cout << "没有剩余空间,删除文件(Y/N):";
    		cin >> Delete_state;
    		if (Delete_state == 'Y') {                    
    			Delete();
    		}
    
    	}
    
    }
    
    //删除文件(删除索引)
    void Delete() {											//将此处标记为空,删除索引,不用删除内容
    	char name[10];
    	int state = 0;
    	char Delete_state;
    	cout << "请输入想删除的文件名:";					//输入需要删除的文件名
    	cin >> name;
    	for (int i = 0; i < MaxsizeOfIndex; i++) {
    		if (strcmp(f[i].name, name) == 0 && f[i].empty == 1) {	//找到同名文件,且块为占用块
    			f[i].empty = 0;								//标记为空
    			cout << "删除成功" << endl;
    			state = 1;									//标记正常删除文件索引
    			break;
    		}
    	} 
    	if (state == 0) {                                   //未正常删除
    		cout << "删除失败,请输入正确的文件名,重新输入(Y/N): ";
    		cin >> Delete_state;
    		if (Delete_state == 'Y') {
    			Delete();
    		}
    	}
    }
    
    //打开文件
    void open() {
    	char name[10];
    	char write_state;
    	char empty_cmp[2000] = { '\0' };
    	cout << "请输入文件名要打开的:";								//输入想要打开的文件名 
    	cin >> name;
    	for (int i = 0; i < MaxsizeOfIndex; i++) {
    		if (strcmp(f[i].name, name) == 0 && f[i].empty == 1) {		//名字相同,且块不为空,因为删除的时候,不会删除其中的名字,只是标记为空
    			if (strcmp(d[i].disk, empty_cmp) == 0) {				//块内无内容,询问要不要先写入
    				cout << "文件内容为空,请先写入文件,写入(Y/N):"<<endl;
    				cin >> write_state;
    				if (write_state == 'Y') {
    					write();
    				}
    			}
    			else {													//块内有内容,直接读出
    				cout << "文件内容为:" << endl;
    				cout << d[i].disk << endl;
    			}
    			break;
    
    		}
    	}
    }
    
    //写入文件
    void write() {
    	char name[10];
    	int state = 0;
    	char write_state = 'N';
    	cout << "请输入文件名:";
    	cin >> name;
    	for (int i = 0; i < MaxsizeOfIndex; i++) {
    		if (strcmp(f[i].name, name) == 0 && f[i].empty == 1) {		//找到已经建立索引的文件
    			cout << "请输入文件内容:";
    			cin >> d[i].disk;										//将内容写入到对应的磁盘块中
    			state = 1;												//标记为正常写入
    			break;
    		}
    	}
    	if (state == 0) {												//写入失败
    		cout << "写入失败,请输入正确的文件名,重新输入(Y/N): ";
    		cin >> write_state;
    		if (write_state == 'Y') {
    			write();
    		}
    	}
    }
    
    //添加文件内容
    void write_add() {												//在文件最后添加内容
    	char content[100];
    	char name[10];
    	int char_site;
    	int size;
    	cout << "请输入想操作的文件:";
    	cin >> name;
    	cout << "想要添入的内容:";
    	cin >> content;
    	cout << "请输入想添加到的位置:";
    	cin >> char_site;
    	for (int i = 0; i < MaxsizeOfIndex; i++) {
    		if (strcmp(f[i].name, name) == 0 && f[i].empty == 1) {
    			int temp = i;
    			for (int i = sizeof(d[temp].disk)-1; i > char_site ; i--) {    //向后挪出空间
    				d[temp].disk[i + strlen(content)] = d[temp].disk[i];
    			}
    			for (int i = 0; i < strlen(content); i++) {   //这里不能使用sizeof,因为sizeof包括了最后的'\0',会导致输出认为到这里就结束了
    				d[temp].disk[i + char_site] = content[i];
    			}
    		}
    	}
    	cout << "写入成功";
    }
    
    //删除文件内容
    void delete_content() {
    	char name[10];
    	int state = 0;
    	char Delete_state = 'N';
    	cout << "请输入想要删除的文件内容的文件名:";
    	cin >> name;
    	for (int i = 0; i < MaxsizeOfIndex; i++) {					
    		if (strcmp(f[i].name, name) == 0 && f[i].empty == 1) {
    			memset(d[i].disk, '\0', sizeof(d[i].disk));			//把磁盘块设置为空
    			cout << "删除完成";									//正常删除
    			state = 1;
    			break;
    		}
    	}
    	if (state == 0) {											//删除失败
    		cout << "删除失败,请输入正确的文件名,重新输入(Y/N): "<<endl;
    		cin >> Delete_state;
    		if (Delete_state == 'Y') {
    			delete_content();
    		}
    	}
    }
    
    void show_file_system() {
    	int state = 0;
    	cout << "文件号" << "	" << "文件名" <<endl;
    	for (int i = 0; i < MaxsizeOfIndex; i++) {
    		if (f[i].empty == 1) {
    			state = 1;
    			cout << i + 1 << "	" << f[i].name << endl;
    		}
    	}
    	if (state == 0) {
    		cout << "无文件" << endl;
    	}
    }
    
    展开全文
    weixin_43479869 2020-12-22 18:08:36
  • 文章目录5.1 文件管理概述5.2 文件结构5.2.1 文件的逻辑结构5.2.2 文件的物理结构5.3 文件目录管理5.4 文件的存储设备5.4.1 文件的存储...所以在操作系统中又增加了文件管理功能,即构成一个文件系统,负责管理在外存

    操作系统全家桶:传送门
    一、操作系统引述:https://blog.csdn.net/diviner_s/article/details/108829327
    二、处理器管理:https://blog.csdn.net/diviner_s/article/details/108940809
    三、存储器管理:https://blog.csdn.net/diviner_s/article/details/112245241
    四、设备管理:https://blog.csdn.net/diviner_s/article/details/112250905
    五、文件管理:https://blog.csdn.net/diviner_s/article/details/112253441
    六、用户接口:https://blog.csdn.net/diviner_s/article/details/112255959

    在这里插入图片描述

    5.1 文件管理概述

    一、文件管理基本功能

    • 在现代计算机系统中,要用到大量的程序和数据,因内存容量有限,且不能长期保存,所以把它们以文件的形式存放在外存中,需要时再随时将它们调入内存。所以在操作系统中又增加了文件管理功能,即构成一个文件系统,负责管理在外存上的文件,并把对文件的存取、共享和保护等手段提供给用户。这不仅方便了用户,保证了文件的安全性,还可有效地提高系统资源的利用率。

    • 在现代OS中,是通过文件系统来组织和管理在计算机中存储的大量程序和数据;即文件系统的管理功能,是通过把它所管理的程序和数据组织成一系列文件的方法来实现的。

    • 文件管理系统,简称文件系统。

      • 文件系统 = 文件管理程序 + 它所管理的全部文件 + 文件管理所需的数据结构
      • 文件管理五大功能(用户角度 + 系统角度):
        1)文件存储空间管理(即外存管理),分配与回收;
        2)文件目录管理;
        3)实现逻辑文件到物理文件的转换和映射;
        4)实现对文件的各种控制操作和存取操作;
        5)实现文件信息的共享,以及文件保密和保护措施。

    二、文件系统中的一些概念

    • 1、文件:简单说文件是指具有文件名的若干相关元素的集合。详细说文件是具有符号名的、在逻辑上具有完整意义的一组相关信息项的集合,保存在外存上并具有长期保存性。
    • 2、文件系统的核心:是实现对文件的按名存取。
    • 3、文件的属性:文件类型、长度、建立时间、存取控制等
    • 4、文件的访问单位:位、字节、数据项、记录等
    • 5、数据项:数据项是最低级的数据组织形式,分为两种:
      • 1)基本数据项。这是用于描述一个对象的某种属性的字符集,是数据组织中可以命名的最小逻辑数据单位,即原子数据,又称为数据元素或字段。它的命名通常和其属性一致。例如,用于描述一个学生的基本数据项有学号、姓名、年龄、班级等。
      • 2)组合数据项。它是由若干个基本数据项组成的,简称组项。例如,班长便是一个组项,它由正班长和副班长两个基本项组成。又如,工资也是一个组项,它可由基本工资、绩效工资和补助组成。
      • 基本数据项除了数据名外,还应有数据类型。因为基本项仅是描述某个对象的属性,根据属性的不同,需要用不同的数据类型来描述。

    6、记录:记录是一组相关数据项的集合,用于描述一个对象在某方面的属性。一个记录应包含哪些数据项,取决于需要描述对象的哪些方面。而一个对象由于他所处的环境不同可把他作为不同的对象。

    • 例如,一个14岁的青少年,把他作为一个学生时,对他的描述应使用学号、姓名、年龄、班级等数据项。但若把他作为一个医疗对象,对他描述的数据项应使用病例号、姓名、性别、身高、体重及病史等项。
    • 在诸多记录中,为了能唯一的标识一个记录,必须在一个记录的各个数据项中,确定出一个或几个数据项,把它们的集合称为关键字(key)。或者说,关键字是唯一能标识一个记录的数据项。通常,只需用一个数据项作为关键字。

    7、文件、记录和数据项之间的层次关系:
    在这里插入图片描述
    三、文件类型

    • 根据不同角度,可以将文件划分为不同类别。
    • 1、按性质和用途可分为:
      • 1)系统文件:如内核,系统应用程序,数据;只允许用户执行,不能读写和修改。
      • 2)库文件:只允许读和执行,如C子程序库。
      • 3)用户文件:由用户建立的文件,如源程序、目标程序和数据文件等。只允许文件所有者和所有者授权用户使用。

    2、按信息的保存期限可分为:

    • 1)临时文件:即记有临时性信息的文件。用于系统在工作过程中产生的中间文件,一般有暂存的目录。正常工作情况下,工作完毕会自动删除,一旦有异常情况往往会残留不少临时文件。
    • 2)永久性文件:其信息需要长期保存的文件。指一般受系统管理的各种系统和用户文件,经过安装或编辑、 编译生成的文件,存放在软盘、硬盘或光盘等外存上。
    • 3)档案文件:系统或一些实用工具软件包在工作过程中记录在案的文档资料文件,以便查阅历史档案。

    3、按文件中数据的形式可分为:

    • 1)源文件:由源程序和数据构成的文件。通常由终端或输入设备输入的源程序和数据所形成的文件都属于源文件。
    • 2)目标文件:把源程序经过相应语言的编译程序编译过,但尚未经过链接程序链接的目标代码所构成的文件。它属于二进制文件。通常,目标文件所使用的后缀名是“.obj”。
    • 3)可执行文件:把编译后所产生的目标代码再经过链接程序链接后所形成的文件。

    4、按存取控制属性可分为:

    • 1)只执行文件:只允许被核准的用户调用执行,既不允许读,更不允许写。
    • 2)只读文件:只允许文件主及被核准的用户去读,但不允许写。
    • 3)读写文件:允许文件主和被核准的用户去读或写的文件。
    • 4)无保护文件。
    • 各个操作系统的保护方法和级别有所不同:DOS操作系统有系统、隐藏、可写三种保护;UNIX或Linux操作系统有九个级别的保护。

    5、按文件的逻辑结构可分为:

    • 1)有结构文件(记录式文件):由若干个记录所构成的文件,如大量的数据结构和数据库。
    • 2)无结构文件(流式文件):直接由字符序列所构成的文件,文件长度为所含字符数。如大量的源程序,可执行程序,库函数。

    6、按文件的物理结构可分为:

    • 1)顺序文件(连续文件):文件中的记录,顺序地存储到连续的物理盘块中,顺序文件中所记录的次序,与它们存储在物理介质上存放的次序是一致的。
    • 2)链接文件:文件中的记录可存储在并不相邻接的各个物理块中,通过物理块中的链接指针组成一个链表管理。
    • 3)索引文件:文件中的记录可存储在并不相邻接的各个物理块中,记录和物理块之间通过索引表项按关键字存取文件,通过物理块中的索引表管理,形成一个完整的文件。
    • 4)Hash文件:通过散列函数实现存储的文件。

    7、按文件的内容形式和系统处理方式可分为:

    • 1)普通文件:由ASCII码或二进制码组成的文件。一般用户建立的源程序文件、数据文件、目标代码文件及操作系统自身代码文件、库文件等都是普通文件,它们通常存储在外存储设备上。
    • 2)目录文件:由文件目录组成的,用来管理和实现文件系统功能的系统文件,通过目录文件可对其它文件的信息进行检索。目录文件也是由字符序列构成,可进行与普通文件一样的各种操作。
    • 3)特殊文件(设备文件):特指系统中的各类I/O设备。为了便于统一管理,系统将所有的输入/输出设备都视为文件,按文件方式提供给用户使用。
      在这里插入图片描述

    四、文件扩展名与文件属性

    1、用户对文件是“按名存取”的。很多操作系统支持的文件名都由两部分构成:文件名和扩展名,二者间用圆点分开。
    在这里插入图片描述

    2、常用图像文件类型

    • BMP格式:Bitmap(位图),Windows操作系统中的标准图像文件格式,包含的图像信息较丰富,几乎不进行压缩,缺点是占用磁盘空间过大
    • GIF格式:图形交换格式,压缩比高,磁盘空间占用较少,支持简单2D动画
    • JPEG格式(扩展名为.jpg或.jpeg):高度压缩,图像的颜色质量有所降低,设计师不会选用这种格式,但报业用户使用的较多
    • JPEG2000格式:与JPEG相比,它具备更高压缩率以及更多新功能的新一代静态影像压缩技术。
    • TIFF格式:是Mac中广泛使用的图像格式,特点是图像格式复杂、存贮信息多,非常有利于原稿的复制
    • PSD格式:Photoshop的专用格式,在Photoshop所支持的各种图像格式中,PSD的存取速度比其它格式快很多,功能也很强大
    • PNG格式:PNG是目前最不失真的格式,汲取了GIF和JPG二者的优点,存贮形式丰富,能把图像文件压缩到极限,利于网络传输,又能保留与图像品质有关的信息,缺点是不支持动画应用效果
    • SWF格式:Flash制作出一种后缀名为SWF(Shockwave Format)的动画,适合网络传输,放大不失真

    3、常用声音文件类型

    • CD格式:天籁之音,近似无损的,基本上是忠于原声,*.cda
    • WAV:无损的音乐,微软公司开发,WAV格式的声音文件质量和CD相差无几
    • MP3:流行的风尚,诞生于八十年代的德国,文件尺寸小,音质好
    • MIDI:作曲家的最爱
    • WMA:最具实力的敌人,音质要强于MP3格式,更远胜于RA格式

    4、常用视频文件类型

    • AVI格式:最清晰的、最常用的
    • DV-AVI格式:摄像机采集常用
    • MPEG格式:MPEG-1 、MPEG-2 、MPEG-4
    • DivX格式(DVDrip)
    • RM格式:用的少了
    • RMVB格式:比RM清晰些,一部大小为700MB左右的DVD影片,转录成同样视听品质的RMVB格式,最多也就400MB左右,具有内置字幕和无需外挂插件支持

    5、文件属性:描述文件特征的属性
    在这里插入图片描述
    五、文件系统模型

    • 文件系统模型:模型分为三个层次,最底层是对象及其属性说明;中间层是对对象进行操纵和管理的软件集合,最高层是文件系统提供给用户的外文件系统接口。
      在这里插入图片描述

    1、对象及其属性说明:文件管理系统管理的对象有三种

    • 1)文件。文件管理的直接对象。
    • 2)目录。为了方便用户对文件的存取和检索,在文件系统中必须配置目录,每个目录项中,必须含有文件名及该文件所在的物理地址(或指针)。对目录的组织和管理是方便用户和提高对文件存取速度的关键。
    • 3)磁盘(磁带)存储空间。文件和目录要占用存储空间,对这部分空间的有效管理,不仅能提高外存的利用率,而且能提高对文件的存取速度。

    2、对对象操纵和管理的软件集合:是文件管理系统的核心部分,文件系统的功能大多是在这一层实现的,包括:对文件存储空间的管理、对文件目录的管理、用于将文件的逻辑地址转换为物理地址的机制、对文件读和写的管理,以及对文件的共享与保护等功能。

    • 1)输入输出控制层:也叫设备驱动程序层,负责启动输入输出操作、对设备发来的输入输出信号进行处理。
    • 2)基本文件系统:也叫物理输入输出层,用于处理主存与磁盘间数据块的交换。
    • 3)基本输入输出管理程序:也叫文件组织模块,负责与磁盘输入输出有关的事务,如选择设备、逻辑块号到物理块号的转换、空闲盘块的管理、输入输出缓冲的指定。
    • 4)逻辑文件系统:负责文件和记录的相关操作。

    3、文件系统接口:

    • 为方便用户使用文件系统,文件系统通常向用户提供两种类型的接口:
      1)命令接口(命令行/图形):作为用户与文件系统交互的接口。用户可通过键盘终端键入命令或使用图标菜单等,取得文件系统的服务。
      2)程序接口:作为用户程序与文件系统的接口。用户程序可通过系统调用来取得文件系统的服务。

    六、常见文件系统的类型
    在这里插入图片描述
    在这里插入图片描述

    • exFAT:扩展FAT,适合闪存、U盘。

    • EXT2、EXT3、EXT4:Linux采用的文件系统

    • HFS:分层文件系统,Mac OS使用,最初被设计用于软盘和硬盘,同时也可以在在只读媒体如CD-ROM上见到。

    • RAW:磁盘未经处理或者未经格式化产生的的文件系统。造成原因:

      • 未格式化
      • 硬盘出现坏道
      • 病毒
    • FAT文件系统:FAT(文件分配表)是一个主要的计算机档案系统应用于各种操作系统中,主要用于DOS中,包括DR-DOS、OpenDOS、freeDOS、MS-DOS、Windows(Windows Me及Windows Me之前的Windows操作系统),FAT同样适用于可移动闪存盘和存储卡。

      • 下面的表显示设备应该在什么的FAT系统下格式化:
        在这里插入图片描述
    • NTFS文件系统:NTFS是基于Windows NT的文件系统,包括Windows 2000、Windows XP、Windows Server 2003、和Windows Server 2008及后续系统。NTFS是为Windows系统中的驱动器所设计(硬盘驱动器及固态硬盘驱动器)。NTFS有几项改进,如改进的FAT支持元数据和使用先进的数据结构来改善性能,可靠性和磁盘空间的利用,再加上额外的扩展,如安全访问控制列表和文件系统日志。

      • 注意:NTFS格式的设备无法在MAC的电脑上写入数据。大多数MAC电脑能读取NTFS,但是不能写入。NTFS是一个日志文件系统,它会产生更多的读或写的活动,因此可能会减少闪存盘的寿命。一旦设备被格式化成NTFS格式,你必须使用“安全移除硬件”。
      • NTFS的四大优点:
        1)具备错误预警的文件系统:如果MFT(主文件表)所在的磁盘扇区恰好出现损坏,NTFS文件系统会比较智能地将MFT换到硬盘的其他扇区,保证了文件系统的正常使用。
        2)文件读取速度更高效
        3)磁盘自我修复功能:NTFS文件系统每次读写时,都会检查扇区正确与否。当读取时发现错误,NTFS会报告这个错误;当向磁盘写文件时发现错误,NTFS将会十分智能地换一个完好位置存储数据,操作不会受到任何影响。在这两种情况下,NTFS都会在坏扇区上作标记,以防今后被使用。
        4)事件日志功能

    5.2 文件结构

    • 文件组织的两种观点:
      • 用户观点(文件的逻辑结构):研究的是用户思维中的抽象文件,也叫逻辑文件。其目的是为用户提供一种结构清晰、使用简便的逻辑组织。用户按此去存储、检索和加工处理有关文件信息。
      • 实现观点或系统观点(文件的物理结构):研究的是存储在物理设备介质上的实际文件,即物理文件。其目的是选择一些性能良好、设备利用率高的物理结构。系统按此和外部设备打交道,控制信息的传输。

    5.2.1 文件的逻辑结构

    一、文件的逻辑结构分类

    按逻辑结构,文件有无结构文件和有结构文件两种类型。

    1、无结构文件(流式文件)

    • 数据按顺序组织并积累保存,由字符流构成的文件,文件长度按字节计算。
    • 大量的源程序、可执行文件、库函数等,所采用的就是流式文件。
    • 在空间利用上较节省,没有额外的说明和控制信息。
    • 流式文件使用户可以灵活组织文件结构,对OS来说 管理方便。
    • 在UNIX系统中,所有的文件都被看作是流式文件。

    2、有结构文件(记录式文件)

    • 构成文件的基本单位是记录,记录式文件是一组有序记录的集合,按顺序编号,可以按记录号访问。
    • 记录是一个具有特定意义的信息单位,可以指定关键字,按关键字进行访问。
    • 记录式文件可把记录按各种不同的方式排列,以便用户对文件中的记录进行修改、追加、查找和管理。
      在这里插入图片描述

    二、有结构文件的分类

    1、有结构文件按记录的长度可分为:定长记录文件和变长记录文件

    • 1)定长记录文件(常用):
      所有记录长度相等;
      检索方便,根据记录号i及记录长度l;
      存储空间浪费大。
    • 2)变长记录文件:
      各个记录长度不等;
      只能顺序查找;
      存储空间浪费小。
      在这里插入图片描述

    2、有结构文件按记录的组织形式可以分为:

    • 1)顺序文件:文件中的记录一个接一个地顺序排列,记录可以是定长的或变长的,可以顺序存储或以链表形式存储,在访问时需要顺序搜索文件。顺序文件有以下两种结构:

      • ① 第一种是串结构,记录之间的顺序与关键字无关。通常的办法是由时间决定,即按存入时间的先后排列,最先存入的记录作为第1个记录,其次存入的为第2个记录,依此类推。
      • ② 第二种是顺序结构,文件中所有记录按关键字顺序排列。
      • 在对记录进行批量操作时,即每次要读或写一大批记录,对顺序文件的效率是所有逻辑文件中最高的;此外,也只有顺序文件才能存储在磁带上,并能有效地工作,但顺序文件对查找、修改、增加或删除单个记录的操作比较困难。
    • 2)索引文件:

      • 记录式文件,特别是变长记录文件只能顺序查找,系统开销较大。可以建立一张索引表加快检索速度,索引表本身是定长记录的顺序文件。在记录很多或是访问要求高的文件中,需要引入索引以提供有效的访问。实际中,通过索引可以成百上千倍地提高访问速度。
        在这里插入图片描述
    • 3)索引顺序文件:索引顺序文件是顺序和索引两种组织形式结合。索引顺序文件将文件中的所有记录分为若干个组,同组中关键字可以无序,但组与组之间关键字必须有序。为分组的顺序文件建立一张索引表,在索引表中为每组中的第一个记录建立一个索引项,其中含有该记录的关键字值和指向该记录的指针。
      主文件包含关键字和其他数据项。索引表只包含关键字和指针两个数据项,所有关键字递增排列。查找一个记录时,通过索引表找到其所在的组,然后在该组中使用顺序查找找到记录。
      在这里插入图片描述
      对于含有N个记录的顺序文件,查找某关键字值的记录时平均需要查找N/2次。在索引顺序文件中,假设N个记录分为M组,索引表中有M个表项,每组有N/M个记录,在查找某关键字值的记录时,先顺序查找索引表,需要查找M/2次,然后再在主文件中对应的组中顺序查找,也需要查找N/M/2次,这样总共查找M/2+N/M/2次。显然,索引顺序文件提高了查找效率,如果记录数很多,可以釆用两级或多级索引。索引文件和索引顺序文件都提高了存取速度,但因为配置索引表增加了存储空间。

    5.2.2 文件的物理结构

    • 文件的物理结构:是指文件的内部组织形式,亦即文件在物理存储设备上的存放方法,是从系统的角度来看文件。
    • 文件的物理结构决定了文件信息在存储设备上的存储位置,因此,文件信息的逻辑块号到物理块号的转换也是由文件的物理结构决定的。
    • 文件的存取方式也与文件的物理结构有关。
    • 常用的文件物理结构有4种。

    一、文件的访问方式

    • 用户通过对文件的存取来完成对文件的各种操作,文件的存取方式是由文件的性质和用户使用文件的情况而确定的,一般有两种方式:顺序存取和随机存取:

    1、顺序存取:就是按前后次序依次访问文件的各个信息项。要访问第i+1条记录,必须先访问第i条记录。

    • 对记录式文件,是按记录的排列顺序来存取,如当前读取的记录为Ri,则下一次读取的记录被自动地确定为Ri+1。

    • 对流式文件,顺序存取反映读写指针的变化,在存取完一段信息后,读写指针自动指出下次存取的位置。

    • 1)对定长记录文件,有 rpi+1= rpi + l
      顺序存取定长记录文件示意图:
      在这里插入图片描述

    • 2)对变长记录文件 rpi+1 = rpi + li ,li是第i个记录的长度。
      顺序存取变长记录文件示意图:
      在这里插入图片描述

    • 顺序存取的优缺点:

      • 顺序存取的最佳应用是对记录进行批量存取,即每次要读或写一大批记录时,顺序存取的效率很高。适合数据统计和汇总
      • 如果用户要查找或修改单个记录,系统需要逐个查找记录。这时,顺序存取的性能就比较差,尤其是当文件较大时,情况更为严重。不适合用户随机查找、增加或删除记录。

    2、随机存取:又称直接存取,允许用户直接存取文件中的任一记录,或者是根据存取命令把读写指针移到指定处读写。

    • 随机存取定长记录文件示意图:
      在这里插入图片描述
    • 随机存取方式允许以任意顺序读取文件中的字节或记录,要设置读/写指针的当前位置
    • 随机方式下读/写等操作都以块号为参数(**按地址存取)

    二、文件的物理结构

    主要有四种物理结构:

    • 顺序结构 链接结构
    • 索引结构 散列结构

    1、顺序结构(连续结构):是一种最简单的物理结构,它把逻辑上连续的文件信息依次存放在连续编号的物理块中。

    • 只要知道文件在存储设备上的起始地址(首块号)和文件长度(总块数),就能很快地进行存取。顺序存取效果好,也一定程度支持随机存取。
    • 优点:结构简单,访问速度快。
    • 缺点:文件长度动态增加困难,不适合某些需要经常修改的文件。
    • 文件的顺序结构示意图:
      在这里插入图片描述

    2、链接结构:这种结构将逻辑上连续的文件分散存放在若干不连续的物理块中,每个物理块设有一个指针,指向其后续的物理块。

    • 只要指明文件的第一个块号,就可以按链指针检索整个文件(隐式链接)。
    • 优点:文件长度容易动态变化,
    • 缺点:指针占用存储空间,适合依据指针顺序存取,不适合随机存取访问。
    • 文件的链接结构示意图:
      在这里插入图片描述
    • 如果系统将链接指针全都拿出来集中存放,统一进行管理
      在这里插入图片描述
    • 这就是FAT(文件分配表)(也称为显式链接方式)。
    • FAT链接分配方式的问题:1)不能支持高效的直接存取。要对一个较大的文件进行直接存取,须首先在FAT中顺序地查找许多盘块号。2)FAT需占用较大的内存空间。

    3、索引结构:采用这种结构,逻辑上连续的文件存放在若干不连续的物理块中,系统为每个文件建立一张索引表,索引表记录文件信息所在的逻辑块号和与之对应的物理块号。
    在这里插入图片描述

    • 索引表也以文件的形式存在磁盘上。
      给出索引表的地址,就可以查找与文件逻辑块号对应的物理块号。
      如果索引表过大,会占用较多空间。
      可以采用多级索引结构,将一个大文件的所有索引表(二级索引)的地址放在另一个索引表(一级索引)中。
    • 二级索引(或多级索引):
      在这里插入图片描述
    • 二级索引分配:
      在这里插入图片描述
    • 优点:访问速度快,文件长度可动态变化,适合随机存取,顺序存取性能也可以。
    • 缺点:存储开销大,因为每个文件有一个索引表,而索引表亦由物理块存储,故需要占用额外的外存空间。另外,当文件被打开时,索引表需要读入内存,否则访问速度会降低一半,故又需要占用额外的内存空间,当同时打开的文件很多时,内存开销是可观的。这种结构限制了文件的最大长度。

    4、散列结构:又称杂凑结构或Hash结构,其只适用于定长记录文件和按记录键随机存取的访问方式。散列结构的思想是:通过计算来确定一个记录在存储设备上的存储位置,依次先后存入的两个记录在物理设备上不一定相邻。

    • 按散列结构组织文件的两个关键问题是:
      1)定义散列函数
      2)解决冲突
      在这里插入图片描述

    三、记录的成组与分解

    • 磁盘块的大小是预先划分好的,大小固定;而逻辑记录大小是用户决定的;逻辑记录大小往往与物理块大小不一致,因此,引入记录的成组和分解。
    • 1、记录的成组:把若干个逻辑记录合成一组存放一块的工作。进行成组操作时必须使用主存缓冲区,缓冲区的长度等于逻辑记录长度乘以成组的块因子。记录的成组可以提高存储空间的利用率;减少启动外设的次数,提高工作效率。
    • 2、记录的分解:从一组逻辑记录中把一个逻辑记录分离出来的操作。进程是先从磁盘中找到记录所在的块,并将本块读入主存缓冲区,再从缓冲区取出所需要的记录送到用户工作区。如果用户所需的记录已经在缓冲区中,则不需要启动外设读块信息,这也可以提高系统工作效率。
      逻辑记录不能跨越两个块:通常设计的逻辑记录的长度与物理块的长度是有整数倍数的。如果一个逻辑记录占用了两个物理块的尾部和首部,那么这种方式读取效率是大打折扣,即要读入两个物理块才能读取这个逻辑记录。
      在这里插入图片描述
      C,B,D,A

    5.3 文件目录管理

    • 计算机系统中保存有许多文件,用户在创建和使用文件时只给出文件的名字,由文件系统根据文件名找到指定文件。为了便于对文件进行管理,设计了文件目录,用于检索系统中的所有文件。
    • 文件系统的一个最大特点是“按名存取”,只要给出文件的符号名就能存取外存空间的文件信息,而不必关心文件的具体物理地址。实现文件符号名到文件物理地址映射的主要环节是检索文件目录。

    一、文件目录的基本概念

    1、文件的组成

    • 文件由文件体和文件控制块(FCB)两部分。文件控制块FCB是系统为管理文件而设置的一个数据结构。
    • FCB是文件存在的标志。

    2、文件控制块(FCB):文件控制块是用来存放文件各种信息的数据结构,以实现“按名存取”。FCB的有序集合称为文件目录,一个FCB就是一个文件目录项。为了创建一个新文件,系统将分配一个FCB并存放在文件目录中,成为目录项。

    • FCB主要包含以下信息:
      1)基本信息:如文件名、文件的物理位置、文件的逻辑结构、文件的物理结构等。
      2)存取控制信息:如文件存取权限等。
      3)使用信息:如文件建立时间、修改时间等。

    3、文件目录:文件与文件控制块是一一对应的,把所有FCB组织在一起,就构成了文件目录,即文件控制块的有序集合。给该目录也设定一个文件名,就可以通过查找文件目录找到该文件对应的目录项(即FCB)。

    • 文件目录一般有一级目录结构、二级目录结构和多级目录结构。
    • 目录文件:文件目录是需要长期保存的,为了实现文件目录的管理,通常将文件目录以文件的形式保存在外存空间,这个文件就被称为目录文件。目录文件是长度固定的记录式文件。

    4、索引节点:在检索目录文件的过程中,只用到文件名,仅当找到一个目录项(查找文件名与目录项中文件名匹配)时,才需要从该目录项中读出该文件的物理地址。就是在检索目录时,文件的其他描述信息不会用到,也不需调入内存。因此,有的系统(如UNIX)釆用文件名和文件描述信息分开的方法,文件描述信息单独形成一个称为索引结点的数据结构,简称为i结点。在文件目录中的每个目录项仅由文件名和指向对应的i结点的指针构成。

    • 例如:一个FCB的大小是64字节,盘块大小是1KB,每个盘块中可以存放16个FCB(FCB必须连续存放)。而在UNIX系统中一个目录项仅占16字节,其中14字节是文件名,2字节是i结点指针。在1KB的盘块中可存放64个目录项。这样,可使查找文件时平均启动磁盘次数减少到原来的1/4,大大节省了系统开销。
      在这里插入图片描述
      DOS目录项示意图:在这里插入图片描述
      UNIX目录项示意图:
      在这里插入图片描述

    二、一级目录

    • 整个系统设置一张线性目录表,表中包括了所有文件的文件控制块,每个文件控制块都指向一个普通文件。
    • 一级目录结构的优点是简单。
    • 一级目录结构的缺点:
      1)查找速度慢
      2)不允许重名
      3)不便于实现文件共享
    • 一级目录结构示意图:
      在这里插入图片描述

    三、二级目录

    • 把文件目录分成两级,第一级称为主文件目录(MFD),第二级称为用户文件目录(UFD)。每个用户在主文件目录中都有一个登记项,记录了用户和该用户的用户文件目录的物理地址。而在用户文件目录中,存放该用户每一个文件的文件控制块。 二级目录结构实现了文件从名字空间到外存地址空间的映射:用户名→文件名→文件内容。
      • 优点:1)有利于文件的管理、共享和保护;
        2)适用于多用户系统;
        3)不同的用户可以命名相同文件名的文件,不会产生混淆,解决了命名冲突问题。
      • 缺点:不能对文件分类,用户文件较多时查找速度慢。
    • 二级目录结构示意图:
      在这里插入图片描述

    四、多级目录

    • 多级目录结构是对二级目录结构的进一步改进,又称树型目录结构,产生于UNIX系统。
    • 其中:树叶结点表示普通文件(用圆圈表示),非叶结点表示目录文件(用矩形表示)。
      在这里插入图片描述
      在这里插入图片描述
    • 树根结点称为根目录,根目录是惟一的,由它开始可以查找到所有其他目录文件和普通文件,根目录一般可放在内存。
    • 从根结点出发到任一非叶结点或树叶结点都有且仅有一条路径,该路径上的全部分支组成了一个全路径名。采用多级目录结构时,文件名为一个路径名。
    • 多级目录结构的优点是便于文件分类,可为每类文件建立一个子目录;查找速度快,因为每个目录下的文件数目较少;可以实现文件共享。
    • 多级目录结构的缺点是比较复杂,查找一个文件按路径名逐层检查,由于所有文件都放在外存,多次读取磁盘影响速度。
    • 当前目录:为了提高文件检索速度,文件系统向用户提供了一个当前正在使用的目录,称为当前目录(也称工作目录)。
    • 查找一个文件可从当前目录开始,使用部分路径名,又称为“相对路径”。当前目录可根据需要任意改变,当前目录一般存放在内存。
    • 绝对路径名:又称全路径名,是指从根目录开始到达所要查找文件的路径名。 (root)/usr/ml/prog/f1.c
    • 相对路径名:是从当前目录的下级开始书写,如当前目录是/usr/ml,则有: prog/f1.c

    五、Windows和Linux目录结构的差异
    1、系统默认目录的差异

    • 1)Windows安装完成后,会自动建立三个目录:
      分别是:C:\Documents and Settings
      C:\Program Files
      C:\WINDOWS
    • 2)Linux系统安装完成后,会创建更多的默认目录:
      /home目录:用来放置每个帐户的主目录
      /mnt目录:有/cdrom与/floppy两个子目录
      /tmp目录:全部用户和应用程序的临时文件
      /etc目录:系统命令相关的配置文件

    2、“/”与“\”两个符号的差异

    • 1)Windows操作系统中,要表示文件或者目录的路径时,其目录名称之间是以\(反斜杠)作为表示的。
    • 2)在Linux操作系统中,无论将硬盘分为多少个区,每个分区中的文件及目录,都可以在根目录下,在该分区的加载目录中找到。而根目录的标识方法为/(正斜杠)。

    3、大小写的差异以及查询上的不同

    • 1)Windows中,c:\U01与c:\u01两个目录是等价的。
    • 2)Linux中,/u01与/U01两个目录代表不同的目录。为了便于管理,建议在Linux下面建立文件夹时,最好都能够采用小写字母。大写字母主要用来表示一些特殊的文件夹。如Desktop,它表示用户的桌面文件,由系统建立。

    5.4 文件的存储设备

    5.4.1 文件的存储设备

    • 常用的文件存储设备有:磁盘、磁带、光盘等。
    • 存储设备的性质决定了文件的存取方式。
    • 为了有效地利用文件存储设备和便于对文件信息进行处理,通常把文件的存储空间划分成若干个大小相等的物理块,同时,为了便于管理,也将文件划分同样等长的逻辑块,并以块作为分配和内外存之间传送信息的基本单位。块长度是固定的,一般块长是512字节或1024字节。
    • 文件存储设备可分为两类:顺序存取设备和直接存取设备。

    一、文件存储设备的类型

    1、顺序存取设备:顺序存取设备是按信息的物理位置进行定位和读写操作的存储设备。只有在前面的物理块被存取访问之后,才能存取后续的物理块。

    • 1)磁带是一种典型的顺序存取设备。磁带是以磁带上的位置来标识磁带上的数据块,两个相邻的物理块之间一般有一个间隙。
      在这里插入图片描述
    • 2)磁带的存储特性:
      ① 是顺序存取设备,总是从磁头当前位置开始读写。
      ② 磁带上的块不是由地址来标识,是由其在磁带上的位置来识别的。
      ③ 块和块之间有间隙,通过间隙区别物理块。
      ④ 磁带存取速度与信息密度、磁带带速和块间间隙大小有关。带速越高、信息密度越大、块间间隙越小,磁带存取速度越快。
      ⑤ 磁带容量大,使用顺序存取方式时速度快,使用随机存取方式效率低。
    • 3)磁带的优缺点:
      • 缺点:由磁带的读写方式可知,只有当第i块被存取之后,才能存取第i+l块。因此,某个物理块距离磁头当前位置很远时,则要花费很长的时间 “走带”,使该块移动到磁头位置。
      • 优点:容量大,顺序存取方式时速度高。
      • 应用:主要用于后备存储(备份),存储不常用的信息(归档),或用于传递数据的介质。

    2、随机存取设备:

    • 随机存取设备,也称为直接存取设备,是允许直接存取对应存储介质上任意物理块的存储设备。
    • 磁盘是一种典型的随机存取设备。磁盘机有若干磁盘片组成,盘片沿一个固定方向高速旋转,每个盘面对应一个磁头,所有的磁头被固定在一个磁臂上,所有磁头可以沿半径方向同时移动。
    • 常见的随机存取设备有:硬盘、软盘(现在几乎不再使用)、光盘、U盘、闪存盘、移动硬盘等。

    1)硬盘:硬盘结构
    在这里插入图片描述
    硬盘:硬盘的发展史

    • 1956年9月13日,IBM的IBM 350 RAMAC是现代硬盘的雏形,整个硬盘需要50个直径为24英寸表面涂有磁浆的盘片,它相当于两个冰箱的体积,存储容量只有5MB。
    • 1971年,IBM开始采用一种名叫Merlin的技术生产硬盘,这种技术据称能使硬盘头更好地在盘片上索引。
    • 1973年,IBM 3340问世,主流采用红色。每平方英寸存储1.7MB的数据。许多公司共享这些系统,按照时间和存储空间租用它。价格为7.81美元每兆,这个价格比当时汽油的价格还贵38%。它拥有“温彻斯特”这个绰号,也就是现在所熟知的“温氏架构”。来源于它两个30MB的存储单元,是当时出名的“温彻斯特来福枪”的口径和填弹量。至此,硬盘的基本架构被确立。
    • 1979年,IBM发明了Thin Film磁头,使硬盘的数据定位更加准确,因此使得硬盘的密度大幅提升。
    • 1980年,两位前IBM员工创立的公司开发出5.25英寸规格的5MB硬盘,这是首款面向台式机的产品,而该公司正是希捷公司(Seagate)公司。
    • 1982年,日立发布了全球首款容量超过1GB的硬盘。这就是容量为1.2GB的H-8598硬盘。这块硬盘拥有10片14英寸盘片,两个读写磁头。
    • 1980年代末,IBM推出MR(Magneto Resistive磁阻)技术令磁头灵敏度大大提升,使盘片的存储密度较之前的20Mbpsi(bit/每平方英寸)提高了数十倍,该技术为硬盘容量的巨大提升奠定了基础。1991年,IBM应用该技术推出了首款3.5英寸的1GB硬盘。
    • 1970到1991年,硬盘碟片存储密度以每年25%~30%的速度增长;从1991年开始增长到60%~80%;现速度提升到100%甚至200%。从1997年开始的惊人速度提升得益于IBM的GMR(Giant Magneto Resistive,巨磁阻)技术,它使磁头灵敏度进一步提升,进而提高了存储密度。
    • 1993年,康诺(Conner Peripherals)推出了CP30344硬盘容量是340MB。
    • 1995年,为了配合Intel的LX芯片组,昆腾与Intel携手发布UDMA 33接口—EIDE标准将原来接口数据传输率从16.6MB/s提升到了33MB/s。同年,希捷开发出液态轴承(FDB,Fluid Dynamic Bearing)马达。所谓的FDB就是指将陀螺仪上的技术引进到硬盘生产中,用厚度相当于头发直径十分之一的油膜取代金属轴承,减轻了硬盘噪音与发热量。
    • 1998年2月,UDMA 66规格面世。
    • 2003年1月,日立宣布完成20.5亿美元的收购IBM硬盘事业部计划,并成立日立环球存储科技公司(Hitachi GST)。
    • 2005年日立环储和希捷都宣布了将开始大量采用磁盘垂直写入技术,原理是将平行于盘片的磁场方向改变为垂直(90度),更充分地利用的存储空间。
    • 2007年1月,日立环球存储科技宣布发售全球首只1Terabyte的硬盘,比预定时间迟了一年多,售价为399美元,平均每美分可以购得27.5MB硬盘空间。2011年3月,西部数据以43亿美元的价格,收购日立环球存储科技。

    硬盘:硬盘制造厂商

    • 希捷:全球第二大硬盘制造商,2005年并购迈拓(Maxtor)、2011年收购三星旗下硬盘业务
    • 西部数据(Western Digital):总部位于美国加州,收购日立后成为硬盘老大
    • 日立(HITACHI):2002年并购IBM硬盘业务,2011年被西数收购
    • 东芝(TOSHIBA)

    硬盘:硬盘结构
    在这里插入图片描述

    • 硬盘正面贴有产品标签,主要包括厂家信息和产品信息,如商标、型号、序列号、生产日期、容量、参数和设置方法等。
    • 硬盘主要由盘体、控制电路板和接口部件等组成。盘体是一个密封的腔体。硬盘的内部结构通常是指盘体的内部结构;控制电路板上主要有硬盘BIOS、硬盘缓存(即CACHE)和主控制芯片等单元;硬盘接口包括电源插座、数据接口和主、从跳线。
      在这里插入图片描述
      在这里插入图片描述
      在这里插入图片描述

    硬盘:硬盘结构

    • 电源插座连接电源,为硬盘工作提供电力保证。数据接口是硬盘与主板、内存之间进行数据交换的通道,使用一根40针40线(早期)或40针80线(当前)的IDE接口电缆进行连接。新增加的40线是信号屏蔽线,用于屏蔽高速高频数据传输过程中的串扰。中间的主、从盘跳线插座,用以设置主、从硬盘,即设置硬盘驱动器的访问顺序。其设置方法一般标注在盘体外的标签上,也有一些标注在接口处,早期的硬盘还可能印在电路板上。

    • 此外,在硬盘表面有一个透气孔,它的作用是使硬盘内部气压与外部大气压保持一致。由于盘体是密封的,所以,这个透气孔不直接和内部相通,而是经由一个高效过滤器和盘体相通,用以保证盘体内部的洁净无尘,使用中注意不要将它盖住。
      在这里插入图片描述

    • 硬盘主要由盘体、控制电路板和接口部件组成。盘体就是一个密封,封装了多个盘片的腔体;控制电路包含硬盘BIOS,主控芯片和硬盘缓存等单元;接口部件包含电源、数据接口主从跳线等。

    • 硬盘的盘片一般采用合金材料,多数为铝合金(IBM曾经开发过玻璃材质的盘片,现在有些厂家也生产玻璃材质的盘片,但不多见),盘面上涂着磁性材料,片厚一般在0.5mm左右,直径主要有1.8in(1in=25.4mm)、2.5in、3.5in和5.25in 4种,其中2.5in和3.5in盘片应用最广。盘片的转速与盘片大小有关,考虑到惯性及盘片的稳定性,盘片越大转速越低。2.5in硬盘的转速在5400r/min~7200r/min之间;3.5in硬盘的转速在4500r/min~5400r/min之间;而5.25in硬盘转速则在3600r/min~4500r/min之间。随着技术的进步,现在2.5in硬盘的转速最高已达15000r/min,3.5in硬盘的转速最高已达12000r/min。

    • 有些硬盘只装一张盘片,有些则有多张。硬盘盘片安装在主轴电机的转轴上,在主轴电机的带动下作高速旋转。每张盘片的容量称为单碟容量,而一块硬盘的总容量就是所有盘片容量的总和。早期硬盘由于单碟容量低,所以盘片较多。现代硬盘盘片一般只有少数几片,有的硬盘只装一张盘片。这些盘片安装在主轴电机的转轴上,在主轴电机的带动下高速旋转。一块硬盘内的所有盘片都是完全一样的,不然控制部分就太复杂了。一个牌子的一个系列一般都用同一种盘片,使用不同数量的盘片,就出现了一个系列不同容量的硬盘产品。

    • 盘片上的记录密度很大,而且盘片工作时会高速旋转,为保证其工作的稳定,数据保存的长久,所以硬片都是密封在硬盘内部。不可自行拆卸硬盘,在普通环境下空气中的灰尘、指纹、头发丝等细小杂质都会对硬盘造成永久损害。
      在这里插入图片描述
      在这里插入图片描述
      在这里插入图片描述

    • 硬盘驱动器采用高精度、轻型磁头驱动/定位系统。这种系统能使磁头在盘面上快速移动,可在极短的时间内精确定位在由计算机指令指定的磁道上。目前,磁道密度已高达5400Tpi(每英寸磁道数)或更高;还在研究新方法,如在盘上挤压(或刻蚀)图形、凹槽和斑点等作为定位和跟踪标记,以提高到和光盘相等的道密度,从而在保持磁盘机高速度、高位密度和高可靠性的优势下,大幅度提高存储容量。

    • 硬盘驱动器内的电机都是无刷电机,在高速轴承支持下机械磨损很小,可以长时间连续工作。高速旋转的盘体产生明显的陀螺效应,所以硬盘工作时不宜搬动,否则将增加轴承的工作负荷。为了高速存储和读取信息,硬盘驱动器的磁头质量小,惯性也小,硬盘驱动器的寻道速度明显快于软驱和光驱。

    • 硬盘驱动器磁头与磁头臂及伺服定位系统是一个整体。伺服定位系统由磁头臂后的线圈和固定在底板上的电磁控制系统组成。由于定位系统限制,磁头臂只能在盘片的内外磁道之间移动。因此,不管开机还是关机,磁头总在盘片上;所不同的是,关机时磁头停留在盘片启停区,开机时磁头“飞行”在磁盘片上方。

    • 硬盘首先逻辑上被划分为磁道、柱面及扇区。每个盘片的每个面都有一个读写磁头,磁头靠近主轴接触的表面,即线速度最小的地方,是一个特殊的区域,它不存放任何数据,称为启停区或着陆区,启停区外就是数据区。在最外圈,离主轴最远的地方是“0”磁道,硬盘数据的存放就是从最外圈开始的。磁头如何找到“0”磁道的位置,是有一个“0”磁道检测器,由它来完成硬盘的初始定位。“0”磁道是如此的重要,以致很多硬盘仅仅因为“0”磁道损坏就报废,可以通过特殊的修复技术进行修复。
      在这里插入图片描述

    • 硬盘不工作时,磁头停留在启停区,当需要从硬盘读写数据时,磁盘开始旋转。旋转速度达到额定的高速时,磁头就会因盘片旋转产生的气流而抬起,这时磁头才向盘片存放数据的区域移动。盘片旋转产生的气流相当强,足以使磁头托起,并与盘面保持一个微小的距离。这个距离越小,磁头读写数据的灵敏度就越高,对硬盘各部件的要求也越高。早期的磁盘驱动器使磁头保持在盘面上方几微米处飞行。稍后使磁头在盘面上的飞行高度降到约0.1μm~0.5μm,现在的水平已经达到0.005μm~0.01μm,这只是人类头发直径的千分之一。气流既能使磁头脱离开盘面,又能使它保持在离盘面足够近的地方,非常紧密地跟随着磁盘表面呈起伏运动,使磁头飞行处于严格受控状态。磁头必须飞行在盘面上方,不接触盘面,可避免擦伤磁性涂层,更重要的是不让磁性涂层损伤磁头。但磁头也不能离盘面太远,否则就不能使盘面达到足够强的磁化,难以读出盘上的磁化翻转(磁极转换形式,是磁盘上实际记录数据的方式)。
      在这里插入图片描述

    • 硬盘:盘面
      硬盘一般会有一个或多个盘片,每个盘片可以有两个面(Side),即第1个盘片的正面称为0面,反面称为1面;第2个盘片的正面称为2面,反面称为3面,依次类推。每个盘面对应一个磁头(head)用于读写数据。第一个盘面的正面的磁头称为0磁头,背面称为1磁头;第二个盘片正面的磁头称为2磁头,背面称为3磁头,以此类推。盘面数和磁头数是相等的。
      硬盘采用高精度、轻型磁头驱动和定位系统。这种系统能使磁头在盘面上快速移动,读写硬盘时,磁头依靠磁盘高速旋转引起的空气动力效应悬浮在盘面上,与盘面的距离不到1微米(约为头发直径的百分之一),可以在极短的时间内精确定位到计算机指令指定的磁道上。由于定位系统限制,磁头传动臂只能在盘片的内外磁道间移动。因此,不管开机还是关机,磁头总在盘片上。所不同的是,关机时磁头停留在盘片启停区,开机时磁头“飞行”在磁盘片上方。

    • 硬盘:移动头磁盘与固定头磁盘
      移动头磁盘:每个盘面有一个读写磁头,读写时需要首先移动磁头到指定磁道上,再进行读写。
      固定头磁盘:每个磁道都有一个读写磁头,定位读写时不用移动磁头,只需直接定位,甚至实现多磁头同时读写,带来非常大的数据带宽,提升磁盘数据读写速度,而且磁盘静音效果会很好。但固定头磁盘成本高、储存密度低,而且想利用完一个磁盘的几百个磁道,固定头得做的非常小才能在一张直径大约10公分的磁盘上排开这么多磁头,否则就会浪费磁盘空间。

    • 硬盘:磁道
      每个盘片的每个盘面被划分成多个狭窄的同心圆环,数据就是存储在这样的同心圆环上,这样的圆环称为磁道(Track),每个盘面可以划分多个磁道。关机时磁头停留在硬盘的着陆区,这个着陆区以前是位于离盘心最近的区域,不存放任何数据。在后期的硬盘工艺中有些硬盘生产厂商将这个区域被移动到了盘片的外面。
      每个盘面的最外圈,离盘心最远的地方是“0”磁道,向盘心方向依次增长为1磁道,2磁道,等等。硬盘的每一个盘面有300~1024个磁道,新式大容量硬盘每面的磁道数更多。硬盘数据的存放就是从最外圈开始。
      标准的3.5in硬盘盘面通常有几百到几千条磁道。磁道是看不见的,只是盘面上以特殊形式磁化了的一些磁化区,在磁盘格式化时已规划完毕。
      在这里插入图片描述

    • 硬盘:扇区
      根据硬盘规格不同,磁道数可以从几百到成千上万不等。信息以脉冲串的形式记录在这些轨迹中,磁道不是连续记录数据,而是被划分成一段段圆弧,这些圆弧的角速度一样。由于径向长度不一样,线速度也不一样,外圈的线速度较内圈的线速度大,即同样的转速下,外圈在同样时间段里,划过的圆弧长度要比内圈划过的圆弧长度大。每段圆弧叫做一个扇区,每个扇区中的数据作为一个单元同时读出或写入。扇区是硬盘上存储的物理单位,每个扇区可存储128×2ª次方(a=0,1,2,3)字节的数据。从DOS时起,每扇区是128×2²=512字节,没有哪个厂商试图改变。即使要往硬盘上存储一个字节信息,也须一次性把这个字节所在扇区中的全部512字节读入内存,再选择所需的那个字节。扇区的编号是从1开始,而不是0。

      • 扇区有两个主要部分,存储数据地点的标识符和存储数据的数据段。
        ① 标识符就是扇区头标,包括组成扇区三维地址的三个数字:扇区所在的磁头(或盘面)、磁道(或柱面号)以及扇区在磁道上的位置即扇区号。头标中还包括一个字段,其中有显示扇区是否能可靠存储数据,或者是否已发现某个故障因而不宜使用的标记。有些硬盘控制器在扇区头标中还记录有指示字,可在原扇区出错时指引磁盘转到替换扇区或磁道。最后,扇区头标以循环冗余校验(CRC)值作为结束,以供控制器检验扇区头标的读出情况,确保准确无误。
        ② 扇区的第二个主要部分是存储数据的数据段,可分为数据和保护数据的纠错码(ECC)。在初始准备期间,计算机用512个虚拟信息字节(实际数据的存放地)和与这些虚拟信息字节相应的ECC数字填入这个部分。
        • 扇区头标包含一个可识别磁道上该扇区的扇区号。有趣的是,这些扇区号物理上并不连续编号,它们不必用任何特定的顺序指定。扇区头标的设计允许扇区号可以从1到某个最大值,某些情况下可达255。磁盘控制器并不关心上述范围中什么编号安排在哪一个扇区头标中。在很特殊的情况下,扇区还可以共用相同的编号。磁盘控制器甚至根本就不管数据区有多大,只管读出它所找到的数据,或者写入要求它写的数据。
          在这里插入图片描述
        • 扇区编号:给扇区编号的最简单方法是l,2,3,4,5,6等顺序编号,例如软盘就是依次编排。但硬盘和软盘有区别,因为数据读取经常要按顺序读取一系列相邻的扇区(逻辑数据相邻)。如对磁道扇区按物理顺序进行编号,很有可能出现当磁头读取完第一个扇区后,由于盘片转速过快来不及读取下一个扇区,因为物理相邻扇区位置距离是极小的,必须等待转完一圈,这极大浪费了时间。
        • 交叉因子:许多年前,IBM的一位杰出工程师想出一个绝妙办法,即对扇区不使用顺序编号,而是使用一个交叉因子进行编号。交叉因子用比值的方法来表示,如3﹕1表示磁道上的第1个扇区为1号扇区,跳过两个扇区即第4个扇区为2号扇区,持续下去直到给每个物理扇区编上逻辑号为止。例如,每磁道有17个扇区的磁盘按2﹕1的交叉因子编号就是:l,10,2,11,3,12,4,13,5,14,6,15,7,16,8,17,9,而按3﹕1的交叉因子编号就是:l,7,13,2,8,14,3,9,15,4,10,16,5,11,17,6,12。当设置1﹕l的交叉因子时,如果硬盘控制器处理信息足够快,那么读出磁道上的全部扇区只需要旋转一周;但如果硬盘控制器的后处理动作没有这么快,磁盘所转的圈数就等于一个磁道上的扇区数,才能读出每个磁道上的全部数据。
          在这里插入图片描述
    • 硬盘:柱面
      所有盘面上的同一磁道构成一个圆柱,通常称做柱面(Cylinder),每个圆柱上的磁头由上而下从“0”开始编号。数据的读/写按柱面进行,即磁头读/写数据时首先在同一柱面内从“0”磁头开始进行操作,依次向下在同一柱面的不同盘面即磁头上进行操作,只在同一柱面所有的磁头全部读/写完毕后磁头才转移到下一柱面,因为选取磁头只需通过电子切换即可,而选取柱面则必须通过机械切换。电子切换相当快,比在机械上磁头向邻近磁道移动快得多,所以,数据的读/写按柱面进行,而不按盘面进行。也就是说,一个磁道写满数据后,就在同一柱面的下一个盘面来写,一个柱面写满后,才移到下一个扇区开始写数据。读数据也按照这种方式进行,这样就提高了硬盘的读/写效率。
      一块硬盘驱动器的圆柱数(或每个盘面的磁道数)既取决于每条磁道的宽窄(同样,也与磁头的大小有关),也取决于定位机构所决定的磁道间步距的大小。

    • 硬盘:簇
      将物理相邻的若干个扇区称为了一个簇。操作系统读写磁盘的基本单位是扇区,而文件系统的基本单位是簇(Cluster)。在Windows下,随便找个几字节的文件,在其上面点击鼠标右键选择属性,看看实际大小与占用空间两项内容,如大小:15字节(15字节),占用空间4KB(4096字节)。这里的占用空间就是机器分区的簇大小,因为再小的文件都会占用空间,基本单位是4K,所以都会占用4K。
      簇一般有这几类大小 4K,8K,16K,32K,64K等。簇越大存储性能越好,但空间浪费严重。簇越小性能相对越低,但空间利用率高。NTFS格式的文件系统簇的大小为4K。
      硬盘:硬盘分区与文件系统格式
      在这里插入图片描述

    硬盘:硬盘特殊结构

    • 引导控制块(Boot Control Block)包括系统从该分区引导操作系统所需要的信息。如果磁盘没有操作系统,那么这块的内容为空,通常为分区的第一块。UFS(UNIX文件系统的简称)称之为引导块;NTFS称为分区引导扇区。
    • 分区控制块(Partition Control Block)包括分区详细信息,如分区块数、块的大小、空闲块的数量和指计、空闲FCB的数量和指针等。UFS称为超级块;NTFS称为主控文件表。

    硬盘:内存特殊结构

    • 内存分区表包含所有安装分区的信息。
    • 内存目录结构用来保存近来访问过的目录信息。对安装分区的目录,可以包括一个指向 分区表的指针。

    硬盘:硬盘读写数据的过程

    • 现代硬盘寻道都是采用CHS方式,硬盘读取数据时,读写磁头沿径向移动,移到要读取的扇区所在磁道的上方,这段时间称为寻道时间。因读写磁头的起始位置与目标位置之间的距离不同,寻道时间也不同。目前硬盘一般为2到30毫秒,平均约为9毫秒。磁头到达指定磁道后,然后通过盘片的旋转,使得要读取的扇区转到读写磁头的下方,这段时间称为旋转延迟时间。最后,信息在磁盘和内存之间的实际传送时间叫传送时间。一次磁盘服务的总时间就是以上三者之和。
    • 例如:一个7200(转/每分钟)的硬盘,每旋转一周所需时间为60×1000÷7200=8.33毫秒,则平均旋转延迟时间为8.33÷2=4.17毫秒(平均情况下,需要旋转半圈)。
    • 硬盘容量计算公式:
      硬盘容量 = 盘面数×柱面数×扇区数×512字节

    硬盘:磁盘(硬盘)的存储特性

    • ① 是直接存取设备,按地址进行读写。
      ② 磁盘空间位置由三个因素决定:柱面号/磁道号、磁头号/盘面号、扇区号。
      ③ 在磁盘上,信息按柱面存放的,空间分配的基本单位是簇。
      ④ 访问磁盘的时间由三部分组成:寻道时间、旋转延迟时间、传输时间。
      ⑤ 磁盘容量大、访问速度快,可快速定位,完成直接访问。

    2)软盘:

    • 软盘驱动器曾经是电脑一个不可缺少的部件,在必要的时候,它可以为我们 启动计算机,还能用它来传递和备份一些比较小的文件。
    • 软盘在使用之前必须要先格式化(低格),磁盘被分成若干个磁道,每个磁道又分为若干个扇区,每个扇区存储512个字节。
    • 常见的是3.5英寸双面高密度1.44MB的软盘
      80(磁道)* 18(扇区)* 512 bytes(扇区的大小)* 2(双面) = 1440 x1024 bytes = 1440 KB = 1.44MB
      在这里插入图片描述

    3)光盘:

    • 容量大,速度快,价格便宜,但一般不可写,光盘的空间结构与磁盘类似
    • 可读写光盘驱动器价格贵,写过程很麻烦
    • 光盘分类:
      • CD(光盘) CD-ROM(只读光盘机)
        VCD(激光视盘) DVD(数字多用光盘)
        DVD+RW(可反复写入的DVD)
        蓝光技术UDO(大容量光盘 ,双面30G)
      • CD-ROM:CD-ROM即只读光盘,1985出现,存放音频信息,取代乙烯基唱片。通过将CD表面的的某个特定区域凹陷来表示0或1,数据呈螺旋状有中心向边缘散开,长度大约5800米,记录75分钟音频信息,容量约660MB。CD-ROM盘是单面盘,不做成双面盘的原因,不是技术上做不到,而是做一片双面盘的成本比做两片单面盘的成本之和还要高。
      • 一次写光盘(刻录盘):处理好的空白盘,只能写一次。
      • DVD:数字多功能光盘,用于播放高清晰度视频、高质量音乐及存储大容量数据。标准DVD存储密度较高,存储容量4.7GB。
        DVD有五种格式:DVD-VIDEO;DVD-ROM;DVD-R ;DVD-RAW;DVD-AUDIO
      • 蓝光DVD:蓝光光碟(Blue-ray Disc,简称BD)是DVD之后的下一代光盘格式之一,用以存储高品质的影音以及高容量的数据存储。单层的蓝光光碟的容量为25或是27GB,足够录制一个长达4小时的高解析影片。2008年2月,SONY主导的蓝光光碟战胜东芝领导的HD DVD。

    4)U盘:

    • USB闪存盘(简称“U盘”)是基于USB接口、以闪存芯片为存储介质的无需驱动器的存储设备。U盘其体积小巧,适合随身携带,可以随时随地、轻松交换资料数据,是移动办公及数据存储交换产品。
    • U盘原理使用标准的USB接口,容量从几十M到上百G,能够在各种主流操作系统及硬件平台之间作大容量数据存储及交换。
    • U盘结构由五部分组成:USB端口、主控芯片、PCB底板、FLASH(闪存)芯片、外壳封装。
    • U盘基本工作:USB端口负责连接电脑,是数据输入或输出的通道;主控芯片负责各部件的协调管理和下达各项动作指令,并使计算机将U盘识别为“可移动磁盘”,是U盘的“大脑”;FLASH芯片与电脑内存条的原理基本相同,是保存数据的实体,其特点是断电后数据不会丢失,能长期保存;PCB底板是负责提供相应处理数据平台,且将各部件连接在一起。当U盘被操作系统识别后,使用者下达数据存取的动作指令后,USB移动存储盘的工作便包含了这几个处理过程。
    • U盘存储原理:在源极和漏极之间电流单向传导的半导体上形成贮存电子的浮动棚。浮动栅包裹着一层硅氧化膜绝缘体。它的上面是在源极和漏极之间控制传导电流的选择/控制栅。数据是0或1取决于在硅底板上形成的浮动栅中是否有电子。有电子表示为0,无电子为1。写入前删除数据进行初始化,即从所有浮动栅中导出电子,将有所数据归“1”。
      写入时只有数据为0时才进行写入,数据为1时则什么也不做。写入0时,向栅电极和漏极施加高电压,增加在源极和漏极之间传导的电子能量。这样电子就会突破氧化膜绝缘体,进入浮动栅。
      读取数据时,向栅电极施加一定的电压,电流大为1,电流小则定为0。浮动栅没有电子的状态(数据为1)下,在栅电极施加电压的状态时向漏极施加电压,源极和漏极之间由于大量电子的移动,就会产生电流。而在浮动栅有电子的状态(数据为0)下,沟道中传导的电子就会减少。
      计算机把二进制数字信号转为复合二进制数字信号(加入分配、核对、堆栈等指令)读写到USB芯片适配接口,通过芯片处理信号分配给EPROM2存储芯片的相应地址存储二进制数据,实现数据存储。

    5)闪存卡:
    在这里插入图片描述

    • 1984年,东芝提出概念,1988年,Intel首先生产。
    • 长寿命,断电仍能保持所数据信息。
    • 应用:保存设置信息,U盘、电脑的BIOS(基本输入输出程序)、PDA(个人数字助理)、数码相机中保存资料等。
    • 特点:体积小、抗震、质量轻、可擦写1000000次,数据可保存10年。

    6)固态硬盘:

    • 存储介质有闪存(flash芯片)和DRAM两种。市场上绝大多数都是基于Flash闪存的。外观可以被制成多种样式,如:笔记本硬盘、微硬盘、存储卡、U盘等样式。
    • 优点:速度快、不怕震、重量轻。缺点:容量小、价格高。
      在这里插入图片描述
      在这里插入图片描述

    二、廉价磁盘冗余阵列RAID
    1、基本概念

    • RAID是一组物理磁盘的集合,作为一个逻辑磁盘管理和使用。数据被分散存于多个物理磁盘,以提高可靠性。数据备份的功能是在用户数据一旦发生损坏后,利用备份信息可以使损坏数据得以恢复,从而保障了用户数据的安全性。在用户看起来,组成的磁盘组就像是一个硬盘,用户可以对它进行分区,格式化等等。
    • 1988年,Patterson et al.在他的一篇文章中建议用6个特定的磁盘组织来提高磁盘的性能或可靠性,或两方面都同时提高。这个建议很快就被采用,并导致了一种新的I/O设备的诞生,这就是RAID盘。Patterson et al.把RAID定义为廉价磁盘的冗余阵列(Redundant Array of Inexpensive Disks),但工业界把“I”由“廉价的(Inexpensive)”替换成“独立的(Independent)”。
    • 在RAID系统中,磁盘控制器是很重要的硬件部份,因为它影响性能和容错。常用几个控制器来预防控制器故障。小型计算机系统接口(SCSI)适配器具有非常好的读写性能,所以在RAID系统中几乎都使用SCSI。一个驱动器发出读写命令后,SCSI控制器便能与它断连而转向其它驱动器操作,而这个驱动器继续自己的操作。
    • RAID提供了与磁盘镜象和磁盘双工类似的冗余。冗余的级别取决于所使用的RAID级别。在一般的磁盘镜象配置中,一个备份驱动器对应一个主驱动器。在三级RAID中一个奇偶驱动器为两个或多个主驱动器提供镜象,使用一个编码方案向奇偶驱动器写入信息,这些信息与写在其它驱动器上的数据有某种联系。若一个驱动器出故障,奇偶码和其它驱动器一起用来生成丢失的数据部分。

    2、关键技术

    • 1)磁盘镜像:是一种冗余技术,为磁盘提供保护功能,防止磁盘发生故障而造成数据丢失。对于RAID而言,采用镜像技术会同时在阵列中产生两个完全相同的数据副本,分布在两个不同的磁盘驱动器组上。镜像提供了完全的数据冗余能力,当一个数据副本失效不可用时,外部系统仍可正常访问另一副本,不会对应用系统运行和性能产生影响。而且,镜像不需要额外的计算和校验,故障修复非常快,直接复制即可。镜像技术可以从多个副本进行并发读取数据,提供更高的读I/O性能,但不能并行写数据,写多个副本会导致一定的I/O性能降低。镜像技术提供了非常高的数据安全性,其代价也是非常昂贵的,需要至少双倍的存储空间。高成本限制了镜像的广泛应用,主要应用于至关重要的数据保护,这种场合下数据丢失会造成巨大的损失。
    • 2)数据条带:磁盘存储的性能瓶颈在于磁头寻道定位,无法与高速CPU匹配,RAID由多块磁盘组成,数据条带技术将数据以块的方式分布存储在多个磁盘中,从而可以对数据进行并发处理。这样写入和读取数据就可以在多个磁盘上同时进行,并发产生非常高的聚合I/O,有效提高了整体I/O性能,而且具有良好的线性扩展性。这对大容量数据尤其显著,如果不分块,数据只能按顺序存储在磁盘阵列的磁盘上,需要时再按顺序读取。而通过条带技术,可获得数倍与顺序访问的性能提升。数据条带技术的分块大小可以是一个字节至几KB大小,分块越小,并行处理能力就越强,数据存取速度就越高,但同时就会增加块存取的随机性和块寻址时间。数据条带是基于提高I/O性能而提出的,而对数据可靠性、可用性没有任何改善。实际上,其中任何一个数据条带损坏都会导致整个数据不可用,采用数据条带技术反而增加了数据发生丢失的概念率。
    • 3)数据校验:镜像具有高安全性、高读性能,但冗余开销太昂贵。数据条带通过并发性来大幅提高性能,然而对数据安全性、可靠性未作考虑。数据校验是一种冗余技术,它用校验数据来提供数据的安全,可以检测数据错误,并在能力允许的前提下进行数据重构。相对镜像,数据校验大幅缩减了冗余开销,用较小的代价换取了极佳的数据完整性和可靠性。数据条带技术提供高性能,数据校验提供数据安全性,RAID不同等级往往同时结合使用这两种技术。采用数据校验时,RAID要在写入数据同时进行校验计算,并将得到的校验数据存储在RAID成员磁盘中。校验数据可以集中保存在某个磁盘或分散存储在多个不同磁盘中,甚至校验数据也可以分块,不同RAID等级实现各不相同。当其中一部分数据出错时,就可以对剩余数据和校验数据进行反校验计算重建丢失的数据。校验技术相对于镜像技术的优势在于节省大量开销,但检验技术比镜像技术复杂得多且慢得多。
    • 交叉并行存取(数据条带)
      在这里插入图片描述

    3、RAID的特点

    • 大容量:用N个低价磁盘构成一个统一管理阵列,RAID实际可用容量要小于所有成员磁盘的总容量。RAID容量利用率在50%-90%之间
    • 高性能:受益于数据条带化技术,RAID将数据I/O分散到各个成员磁盘上,从而获得比单个磁盘成倍增长的聚合I/O性能,简单说就是具备N个磁盘的容量,但几乎只有1/N的访问时间,性价比高
    • 高可靠性:使用镜像和校验技术,RAID的冗余技术大幅提升数据可用性和可靠性,保证了若干磁盘出错时,不会导致数据的丢失,不影响系统的连续运行。
    • 可管理性:RAID作为快速可靠的磁盘系统,方便管理

    4、RAID的分级:RAID技术经过不断的发展,现在已拥有了从RAID 0到6七种基本的RAID级别。另外,还有一些基本RAID级别的组合形式,如RAID 10(RAID 0与RAID 1的组合),RAID 50(RAID 0与RAID 5的组合)等。不同RAID级别代表着不同的存储性能、数据安全性和存储成本。RAID级别的选择有三个主要因素:可用性(数据冗余)、性能、成本。如果安全性要求不高,选择RAID0以获得最佳性能。如果可用性和性能是重要的而成本不是一个主要因素,则根据硬盘数量选择RAID 1。如果可用性、成本和性能都同样重要,则根据一般的数据传输和硬盘的数量选择RAID 3、RAID 5。

    • RAID 0:无差错控制的带区组。
      要实现RAID 0必须要有两个以上硬盘驱动器,数据并不是保存在一个硬盘上,而是分成数据块保存在不同驱动器上。因为将数据分布在不同驱动器上,所以数据吞吐率大大提高,驱动器的负载也比较平衡。比如所需读取的文件分布在两个硬盘上,这两个硬盘可以同时读取,那么原来读取同样文件的时间被缩短为1/2。所有级别中RAID 0的速度是最快的。
      RAID 0不需要计算校验码,实现容易。缺点是它没有数据差错控制,没有冗余功能的,如果一个磁盘(物理)损坏,数据发生错误,其它盘上的数据正确也无用了,不能用于对数据稳定性要求高的场合。如果用户进行图象(包括动画)编辑和其它要求传输比较大的场合使用RAID 0比较合适。
    • RAID 1:镜像结构。
      RAID 1结构中,RAID控制器必须能够同时对两个盘进行读操作和对两个镜像盘进行写操作。在一组盘出现问题时,可以使用镜像,提高系统的容错能力。
      RAID 1,每读一次盘只能读出一块数据,数据块传送速率与单独的盘的读取速率相同。RAID 1的校验十分完备,因此对系统的处理能力有很大的影响。当系统需要极高可靠性时,如进行数据统计,那么使用RAID 1比较合适。
      RAID 1技术支持“热替换”,即不断电的情况下对故障磁盘进行更换,更换完毕只要从镜像盘上恢复数据即可。当主硬盘损坏时,镜像硬盘就可以代替主硬盘工作。RAID 1的数据安全性在所有的RAID级别上来说是最好的。但是其磁盘的利用率却只有50%,是所有RAID级别中最低的。
    • RAID 2:带海明码校验。
      从概念上讲,RAID 2同RAID 3类似,两者都是将数据条块化分布于不同的硬盘上,条块单位为位或字节。RAID 2使用海明码技术来提供错误的检查及恢复,技术实施更复杂。因此,在商业环境中很少使用。
      海明码可以在数据发生错误的情况下将错误校正,以保证输出的正确。它的数据传送速率相当高,如果希望达到比较理想的速度,那最好提高保存校验码ECC码的硬盘。要利用海明码,必须要付出数据冗余的代价。
    • RAID 3:带奇偶校验码的并行传送。
      奇偶校验码与RAID 2中的海明码不同,只能查错不能纠错。RAID3采用一个专用的磁盘作为校验盘,其余磁盘作为数据盘,数据按位可字节的方式交叉存储到各个数据盘中。RAID3象RAID 0一样以并行的方式来工作,但速度没有RAID 0快。校验码在写入数据时产生并保存在专门的一个奇偶校验盘上。需要实现时用户必须要有三个以上的驱动器,写入速率与读出速率都很高。主要用于图形(包括动画)等要求吞吐率比较高的场合。不同于RAID 2,RAID 3使用单块磁盘存放奇偶校验信息。如果一块数据磁盘失效,奇偶盘及其他数据盘可以重新产生数据。如果奇偶盘失效,则不影响数据使用。RAID 3对于大量的连续数据可提供很好的传输率,但对于随机数据,奇偶盘会成为写操作的瓶颈。保护数据虽然没有镜像安全性高,但是硬盘利用率得到了很大提高,为(n-1)/n。
    • RAID 4:带奇偶校验码的独立磁盘结构。
      RAID4与RAID3的原理大致相同,区别在于条带化的方式不同。 RAID4按照块的方式来组织数据,写操作只涉及当前数据盘和校验盘两个盘,多个I/O请求可以同时得到处理,提高了系统性能。RAID4按块存储可以保证单块的完整性,可以避免受到其他磁盘上同条带产生的不利影响。RAID4提供了非常好的读性能,但单一的校验盘往往成为系统性能的瓶颈。对于写操作,RAID4只能一个磁盘一个磁盘地写,并且还要写入校验数据,因此写性能比较差。而且随着成员磁盘数量的增加,校验盘的系统瓶颈将更加突出。正是如上这些限制和不足,RAID4在实际应用中很少见,主流存储产品也很少使用RAID4保护。
    • RAID 5:分布式奇偶校验的独立磁盘结构。
      它的奇偶校验码存在于所有磁盘上。RAID 5的读效率很高,写效率一般。因为奇偶校验码在不同的磁盘上,所以提高了可靠性,允许单个磁盘出错。RAID 5也是以数据的校验位来保证数据的安全,但它不是以单独硬盘来存放数据的校验位,而是将数据段的校验位交互存放于各个硬盘上。任何一个硬盘损坏,都可以根据其它硬盘上的校验位来重建损坏的数据。RAID 3与RAID 5相比,在于RAID 3每进行一次数据传输,需涉及到所有的阵列盘。对于RAID 5来说,大部分数据传输只对一块磁盘操作。RAID 5不存在并发写操作时的校验盘性能瓶颈问题。RAID 5兼顾存储性能、数据安全和存储成本等各方面因素,是目前综合性能最佳的数据保护解决方案,数据中心大多采用RAID 5。
    • RAID 6:带有两种分布存储的奇偶校验码的独立磁盘结构。
      RAID 6是对RAID 5的扩展,主要是用于要求数据绝对不能出错的场合。RAID 6增加了第二个独立的奇偶校验信息块。两个独立的奇偶系统使用不同的算法,数据的可靠性非常高,即使两块磁盘同时失效,也不会影响数据的使用,由于引入了第二种奇偶校验值,所以需要N+2个磁盘,
      RAID 6相对于RAID 5有更大的“写损失”。RAID 6的写性能非常差, 同时对控制器的设计变得十分复杂,用于计算奇偶校验值和验证数据正确性所花费的时间比较多,造成了不必须的负载,成本也要高于RAID 5许多,因此,RAID 6很少得到实际应用,主要用于对数据安全等级要求非常高的场合。它一般是替代 RAID 10方案的经济性选择。
    • RAID 7:优化的高速数据传送磁盘结构。
      RAID7是在RAID6的基础上,采用了cache技术,它使得传输率和响应速度都有较大的提高。Cache是一种高速缓冲存储器,即数据在写入磁盘阵列以前,先写入cache中。在写入时将数据分别写入两个独立的cache,这样即使其中有一个cache出故障,数据也不会丢失。在读出时,主机也是直接从cache中读出,而不是从阵列盘上读取,减少与磁盘读操作次数,充分利用磁盘带宽。
      这样cache和磁盘阵列技术的结合,弥补了磁盘阵列的不足(如分块写请求响应差等缺陷),从而使整个系统以高效、快速、大容量、高可靠以及灵活、方便的存储系统提供给用户,满足技术发展的需要,尤其是多媒体系统的需要。
      同时,RAID 7还不仅仅是一种技术,它还是一个独立存储计算机,自身带的操作系统和管理工具,完全可以独立运行。RAID 7的存储计算机操作系统是一套实时事件驱动操作系统。RAID 7系统内置实时操作系统可自动对主机发送过来的读写指令进行优化处理,以智能化方式将可能被读取的数据预先读入快速缓存中,从而大大减少了磁头的转动次数,提高存储系统的I/O速度。
      RAID 7可帮助用户有效地管理日益庞大的数据存储系统,并使系统的运行效率大大提高,满足不同用户的存储需求。但是,RAID 7的成本比其它RAID等级要高许多。另外,RAID 7已被某公司注册为商标,目前仅有一家公司提供RAID 7的产品,用户没有更多的选择,这也严重制约了RAID 7的发展。

    5、RAID的组合:

    • 标准RAID等级各有优势和不足。自然地,我们想到把多个RAID等级组合起来,实现优势互补,弥补相互的不足,从而达到在性能、数据安全性等指标上更高的RAID系统。目前在业界和学术研究中提到的RAID组合等级主要有RAID 00、RAID 01、RAID 10、RAID 100、RAID 30、RAID 50、RAID 53、RAID 60。当然,组合等级的实现成本一般都非常昂贵,只是在少数特定场合应用。
    • 1)RAID 00:简单地说,RAID 00是由多个成员RAID 0组成的高级RAID 0。它与RAID 0的区别在于,RAID 0阵列替换了原先的成员磁盘。可以把RAID 00理解为两层条带化结构的磁盘阵列,即对条带再进行条带化。这种阵列可以提供更大的存储容量、更高的I/O性能和更好的I/O负均衡。
    • 2)RAID 01和RAID 10:RAID 01是先做条带化再作镜像,本质是对物理磁盘实现镜像;而RAID 10是先做镜像再作条带化,是对虚拟磁盘实现镜像。相同的配置下,通常RAID 01比RAID 10具有更好的容错能力。RAID 01兼备了RAID 0和RAID 1的优点,它先用两块磁盘建立镜像,然后再在镜像内部做条带化。RAID 01的数据将同时写入到两个磁盘阵列中,如果其中一个阵列损坏,仍可继续工作,保证数据安全性的同时又提高了性能。RAID 01和RAID 10内部都含有RAID 1模式,因此整体磁盘利用率均仅为50%。
    • 3)RAID 100:通常看作RAID 1+0+0,也称为RAID 10+0,即条带化的RAID 10。RAID 100的缺陷与RAID 10相同,任意一个RAID 1损坏一个磁盘不会发生数据丢失,但剩下的磁盘存在单点故障的危险。最顶层的RAID 0,即条带化任务,通常由软件层来完成。RAID 100 突破了单个RAID控制器对物理磁盘数量的限制,可以获得更高的I/O负载均衡,I/O压力分散到更多的磁盘上,进一步提高随机读性能,并有效降低热点盘故障风险。因此,RAID 100通常是大数据库的最佳选择。
    • 4)RAID 30(RAID 53)、RAID 50和RAID 60:这三种RAID等级与RAID 00原理基本相同,区别在于成员“磁盘”换成了RAID 3、RAID 5和RAID 6。其中,RAID 30通常又被称为RAID 53[13]。其实,可把这些等级RAID统称为RAID X0等级,X可为标准RAID等级,甚至组合等级(如RAID 100)。利用多层RAID配置,充分利用RAID X与RAID 0的优点,从而获得在存储容量、数据安全性和I/O负载均衡等方面的大幅性能提升。

    6、RAID等级简述:

    • RAID 0把连续的数据分散到多个磁盘上存取,代表了所有RAID级别中最高的存储性能。磁盘利用率是l00%,不提供数据冗余。
    • RAID l具有磁盘镜像功能,利用并行读写特性将数据块同时写入主盘和镜像盘,比传统的镜像盘速度快,但其磁盘利用率只有50%。
    • RAID l0将数据分散存储到RAID组的成员盘上,同时为每个成员盘提供镜像盘,实现数据全冗余保存。它利用了RAID 0较高的读写效率和RAID l较高的数据保护和恢复能力,其磁盘利用率为l/m(m为镜像组内成员盘个数)。当m=2时,RAID l0的磁盘利用率最大,即50%。
    • RAID 2:使用海明码技术来提供错误检查及恢复。
    • RAID 3:使用单块磁盘存放奇偶校验信息。
    • RAID 4:RAID 2、RAID 3条块单位为字字节,RAID 4、RAID 5条块单位为块或记录。RAID 4也使用一块磁盘作为奇偶校验盘。
    • RAID 5:也采用奇偶校验方式,校验数据以螺旋方式分散在RAID组的各成员盘上,没有专用的校验盘。
    • RAID 6:是在RAID 5基础上把校验信息由一位增加到两位的RAID级别。它实际上是一扩展RAID 5等级,除了每个硬盘上都有同级数据异或校验区外,还有一个针对每个数据块的异或校验区。

    5.4.2 磁盘调度算法

    • 要使磁盘服务尽可能地快,就需要操作系统提供合适的磁盘调度算法,以改善磁盘服务的平均时间。
    • 磁盘存取时间由寻道时间、旋转延迟时间、传输时间三部分组成。磁盘调度的目的就是减少磁盘的存取时间,分为两种调度:
      • 移臂调度:移动磁头寻找磁道柱面,是为了减少平均寻道时间。
      • 旋转调度:读取的扇区旋转到磁头下,是为了减少平均旋转延迟时间。
    • 设计磁盘调度算法应当考虑两个基本因素:
      公平性:磁盘访问请求应在有限时间内得到满足。
      高效性:尽量避免磁臂频繁来回移动,减少设备机械运动所带来的时间开销。

    一、移臂调度
    1、先来先服务调度算法

    • 即按照访问请求的次序为各个进程服务,这是最公平而又最简单的算法,但是效率不高。因为磁头引臂的移动速度很慢,如果按照访问请求发出的次序依次读写各个磁盘块,则磁头引臂将可能频繁大幅度移动,容易产生机械振动,亦造成较大的时间开销,影响效率。
    • 设:有一个请求磁盘服务的队列,要访问的磁道分别是:
      98,183,37,122,14,124,65,67 磁头现在在53号磁道上
      在这里插入图片描述
    • 先来先服务调度算法示例:磁头共移动了640个磁道

    2、最短寻道时间优先调度算法

    • SSTF算法以寻道优化为出发点,优先为距离磁头当前所在位置最近磁道(柱面)的访问请求服务。算法改善了平均服务时间,但缺点是:假设某一段时间外磁道请求不断,则可能有内磁道请求长时间得不到服务,缺乏公平性。
    • 设:有一个请求磁盘服务的队列,要访问的磁道分别是:
      98,183,37,122,14,124,65,67 磁头现在在53号磁道上
      在这里插入图片描述
    • 最短寻道时间优先调度算法示例:磁头共移动了236个磁道

    3、扫描算法(双向扫描)

    • 最短寻道时间优先算法只考虑访问磁道与磁头当前位置的距离,不考虑磁臂移动方向,而扫描算法则既考虑距离,也考虑方向,且以方向优先。假设磁头处于最外磁道,并向内磁道移动。在移动的过程中,如果经过的磁道有访问请求,则为其服务,一直移动到最内层磁道,然后改变磁头移动方向,向外层磁道移动,同时为经过的请求服务,到达最外层磁道则再次改变方向,向内层磁道移动,到达最内层磁道再改变方向,如此反复扫描。
    • 设:有一个请求磁盘服务的队列,要访问的磁道分别是:
      98,183,37,122,14,124,65,67。磁头现在在53号磁道上,正向0磁道(内层)方向移动。
      在这里插入图片描述
    • 扫描算法示例:磁头共移动了236个磁道

    4、循环扫描算法(单向扫描)

    • 循环扫描算法是磁头只在一个方向进行扫描(由内向外),并响应进程的访问请求。当到达最外层磁道是,磁头直接快速移动至最内层磁道而不服务任何请求,然后再次由内向外扫描。假设磁头只延由内向外的方向进行扫描,在移动的过程中,如果经过的磁道有访问请求,则为其服务,一直移动到最外层磁道。然后将磁头拉回最内层磁道,然后再次由内向外移动,如此反复。
    • 设:有一个请求磁盘服务的队列,要访问的磁道分别是:
      98,183,37,122,14,124,65,67。磁头现在在53号磁道上,固定由内向外方向移动(共200个磁道)。
      在这里插入图片描述
    • 循环扫描算法示例:磁头共移动了382个磁道

    5、电梯调度算法

    • 电梯调度算法是磁头在一个方向进行扫描时,如果该方向上没有访问请求,则停止扫描,并可以更改方向,扫描响应另一个方向的访问请求。假设初始时,磁头处于最外磁道,并向内磁道移动。在移动的过程中,如果经过的磁道有访问请求,则为其服务,然后判断内磁道是否还有访问请求,如果有,则继续向内磁道移动并服务。如果没有,但反方向有访问请求,则立刻改变磁头移动方向,向外层磁道移动,同时为经过的请求服务,如此反复。和扫描算法相比,电梯调度算法不需要扫描到最内层或最外层磁道。
    • 设:有一个请求磁盘服务的队列,要访问的磁道分别是:
      98,183,37,122,14,124,65,67 磁头现在在53号磁道上,正向内层磁道方向移动。
      在这里插入图片描述
    • 电梯调度算法示例:磁头共移动了222个磁道

    二、旋转调度

    • 只有涉及这个柱面的所有访问结束后才会再次进行移臂调度。

    • 一般采用延迟时间最短者优先算法,根据访问请求的扇区旋转到磁头位置的延迟时间来决定执行次序。
      计算延迟时间应考虑的因素:

      • 1)若干等待访问者请求访问同一盘面上同一磁道上的不同扇区。
      • 2)若干等待访问者请求访问不同盘面上同位置磁道上的不同编号的扇区。
      • 3)若干等待访问者请求访问不同盘面上同位置磁道上具有相同的扇区。

      解决方案:

      • 1)对于前两种情况:总是让首先到达读写磁头位置下的扇区先进行传送操作。
      • 2)对于第三种情况:这些扇区同时到达读写磁头位置下,可任意选择一个读写磁头进行传送操作,所以要多次旋转才能完成所有访问请求。

    三、有关磁盘的管理的部分内容
    1、磁盘初始化

    • 一个新磁盘只是一个空白盘。在磁盘能存储数据之前,必须分成扇区以便磁盘控制器能进行读和写操作,称为低级格式化(物理分区)。低级格式化为磁盘的每个扇区釆用特别的数据结构。每个扇区的数据结构通常由头、数据区域(通常为512B大小)和尾部组成。头部和尾部包含了一些磁盘控制器所使用的信息。
    • 为使磁盘存储文件,操作系统还需要将自己的数据结构记录在磁盘上:第一步将磁盘分为由一个或多个柱面组成的分区(即的C盘、D盘等形式的分区);第二步对物理分区进行逻辑格式化(创建文件系统),操作系统将初始的文件系统数据结构存储到磁盘上,这些数据结构包括空闲和已分配的空间以及一个初始为空的目录。

    2、引导块

    • 计算机启动时需要运行一个初始化程序(自举程序),它初始化CPU、寄存器、设备控制器和内存等,接着启动操作系统。为此,该自举程序应找到磁盘上的操作系统内核,装入内存,并转到起始地址,从而开始操作系统的运行。
    • 自举程序通常保存在ROM中,为了避免改变自举代码需要改变ROM硬件的问题,故只在ROM中保留很小的自举装入程序,将完整功能的自举程序保存在磁盘的启动块上,启动块位于磁盘的固定位。拥有启动分区的磁盘称为启动磁盘或者系统磁盘。

    3、坏块

    • 磁盘有移动部件且容错能力弱,所以容易导致一个或多个扇区损坏。部分磁盘甚至出厂时就有坏扇区。根据所使用的磁盘和控制器,对这些块有多种处理方式。
    • 对于简单磁盘,如电子集成驱动器(IDE)。坏扇区可手工处理,如MS-DOS的Format命令执行逻辑格式化时便会扫描磁盘以检查坏扇区。坏扇区在FAT表上会标明,因此程序不会使用。
    • 对于复杂的磁盘,如小型计算机系统接口(SCSI),其控制器维护一个磁盘坏块链表。该链表在出厂前进行低级格式化时就初始化了,并在磁盘的整个使用过程中不断更新。低级格式化将一些块保留作为备用,对操作系统透明。控制器可以用备用块来逻辑地替代坏块,这种方案称为扇区备用。
    • “写后读校验”与“重定向热修复区”

    4、提高磁盘性能的一些方法

    • 1)磁盘高速缓存:使用缓冲技术(内存、软缓冲);在硬盘中增加高速缓存(硬缓冲)
    • 2)提前读(预输入)与延迟写(缓输出):置换技术、SPOOLing技术
    • 3)优化数据分布:碎片整理、条块技术、交叉并行存取技术
    • 4)虚拟盘:以内存的一定空间建立一个模拟的硬盘来工作,需要时将虚拟盘中的文件转存到实际硬盘中。虚拟盘由用户建立、控制管理和使用,高速缓存由系统控制和管理。

    5.4.3 存储空间的分配与回收

    一、分配方法(对应于文件的存储结构)

    • 文件的物理组织结构涉及一个文件在存储设备上是如何放置的。它和文件的存取方法有密切关系,另外也取决于存储设备的物理特性。

    • 文件的存储分配涉及以下三个问题:

      • ① 创建新文件时,是否一次性为该文件分配所需的最大空间?
      • ② 为文件分配的空间是连续还是不连续的单位,分配文件空间时应采用的单位有多大?
      • ③ 为了记录分配给各个文件的单位情况,应该使用哪种形式的数据结构或表格?
    • 常用的分配方法有三种:连续分配、链接分配和索引分配。一般情况一个系统只提供一种方法的支持。

    1、连续分配(顺序存储结构):采用连续分配可把逻辑文件中的信息顺序存放到一组邻接的物理盘块中,这样形成的物理文件称为连续文件(或顺序文件)。每个文件在磁盘上占有一组连续的块,形成一个线性排序,这种排序使访问磁盘时需要的寻道数和寻道时间最小。

    • 连续分配可以用第一块的磁盘地址和连续块的数量来定义。如果文件有n块长并从位置b开始,那么该文件将占有块b, b+1, b+2, …, b+n-1。一个文件的目录条目包括开始块的地址和该文件所分配区域的长度。
    • 连续分配支持顺序访问和随机访问。
    • 优点:实现简单;特别在顺序存取时速度较快,一次可以存取多个盘块,改进了I/O性能;也很容易直接存取文件中的任意一块。
    • 缺点:① 不便于文件动态扩充,因为一个文件末尾后的盘块可能已经分配给其它文件,一旦增加,需要大量移动盘块。② 可能出现外部碎片。反复增删文件后会产生外部碎片(与内存管理分配方式中的碎片相似)。③ 很难在建立文件时就确定文件需要的空间大小,并依此来分配存储空间,所以适用于长度固定的文件。
    • 实现连续盘块分配的策略:
      ① 最先适应算法 ② 最佳适应算法 ③ 最近适应算法
      在这里插入图片描述

    2、链接分配(链接存储结构):把逻辑上连续的文件分散存放在不同的物理块中,这些物理块不要求连续,也不规则排列。这种物理结构形式的文件称做链接文件或串连文件。

    • 链接分配是釆取离散分配,消除了外部碎片,提高了磁盘空间的利用率。系统根据文件的需求,为它分配必需的盘块,当文件动态增长时,可以动态为它分配盘块,故而无需事先知道文件的大小。此外,对文件的增、删、修改也非常方便。
    • 带来的问题:① 一般仅适于对信息的顺序访问,不利于对文件的随机存取。② 每个物理块上增加一个链接字。③ 因为链接指针可靠性变低。
    • 链接分配可分为隐式链接和显式链接两种形式。
    • 1)隐式连接:每个文件对应一个磁盘块的链表;磁盘块分布在磁盘的任何地方,除最后一个盘块外,每一个盘块都有指向下一个盘块的指针,这些指针对用户是透明的。
      隐式链接分配的缺点在于无法直接访问盘块,只能通过指针顺序访问文件,盘块指针也消耗了一定的存储空间。隐式链接分配的稳定性也有问题,系统在运行过程中由于软件或者硬件错误导致链表中的指针丢失或损坏,会导致文件数据的丢失。
      在这里插入图片描述
    • 2)显式连接:是指把用于链接文件各物理块的指针,显式地存放在内存的一张链接表中。该表在整个磁盘仅设置一张,每个表项中存放链接指针,即下一个盘块号。在该表中,凡是属于某文件的第一个盘块号,或者每一条链的链首指针所对应的盘块号,均作为文件地址被填入相应文件的FCB的“物理地址”字段中。
      由于查找记录的过程是在内存中进行的,因而不仅显著地提高了检索速度,而且大大减少了访问磁盘的次数。由于分配给文件的所有盘块号都放在该表中,称该表为文件分配表(FAT)。
      在这里插入图片描述

    3、索引分配(索引存储结构):链接分配解决了连续分配的外部碎片和文件大小管理的问题。但是链接分配不能有效支持直接访问(FAT除外)。索引分配解决了这个问题,它把每个文件的所有的盘块号都集中放在一起构成索引块(表),每个文件都有其索引块,这是一个磁盘块地址的数组。索引块的第i个条目指向文件的第i个块。目录条目包括索引块的地址。要读第i块,通过索引块的第i个条目的指针来查 找和读入所需的块。

    • 索引分配除了具备链接文件的优点外,还克服了它的缺点,支持随机存取,且没有外部碎片。但索引分配需要增加索引表,空间开销也会增大,所以存取文件的速度也会受到一定的影响。
      在这里插入图片描述
    • 索引块的大小是个重要问题,每个文件必须有一个索引块,如果索引块太小就无法支持大文件,可以釆用以下机制来处理:
      • 1)多层索引:多层索引使第一层索引块指向第二层的索引块,第二层索引块再指向文件块。这种方法根据最大文件大小的要求,可以继续到第三层或第四层。例如,4096B的块,能在索引块中存入1024个4B的指针。两层索引允许1048576个数据块,即允许最大文件为4GB。
      • 2)混合索引:将多种索引分配方式相结合的分配方式。例如,系统既釆用直接地址,又采用单级索引或两级索引等方式。
        索引块分为直接块和间接块,多重索引具有一般索引文件的优点,但也存在着间接索引需要多次访盘而影响速度的缺点。
        在这里插入图片描述
        混合索引:混合索引分配在UNIX系统中釆用,UNK SystemV的索引结点中,共设置了13个地址项,iaddr(O)–iaddr(12)。在BSD UNIX的索引结点中,共设置了13个地址项,它们都把所有的地址项分成两类,即直接地址和间接地址。
        • 直接地址:为了提高对文件的检索速度,在索引结点中设置10个直接地址项,即iaddr(O)–iaddr(9)来存放直接地址。每项中所存放的是该文件数据所在盘块的盘块号。假如每个盘块的大小为4KB,当文件不大于40KB时,便可直接从索引结点中读出该文件的全部盘块号。
        • 一次间接地址:对于大中型文件,只釆用直接地址并不现实。可再利用索引结点中的地址项iaddr(lO) 来提供一次间接地址,就是一级索引分配。一次间址块就是索引块,系统将分配给文件的多个盘块号记入其中。在一次间址块中可存放1024个盘块号,因而允许文件长达4MB。
        • 多次间接地址:当文件长度大于4MB+40KB(—次间址与10个直接地址项)时,系统釆用二次间接地址。用地址项iaddr(11)提供二次间接地址,就是两级索引分配方式。系统此时是在二次间址块中记入所有一次间址块的盘号。在釆用二次间址方式时,文件最大长度可达4GB。同理,地址项iaddr(12)作为三次间接地址,其所允许的文件最大长度可达4TB。
        • 索引分配下,访问文件需要至少两次访问外存,首先要读取索引块的内容,然后再访问具体的磁盘块,因而降低了文件的存取速度。为了解决这一问题,通常将文件的索引块读入内存的缓冲区中,以加快文件的访问速度。
          在这里插入图片描述
          文件三种分配方式的比较:
          在这里插入图片描述

    二、外存空间管理

    • 文件存储器空间的划分与初始化:一般说,一个文件存储在一个文件卷中。文件卷可以是物理盘的一部分,也可以是整个物理盘,支持超大型文件的文件卷也可以由多个物理盘组成。
    • 在一个文件卷中,文件数据信息的空间(文件区)和存放文件控制信息FCB的空间(目录区)是分离的。由于存在很多种类的文件表示和存放格式,所以现代操作系统中一般都有很多不同的文件管理模块,通过它们可以访问不同格式的逻辑卷中的文件。逻辑卷在提供文件服务前,必须由对应的文件程序进行初始化,划分好目录区和文件区,建立空闲空间管理表格及存放逻辑卷信息的超级块。
    • 逻辑卷与物理盘的关系:
      在这里插入图片描述
    • 文件存储器空间管理:文件存储设备分成许多大小相同的物理块,并以块为单位交换信息,因此,文件存储设备的管理实质上是对空闲块的组织和管理,它包括空闲块的组织、分配与回收等问题。
    • 1、空闲表法:空闲表法属于连续分配方式,与内存的动态分配方式类似,为每个文件分配一块连续的存储空间。系统为外存上的所有空闲区建立一张空闲盘块表,每个空闲区对应于一个空闲表项,包括序号、该空闲区第一个盘块号、该区的空闲盘块数等信息。再将所有空闲区按其起始盘块号递增的次序排列。
      在这里插入图片描述
    • 空闲盘区的分配与内存的动态分配类似,同样可釆用首次适应算法、循环首次适应算法等。对释放的存储空间进行回收时,也釆取类似于内存回收的方法,即要考虑回收区是否与空闲表中插入点的前区和后区相邻接,对相邻接者应予以合并。
    • 空闲表法特别适于存放连续文件,若存储空间有大量的小空闲区时,检索效率降低。还会产生外存的外部碎片,造成磁盘空间的浪费。

    2、空闲链表法:将所有空闲区域拉成一条空闲链,根据构成链所用的基本元素不同,可把链表分成空闲盘块链和空闲盘区链。

    • 空闲盘块链是将磁盘上的所有空闲空间以盘块为单位拉成一条链。当用户因创建文件而请求分配存储空间时,系统从链首开始,依次摘下适当的数目的空闲盘块分配给用户。当用户因删除文件而释放存储空间时,系统将回收的盘块依次插入空闲盘块链的末尾。这种方法的优点是分配和回收一个盘块的过程非常简单,但在为一个文件分配盘块时,可能要重复多次操作。
    • 空闲盘区链是将磁盘上的所有空闲盘区(每个盘区可包含若干个盘块)拉成一条链。在每个盘区上除含有用于指示下一个空闲盘区的指针外,还应有能指明本盘区大小(盘块数)的信息。分配盘区的方法与内存的动态分区分配类似,通常釆用首次适应算法。在回收盘区时,同样也要将回收区与相邻接的空闲盘区相合并。
      在这里插入图片描述

    3、位示图法:位示图是利用二进制的一位来表示磁盘中一个盘块的使用情况,磁盘上所有的盘块都有一个二进制位与之对应。当其值为“0”时,表示对应的盘块空闲;当其值为“1”时,表示对应的盘块已分配。

    • 盘块分配:顺序扫描位示图,从中找出一个或一组其值为“0”的二进制位。将所找到的一个或一组二进制位,转换成与之对应的盘块号。修改位示图,令相应位为“1”。
    • 盘块回收:将回收盘块的盘块号转换成位示图中的行号和列号。修改位示图,令相应位为“0”。

    4、成组链接法:空闲表法和空闲链表法都不适合大型文件系统,因为会使空闲表或空闲链表太大。在UNIX系统中釆用的是成组链接法,这种方法结合了空闲表和空闲链表两种方法,克服了表太大的缺点。

    • 基本思想:把一组n个空闲扇区地址保存在第一个空闲扇区内,其后一个空闲扇区内则保存另一组n各空闲扇区的地址,如此继续,直至所有空闲扇区均予以链接。系统只需要保存一个指向第一个空闲扇区的指针。
    • 例如:每50个空闲块为一组。
      第一组的50个空闲块块号放在第二组的头一块中,第二组的其余49块是完全空闲的。第二组的50个块号又放在第三组的头一块中,以此类推,组与组之间形成链接关系。
      表示存储器空闲空间的“位向量”表或第一个成组链块以及卷中的目录区、文件区划分信息都需要存放在辅存储器中,一般放在卷头位置,在UNIX系统中称为“超级块”。在对卷中文件进行操作前,“超级块”需要预先读入系统空间的主存,并保持主存“超级块”与辅存卷中“超级块”的一致性。
      在这里插入图片描述

    5.5 文件的共享与安全

    一、文件的共享

    • 文件共享使多个用户(进程)共享同一份文件,系统中只需保留该文件的一份副本。如果系统不能提供共享功能,那么每个需要该文件的用户都要有各自的副本,会造成对存储空间的极大浪费。
    • 随着计算机技术的发展,文件共享的范围已由单机系统发展到多机系统,进而通过网络扩展到全球。这些文件的分享是通过分布式文件系统、远程文件系统、分布式信息系统实现的。这些系统允许多个客户通过C/S模型共享网络中的服务器文件。

    1、文件共享的定义:一个文件被多个用户或进程使用。
    2、文件共享形式:

    • 文件可以共享,但任何时刻只能有一个用户或进程使用共享文件。
    • 文件可以同时被多个用户或进程共享,需要进行相关的读写控制。

    3、文件共享的作用:

    • 文件共享节省时间和存储空间,减少了用户工作量。利用文件共享可以实现进程间相互通信和信息交换。

    4、文件共享方法(三类):早期文件共享方法;基于索引结点的共享方法;利用符号链实现文件共享。

    • 1)早期文件共享的方法
      ① 绕弯路法:每个用户都获得一个“当前目录”,用户所访问的所有文件都是相对于当前目录的;当所访问的文件不在当前目录下时,通过“向上走”的方式去访问其上级目录,然后一步一步到达所访问的文件。
      ② 基本目录法:在文件系统中设置一个基本目录,每个文件在该目录中均占有一个目录项,用于给出系统赋予的该文件唯一的标识符及该文件的有关说明信息。同时每个用户都有一个符号文件目录,其中每一个目录项都含有该文件的符号名及其唯一的标识符。
      在这里插入图片描述
      ③ 连访法:为了提高对共享文件的访问速度,可在相应的目录项之间进行链接,即使一个目录中的目录项直接指向另一目录中的目录项。同时在文件说明中增设连访属性,指示说明文件中物理地址是指向一个文件或共享文件目录项的指针,以及共享用户计数等。
      在这里插入图片描述
    • 2)基于索引结点的共享方法(硬链接)
      这种共享方式中引用索引结点,即文件的物理地址及其他的文件属性等信息,不再是放在目录项中,而是放在索引结点中。在文件目录中只设置文件名及指向相应索引结点的指针。在索引结点中还应有一个链接计数count,用于表示链接到本索引结点上的用户目录项的数目。当count=2时,表示有两个用户目录项链接到本文件上,或者说是有两个用户共享此文件。
      在这里插入图片描述
    • 当用户A创建一个新文件时,A是该文件的所有者,此时将共享计数count置为1。当有用户B要共享此文件时,在用户B的目录中增加一个目录项,并设置一指针指向该文件的索引结点。此时,文件主仍然是用户A,count=2。如果用户A不再需要此文件,不能将文件直接删除。因为删除了该文件,也必然删除该文件的索引结点,这样会使用户B的指针悬空,而用户B可能正在执行写操作,此时用户B会无法访问到文件。因此用户A不能删除此文件,只是将该文件的count减1,然后删除自己目录中的相应目录项。用户B仍可以使用该文件。当count=0时,表示没有用户使用该文件,系统将负责删除该文件。
      在这里插入图片描述
      3)利用符号链实现文件共享(软链接)
    • 用户B要共享用户A的一个文件F,可以由系统创建一个LINK类型的新文件,也取名为F,并将文件F写入用户B的目录中,以实现用户B的目录与文件F的链接。在新文件中只包含被链接文件F的路径名。这种链接方法称为符号链接(如快捷方式)。
    • 新文件中的路径名则只被看做是符号链,当用户B要访问被链接的文件F且正要读LINK类新文件时,操作系统根据新文件中的路径名去读该文件,从而实现了用户B对文件F的共享。
      在利用符号链方式实现文件共享时,只有文件拥有者才有指向其索引结点的指针。共享该文件的其他用户只有该文件的路径名,并不拥有指向其索引结点的指针。当文件拥有者把共享文件删除后,其他用户通过符号链访问时,会出现访问失败,于是将符号链删除,不会留下悬空指针的情况,不会产生影响。
      利用符号链实现文件共享也存在问题,例如:一个文件釆用符号链方式共享,当文件拥有者将其删除,而在共享的其他用户使用其符号链接访问该文件之前,又有人在同一路径下创建了另一个具有同样名称的文件,则该符号链将仍然有效,但访问的文件已经改变,从而导致错误。
      在符号链的共享方式中,当其他用户读共享文件时,需要根据文件路径名逐个查找目录,直至找到该文件的索引结点。因此每次访问时可能要多次读取磁盘,使得访问文件开销变大,并增加了启动磁盘的频率。此外,符号链的索引结点也要耗费一定的磁盘空间。符号链方式有一个很大的优点,即网络共享只需提供该文件所在机器的网络地址以及该机器中的文件路径即可。
      基于索引节点和利用符号链两种方式都存在一个共同的问题,即每个共享文件都有几个文件名。就是每增加一条链接,就增加一个文件名。这实质上就是每个用户都使用自己的路径名去访问共享文件。当用户或系统试图遍历整个文件系统时,将会多次遍历到该共享文件。

    二、文件安全
    1、文件安全包括文件保密和文件保护

    • 保密是为了防止未经授权的非法用户对文件进行访问,同时防止合法用户的有意或无意的泄漏。
      • 伪装者:未经授权的非法用户,一般来源于系统外部。
      • 违法者:合法用户,但非法访问未授权数据,一般来源于系统内部。
      • 地下用户:掌握了系统的管理控制,并逃避系统管理控制的用户,可能来源于系统外部,也可能来源于系统内部。
    • 保护措施是为了防止人为的、系统的、自然的有意或无意对文件造成的破坏。

    2、影响文件安全性的主要因素:

    • 1)人为因素:指各种影响文件安全的人为方式,有意或无意的泄漏信息或破坏信息,如黑客非法入侵,泄露、计算机病毒等。
    • 2)系统因素:指计算机系统可能产生的各种软、硬件故障,它们将会引起文件存储器的信息丢失或物理损坏;现在计算机系统采用各种系统容错技术来避免系统因素导致的信息安全问题。
    • 3)自然因素:即存放在磁盘上的数据,随着时间的推移将可能发生溢出或逐渐消失。

    3、为确保文件的安全性可采取的措施:

    • 1)对于人为因素造成的不安全性,通过存取控制机制进行防止,如口令、加密、权限设置等。
    • 2)对于系统因素造成的不安全性,通过系统容错技术进行防止,如FAT和目录双备份、重定向热修复区、磁盘镜像、磁盘双工、廉价磁盘冗余阵列等。
    • 3)对于自然因素造成的不安全性,通过“后备系统”进行防止,如系统及文件备份、日志管理等。

    4、四级安全防护体系:

    • 1)系统级安全管理:通过对现行系统安全技术的分析,制定系统级安全策略,策略包括安全登陆(合法用户注册、登陆时要验证用户名及口令等)、敏感系统的隔离、访问地址段的限制、登录时间段的限制、会话时间的限制、连接数的限制、特定时间段内登录次数的限制以及远程访问控制等,系统级安全是应用系统的第一道防护大门。
    • 2)用户级安全管理:设定用户身份及存取权限,可执行何种操作。UNIX将用户分为文件主(文件创建者)、文件主的同组用户或合作者、其他用户三种;Windows将用户分为系统管理员、一般用户、访客三种。用户只能按照其权限进行操作和访问。
    • 3)目录级安全管理:设定目录的存取属性。
    • 4)文件级安全管理:设定文件的存取属性。
      合法用户的权限下,又符合目录和文件的操作属性,才能最终完成相应的目录或文件操作。

    三、文件保密

    • 常用保密方法有很多,一般有以下几种:
    • 1、用户名及口令:用户在创建文件时为其规定一个口令,系统将此口令保存在该文件的文件控制块中。当用户使用该文件时,系统要求用户输入口令,并与保存在文件控制块中的口令相比较,只有口令一致时,才允许访问,否则不允许访问。这种方法的优点是实现简单,缺点是保密性比较差,不能控制存取权限。
    • 2、存取控制表:系统为每个文件形成一张存取控制表,该表给每类用户规定了存取权限,或给每个用户规定存取权限。
      在这里插入图片描述
    • 3、存取控制矩阵:由系统的全部用户和系统中的全部文件组成一个二维矩阵。矩阵的每个元素aij规定了第i个用户对第j个文件的访问权限。例如,aij=1表示可读;aij =2表示可写;aij=3表示可执行。如果用户和文件较多时,这个矩阵很大,实现起来系统开销太大,而且使用也不很方便。
      在这里插入图片描述
    • 4、访问控制策略:进行访问控制的整体方法,主要有自主访问控制(DAC)、强制访问控制(MAC)和基于角色访问控制(RBAC)。
      • 1)自主访问控制:通过执行基于系统实体身份及其到系统资源的接入授权。通常DAC通过授权列表(或访问控制列表)来限定哪些主体针对哪些客体可以执行什么操作。如此将可以非常灵活地对策略进行调整。由于其易用性与可扩展性,自主访问控制机制经常被用于商业系统。
      • 2)强制访问控制(MAC):是系统强制主体服从访问控制策略。是由系统对用户所创建的对象,按照规定的规则控制用户权限及操作对象的访问。在MAC中,每个用户及文件都被赋予一定的安全级别,只有系统管理员才可确定用户和组的访问权限,用户不能改变自身或任何客体的安全级别。系统通过比较用户和访问文件的安全级别,决定用户是否可以访问该文件。常用于军事用途。
      • 3)基于角色的访问控制:角色是一定数量的权限的集合。指完成一项任务必须访问的资源及相应操作权限的集合。角色作为一个用户与权限的代理层,表示为权限和用户的关系,所有的授权应该给予角色而不是直接给用户或用户组。基于角色的访问控制(Role-Based Access Control,RBAC)是通过对角色的访问所进行的控制。使权限与角色相关联,用户通过成为适当角色的成员而得到其角色的权限。RBAC支持三个著名的安全原则:最小权限原则、责任分离原则和数据抽象原则。

    5、加密:创建文件时,由用户提供一个密码,在文件存入磁盘时用该密码对文件内容加密。进行读取操作时,要对文件解密。这样只有知道密码的用户才能对文件进行访问,其他用户不能任意访问文件。

    • 常用加密方法:
      方法一:修改后缀名(并不是真正的加密)。
      如:将123.doc改为456.avi
      方法二:用winrar等压缩软件加密,适合文件比较小的加密。
      方法三:使用专门的加密软件加密,如文件加密大师。
      方法四:使用硬件加密,加密狗。
      方法五:文件相互捆绑,将要加密的文件捆绑在另一个文件中。

    四、文件保护

    1、系统容错

    • 1)盘块一致性检查:检查程序建立两个表格,即使用表和空闲表,标记互相相反。
      在这里插入图片描述
    • 2)文件一致性检查:从根目录开始,沿目录树递归向下查找。对于每个目录中的每个文件,其i节点对应的计数器值加1。当检查完毕后,得到一个以i节点号为下标的列表,说明每个文件包含在多少个目录中。然后,把这些数目与存放在i节点中的链接计数进行比较。如果文件系统保持一致性,那么两个值相同;否则,出现两种错误,即i节点中的链接计数太大或太小。
    • 3)写后读校验、重定向热修复
    • 4)文件分配表(FAT)双备份
    • 5)文件目录双备份
    • 6)磁盘镜像、磁盘双工
    • 7)RAID

    2、后备系统

    • 1)建立副本:把一个文件的不同副本分别存到不同介质上。操作简单、但修改一个文件则必须同时修改其他副本。
    • 2)定时转储:把所有文件采用定期转储到磁带或磁盘上备份起来,包括完全转储和增量转储。
      • 1)完全转储(海量转储):即定期将所有文件全部拷贝到后援存储器中,后援存储器可以是磁带、磁盘、光盘等。当磁盘上的文件被破坏时,可将备份设备上的文件重新装入磁盘,使文件得以恢复。完全转储需要较多的时间,而且必须在没有用户使用文件时进行,不宜过于频繁,一般每天一次或每周一次。
      • 2)增量转储:所谓增量转储并不复制所有文件,而是仅复制两次转储期间内被修改过的内容。增量转储节省时间,但其实现略复杂。
      • 3)日志管理:纪录系统工作中发生的每次操作和修改。
        实际应用当中,通常采用“完全备份”和“增量备份”相结合的方法。出现问题时,首先用完全备份的内容恢复,再用增量备份的内容恢复,最后使用日志进行恢复。

    五、文件使用

    用户在使用文件系统时,必须按照操作系统提供的方式和要求来完成具体的文件操作。

    1、建立文件

    • 建立文件系统调用的一般格式:create(文件名,参数表)
    • 用户提供要创建的文件的文件名及若干参数,系统为这一新创建的文件分配一个文件控制块,根据用户提供的参数及系统控制需要填写文件控制块中的有关项。有的系统还返回给用户一个文件控制块描述符,以后用户使用该文件控制块描述符存取该文件。

    2、打开文件

    • 如果使用文件,首先要打开。以建立用户和文件的联系。打开文件系统调用的一般格式:open(文件名,读写方式)
      读写方式可为读、写和既读又写等。
    • 系统主要完成:(1)检查该文件名所对应的文件控制块是否已在内存,如果不在,则将其调入内存,这时文件控制块称为“活跃的”。(2)检查操作合法性,例如,若该文件为只读文件,但用户却将“读写方式”置为写,则系统不予打开。有些系统中,在执行完系统调用open之后返回用户一个文件描述符,以后用户使用文件描述符而不是文件名对该文件读写。

    3、读文件

    • 打开文件后,就可以读取文件中的信息。读文件系统调用的一般格式:read(文件名,记录键,内存位置)
    • 是把指定文件中给定键值的记录读入内存指定单元。

    4、写文件

    • 写文件系统调用一般格式:write(文件名,记录键,内存位置)
    • 表示把内存中指定单元的数据作为指定键值的一个记录写入指定文件中,系统还将为其分配物理块,以把记录信息写在外存上。

    5、关闭文件

    • 文件关闭后一般不能存取,若要存取,则必须再次打开。关闭文件系统调用的一般格式:close(文件名)
    • 系统根据用户提供的文件名或文件描述符,在该文件的文件控制块上做修改。例如,将该文件的共享用户数减l,减1后若值为0,若该文件控制块内容被修改过,则要写回外存。

    6、删除文件

    • 删除文件系统调用的一般格式:delete (文件名)
    • 系统根据用户提供的文件名或文件描述符,检查删除的合法性,若合法,则收回文件所占用的各种资源。

    7、其它文件操作

    • 附加文件append 重新命名文件rename
    • 取文件属性get_attributes 置文件属性set_attributes

    8、目录操作

    • 创建目录create 删除目录delete
    • 打开目录opendir 关闭目录closedir
    • 读目录readdir 重新命名目录rename

    9、文件操作的基本步骤:

    • 读文件步骤:打开文件,读文件,关闭文件
    • 写文件步骤:打开文件,写文件,关闭文件
    • 用户通过什么操作申请文件的使用权?
      打开文件和建立文件
    • 用户通过什么操作归还文件的使用权?
      关闭文件

    • 补充:文件系统实现概述:
      为创建一个文件,应用程序调用逻辑文件系统。逻辑文件系统知道目录结构形式,它将分配一个新的FCB给文件,把相应目录读入内存,用新的文件名更新该目录和FCB,并将结果写回到磁盘。
      一旦文件被创建,就能用于I/O,不过首先要打开文件。调用open将文件名传给文件系统,文件系统根据给定文件名搜索目录结构。部分目录结构通常缓存在内存中以加快目录操作。找到文件后,其FCB复制到系统的打开文件表。该表不但存储FCB,也有打开该文件的进程数量的条目。
      然后,单个进程的打开文件表中会增加一个条目,并通过指针将系统范围的打开文件表的条目同其他域(文件当前位置的指针和文件打开模式等)相连。调用open返回的是一个指向单个进程的打开文件表中合适条目的指针。所以文件操作都是通过该指针进行。
      文件名不必是打开文件表的一部分,因为一旦完成对FCB在磁盘上的定位,系统就不再使用文件名了。对于访问打开文件表的索引,UNIX称之为文件描述符,Windows称之为文件句柄。因此,只要文件没有被关闭,所有文件操作通过打开文件表来进行。
      当一个进程关闭文件,就删除一个相应的单个进程打开文件表的条目即目录项,系统范围内打开文件表的打开数也会递减。当打开文件的所有用户都关闭了一个文件时,更新的文件信息会复制到磁盘的目录结构中,系统范围的打开文件表的条目也将删除。
      在实际中,系统调用open会首先搜索系统范围的打开文件表以确定某文件是否已被其他进程所使用。如果是,就在单个进程的打开文件表中创建一项,并指向现有系统范围的打开文件表的相应条目。
    展开全文
    diviner_s 2021-01-06 00:28:16
  • 操作系统中增加了文件管理功能,专门管理在外存上的文件,并把对文件的存取,共享和保护等手段提供给用户。这不仅方便了用户保证了文件的安全性,还可有效地提高系统资源的利用率。

    学习总结目录:

    在操作系统中增加了文件管理功能,专门管理在外存上的文件,并把对文件的存取,共享和保护等手段提供给用户。这不仅方便了用户保证了文件的安全性,还可有效地提高系统资源的利用率。

    文件和文件系统

    文件系统的管理功能是将其管理的程序和数据通过组织为一系列文件的方式实现的,而文件是指具有文件名的若干相关元素的集合。元素通常是记录;记录是一组有意义的数据项的集合。数据组成成分可以分为三层:数据项,记录(元素)和文件。

    一.数据项

    • 基本数据项:除了数据名外还有数据类型,两者定义了数据项的“型”。表征一个实体在数据项上的数据称为“值”例如 int age; age=10;

    • 组合数据项:由若干基本数据项组成,简称组项

    二.记录

    记录是一组相关数据项的集合,用于描述一个对象在某方面的属性。在诸多记录中为了可以唯一的标识一个记录,必须在记录的各个数据项中确定出一个或多个数据项,把它们的集合称为关键字(key)

    三.文件(是文件系统中最大的数据单位)

    文件是由所创建者所定义的,具有文件名的一组相关元素的集合分为有结构文件(文件由若干相关记录组成)和无结构文件(被看成字符流)
    文件的属性:(1)文件类型(2)文件长度(3)文件的物理位置(4)文件的建立时间

    在这里插入图片描述

    文件类型:

    • 按用途分:系统文件;用户文件;库文件
    • 按文件中的数据形式分类:源文件.c .java文件;目标文件.obj;可执行文件.exe
    • 按存取控制属性分类:只执行文件;只读文件;读写文件
    • 按组织形式和处理方式分类:普通文件;目录文件;特殊文件

    文件系统的模型分为三个层次结构:最底层是对象及其属性,中间层是对对象进行操作和管理的软件集合,最高层是文件系统提供给用户的接口。

    对象及其属性——文件管理系统管理的对象有:文件;目录;磁盘(磁带)存储空间

    文件系统的接口:命令接口;程序接口

    文件操作:1)最基本的文件操作:创建文件;删除文件;读文件;写文件;设置文件的读写位置;2)文件的打开和关闭操作;3)其他文件操作

    文件的逻辑结构

    用户所看到的文件称为逻辑文件,是由一系列的逻辑记录组成,从用户的观点而言文件的逻辑记录是能够被存取的基本单位。在系统中的所有文件都存在两种形式的文件结构:
    (1)文件的逻辑结构用户可以直接处理的数据及结构,又称为文件组织。
    (2)文件的物理结构,又称为文件的存储结构

    文件逻辑结构类型:

    1.按文件是否有结构分类

    • 有结构文件:记录式文件,记录长度可以分为两类:定长记录和变长记录
    • 无结构文件:流式文件,可以看做是记录式文件的一个特例:一个记录仅仅有一个字节。

    2.按文件的组织方式分类(把有结构的文件分为三类)

    (1)顺序文件

    顺序文件:由一系列记录按某种顺序排列所形成的文件,记录可以是定长或者变长。
    排列方式:串结构通常按时间顺序排列每次查找要从头开始。
    顺序结构用户指定一个字段作为关键字,可以是任意一个类型的变量其中最简单的是正整数

    顺序文件的优缺点:最佳应用场合是在对文件中的记录进行批量存取时。所有逻辑文件中顺序文件的存取效率是最高的。对于顺序存储设备(如磁带)也只有顺序文件才能被存储并有效工作。在交互场合对于查找和修改则性能较差。

    记录寻址:

    1.隐式寻址方式: 对于定长记录的顺序文件,如果已知当前记录的逻辑地址很容易确定下一个记录的逻辑地址。读文件时设一个读指针Rptr令它指向下一个记录的首地址;写指针指向要写记录的首地址;读写完执行加L操作,L是记录长度。也称随机访问或直接访问;对于变长记录的顺序文件需要设置读写指针但是要加上Li(刚读写完的记录长度)也称顺序访问适用于所有文件类型但是需要从头访问速度慢。
    2.显示寻址方式: 对定长记录的文件实现直接访问或者随机访问通过文件中记录中的位置;利用关键字。变长不可以实现直接访问。

    (2)索引文件
    索引文件指为可变长记录文件建立一张索引表,为每个记录设置一个表项,以加速对记录的检索速度。

    • 1.按关键字建索引:定长记录文件可以通过简单计算实现随机查找,变长记录文件需要从第一个开始查一直顺序查找目标记录为止。我们为变长记录文件建立一张索引表,为主文件中的每个记录在索引表中分别设置一个表项记录指向记录的指针以及记录的长度L。索引表按关键字排序。索引表本身是一个定长记录的索引文件。把对变长记录顺序文件的顺序检索转变为对定长记录的顺序文件。实现直接存取。根据用户提供的关键字利用折半查找的方法去检索索引表,从中找到表项,在利用表项中给的指针去访问记录
    • 2.具有多个索引表的索引文件
      索引文件的优点:顺序查找的文件改造成随机查找的文件,插入删除方便。

    (3)索引顺序文件
    索引顺序文件是对顺序文件的改进,克服对变长记录的顺序文件不能随机访问以及不便插入和删除的缺点。仍保留顺序文件的关键特征,记录是按关键字的顺序组织起来的,还有两个新特征:引入文件索引表实现随机访问,增加溢出文件记录新增加,删除和修改的记录。

    一级顺序索引文件:将变长记录顺序文件中的所有记录分为若干组,为每组的第一个记录在索引表中建立一个索引项,含有该记录的关键字和指向该记录的指针。索引顺序文件是最常见的一种逻辑文件形式。检索效率比顺序文件提高根号N/2倍记录数为N,分为根号N个分组,每个分组有根号N个记录查找最佳。

    两级顺序索引文件:例:对于一个含有10的6次方个记录的顺序文件,作为索引顺序文件时,平均需要查询1000个记录。建立多级索引分组为100*100*100,此时查找一个记录所需的次数变为50+50+50=150。

    直接文件:可根据给定关键字直接获取指定记录的物理地址。关键字就决定了记录的物理地址。

    哈希文件

    文件目录

    对于目录的管理要求有:
    1.实现“按名存取”
    2.提高对目录的检索速度
    3.文件共享
    4.允许文件重名

    文件控制块FCB含有三类信息:
    1)基本信息:文件名;文件物理位置;文件逻辑结构(指示文件是流式文件还是记录文件,记录数,文件是变长还是定长);文件物理结构(存取控制信息类和使用信息类)

    索引结点:文件目录通常是存放在磁盘上的查找时要将盘块上的目录调入内存按文件名逐一比较。磁盘索引结点:每个文件有唯一的一个磁盘索引结点包括:

    • 1.文件主标识符
    • 2.文件类型
    • 3.文件存取权限
    • 4.文件物理地址
    • 5.文件长度
    • 6.文件连接技术
    • 7.文件存取时间。

    内存索引结点:当文件被打开时将磁盘索引结点拷贝到内存的索引结点中之后又增加了:

    • 1.索引结点编号
    • 2.状态
    • 3.访问计数
    • 4.文件所属文件系统的逻辑设备号
    • 5.链接指针

    简单的文件目录:

    1.单级文件目录:整个文件系统中只建立一张目录表。
    缺点:查找速度慢;不允许重名;不便于实现文件共享。

    2.两级文件目录:可以为,每一个用户再建立一个单独的用户文件目录UFD(User File Directoy);再建立衣蛾主文件目录(MFD)在MFD中为UFD占用一个目录项(含有用户名和指向该用户目录文件的指针);
    优点:检索目录速度快;在不同的用户目录中。可以使用相同的文件名;不同用户可以使用不同的文件名访问系统中的同一个共享文件。

    数型结构目录:
    数型目录:在现代OS中,最通用且实用的文件目录无疑是树形结构目录。明显的提高对目录的检索速度和文件系统的功能。主目录称为根目录在每一个文件目录中只有一个根目录。

    路径名和当前目录:

    • 1.路径名:从根目录到任何数据文件都只有一条唯一的通路。把全部目录文件名和数据文件名依次用/连接起来。
    • 2.当前目录(工作目录)从当前目录为止到数据文件为止所构成的路径名称为相对路径名,而把从树根开始的路径名称为绝对路径名
    展开全文
    Lzy410992 2021-01-01 17:21:57
  • qq_43554335 2021-01-21 17:51:50
  • qq_46600445 2021-04-25 19:54:57
  • weixin_34381073 2021-07-10 08:15:18
  • hdq1745 2021-10-24 09:11:23
  • jzycloud 2020-12-22 21:21:47
  • weixin_39774490 2020-12-22 09:00:23
  • weixin_35549786 2021-07-13 01:15:00
  • acceptedday 2021-01-05 15:34:35
  • superSmart_Dong 2021-05-24 21:21:54
  • qq_44748231 2021-01-03 10:22:12
  • diviner_s 2021-01-05 21:27:11
  • weixin_36182029 2021-06-20 01:37:19
  • weixin_31964135 2021-07-15 04:58:21
  • weixin_43627118 2021-01-01 17:49:54
  • weixin_44759105 2020-12-31 14:39:13
  • weixin_30824391 2021-07-10 03:01:01
  • zzddada 2021-08-10 13:15:12
  • weixin_28726391 2021-07-10 02:46:58
  • weixin_43614380 2021-01-08 16:47:31
  • sinat_33087001 2020-12-19 11:30:58
  • weixin_43614380 2020-12-28 20:10:03
  • IHBOS 2021-01-27 22:05:28
  • XJ886 2021-01-09 16:37:34
  • hjx020 2021-10-19 20:55:34
  • weixin_44560620 2021-01-29 20:36:25

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 2,042,943
精华内容 817,177
关键字:

操作系统文件管理