导航:首页 > 版本升级 > 文件是什么构成的数据集合

文件是什么构成的数据集合

发布时间:2024-12-01 00:48:59

Ⅰ pascal中,文件的读入和读出问题

一、文件的概念

文件是按照其内在的逻辑联系分别组织在一起,构成不同的数据集合。它的名字就是文件名。使用文件有以下几点好处:

(1)文件可以永久保存,其中的数据不会因为应用程序的结束或关机而消失。
(2)文件中的数据可以为多个应用程序所共享。
(3)文件中的数据可以多次重复使用。
(4)文件中的存放数据的数量在理论上没有限制。

在Turbo Pascal语言中,文件是由一系列基本数据元素排列而成的,这些数据元素的数据类型是相同的,但通常有不同的取值。文件的基本数据元素的数据类型称为文件的基类型。文件中所含的数据元素的个数称为文件的长度。文件的长度和文件所占有的字节数可能不同。文件中元素的个数即文件的长度不是固定不变的。

用于暂时存放文件中的数据的内存区称为文件缓冲区。对于文件的操作至少要由以下三个过程:

(1)打开一个文件

(2)对文件进行操作(读或写)

(3)关闭文件

按照对文件的读写方式,可以把文件分为顺序文件和随机文件。顺序文件的特点是对文件的读或写操作都只能按文件中元素的顺序,所以顺序文件的读和写不能交叉进行。随机文件的特点是可以直接对文件中某个元素进行读或写,而不需要先对它前面的元素作相同的操作。对于随机文件的读和写可以交叉进行。

Turbo Pascal语言中,按照文件的存储方式可以把文件分为文本文件和类型文件。若文件中的数据都是以ASCII码形式存储的,则这种文件称为文本文件。若文件中的数据都是以非ASCII码形式存储的,则这种文件称为类型文件。Turbo Pascal中文本文件都是顺序文件,类型文件都是随机文件。

二、类型文件

按数据的二进制代码形式存放时的文件称为类型文件。如果再按照组成类型文件的元素数据结构分,又可以分为有类型文件和无类型文件。其定义为:

type 类型名=file of 基类型;{有类型文件}
类型名=file; {无类型文件}
例如:var f:file of integer;
说明f为名的变量对应文件将用于存放整数。
var g:file;
说明g为名的变量对应文件的数据无任何规定。

Turbo Pascal有关类型文件的函数和过程

(1)assign过程
形式:assign(f,str);
功能:将文件名字符串str赋给文件变量f,程序对文件变量f的操作代替对文件str的操作。

(2)rewrite过程
形式:rewrite(f);
功能:建立并打开一个新的允许写磁盘文件,其文件名必须先由assign过程赋给变量f。这时,指向文件元素的指针指向第一个元素,rewrite过程所建立的文件为空文件。

(3)reset过程
形式:reset(f);
功能:打开一个已经存在的磁盘文件,其文件名必须先由assign过程赋给变量f,该文件只能读,指向文件元素的指针指向第一个元素。

(4)read过程
形式:read(f,var表);
功能:从磁盘文件f中,将数据依次读到var表表示的各个变量中。

(5)write过程
形式:write(f,var表);
功能:将var表所表示的各个变量的值依次写到磁盘文件f上。

(6)close过程
形式:close(f);
功能:关闭和f关联的磁盘文件,在写操作时自动产生一个文件结束标志。

(7)seek过程
形式:seek(f,n);
功能:把文件指针移到f指明文件的第n个元素。

(8)eof函数
形式:eof(f);
功能:若文件指向文件尾,则返回true,否则返回false。
对有类型文件的写操作步骤为:
assign(f,str);
rewrite(f);
write(f,var表);
close(f);
对有类型文件的读操作步骤为:
assign(f,str);
reset(f);
read(f,var表);
close(f);

例:在磁盘上建立一个1~50的平方数的数据文件zhoufei.dat。要求以一个数,这个数的平方数的格式写入。
program zhoufei;
var f:file of integer;
i:integer;
begin
assign(f,'zhoufei.dat');
rewrite(f);
for i:=1 to 50 do write(f,i,sqr(i));
close(f)
end.

三、文本文件

文本文件的内容有ASCII字符集中的字符组成,因此文本文件也称ASCII码文件,它可以用DOS中的type命令列出内容。文本文件具体是由一系列行组成,每一行可以包括0个或多个字符型成分,并以也行结束符结尾,文本文件类型TXT和类型文件file of char区别在于后者不包含行结束符。

文本文件和类型文件在读写上的差别在于前者只能按次序顺序读写,而后者可以不按照次序读写。适用文本文件的函数和过程除了用于类型文件操作的过程和函数外主要还有:

(1)readln过程

形式:readln(f,var表);或readln(f);
功能:从磁盘文件f中,将数据依次读到var表表示的各变量中(其中readln(f)只读数据),并将文件指针移到行结束符后,就是下一行开头。

(2)writeln过程

形式:writeln(f,var表)或writeln(f);
功能:将var表所表示的各个变量的值依次写到磁盘文件f上去(writeln(f)不写值),然后再写一个行结束符。

(3)append过程

形式:append(f);
功能:打开一个已经存在的磁盘文件,其文件名必须和assign过程中的变量名f相对应,该文件只能写,此时文件指针指向文件尾。

(4)eoln函数

形式:eoln(f);
功能:若文件指针指向行结束符或文件结束符,则返回true,否则返回false。
对文本文件的写操作步骤:
assign(f,str);
rewrite(f); 或append(f);
write(f,var表);或writeln(f);
close(f);
对文本文件的读操作步骤:
assign(f,str);
reset(f);
readln(f,var表);或readln(f);
close(f);

例:随机产生30个随机整数存放于文本文件zhoufei.txt 中
program zhoufei;
const n=30;
var ra:text;
i:integer;
begin
randomize;
assign(ra,'zhoufei,txt');
rewrite(ra);
for i:=1 to n do writeln(ra,random(100));
close(ra)
end.

附陶陶摘苹果

program apple;
var a:array[1..10] of integer;
n,i,total:integer;
begin
assign(input,'apple.in');reset(input);
assign(output,'apple.out');rewrite(output);
for i:=1 to 10 do read(a[i]);
readln(n);
n:=n+30;
for I:=1 to 10 do
if n>=a[i] then inc(total);
writeln(total);
close(intput);
close(output);
End.

Ⅱ 操作系统(四)文件管理

文件—就是一组有意义的信息/数据集合

文件属于抽象数据类型。为了恰当地定义文件,需要考虑有关文件的操作。操作系统提供系统调用,它对文件进行创建、写、读、重定位、搠除和截断等操作。

所谓的“逻辑结构”,就是指在用户看来,文件内部的数据应该是如何组织起来的。而“物理结构”指的是在操作系统看来,文件的数据是如何存放在外存中的。

无结构文件:文件内部的数据就是一系列二进制流或字符流组成。又称“流式文件”

文件内部的数据其实就是一系列字符流,没有明显的结构特性。因此也不用探讨无结构文件的“逻辑结构”问题。

有结构文件:由一组相似的记录组成,又称“记录式文件”。每条记录又若干个数据项组成。 [1] 一般来说,每条记录有一个数据项可作为关键字。根据各条记录的长度(占用的存储空间)是否相等,又可分为定长记录和可变长记录两种。有结构文件按记录的组织形式可以分为:

对于含有N条记录的顺序文件,查找某关键字值的记录时,平均需要查找N/2次。在索引顺序文件中,假设N条记录分为√N组,索引表中有√N个表项,每组有√N条记录,在查找某关键字值的记录时,先顺序查找索引表,需要查找√N /2次,然后在主文件中对应的组中顺序查找,也需要查找√N/2次,因此共需查找√N/2+√N/2=√N次。显然,索引顺序文件提高了查找效率,若记录数很多,则可采用两级或多级索引

FCB的有序集合称为“文件目录”,一个FCB就是一个文件目录项。FCB中包含了文件的基本信息(文件名、物理地址、逻辑结构、物理结构等),存取控制信息(是否可读/可写、禁止访问的用户名单等),使用信息(如文件的建立时间、修改时间等)。最重要,最基本的还是文件名、文件存放的物理地址。

对目录的操作如下:

操作的时候,可以有以下几种目录结构:

早期操作系统并不支持多级目录,整个系统中只建立一张目录表,每个文件占一个目录项。

单级目录实现了“按名存取”,但是不允许文件重名。在创建一个文件时,需要先检查目录表中有没有重名文件,确定不重名后才能允许建立文件,并将新文件对应的目录项插入目录表中。显然, 单级目录结构不适用于多用户操作系统。

早期的多用户操作系统,采用两级目录结构。分为主文件目录(MFD,Master File Directory)和用户文件目录(UFD,User Flie Directory)。

允许不同用户的文件重名。文件名虽然相同,但是对应的其实是不同的文件。两级目录结构允许不同用户的文件重名,也可以在目录上实现实现访问限制(检查此时登录的用户名是否匹配)。但是两级目录结构依然缺乏灵活性,用户不能对自己的文件进行分类

用户(或用户进程)要访问某个文件时要用文件路径名标识文件,文件路径名是个字符串。各级目录之间用“/”隔开。从根目录出发的路径称为绝对路径。

系统根据绝对路径一层一层地找到下一级目录。刚开始从外存读入根目录的目录表;找到目录的存放位置后,从外存读入对应的目录表;再找到目录的存放位置,再从外存读入对应目录表;最后才找到文件的存放位置。整个过程需要3次读磁盘I/O操作。

很多时候,用户会连续访问同一目录内的多个文件,显然,每次都从根目录开始查找,是很低效的。因此可以设置一个“当前目录”。此时已经打开了的目录文件,也就是说,这张目录表已调入内存,那么可以把它设置为“当前目录”。当用户想要访问某个文件时,可以使用从当前目录出发的“相对路径”

可见,引入“当前目录”和“相对路径”后,磁盘I/O的次数减少了。这就提升了访问文件的效率。

树形目录结构可以很方便地对文件进行分类,层次结构清晰,也能够更有效地进行文件的管理和保护。但是,树形结构不便于实现文件的共享。为此,提出了“无环图目录结构”。

可以用不同的文件名指向同一个文件,甚至可以指向同一个目录(共享同一目录下的所有内容)。需要为每个共享结点设置一个共享计数器,用于记录此时有多少个地方在共享该结点。用户提出删除结点的请求时,只是删除该用户的FCB、并使共享计数器减1,并不会直接删除共享结点。只有共享计数器减为0时,才删除结点。

其实在查找各级目录的过程中只需要用到“文件名”这个信息,只有文件名匹配时,才需要读出文件的其他信息。因此可以考虑让目录表“瘦身”来提升效率。

当找到文件名对应的目录项时,才需要将索引结点调入内存,索引结点中记录了文件的各种信息,包括文件在外存中的存放位置,根据“存放位置”即可找到文件。存放在外存中的索引结点称为“磁盘索引结点”,当索引结点放入内存后称为“内存索引结点”。相比之下内存索引结点中需要增加一些信息,比如:文件是否被修改、此时有几个进程正在访问该文件等。

为文件设置一个“口令”(如:abc112233),用户请求访问该文件时必须提供“口令”。

优点:保存口令的空间开销不多,验证口令的时间开销也很小。

缺点:正确的“口令”存放在系统内部,不够安全。

使用某个“密码”对文件进行加密,在访问文件时需要提供正确的“密码”才能对文件进行正确的解密。 [3]

优点:保密性强,不需要在系统中存储“密码”

缺点:编码/译码,或者说加密/解密要花费一定时间。

在每个文件的FCB(或索引结点)中增加一个访问控制列表(Access-Control List, ACL),该表中记录了各个用户可以对该文件执行哪些操作。

有的计算机可能会有很多个用户,因此访问控制列表可能会很大,可以用精简的访问列表解决这个问题

精简的访问列表:以“组”为单位,标记各“组”用户可以对文件执行哪些操作。当某用户想要访问文件时,系统会检查该用户所属的分组是否有相应的访问权限。

索引结点,是一种文件目录瘦身策略。由于检索文件时只需用到文件名,因此可以将除了文件名之外的其他信息放到索引结点中。这样目录项就只需要包含文件名、索引结点指针。

索引结点中设置一个链接计数变量count,用于表示链接到本索引结点上的用户目录项数。

当User3访问“ccc”时,操作系统判断文件“ccc”属于Link类型文件,于是会根据其中记录的路径层层查找目录,最终找到User1的目录表中的“aaa”表项,于是就找到了文件1的索引结点。

类似于内存分页,磁盘中的存储单元也会被分为一个个“块/磁盘块/物理块”。很多操作系统中,磁盘块的大小与内存块、页面的大小相同

内存与磁盘之间的数据交换(即读/写操作、磁盘I/O)都是以“块”为单位进行的。即每次读入一块,或每次写出一块

在内存管理中,进程的逻辑地址空间被分为一个一个页面同样的,在外存管理中,为了方便对文件数据的管理,文件的逻辑地址空间也被分为了一个一个的文件“块”。于是文件的逻辑地址也可以表示为(逻辑块号,块内地址)的形式。用户通过逻辑地址来操作自己的文件,操作系统要负责实现从逻辑地址到物理地址的映射

连续分配方式要求每个文件在磁盘上占有一组连续的块。用户给出要访问的逻辑块号,操作系统找到该文件对应的目录项(FCB)——可以直接算出逻辑块号对应的物理块号,物理块号=起始块号+逻辑块号。还需要检查用户提供的逻辑块号是否合法(逻辑块号≥ 长度就不合法)因此 连续分配支持顺序访问和直接访问 (即随机访问)

读取某个磁盘块时,需要移动磁头。访问的两个磁盘块相隔越远,移动磁头所需时间就越长。 连续分配的文件在顺序读/写时速度最快,物理上采用连续分配的文件不方便拓展,且存储空间利用率低,会产生难以利用的磁盘碎片可以用紧凑来处理碎片,但是需要耗费很大的时间代价。。

链接分配采取离散分配的方式,可以为文件分配离散的磁盘块。分为隐式链接和显式链接两种。

用户给出要访问的逻辑块号i,操作系统找到该文件对应的目录项(FCB)…从目录项中找到起始块号(即0号块),将0号逻辑块读入内存,由此知道1号逻辑块存放的物理块号,于是读入1号逻辑块,再找到2号逻辑块的存放位置……以此类推。因此,读入i号逻辑块,总共需要i+1次磁盘I/O。

采用链式分配(隐式链接)方式的文件,只支持顺序访问,不支持随机访问,查找效率低。另外,指向下一个盘块的指针也需要耗费少量的存储空间。但是,采用隐式链接的链接分配方式,很方便文件拓展。另外,所有的空闲磁盘块都可以被利用,不会有碎片问题,外存利用率高。

把用于链接文件各物理块的指针显式地存放在一张表中。即文件分配表(FAT,File Allocation Table)

一个磁盘仅设置一张FAT 。开机时,将FAT读入内存,并常驻内存。FAT的各个表项在物理上连续存储,且每一个表项长度相同,因此“物理块号”字段可以是隐含的。

从目录项中找到起始块号,若i>0,则查询内存中的文件分配表FAT,往后找到i号逻辑块对应的物理块号。 逻辑块号转换成物理块号的过程不需要读磁盘操作。

采用链式分配(显式链接)方式的文件,支持顺序访问,也支持随机访问 (想访问i号逻辑块时,并不需要依次访问之前的0 ~ i-1号逻辑块), 由于块号转换的过程不需要访问磁盘,因此相比于隐式链接来说,访问速度快很多。显然,显式链接也不会产生外部碎片,也可以很方便地对文件进行拓展。

索引分配允许文件离散地分配在各个磁盘块中,系统会为每个文件建立一张索引表,索引表中记录了文件的各个逻辑块对应的物理块(索引表的功能类似于内存管理中的页表——建立逻辑页面到物理页之间的映射关系)。索引表存放的磁盘块称为索引块。文件数据存放的磁盘块称为数据块。

在显式链接的链式分配方式中,文件分配表FAT是一个磁盘对应一张。而索引分配方式中,索引表是一个文件对应一张。可以用固定的长度表示物理块号 [4] ,因此,索引表中的“逻辑块号”可以是隐含的。

用户给出要访问的逻辑块号i,操作系统找到该文件对应的目录项(FCB)…从目录项中可知索引表存放位置,将索引表从外存读入内存,并查找索引表即可只i号逻辑块在外存中的存放位置。

可见, 索引分配方式可以支持随机访问。文件拓展也很容易实现 (只需要给文件分配一个空闲块,并增加一个索引表项即可)但是 索引表需要占用一定的存储空间

索引块的大小是一个重要的问题,每个文件必须有一个索引块,因此索引块应尽可能小,但索引块太小就无法支持大文件,可以采用以下机制:

空闲表法适用于“连续分配方式”。分配磁盘块:与内存管理中的动态分区分配很类似,为一个文件分配连续的存储空间。同样可采用首次适应、最佳适应、最坏适应等算法来决定要为文件分配哪个区间。回收磁盘块:与内存管理中的动态分区分配很类似,当回收某个存储区时需要有四种情况——①回收区的前后都没有相邻空闲区;②回收区的前后都是空闲区;③回收区前面是空闲区;④回收区后面是空闲区。总之,回收时需要注意表项的合并问题。

操作系统保存着链头、链尾指针。如何分配:若某文件申请K个盘块,则从链头开始依次摘下K个盘块分配,并修改空闲链的链头指针。如何回收:回收的盘块依次挂到链尾,并修改空闲链的链尾指针。适用于离散分配的物理结构。为文件分配多个盘块时可能要重复多次操作

操作系统保存着链头、链尾指针。如何分配:若某文件申请K个盘块,则可以采用首次适应、最佳适应等算法,从链头开始检索,按照算法规则找到一个大小符合要求的空闲盘区,分配给文件。若没有合适的连续空闲块,也可以将不同盘区的盘块同时分配给一个文件,注意分配后可能要修改相应的链指针、盘区大小等数据。如何回收:若回收区和某个空闲盘区相邻,则需要将回收区合并到空闲盘区中。若回收区没有和任何空闲区相邻,将回收区作为单独的一个空闲盘区挂到链尾。 离散分配、连续分配都适用。为一个文件分配多个盘块时效率更高

位示图:每个二进制位对应一个盘块。在本例中,“0”代表盘块空闲,“1”代表盘块已分配。位示图一般用连续的“字”来表示,如本例中一个字的字长是16位,字中的每一位对应一个盘块。因此可以用(字号,位号)对应一个盘块号。当然有的题目中也描述为(行号,列号)

盘块号、字号、位号从0开始,若n表示字长,则

如何分配:若文件需要K个块,①顺序扫描位示图,找到K个相邻或不相邻的“0”;②根据字号、位号算出对应的盘块号,将相应盘块分配给文件;③将相应位设置为“1”。如何回收:①根据回收的盘块号计算出对应的字号、位号;②将相应二进制位设为“0”

空闲表法、空闲链表法不适用于大型文件系统,因为空闲表或空闲链表可能过大。UNIX系统中采用了成组链接法对磁盘空闲块进行管理。文件卷的目录区中专门用一个磁盘块作为“超级块”,当系统启动时需要将超级块读入内存。并且要保证内存与外存中的“超级块”数据一致。

进行Create系统调用时,需要提供的几个主要参数:

操作系统在处理Create系统调用时,主要做了两件事:

进行Delete系统调用时,需要提供的几个主要参数:

操作系统在处理Delete系统调用时,主要做了几件
事:

在很多操作系统中,在对文件进行操作之前,要求用户先使用open系统调用“打开文件”,需要提供的几个主要参数:

操作系统在处理open系统调用时,主要做了几件事:

进程使用完文件后,要“关闭文件”

操作系统在处理Close系统调用时,主要做了几件事:

进程使用read系统调用完成写操作。需要指明是哪个文件(在支持“打开文件”操作的系统中,只需要提供文件在打开文件表中的索引号即可),还需要指明要读入多少数据(如:读入1KB)、指明读入的数据要放在内存中的什么位置。操作系统在处理read系统调用时,会从读指针指向的外存中,将用户指定大小的数据读入用户指定的内存区域中。

进程使用write系统调用完成写操作,需要指明是哪个文件(在支持“打开文件”操作的系统中,只需要提供文件在打开文件表中的索引号即可),还需要指明要写出多少数据(如:写出1KB)、写回外存的数据放在内存中的什么位置操作系统在处理write系统调用时,会从用户指定的内存区域中,将指定大小的数据写回写指针指向的外存。

寻找时间(寻道时间)T S :在读/写数据前,将磁头移动到指定磁道所花的时间。

延迟时间T R :通过旋转磁盘,使磁头定位到目标扇区所需要的时间。设磁盘转速为r(单位:转/秒,或转/分),则平均所需的延迟时间

传输时间T t :从磁盘读出或向磁盘写入数据所经历的时间,假设磁盘转速为r,此次读/写的字节数为b,每个磁道上的字节数为N。则

总的平均存取时间Ta

延迟时间和传输时间都与磁盘转速相关,且为线性相关。而转速是硬件的固有属性,因此操作系统也无法优化延迟时间和传输时间,但是操作系统的磁盘调度算法会直接影响寻道时间

根据进程请求访问磁盘的先后顺序进行调度。

优点:公平;如果请求访问的磁道比较集中的话,算法性能还算过的去
缺点:如果有大量进程竞争使用磁盘,请求访问的磁道很分散,则FCFS在性能上很差,寻道时间长。

SSTF算法会优先处理的磁道是与当前磁头最近的磁道。可以保证每次的寻道时间最短,但是并不能保证总的寻道时间最短。(其实就是贪心算法的思想,只是选择眼前最优,但是总体未必最优)

优点:性能较好,平均寻道时间短
缺点:可能产生“饥饿”现象

SSTF算法会产生饥饿的原因在于:磁头有可能在一个小区域内来回来去地移动。为了防止这个问题,可以规定,只有磁头移动到最外侧磁道的时候才能往内移动,移动到最内侧磁道的时候才能往外移动。这就是扫描算法(SCAN)的思想。由于磁头移动的方式很像电梯,因此也叫电梯算法。

优点:性能较好,平均寻道时间较短,不会产生饥饿现象
缺点:①只有到达最边上的磁道时才能改变磁头移动方向②SCAN算法对于各个位置磁道的响应频率不平均

扫描算法(SCAN)中,只有到达最边上的磁道时才能改变磁头移动方向,事实上,处理了184号磁道的访问请求之后就不需要再往右移动磁头了。LOOK调度算法就是为了解决这个问题,如果在磁头移动方向上已经没有别的请求,就可以立即改变磁头移动方向。(边移动边观察,因此叫LOOK)

优点:比起SCAN算法来,不需要每次都移动到最外侧或最内侧才改变磁头方向,使寻道时间进一步缩短

SCAN算法对于各个位置磁道的响应频率不平均,而C-SCAN算法就是为了解决这个问题。规定只有磁头朝某个特定方向移动时才处理磁道访问请求,而返回时直接快速移动至起始端而不处理任何请求。

优点:比起SCAN来,对于各个位置磁道的响应频率很平均。
缺点:只有到达最边上的磁道时才能改变磁头移动方向,另外,比起SCAN算法来,平均寻道时间更长。

C-SCAN算法的主要缺点是只有到达最边上的磁道时才能改变磁头移动方向,并且磁头返回时不一定需要返回到最边缘的磁道上。C-LOOK算法就是为了解决这个问题。如果磁头移动的方向上已经没有磁道访问请求了,就可以立即让磁头返回,并且磁头只需要返回到有磁道访问请求的位置即可。

优点:比起C-SCAN算法来,不需要每次都移动到最外侧或最内侧才改变磁头方向,使寻道时间进一步缩短

磁盘地址结构的设计:

Q:磁盘的物理地址是(柱面号,盘面号,扇区号)而不是(盘面号,柱面号,扇区号)

A:读取地址连续的磁盘块时,采用(柱面号,盘面号,扇区号)的地址结构可以减少磁头移动消耗的时间

减少延迟时间的方法:

Step 1:进行低级格式化(物理格式化),将磁盘的各个磁道划分为扇区。一个扇区通常可分为头、数据区域(如512B大小)、尾三个部分组成。管理扇区所需要的各种数据结构一般存放在头、尾两个部分,包括扇区校验码(如奇偶校验、CRC循环冗余校验码等,校验码用于校验扇区中的数据是否发生错误)

Step 2:将磁盘分区,每个分区由若干柱面组成(即分为我们熟悉的C盘、D盘、E盘)

Step 3:进行逻辑格式化,创建文件系统。包括创建文件系统的根目录、初始化存储空间管理所用的数据结构(如位示图、空闲分区表)

计算机开机时需要进行一系列初始化的工作,这些初始化工作是通过执行初始化程序(自举程序)完成的

初始化程序可以放在ROM(只读存储器)中。ROM中的数据在出厂时就写入了,并且以后不能再修改。ROM中只存放很小的“自举装入程序”,完整的自举程序放在磁盘的启动块(即引导块/启动分区)上,启动块位于磁盘的固定位置,开机时计算机先运行“自举装入程序”,通过执行该程序就可找到引导块,并将完整的“自举程序”读入内存,完成初始化。拥有启动分区的磁盘称为启动磁盘或系统磁盘(C:盘)

对于简单的磁盘,可以在逻辑格式化时(建立文件系统时)对整个磁盘进行坏块检查,标明哪些扇区是坏扇区,比如:在FAT表上标明。(在这种方式中,坏块对操作系统不透明)。

对于复杂的磁盘,磁盘控制器(磁盘设备内部的一个硬件部件)会维护一个坏块链表。在磁盘出厂前进行低级格式化(物理格式化)时就将坏块链进行初始化。会保留一些“备用扇区”,用于替换坏块。这种方案称为扇区备用。且这种处理方式中,坏块对操作系统透明

Ⅲ 各种文件格式,它们根本的区别是怎样的

文件,是一组按名字整体存取的二进制数据的集合。
文件有可执行的程序文件和数据文件两大类。

可执行的程序文件的格式,是按操作系统规定的要求组织的。
比如,EXE程序文件由程序头和代码及数据模块构成,其格式由操作系统相应程序文件规范所规定。
可执行的程序文件,由软件开发工具生成。

也有一些脚本代码类的可执行文件,它们的内容不是机器指令,而是要用解释器翻译执行的文本代码,比如BAT批处理文件,VBS脚本等等。
这些文件可以用文本编辑软件生成和修改。

非可执行文件(数据文件)的内部格式,或由相关规范标准所指定,或由使用这种数据文件的软件所决定。

通用的数据文件如TXT格式是一种被普遍认可的、纯粹由文本字符信息构成的文件。JPG文件则符合国际标准化组织的JPEG静态图片文件的相关标准。
通用格式的数据文件,需要使用相应的文件生成工具产生。比如记事本可以生成TXT文件,画图可以生成JPG及BMP图像文件。数码相机能将图像感应器中的图像信号转换成二进制数据并生成JPG格式的数据文件保存到存储卡中。

其它非通用格式的文件,则完全由使用这种格式的软件所决定,或者说由这个软件的开发者决定。编程的人想怎么样使用数据和组织数据,就将文件按什么方式组织。
这些文件的生成,或者是编程者特别专门制作,或由编程者提供专用的制作工具。比如DOC文件要用WORD生成,PDG文件则由超星公司扫描并制作而成。

阅读全文

与文件是什么构成的数据集合相关的资料

热点内容
哪些地方网络信号更好些 浏览:753
jar反编辑工具 浏览:614
描述数据波动大小有哪些 浏览:584
u盘exfat可复制4g以上的文件吗 浏览:667
a4大小的文件过塑多少钱 浏览:26
畅天游2app在哪里下载 浏览:844
微信看文字的图片 浏览:298
将文件直接粘入word 浏览:134
VIP解析APP有哪些 浏览:463
怎样彻底卸载cad文件 浏览:829
iphone4港版 浏览:624
怎么用命令打开程序错误 浏览:665
iphone6怎么改控制中心 浏览:808
ns错误代码 浏览:653
iphone4s如何取消软件更新提示 浏览:538
jsp打印换行 浏览:662
哪个软件可以编程手机软件 浏览:554
如东如何学数控编程培训 浏览:5
微信h5页面怎么修改 浏览:931
手机怎么无法打开视频文件夹 浏览:840

友情链接