Chinapub.com 下载 第22章操作系统 直以来,我们似乎在组装着一至少在想像中一一台完整的计算机。它有一个微处理 器、一些随机访问存储器、一个键盘、一个视频显示器和一个磁盘驱动器。当所有硬件各就 各位以后,我们全神贯注于开关,给它加电,带给它生命。也许这样的描述会在你的脑海里 唤起 Victor Frankenstein装配怪物时的情景,或者想起 Geppetto正在制造将要命名为匹诺槽的 木偶 但我们还缺少一些东西,既不是惊人的力量,也不是良好的愿望。继续进行下去,打开 新计算机电源,然后告诉我们你看到了什么? 当阴极射线管发热以后,屏幕上显示的是一些整齐排列但又是随机的ASCI码字符。这 正如预期的那样,当电源断开时,半导体存储器的内容会丢失:当给它加电时,它处在随机 的不可预料的状态。同样,为微处理器构建的所有RAM中的内容也是随机的,微处理器把这 些随机的字节当作机器代码来执行。这样不会引起任何坏的情况发生,但是,也没有什么意 这里缺少的正是软件。当微处理器加电或复位时,它执行内存中某个地址里存放的机器 代码。对8080来说,这个地址是0000h。对正确设计的计算机来说,加电时,该地址处应该有 一个机器代码指令(很可能是多个指令中的第一条)。 机器代码指令又是怎样放到内存的那个地方的呢?在新设计的计算机中,把软件放到合 适地方的处理过程可能是最令人费解的。要理解它,先从一个控制面板着手。该控制面板与 第16章讲到的用来写入字节到随机访问存储器然后再读出的控制面板相似 控制面板 000990000900000 609999900 BBB五BBnB mm)))))复 写入接管 与以前的控制面板不同的是,这个控制面板有一个标明为复位的开关,这个开关连到微 处理器的复位输入。只要这个开关是闭合的,处理器就什么也不做:当断开这个开关后,微 处理器开始执行机器码 控制面板的使用方法是:复位开关置ON,复位微处理器,中止执行机器码:接管开关置 ON,则接收总线上的地址信号和数据信号。这时,可以使用A~A3开关输入16位的存储器地 址。标为D。~D,的灯用来显示该地址的8位内容。要写入一个新的字节到相应的地址,则应在 D~D开关上设置该字节,然后把写入开关先拨到ON再拨到OFF。完成了向内存中写入相应
下载 第22章 操 作 系 统 一直以来,我们似乎在组装着—至少在想像中—一台完整的计算机。它有一个微处理 器、一些随机访问存储器、一个键盘、一个视频显示器和一个磁盘驱动器。当所有硬件各就 各位以后,我们全神贯注于开关,给它加电,带给它生命。也许这样的描述会在你的脑海里 唤起Victor Frankenstein 装配怪物时的情景,或者想起 G e p p e t t o正在制造将要命名为匹诺槽的 木偶。 但我们还缺少一些东西,既不是惊人的力量,也不是良好的愿望。继续进行下去,打开 新计算机电源,然后告诉我们你看到了什么? 当阴极射线管发热以后,屏幕上显示的是一些整齐排列但又是随机的 A S C I I码字符。这 正如预期的那样,当电源断开时,半导体存储器的内容会丢失;当给它加电时,它处在随机 的不可预料的状态。同样,为微处理器构建的所有 R A M中的内容也是随机的,微处理器把这 些随机的字节当作机器代码来执行。这样不会引起任何坏的情况发生,但是,也没有什么意 义。 这里缺少的正是软件。当微处理器加电或复位时,它执行内存中某个地址里存放的机器 代码。对8 0 8 0来说,这个地址是0 0 0 0 h。对正确设计的计算机来说,加电时,该地址处应该有 一个机器代码指令(很可能是多个指令中的第一条)。 机器代码指令又是怎样放到内存的那个地方的呢?在新设计的计算机中,把软件放到合 适地方的处理过程可能是最令人费解的。要理解它,先从一个控制面板着手。该控制面板与 第1 6章讲到的用来写入字节到随机访问存储器然后再读出的控制面板相似: 与以前的控制面板不同的是,这个控制面板有一个标明为复位的开关,这个开关连到微 处理器的复位输入。只要这个开关是闭合的,处理器就什么也不做;当断开这个开关后,微 处理器开始执行机器码。 控制面板的使用方法是:复位开关置 O N,复位微处理器 ,中止执行机器码;接管开关置 O N,则接收总线上的地址信号和数据信号。这时,可以使用 A0~A1 5开关输入1 6位的存储器地 址。标为D0~D7的灯用来显示该地址的 8位内容。要写入一个新的字节到相应的地址,则应在 D0~D7开关上设置该字节,然后把写入开关先拨到 O N再拨到O F F。完成了向内存中写入相应 控制面板 复位 写入 接管
hinapub.com 第2章操作系统 233 下载 字节以后,把接管开关设置为OFF,复位开关设置为OFF,则微处理器开始执行程序。 这就是如何向刚刚从头建成的计算机中输入第一个机器码程序的过程,不用说,这是很 费事的。 又是什么改变了这一切,使得人们乐于在视频显示器前查看自己程序的执行结果呢?在 上一章中已经讲到,只显示字符的视频显示器有IKB的随机访问存储器用来存放25行,每行 40个字符的ASCI码。程序把内容写入到该存储器中,方法与写入到计算机中其他存储器中的 方法一样。 然而,把程序的输出显示到视频显示器并不是那么简单。例如,如果一段程序,执行结 果是4Bh,则不能简单地把这个值写入视频显示器的存储器中。如果这样做,屏幕上将会看到 的是字符K,因为该字符对应的ASCI码是4Bh。正确的是应写两个ASCI码字符到显示器: 34h(是4的ASCI码)和42h(是B的ASCI码)。8位的计算结果每半个字节是一个十六进制数 字,该数字必须通过对应的ASCI来显示 当然,也可以写一段小的子程序来完成这种转换。下面的一段8080汇编语言程序用来把 十六进制数中的一位转换成对应的ASCI码(假定包含的十六进制数范围从00h~0Fh) Nibb1 eToAscii:cMPA,0Ah; check if it'sa1 etter or number(判断是数字还是字母) ADDA,37h; A to converted to41hto46h(把A~F转换成41h~46h) RET ADD A, 30h 0to9 converted to30hto39h(把0~9转换成30h~39h) 下面的子程序调用 Nibble toascii两次,把累加器A中的一个字节转换成两个ASCI码数字, 并放在寄存器B和C中 PUSH PSW ; Save accumulator(保存A) RRC A右移4次.) RRC to get high- order nibble(取高半字节) CALL NibbleToAscii; Convert to Ascii code(转换成ASCI码) MOV B,A M。 ve result to register B(结果放入寄存器B) ; Get origina1 A back(取出原来的A AND A, OFh ;Get1ow- order nibble(取低半字节) CALL NibbleToAsci Convert to AscIi code(转换成ASCI工码) MOV C,A ; Move result to register c(结果放入寄存器c) 这些子程序使得可以在视频显示器中按十六进制来显示一个字节。如果要转换成十进制 再做一些工作即可。此过程与把十六进制数转换成十进制数的方法非常相似一用10来除几 次即可。 记住,还没有把这些汇编语言程序输入到内存中。也许,你已经把它们写到了纸上并且 转换成了机器码,然后再输入到内存中。这种“手工汇编”是第24章要讲的内容。 尽管控制面板不需要许多硬件,但却不容易使用。它所采用的输入/输出方法是最坏的方 既然聪明到可以从零开始来制造自己的计算机,却还用数字0和1来作为按键,的确令人
字节以后,把接管开关设置为 O F F,复位开关设置为O F F,则微处理器开始执行程序。 这就是如何向刚刚从头建成的计算机中输入第一个机器码程序的过程,不用说,这是很 费事的。 又是什么改变了这一切,使得人们乐于在视频显示器前查看自己程序的执行结果呢?在 上一章中已经讲到,只显示字符的视频显示器有 1 K B的随机访问存储器用来存放 2 5行,每行 4 0个字符的A S C I I码。程序把内容写入到该存储器中,方法与写入到计算机中其他存储器中的 方法一样。 然而,把程序的输出显示到视频显示器并不是那么简单。例如,如果一段程序,执行结 果是4 B h,则不能简单地把这个值写入视频显示器的存储器中。如果这样做,屏幕上将会看到 的是字符 K,因为该字符对应的 A S C I I码是4 B h。正确的是应写两个 A S C I I码字符到显示器: 3 4 h(是4的A S C I I码)和4 2 h(是B的A S C I I码)。8位的计算结果每半个字节是一个十六进制数 字,该数字必须通过对应的 A S C I I码来显示。 当然,也可以写一段小的子程序来完成这种转换。下面的一段 8 0 8 0汇编语言程序用来把 十六进制数中的一位转换成对应的 A S C I I码(假定包含的十六进制数范围从 0 0 h~0 F h): NibbleToAscii: CMP A,0Ah ;Check if it’s a letter or number (判断是数字还是字母) JC Number ADD A,37h ;A to F converted to 41h to 46h(把A~F转换成41h~46h) RET Number: ADD A,30h ; 0 to 9 converted to 30h to 39h(把0~9转换成30h~39h) RET 下面的子程序调用N i b b l e To A s c i i两次,把累加器A中的一个字节转换成两个A S C I I码数字, 并放在寄存器B和C中: ByteToAscii: PUSH PSW ;Save accumulator(保存A) RRC ;Rotate A right 4 times...(A右移4次...) RRC RRC RRC ;...to get high-order nibble(取高半字节) CALL NibbleToAscii;Convert to ASCII code(转换成ASCII码) MOV B,A ;Move result to register B(结果放入寄存器B) POP PSW ;Get original A back(取出原来的A) AND A,0Fh ;Get low-order nibble(取低半字节) CALL NibbleToAscii ;Convert to ASCII code(转换成ASCII码) MOV C,A ;Move result to register C(结果放入寄存器C) RET 这些子程序使得可以在视频显示器中按十六进制来显示一个字节。如果要转换成十进制, 再做一些工作即可。此过程与把十六进制数转换成十进制数的方法非常相似—用1 0来除几 次即可。 记住,还没有把这些汇编语言程序输入到内存中。也许,你已经把它们写到了纸上并且 转换成了机器码,然后再输入到内存中。这种“手工汇编”是第 2 4章要讲的内容。 尽管控制面板不需要许多硬件,但却不容易使用。它所采用的输入 /输出方法是最坏的方 法。既然聪明到可以从零开始来制造自己的计算机,却还用数字 0和1来作为按键,的确令人 第22章 操 作 系 统 233 下载
234 编码的奥秘 Chinapub.com 下载 汗颜。那么首先要做的是去掉控制面板 当然要用键盘来作为按键。前面讲过计算机键盘的构造是只要按下一个键,就会产生 个对微处理器的中断信号。计算机中的中断控制芯片使得微处理器响应中断,执行一条RST 指令。假设这是一条RST1指令,这条指令使得微处理器在堆栈中保存当前程序计数器的值并 跳转到地址0008h处。从这个地址开始,可以输入一些代码(用控制面板)。这些代码称为键 盘处理程序 为了使一切都正常工作,还需要一些代码在微处理器复位时执行,这些代码叫初始化程 序。初始化程序首先设置堆栈指针,使得堆栈分配到内存的有效区域,然后,把视频显示存 储器的每一个字节设置为十六进制数20h,即ASCI码的空格,这样就可以去掉屏幕上的随机 字符。初始化程序用OUT( Output)指令设置光标的位置(光标是视频显示器上的下划线, 指示了新输入的字符将要显示的位置)到第1行第1列。下一条指令为EI,即中断允许,该指 令使得微处理器可以响应键盘中断。在此之后是HLT指令,它停止微处理器的工作。 这就是初始化程序的工作。从这时起,由于执行了HLT指令,计算机很可能处于停机状 态。能够把计算机从停机状态唤起的事件仅有来自于控制面板的复位信号或从键盘来的中断 信号 无论何时在键盘上按下一个键,中断信号都使得微处理器从初始化程序最后的HLT语句 跳转到键盘处理程序。键盘处理程序用IN(Inpυut)指令来确定按下的键,然后根据按下的键 来执行一些动作(即键盘处理程序处理每一个按键),接着执行一条RET( Return)指令,最 后又回到HLT语句等待另一个键盘中断 不论按下的是字符、数字还是标点符号,键盘处理程序使用键盘扫描码,结合 Shift键是 否被按下,来确定合适的ASCI码。然后将ASCI码写到视频显示存储器中光标的位置。这个 过程称为回显键到显示器。光标位置增加并移到刚才显示的字符后面的空格处。由此,可以 在键盘上敲入一串字符并显示在屏幕上 如果按下的键是 Backspace(对应的ASCI码是08h),则键盘处理程序删除最后写入到视 频显示存储器中的字符,(删除字符是很简单的一件事,只需写入ASCI码20h—空格字符 到某一内存位置。)然后把光标移回一格。 人们通常在键盘上敲入一行字符(需要改正错误时可用 Backspace键),然后敲入 eturn(回车)键,回车键在计算机键盘上通常标为 Enter。与在电子打字机上敲 Return键表明已 经准备好开始输入下一行一样,在计算机中敲 Enter键表明打字者已经完成了一行文字的键入 键盘处理程序在处理 Return或 Enter键(对应的ASCI码为0Dh)的时候,视频显示存储器 的这一行字符被解释成对计算机的一个命令,也就是说,键盘处理程序要去做的一些事情 键盘处理程序中包含有命令处理程序用来解释命令,例如三个命令:W、D和R 如果字符行以W开始,该命令意味着 Write(写入)一些字节到内存中。假设敲入到屏幕 上的行如下面这样 8239B 这个命令指示命令处理程序把十六进制数35、4F等写入到地址1020h开始的内存中。为 了完成这项工作,键盘处理程序需要将 ASCII码转换成字节一前面示范的那个变换的反变 换。 如果字符行以D开头,该命令意味着 Display(显示)内存中的一些字节。假使敲入到屏
汗颜。那么首先要做的是去掉控制面板。 当然要用键盘来作为按键。前面讲过计算机键盘的构造是只要按下一个键,就会产生一 个对微处理器的中断信号。计算机中的中断控制芯片使得微处理器响应中断,执行一条 R S T 指令。假设这是一条RST 1指令,这条指令使得微处理器在堆栈中保存当前程序计数器的值并 跳转到地址0 0 0 8 h处。从这个地址开始,可以输入一些代码(用控制面板)。这些代码称为键 盘处理程序。 为了使一切都正常工作,还需要一些代码在微处理器复位时执行,这些代码叫初始化程 序。初始化程序首先设置堆栈指针,使得堆栈分配到内存的有效区域,然后,把视频显示存 储器的每一个字节设置为十六进制数 2 0 h,即A S C I I码的空格,这样就可以去掉屏幕上的随机 字符。初始化程序用 O U T(O u t p u t)指令设置光标的位置(光标是视频显示器上的下划线, 指示了新输入的字符将要显示的位置)到第 1行第1列。下一条指令为 E I,即中断允许,该指 令使得微处理器可以响应键盘中断。在此之后是 H LT指令,它停止微处理器的工作。 这就是初始化程序的工作。从这时起,由于执行了 H LT指令,计算机很可能处于停机状 态。能够把计算机从停机状态唤起的事件仅有来自于控制面板的复位信号或从键盘来的中断 信号。 无论何时在键盘上按下一个键,中断信号都使得微处理器从初始化程序最后的 H LT语句 跳转到键盘处理程序。键盘处理程序用 I N(I n p u t)指令来确定按下的键,然后根据按下的键 来执行一些动作(即键盘处理程序处理每一个按键),接着执行一条R E T(R e t u r n)指令,最 后又回到H LT语句等待另一个键盘中断。 不论按下的是字符、数字还是标点符号,键盘处理程序使用键盘扫描码,结合 S h i f t键是 否被按下,来确定合适的 A S C I I码。然后将A S C I I码写到视频显示存储器中光标的位置。这个 过程称为回显键到显示器。光标位置增加并移到刚才显示的字符后面的空格处。由此,可以 在键盘上敲入一串字符并显示在屏幕上。 如果按下的键是 B a c k s p a c e(对应的A S C I I码是0 8 h),则键盘处理程序删除最后写入到视 频显示存储器中的字符,(删除字符是很简单的一件事,只需写入 A S C I I码 2 0 h—空格字符 —到某一内存位置。)然后把光标移回一格。 人们通常在键盘上敲入一行字符(需要改正错误时可用 B a c k s p a c e键),然后敲入 R e t u r n (回车)键,回车键在计算机键盘上通常标为 E n t e r。与在电子打字机上敲 R e t u r n键表明已 经准备好开始输入下一行一样,在计算机中敲 E n t e r键表明打字者已经完成了一行文字的键入。 键盘处理程序在处理 R e t u r n或E n t e r键(对应的A S C I I码为0 D h)的时候,视频显示存储器 的这一行字符被解释成对计算机的一个命令,也就是说,键盘处理程序要去做的一些事情。 键盘处理程序中包含有命令处理程序用来解释命令,例如三个命令: W、D和R。 如果字符行以W开始,该命令意味着 Wr i t e(写入)一些字节到内存中。假设敲入到屏幕 上的行如下面这样: W 1020 35 4F 78 23 9B AC 67 这个命令指示命令处理程序把十六进制数 3 5、4 F等写入到地址 1 0 2 0 h开始的内存中。为 了完成这项工作,键盘处理程序需要将 A S C I I码转换成字节—前面示范的那个变换的反变 换。 如果字符行以 D开头,该命令意味着 D i s p l a y(显示)内存中的一些字节。假使敲入到屏 234 编码的奥秘 下载
hinapub.com 2章操作系235 下载 幕上的行如下面这样: D1030 命令处理程序将会显示从内存地址1030h开始的存放在内存中的11个字节(之所以为11 是因为在40个字符宽的显示器上,在与上面命令同一行的地址后面能显示的字符数为11)。可 以用 Display命令来查看内存中的内容 如果字符行以R开头,该命令意味着Run(运行),如下的命令: R1000 意味着“运行从地址1000h处开始存储的程序”。命令处理程序把1000h存到寄存器对HL 中,然后执行指令PCHL,即把寄存器对HL的值装入程序计数器,也就是跳转到该地址处执 程序。 采用键盘处理程序和命令处理程序进行工作是一个重要的里程碑。有了它,无需再用什 么控制面板,从键盘输入容易、迅速且效果良好 当然,还有问题。当电源断电时,输入的所有代码会丢失。正因为如此,可能要把这些 新代码存到只读存储器,即ROM中。上一章曾讲到了一个ROM芯片里存有所有用来在屏幕上 显示ASCI字符的点阵模式。假定所用的芯片在制造时已经配置有这些数据,则你也可以在家 里自己编程ROM芯片。可编程只读存储器(pROM)芯片只可以编程一次:可擦除可编程只读 存储器( EPROM)芯片即可以编程,而且它在紫外光的照射下擦除所有的信息后还可以重新 再进行编程。 前面讲过,RAM板连到DIP开关,DIP开关允许设定RAM板的开始地址。如果使用的是 8080系统,初始时一个RAM板地址应设置成0000h。如果还有ROM,则ROM的地址应为 0000h,而RAM板可以连到更高的地址。 命令处理程序的创建是一个重要的里程碑,不仅因为它对输入到内存中的字节提供了较 快的解释,而且使计算机现在成为交互式的了。当从键盘上敲入一些东西后,计算机就会做 出响应,并在屏幕上显示出来 旦有了ROM中的命令处理程序,就可以开始试着从内存中写入数据到磁盘驱动器(可 能是对应于磁盘扇区大小的块),并且把数据读回到内存。把程序和数据存放在磁盘上比存放 在RAM中要安全得多(后者如果电源出故障它们会丢失),也比存放在ROM中要灵活得多 也许应该加入一些命令到命令处理程序,如用S命令来表示存储 这个命令表示从地址2080h处开始的内存块将要存放到磁盘的第2面,第15磁道,第3扇区 (内存块的大小根据磁盘扇区的大小确定)。同样,也可以加入一个Load命令 命令把该扇区的内容从磁盘送回到内存中。 当然,还需要保留存放的地方的记录,可以用手边的本和铅笔来记录。一定要小心不要 把保存在某个地址的代码重载到内存的另一个地址,这样做就别指望它能正常工作。所有的 ump和Cal指令将会出错,因为它们标识的是原来的地址。同样,如果一个程序比磁盘扇区 的大小要大,则需要把它存放到几个扇区。磁盘中有些扇区可能被其他程序或数据占用了 有些扇区还是空的,因而存放长程序的扇区在磁盘上可能是不连续的。 这样,你可能就会发现手工记录哪些东西存放到哪些地方的工作是相当多的,正因为如
第22章 操 作 系 统 235 下载 幕上的行如下面这样: D 1030 命令处理程序将会显示从内存地址 1 0 3 0 h开始的存放在内存中的 11个字节(之所以为 11, 是因为在4 0个字符宽的显示器上,在与上面命令同一行的地址后面能显示的字符数为 11)。可 以用D i s p l a y命令来查看内存中的内容。 如果字符行以R开头,该命令意味着R u n(运行),如下的命令: R 1000 意味着“运行从地址 1 0 0 0 h处开始存储的程序”。命令处理程序把 1 0 0 0 h存到寄存器对 H L 中,然后执行指令 P C H L,即把寄存器对 H L的值装入程序计数器,也就是跳转到该地址处执 行程序。 采用键盘处理程序和命令处理程序进行工作是一个重要的里程碑。有了它,无需再用什 么控制面板,从键盘输入容易、迅速且效果良好。 当然,还有问题。当电源断电时,输入的所有代码会丢失。正因为如此,可能要把这些 新代码存到只读存储器,即 R O M中。上一章曾讲到了一个 R O M芯片里存有所有用来在屏幕上 显示A S C I I字符的点阵模式。假定所用的芯片在制造时已经配置有这些数据,则你也可以在家 里自己编程R O M芯片。可编程只读存储器( P R O M )芯片只可以编程一次;可擦除可编程只读 存储器(E P R O M)芯片即可以编程,而且它在紫外光的照射下擦除所有的信息后还可以重新 再进行编程。 前面讲过,R A M板连到D I P开关,D I P开关允许设定 R A M板的开始地址。如果使用的是 8 0 8 0系统,初始时一个 R A M板地址应设置成 0 0 0 0 h。如果还有 R O M,则 R O M的地址应为 0 0 0 0 h,而R A M板可以连到更高的地址。 命令处理程序的创建是一个重要的里程碑,不仅因为它对输入到内存中的字节提供了较 快的解释,而且使计算机现在成为交互式的了。当从键盘上敲入一些东西后,计算机就会做 出响应,并在屏幕上显示出来。 一旦有了R O M中的命令处理程序,就可以开始试着从内存中写入数据到磁盘驱动器(可 能是对应于磁盘扇区大小的块),并且把数据读回到内存。把程序和数据存放在磁盘上比存放 在R A M中要安全得多(后者如果电源出故障它们会丢失),也比存放在R O M中要灵活得多。 也许应该加入一些命令到命令处理程序,如用 S命令来表示存储: S 2080 2 15 3 这个命令表示从地址2 0 8 0 h处开始的内存块将要存放到磁盘的第 2面,第1 5磁道,第3扇区 (内存块的大小根据磁盘扇区的大小确定)。同样,也可以加入一个L o a d命令: L 2080 2 15 3 该命令把该扇区的内容从磁盘送回到内存中。 当然,还需要保留存放的地方的记录,可以用手边的本和铅笔来记录。一定要小心不要 把保存在某个地址的代码重载到内存的另一个地址,这样做就别指望它能正常工作。所有的 J u m p和C a l l指令将会出错,因为它们标识的是原来的地址。同样,如果一个程序比磁盘扇区 的大小要大,则需要把它存放到几个扇区。磁盘中有些扇区可能被其他程序或数据占用了, 有些扇区还是空的,因而存放长程序的扇区在磁盘上可能是不连续的。 这样,你可能就会发现手工记录哪些东西存放到哪些地方的工作是相当多的,正因为如
236编的奥 下载 此,就需要有一个文件系统 文件系统是指在磁盘存储器中按文件来组织数据的方法。文件是存放在一个或多个扇区 中相关数据的集合。更重要的是,每个文件有一个文件名作为标识,便于记住文件中包含的 内容。可以把磁盘看成类似于文件柜,里面的每一个文件都有一个标志用来表示文件的名称 汉文件系统通常是称作操作系统的较大软件集合的一部分。本章构造的键盘处理程序和命 理程序也肯定包含在操作系统中。先不考虑其漫长的演化过程,让我们看一下真正的操 作系统是在干什么,又是如何工作的 回顾历史,最重要的8位微处理器操作系统是CPM,是 Gary Kildall(出生于1942年)在 20世纪70年代中期为 Intel8080微处理器而写的,他后来创立了DRI( digital research incorporated)公司 CP/M存放在磁盘中。早期CP/M最常用的存储介质是单面8英寸磁盘,有77个磁道,每道 26个扇区,每扇区128个字节(总共256256字节),磁盘的头两个磁道包含有CP/M。下面将 简单地描述CP/M是如何从磁盘装入到计算机内存中的 CP/M盘中余下的75个磁道用来存储文件。CPM的文件系统虽然很简单,但却满足两个 基本的要求:首先,磁盘中的每个文件有一个名字作为标识,这个名字也存在磁盘中。其实, CP/M用来读取文件所需的全部信息都与文件一起存放在磁盘中:第二,文件在磁盘中并不占 据连续的扇区。由于经常创建和删除不同大小的文件,因而磁盘上的剩余空间都是碎片。文 件系统具有把大文件存放在不连续扇区的这种能力是非常有用的 用来存放文件的75个磁道按分配块进行分组,每一个分配块有8个扇区,即1024字节。磁 盘中共有243个分配块,编号从0~242 开始的两个分配块(共2048字节)用作目录区。目录区是磁盘中的一个特殊区域,用来 存放磁盘中每一个文件的名称和一些主要信息。存在磁盘中的每一个文件需要一个32字节长 的目录项。因为目录区总共只有2048字节,因而磁盘能够存放2048/32,即64个文件。 每一个32字节的目录项包含有以下信息 字节 含义 通常设为0 文件名 文件类型 文件扩展 保留(设置为0) 最后一块的扇区数 磁盘存储表 目录项的第一个字节只在文件系统可供两个或更多人同时共享时使用。在CPM中,该字 节通常设置为0,与第13、14字节一样。 在CPM中,每个文件的文件名由两部分组成,第一部分称作文件名,最多有8个字符, 存放在目录项的第1~8字节:第二部分是文件类型,最多有3个字符,存放在第9~11字节 有几个标准的文件类型,如:TXT表示文本文件(即文件中只包含ASCI码),COM ( Command的简称)表示文件内容是8080机器码指令或程序。定义文件时,这两部分由点隔 开,如:
236 编码的奥秘 下载 此,就需要有一个文件系统。 文件系统是指在磁盘存储器中按文件来组织数据的方法。文件是存放在一个或多个扇区 中相关数据的集合。更重要的是,每个文件有一个文件名作为标识,便于记住文件中包含的 内容。可以把磁盘看成类似于文件柜,里面的每一个文件都有一个标志用来表示文件的名称。 文件系统通常是称作操作系统的较大软件集合的一部分。本章构造的键盘处理程序和命 令处理程序也肯定包含在操作系统中。先不考虑其漫长的演化过程,让我们看一下真正的操 作系统是在干什么,又是如何工作的。 回顾历史,最重要的 8位微处理器操作系统是 C P / M,是Gary Kildall(出生于1 9 4 2年)在 2 0世纪 7 0年代中期为 Intel 8080 微处理器而写的,他后来创立了 D R I(digital research i n c o r p o r a t e d)公司。 C P / M存放在磁盘中。早期 C P / M最常用的存储介质是单面 8英寸磁盘,有7 7个磁道,每道 2 6个扇区,每扇区 1 2 8个字节(总共256 256字节),磁盘的头两个磁道包含有 C P / M。下面将 简单地描述C P / M是如何从磁盘装入到计算机内存中的。 C P / M盘中余下的 7 5个磁道用来存储文件。 C P / M的文件系统虽然很简单,但却满足两个 基本的要求:首先,磁盘中的每个文件有一个名字作为标识,这个名字也存在磁盘中。其实, C P / M用来读取文件所需的全部信息都与文件一起存放在磁盘中;第二,文件在磁盘中并不占 据连续的扇区。由于经常创建和删除不同大小的文件,因而磁盘上的剩余空间都是碎片。文 件系统具有把大文件存放在不连续扇区的这种能力是非常有用的。 用来存放文件的7 5个磁道按分配块进行分组,每一个分配块有 8个扇区,即1 0 2 4字节。磁 盘中共有2 4 3个分配块,编号从0~2 4 2。 开始的两个分配块(共 2 0 4 8字节)用作目录区。目录区是磁盘中的一个特殊区域,用来 存放磁盘中每一个文件的名称和一些主要信息。存在磁盘中的每一个文件需要一个 3 2字节长 的目录项。因为目录区总共只有 2 0 4 8字节,因而磁盘能够存放2 0 4 8 / 3 2,即6 4个文件。 每一个3 2字节的目录项包含有以下信息: 字节 含义 0 通常设为0 1~8 文件名 9~11 文件类型 1 2 文件扩展 1 3~1 4 保留(设置为0) 1 5 最后一块的扇区数 1 6~3 1 磁盘存储表 目录项的第一个字节只在文件系统可供两个或更多人同时共享时使用。在 C P / M中,该字 节通常设置为0,与第1 3、1 4字节一样。 在C P / M中,每个文件的文件名由两部分组成,第一部分称作文件名,最多有 8个字符, 存放在目录项的第 1~8字节;第二部分是文件类型,最多有 3个字符,存放在第 9~11字节。 有几个标准的文件类型,如: T X T表示文本文件(即文件中只包含 A S C I I码),C O M (C o m m a n d的简称)表示文件内容是 8 0 8 0机器码指令或程序。定义文件时,这两部分由点隔 开,如: