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机器码指令或程序。定义文件时,这两部分由点隔 开,如:
Chinaopub.coM 第2章操作系统 237 下载 MYLETTER. TXT 这种文件命令的方式习惯上称为83,表明点前最多有8个字符,点后最多有3个字符。 目录项中的磁盘存储表标明了该文件所存放的分配块。假设磁盘存储表的前4项分别为 14h、15h、07h和23h,其余均为0,则表明该文件占用4个分配块,即4KB的空间。文件实阿 上可能要短一些。目录项的第15字节标明在最后一个分配块中实际用到了多少个128字节的扇 磁盘存储表长16字节,可以容纳长达16384字节的文件,超过16KB的文件要使用多个 录项,称为扩展。在这种情况下,第一个目录项的第12字节设置为0,第二个目录项的第12字 节设置为1,依此类推 上面提到过文本文件也称为ASCI文件,或其他类似名称。文本文件中包含有对应于字符 的 ASCIi码(包括回车和换行代码)供人们浏览。不是文本文件的文件称为二进制文件。 CP/M的COM文件为二进制文件,因而它包含8080的机器码。 假设一个文件(一个很小文件)包括三个16位数一例如,5A48h、78BFh和F510h。由 这三个数字组成的二进制文件长仅为6字节 当然,这是存储多字节数的 Intel格式,其中低字节在前。为 Motorola处理器编写的程序则 是按以下方式来创建文件: 若用ASCI码文本文件存放这同样3个16位数,则由以下这些字节组成: 35413438680D0A37384246680D0A46353130680D0A 这些字节是数字和字符的ASCI码,每一个数由回车(0Dh)和换行(0Ah)终止。文本 文件很容易显示,它们不是作为字节串,而是作为字符显示: 78BEh 包含这3个数的ASCI码文本文件也可以由以下字节组成 32333131320D0A33303931310D0A36323733360D0A 这些字节是与这3个数等效的十进制数的ASCI1码 23112 30911 62736 既然采用文本文件的目的是方便人们阅读,因而没有什么理由不用十进制而非要用十六 进制 上面提到过,CP/M自身存放在磁盘的头两个磁道。为了执行它,CP/M必须从磁盘装载 到内存。使用CP/M的计算机中,ROM并不需要很多,它只需要用来存放一小段代码,称为引 导程序(因为这段代码通过自举来引导操作系统的其余部分)。引导程序把磁盘最开始的128 个字节的扇区装入内存并执行,这个扇区包含有把CPM的其余部分装入内存的代码。整个这 个过程称为引导操作系统
MYLETTER.TXT CALC.COM 这种文件命令的方式习惯上称为 8 . 3,表明点前最多有8个字符,点后最多有3个字符。 目录项中的磁盘存储表标明了该文件所存放的分配块。假设磁盘存储表的前 4项分别为 1 4 h、1 5 h、0 7 h和2 3 h,其余均为0,则表明该文件占用 4个分配块,即4 K B的空间。文件实际 上可能要短一些。目录项的第 1 5字节标明在最后一个分配块中实际用到了多少个 1 2 8字节的扇 区。 磁盘存储表长1 6字节,可以容纳长达 16 384字节的文件,超过 1 6 K B的文件要使用多个目 录项,称为扩展。在这种情况下,第一个目录项的第 1 2字节设置为0,第二个目录项的第1 2字 节设置为1,依此类推。 上面提到过文本文件也称为 A S C I I文件,或其他类似名称。文本文件中包含有对应于字符 的A S C I I码(包括回车和换行代码)供人们浏览。不是文本文件的文件称为二进制文件。 C P / M的C O M文件为二进制文件,因而它包含 8 0 8 0的机器码。 假设一个文件(一个很小文件)包括三个 1 6位数—例如,5 A 4 8 h、7 8 B F h和F 5 1 0 h。由 这三个数字组成的二进制文件长仅为 6字节: 48 5A BF 78 10 F5 当然,这是存储多字节数的 I n t e l格式,其中低字节在前。为 M o t o r o l a处理器编写的程序则 是按以下方式来创建文件: 5A 48 78 BF F5 10 若用A S C I I码文本文件存放这同样3个1 6位数,则由以下这些字节组成: 35 41 34 38 68 0D 0A 37 38 42 46 68 0D 0A 46 35 31 30 68 0D 0A 这些字节是数字和字符的 A S C I I码,每一个数由回车( 0 D h)和换行(0 A h)终止。文本 文件很容易显示,它们不是作为字节串 ,而是作为字符显示: 5A48h 78BFh F510h 包含这3个数的A S C I I码文本文件也可以由以下字节组成: 32 33 31 31 32 0D 0A 33 30 39 31 31 0D 0A 36 32 37 33 36 0D 0A 这些字节是与这3个数等效的十进制数的A S C I I码: 23112 30911 62736 既然采用文本文件的目的是方便人们阅读,因而没有什么理由不用十进制而非要用十六 进制。 上面提到过, C P / M自身存放在磁盘的头两个磁道。为了执行它, C P / M必须从磁盘装载 到内存。使用C P / M的计算机中,R O M并不需要很多,它只需要用来存放一小段代码,称为引 导程序(因为这段代码通过自举来引导操作系统的其余部分)。引导程序把磁盘最开始的 1 2 8 个字节的扇区装入内存并执行,这个扇区包含有把 C P / M的其余部分装入内存的代码。整个这 个过程称为引导操作系统。 第22章 操 作 系 统 237 下载
238编的奥 China°dcow 下载 最终,CPM把它自己安排在RAM的最高地址区域。装载CPM以后,整个内存组织如下 nOOh 系统参数 临时程序区域 TPAD 控制台命令处理程序 基本磁盘操作系统 基本输入瀚出系统 最高地址 该图不是按比例画的。CPM的三个部件—一基本输入/输出系统(BIOS)、基本磁盘操作 系统(BDOS)和控制台命令处理程序(CCP)仅占用6KB的内存,临时程序区域(TPA) 在64KB内存的计算机中大约有58KB—初始时没有任何东西 控制台命令处理程序等效于前面构造的命令处理程序,控制台指的是键盘和显示器 CCP在显示器上显示提示符,就像这样 提示符提示可以输入信息。在有不止一个磁盘驱动器的计算机中,A指的是第一个磁盘驱 动器,CPM从该驱动器装入。在提示符后敲入命令并按回车键,CCP就执行该命令并在屏幕 上显示结果信息。命令执行完以后,CCP又显示提示符。 CCP只能识别一些命令,最重要的命令可能是 DIR 该命令用来显示磁盘目录,即存放在磁盘中的所有文件的列表。可以用特殊字符?和*来 限定显示具有某些特定名称和类型的文件,例如 DIR * TXT 显示所有文本文件,而 DIR A? ? B 显示文件名为5个字符,第一个字符为A,最后一个字符为B的所有文件。 另外一个命令是ERA,它是 Erase的缩写,用来从磁盘中删除文件。例如: ERA MYLETTER. TXT 删除具有这个名字的文件,而 ERA *. TXT 删除所有文本文件。删除文件意味着释放文件的目录项及文件所占用的磁盘空间。 还一个命令是REN,它是 Rename的缩写,用来改变文件名。TYPE命令用来显示文本文 件的内容。因为文本文件只包含有ASCI码,因而该命令还可用来浏览屏幕上的文件内容
238 编码的奥秘 下载 最终,C P / M把它自己安排在 R A M的最高地址区域。装载 C P / M以后,整个内存组织如下 所示: 该图不是按比例画的。 C P / M的三个部件—基本输入/输出系统(B I O S)、基本磁盘操作 系统( B D O S)和控制台命令处理程序( C C P)仅占用 6 K B的内存,临时程序区域( T PA) —在6 4 K B内存的计算机中大约有5 8 K B—初始时没有任何东西。 控制台命令处理程序等效于前面构造的命令处理程序,控制台指的是键盘和显示器。 C C P在显示器上显示提示符,就像这样: A> 提示符提示可以输入信息。在有不止一个磁盘驱动器的计算机中, A指的是第一个磁盘驱 动器,C P / M从该驱动器装入。在提示符后敲入命令并按回车键, C C P就执行该命令并在屏幕 上显示结果信息。命令执行完以后, C C P又显示提示符。 C C P只能识别一些命令,最重要的命令可能是: DIR 该命令用来显示磁盘目录,即存放在磁盘中的所有文件的列表。可以用特殊字符?和 *来 限定显示具有某些特定名称和类型的文件,例如: DIR *.TXT 显示所有文本文件,而 DIR A???B.* 显示文件名为5个字符,第一个字符为A,最后一个字符为B的所有文件。 另外一个命令是E R A,它是E r a s e的缩写,用来从磁盘中删除文件。例如: ERA MYLETTER.TXT 删除具有这个名字的文件,而: ERA *.TXT 删除所有文本文件。删除文件意味着释放文件的目录项及文件所占用的磁盘空间。 还一个命令是 R E N,它是R e n a m e的缩写,用来改变文件名。 T Y P E命令用来显示文本文 件的内容。因为文本文件只包含有 A S C I I码,因而该命令还可用来浏览屏幕上的文件内容, 如: 最高地址 基本输入/输出系统 (BIOS) 基本磁盘操作系统 (BDOS) 控制台命令处理程序 (CCP) 临时程序区域 (TPA) 系统参数
hinapub.com 第2章操作系统 239 下载 SAVE命令用来把临时程序区域中的一个或多个256字节的内存块以一个特定名称存入到磁盘 如果敲入一个CP/M不能识别的命令,就认为输入的是磁盘中的一个程序的名称。程序的 文件类型为COM,代表命令。CCP在磁盘中查找叫这个名字的文件,如果有,CP/M把文件从 磁盘装入临时程序区域,该区域从地址0100h处开始。以上就是告诉你如何运行磁盘中的文件。 如果在CP/M提示符后敲入 CALC 且如果名称为 CALC COM的文件存在于磁盘中,则CCP把该文件装入从地址0100h处开始的内 存中,然后转到地址0100h处的机器码指令开始执行程序 前面讲述了如何在内存的任一地方加入机器码指令并执行,但按磁盘文件存储的CPM程 序必须设计成从内存的特定地址0100h处开始装入 CPM包括几个有用的程序,如PIP( peripheral interchange program),即外设交换程序, 用来拷贝文件。ED是文本编辑器,用来创建和修改文本文件。像PIP和ED这类小且用来完成 简单事务的程序通常称为实用程序。如果运行CP/M系统,可以购买一些大的应用程序,如字 处理软件或计算机电子报表软件:;也可以自己编制这样的软件。所有这些也都以COM类型的 文件存储。 到目前为止,已经知道了CPM(像许多操作系统一样)如何提供命令和实用程序以便对 文件进行基本的操作。同样,也已经知道CPM如何把程序装载到内存并执行。作为一个操作 系统,CP/M还有第三个主要功能 CP/M下运行的程序经常需要把输出写到视频显示器,或者从键盘上读入输入的内容, 或者从磁盘读取一个文件和向磁盘中写入一个文件。但通常情况下,CPM程序并不把程序输 出直接写到视频显示存储器中;同样,CP/M程序也不访问键盘硬件看看输入了什么,它也不 访问磁盘驱动器硬件去读或写磁盘的扇区。 事实上,运行在CP/M下的程序利用CP/M中所构建的子程序集来完成这些公共事务。这 些子程序经过特别设计,从而使得程序很容易访问计算机中的硬件——包括视频显示器、键 盘和磁盘一且程序设计员不用关心这些外设实际上是怎样进行连接的。更重要的是,在 CP/M下运行的程序不需要了解磁道、扇区,这是CP/M的工作,它可以把文件存放到磁盘, 也可以读取磁盘上的文件 为程序提供方便访问计算机硬件的手段是操作系统的第三个主要功能。操作系统提供的 这种访问手段称之为应用程序接口,即APl( application programming interface) 在CP/M下运行的程序通过设置寄存器C为某一特定值(叫作功能值)来使用API并执行指 CALL 5 例如,一个程序通过执行下面的指令获取从键盘上输入的键的 ASCII码 MOv C, 01h CALL 5 累加器A中包含有输入的键的ASCI码。同样 MOV 02h
TYPE MYLETTER.TXT S AV E命令用来把临时程序区域中的一个或多个 2 5 6字节的内存块以一个特定名称存入到磁盘 中。 如果敲入一个C P / M不能识别的命令,就认为输入的是磁盘中的一个程序的名称。程序的 文件类型为C O M,代表命令。C C P在磁盘中查找叫这个名字的文件,如果有, C P / M把文件从 磁盘装入临时程序区域,该区域从地址0 1 0 0 h处开始。以上就是告诉你如何运行磁盘中的文件。 如果在C P / M提示符后敲入: CALC 且如果名称为C A L C . C O M的文件存在于磁盘中,则C C P把该文件装入从地址0 1 0 0 h处开始的内 存中,然后转到地址0 1 0 0 h处的机器码指令开始执行程序。 前面讲述了如何在内存的任一地方加入机器码指令并执行,但按磁盘文件存储的 C P / M程 序必须设计成从内存的特定地址 0 1 0 0 h处开始装入。 C P / M包括几个有用的程序,如 P I P(peripheral interchange program),即外设交换程序, 用来拷贝文件。 E D是文本编辑器,用来创建和修改文本文件。像 P I P和E D这类小且用来完成 简单事务的程序通常称为实用程序。如果运行 C P / M系统,可以购买一些大的应用程序,如字 处理软件或计算机电子报表软件;也可以自己编制这样的软件。所有这些也都以 C O M类型的 文件存储。 到目前为止,已经知道了 C P / M(像许多操作系统一样)如何提供命令和实用程序以便对 文件进行基本的操作。同样,也已经知道 C P / M如何把程序装载到内存并执行。作为一个操作 系统,C P / M还有第三个主要功能。 在C P / M下运行的程序经常需要把输出写到视频显示器,或者从键盘上读入输入的内容, 或者从磁盘读取一个文件和向磁盘中写入一个文件。但通常情况下, C P / M程序并不把程序输 出直接写到视频显示存储器中;同样, C P / M程序也不访问键盘硬件看看输入了什么,它也不 访问磁盘驱动器硬件去读或写磁盘的扇区。 事实上,运行在 C P / M下的程序利用 C P / M中所构建的子程序集来完成这些公共事务。这 些子程序经过特别设计,从而使得程序很容易访问计算机中的硬件—包括视频显示器、键 盘和磁盘—且程序设计员不用关心这些外设实际上是怎样进行连接的。更重要的是,在 C P / M下运行的程序不需要了解磁道、扇区,这是 C P / M的工作,它可以把文件存放到磁盘, 也可以读取磁盘上的文件。 为程序提供方便访问计算机硬件的手段是操作系统的第三个主要功能。操作系统提供的 这种访问手段称之为应用程序接口,即 A P I(application programming interface)。 在C P / M下运行的程序通过设置寄存器 C为某一特定值(叫作功能值)来使用A P I并执行指 令: CALL 5 例如,一个程序通过执行下面的指令获取从键盘上输入的键的A S C I I码: MOV C,01h CALL 5 累加器A中包含有输入的键的A S C I I码。同样 MOV C,02h 第22章 操 作 系 统 239 下载
240编的奥 China°bu6eoM 下载 CALL 5 把累加器A中的ASCI码字符写到视频显示器中光标的位置,光标移到下一个位置 如果程序中要创建一个文件,则把寄存器对DE设置为包含有文件名所在的内存区域的地 址,然后执行以下代码: MOv C, 16h CALL 5 此例中,CALL5指令使CPM在磁盘上创建一个空文件。程序可以利用其他功能向文件写入, 最后关闭文件,意味着文件已经使用完毕。该程序和其他程序以后可打开文件并读取文件内 容 CALL5到底能做什么呢?在内存0005h位置由CPM设置了一条JMP(Jump)指令,该指 令跳转到CPM基本磁盘操作系统(BDOS)所在的位置。这个区域包含有一些子程序用来完 成CPM的每一项功能。BDOS正如它的名字一样,基本作用是维护磁盘上的文件系统。通常 BDOS必须利用CPM基本输入/输出系统(BIOS)中的子程序,而BIOS可实现对像键盘、视 频显示器以及磁盘驱动器这样的硬件的访问。实际上,BIOS是CP/M中唯一需要了解计算机硬 件的部分。CCP利用BDOS的功能来实现自己功能,那些CPM提供的实用程序也是如此 API是与设备无关的计算机硬件接口,也就是说在CPM下编写的程序不需要知道某一机 器上键盘的工作机制、视频显示器的工作机制或读写磁盘扇区的工作机制,它只是简单地利 用CPM的功能来完成涉及到键盘、显示器和磁盘的工作。这样,CPM程序就可以在不同的 计算机上运行,而这些机器可能会用差别很大的硬件来访问外设。(所有CP/M程序必须运行 在8080微处理器上,或能执行8080指令的处理器上,如: Intel8085或Ziog的Z-80。)只要计 算机运行CPM,则程序就可以利用CP/M的功能间接访问硬件。如果没有标准的API,程序则 需要针对不同类型的计算机来做不同的工作 CP/M曾经是8080中非常流行的操作系统,至今仍具有重要的历史意义。CPM对其后的 16位操作系统QDOS( quick and dirty operating system)有很大的影响。QDOS是西雅图计算 机产品公司( seattle computer products)的 Tim Paterson为ntel的16位8086和8088芯片而编写 的。QDOS后来改名为86-DOS,由 Microsoft公司注册。该操作系统被授权给IBM以MS-DOS 这个名称用于第1代 IBM PC机。尽管CP/M的16位版本(称为CPM-86)也可用于 IBM PC, 但MS-DOS很快成了标准。MS-DOS(在IBM计算机上叫PC-DOS)也允许其他生产 IBM PC 兼容机的厂商使用。 MS-DOS没有保留CP/M的文件系统,在MS-DOS文件系统中使用的是一张叫文件分配表 的表,即FAT。这种技术最初由 Microsoft公司在1977年采用。磁盘空间分成簇,根据磁盘空 间大小,簇的大小也从512~16384字节不等。每个文件是簇的集合,文件的目录项只表明了 文件开始的簇,FAT能够表明磁盘上每一个簇的下一簇。 MS-DOS磁盘上的目录项长32字节,采用与CPM一样的8.3文件命名系统,只是术语有些 不同:后面的3个字符称作文件扩展名而不是文件类型。 MS-DOS的目录项无需包含分配块的 列表,它包含的是这样一些有用的信息,如文件最后修改的日期、时间及文件大小 MS-DOS的早期版本在结构上很像CPM,但MS-DOS中不需要BIOS,因为 IBM PC中已 经有完整的BIOS存放在了ROM中。MS-DOS的命令处理程序是一个名叫 COMMAND COM的 文件。MS-DOS的运行程序有两种:具有扩展名COM的文件,大小不能超过64KB:具有扩展 名EXE(可执行)的较大文件
240 编码的奥秘 下载 CALL 5 把累加器A中的A S C I I码字符写到视频显示器中光标的位置,光标移到下一个位置。 如果程序中要创建一个文件,则把寄存器对 D E设置为包含有文件名所在的内存区域的地 址,然后执行以下代码: MOV C,16h CALL 5 此例中,C A L L 5指令使C P / M在磁盘上创建一个空文件。程序可以利用其他功能向文件写入, 最后关闭文件,意味着文件已经使用完毕。该程序和其他程序以后可打开文件并读取文件内 容。 C A L L 5到底能做什么呢?在内存 0 0 0 5 h位置由C P / M设置了一条J M P(J u m p)指令,该指 令跳转到C P / M基本磁盘操作系统( B D O S)所在的位置。这个区域包含有一些子程序用来完 成C P / M的每一项功能。 B D O S正如它的名字一样,基本作用是维护磁盘上的文件系统。通常 B D O S必须利用C P / M基本输入/输出系统(B I O S)中的子程序,而 B I O S可实现对像键盘、视 频显示器以及磁盘驱动器这样的硬件的访问。实际上, B I O S是C P / M中唯一需要了解计算机硬 件的部分。C C P利用B D O S的功能来实现自己功能,那些 C P / M提供的实用程序也是如此。 A P I是与设备无关的计算机硬件接口,也就是说在 C P / M下编写的程序不需要知道某一机 器上键盘的工作机制、视频显示器的工作机制或读写磁盘扇区的工作机制,它只是简单地利 用C P / M的功能来完成涉及到键盘、显示器和磁盘的工作。这样, C P / M程序就可以在不同的 计算机上运行,而这些机器可能会用差别很大的硬件来访问外设。(所有C P / M程序必须运行 在8 0 8 0微处理器上,或能执行8 0 8 0指令的处理器上,如:Intel 8085或Z i l o g的Z-8 0。)只要计 算机运行C P / M,则程序就可以利用C P / M的功能间接访问硬件。如果没有标准的 A P I,程序则 需要针对不同类型的计算机来做不同的工作。 C P / M曾经是8 0 8 0中非常流行的操作系统,至今仍具有重要的历史意义。 C P / M对其后的 1 6位操作系统Q D O S(quick and dirty operating system)有很大的影响。Q D O S是西雅图计算 机产品公司(seattle computer products)的Tim Paterson为I n t e l的1 6位8 0 8 6和8 0 8 8芯片而编写 的。Q D O S后来改名为8 6 - D O S,由M i c r o s o f t公司注册。该操作系统被授权给 I B M以M S - D O S 这个名称用于第 1代IBM PC机。尽管C P / M的1 6位版本(称为C P / M-8 6)也可用于IBM PC, 但M S - D O S很快成了标准。 M S - D O S(在I B M计算机上叫P C - D O S)也允许其他生产 IBM PC 兼容机的厂商使用。 M S - D O S没有保留C P / M的文件系统,在 M S - D O S文件系统中使用的是一张叫文件分配表 的表,即FAT。这种技术最初由 M i c r o s o f t公司在1 9 7 7年采用。磁盘空间分成簇,根据磁盘空 间大小,簇的大小也从 5 1 2~16 384字节不等。每个文件是簇的集合,文件的目录项只表明了 文件开始的簇,FAT能够表明磁盘上每一个簇的下一簇。 M S - D O S磁盘上的目录项长3 2字节,采用与C P / M一样的8 . 3文件命名系统,只是术语有些 不同:后面的3个字符称作文件扩展名而不是文件类型。 M S - D O S的目录项无需包含分配块的 列表,它包含的是这样一些有用的信息,如文件最后修改的日期、时间及文件大小。 M S - D O S的早期版本在结构上很像 C P / M,但M S - D O S中不需要B I O S,因为IBM PC中已 经有完整的B I O S存放在了R O M中。M S - D O S的命令处理程序是一个名叫 C O M M A N D . C O M的 文件。M S - D O S的运行程序有两种:具有扩展名 C O M的文件,大小不能超过6 4 K B;具有扩展 名E X E(可执行)的较大文件
Chinaopub.coM 如2章操作系数241 下载 尽管开始时MS-DOS支持CALL5API功能接口,但对新的程序推荐了新的接口。新的 接口利用了8086的一个功能叫作软件中断,这类似于子程序调用,但程序不需要知道它正在 调用的确切地址。程序通过执行指令INT2h调用MS-DOS的API功能。 理论上讲,应用程序只能通过操作系统提供的接口它们来访问计算机的硬件。但对针对 20世纪70年代和80年代早期的小型操作系统的应用程序而言,经常绕过操作系统,尤其是在 处理视频显示器的时候。直接写入字节到视频存储器的程序比采用其他方式的程序执行速度 要快。的确,对有些应用程序——例如,那些需要在显示存储器上显示图形的应用程序一—一操 作系统是不合适的。MS一DOS最吸引程序员的地方正是它的“反传统性”,程序员可以编写 程序以达到硬件的最快速度。 正因为如此,运行在 IBM PC上的流行软件常常是根据 IBM PC的硬件特点编制的。机器 制造商为了与 IBM PC竞争也不得不沿袭这些特点。如果不这样做,则会使得这些流行软件不 能运行。这些软件通常要求硬件是“ IBM PC或与 IBM PC100%兼容”。 MS-DOS2.0版于1983年3月发布,它增强了功能来使用硬盘驱动器。虽说当时的硬盘容 量很小(按今天的标准),但很快就变得大了起来。当然,硬盘越大就越能存储更多的文件, 但磁盘上存储的文件越多,则找到某个文件或组织文件就变得越麻烦 MS-DOS20的解决方法是采用层次文件系统,它对原有的MS-DOS文件系统做了一些小 的改动。前面讲过,磁盘中有一个区域叫目录,它是一个文件列表,里面包含了有关文件存 放在磁盘的什么地方的信息。在层次文件系统里,一些这样的文件可能本身就是目录,也就 是说,它们是包含其他文件列表的文件,这些文件也有可能还是目录。磁盘中,这个常规的 目录称为根目录,包含在其他目录里的目录称为子目录。目录(有时称文件夹)成为对相关 文件进行分组的一种方法。 层次文件系统以及MS-DOS20的其他一些功能是从UNIX操作系统借鉴来的。UNX是20世 纪70年代早期在贝尔实验室开发的,大部分工作由 Ken Thompson(生于1943年)和 Dennis Ritchie(生于1941年)完成。这个操作系统有趣的名字是一个文字游戏:UNX先是作为贝尔实 验室为MIT和GE开发的名为 Multics(表示多路复用信息和计算业务: multiplexed information and computing services)的早期操作系统的一个缺少健壮性的版本 对设计计算机核心程序的计算机程序员来说,UNX什么时候都是很好的操作系统。虽然 大多数操作系统都是针对特定计算机的,但UNIX是可移植的,意思是它可以运行在各种各样 的计算机中。 在开发UNIX的时候,贝尔实验室还是AT&T的一个辅助机构。为了抑制AT&T在电话业 的垄断地位,AT&T受到法庭裁决。起初,AT&T被禁止销售UNX,公司被迫把它授权给别 人。所以从1973年开始,UNIX被广泛授权给大学、公司和政府机构。1983年,AT&T获准重 返计算机业并发布了它自己的UNIX版本 由此导致的结果就是没有单一的UNIX版本,相反,有许多不同的版本,用不同的名称 运行在不同的计算机上并由不同的经销商销售。许多人把手伸向UNIX,并在UNIX上留下印 迹。然而,当人们在UNIX上加一些东西时,似乎仍然有一种流行的“UNX哲学”在引导人 们。这个哲学的其中一部分是用文本文件作为公用的文件形式。许多UNX实用程序读取文本 文件,利用它们来做一些工作,然后写入另外一个文本文件。UNIX的实用程序可以组织起来 形成一个链,然后在这些文本文件上实现不同的处理
尽管开始时 MS-DOS 支持 CALL 5 API 功能接口,但对新的程序推荐了新的接口。新的 接口利用了8 0 8 6的一个功能叫作软件中断,这类似于子程序调用,但程序不需要知道它正在 调用的确切地址。程序通过执行指令 INT 21h 调用 MS-DOS 的 API 功能。 理论上讲,应用程序只能通过操作系统提供的接口它们来访问计算机的硬件。但对针对 2 0世纪7 0年代和8 0年代早期的小型操作系统的应用程序而言,经常绕过操作系统,尤其是在 处理视频显示器的时候。直接写入字节到视频存储器的程序比采用其他方式的程序执行速度 要快。的确,对有些应用程序—例如,那些需要在显示存储器上显示图形的应用程序—操 作系统是不合适的。 M S-D O S最吸引程序员的地方正是它的“反传统性”,程序员可以编写 程序以达到硬件的最快速度。 正因为如此,运行在 IBM PC上的流行软件常常是根据 IBM PC的硬件特点编制的。机器 制造商为了与IBM PC竞争也不得不沿袭这些特点。如果不这样做,则会使得这些流行软件不 能运行。这些软件通常要求硬件是“ IBM PC或与IBM PC 100%兼容”。 MS-DOS 2.0版于1 9 8 3年3月发布,它增强了功能来使用硬盘驱动器。虽说当时的硬盘容 量很小(按今天的标准),但很快就变得大了起来。当然,硬盘越大就越能存储更多的文件, 但磁盘上存储的文件越多,则找到某个文件或组织文件就变得越麻烦。 MS-DOS 2.0的解决方法是采用层次文件系统,它对原有的M S - D O S文件系统做了一些小 的改动。前面讲过,磁盘中有一个区域叫目录,它是一个文件列表,里面包含了有关文件存 放在磁盘的什么地方的信息。在层次文件系统里,一些这样的文件可能本身就是目录,也就 是说,它们是包含其他文件列表的文件,这些文件也有可能还是目录。磁盘中,这个常规的 目录称为根目录,包含在其他目录里的目录称为子目录。目录(有时称文件夹)成为对相关 文件进行分组的一种方法。 层次文件系统以及MS-DOS 2.0的其他一些功能是从U N I X操作系统借鉴来的。U N I X是2 0世 纪7 0年代早期在贝尔实验室开发的,大部分工作由 Ken Thompson(生于 1 9 4 3年)和D e n n i s R i t c h i e(生于1 9 4 1年)完成。这个操作系统有趣的名字是一个文字游戏:U N I X先是作为贝尔实 验室为M I T和G E开发的名为M u l t i c s(表示多路复用信息和计算业务: multiplexed information and computing services)的早期操作系统的一个缺少健壮性的版本。 对设计计算机核心程序的计算机程序员来说, U N I X什么时候都是很好的操作系统。虽然 大多数操作系统都是针对特定计算机的,但 U N I X是可移植的,意思是它可以运行在各种各样 的计算机中。 在开发U N I X的时候,贝尔实验室还是 AT&T的一个辅助机构。为了抑制 AT&T在电话业 的垄断地位,AT&T受到法庭裁决。起初, AT&T被禁止销售U N I X,公司被迫把它授权给别 人。所以从1 9 7 3年开始,U N I X被广泛授权给大学、公司和政府机构。 1 9 8 3年,AT&T获准重 返计算机业并发布了它自己的 U N I X版本。 由此导致的结果就是没有单一的 U N I X版本,相反,有许多不同的版本,用不同的名称, 运行在不同的计算机上并由不同的经销商销售。许多人把手伸向 U N I X,并在U N I X上留下印 迹。然而,当人们在 U N I X上加一些东西时,似乎仍然有一种流行的“ U N I X哲学”在引导人 们。这个哲学的其中一部分是用文本文件作为公用的文件形式。许多 U N I X实用程序读取文本 文件,利用它们来做一些工作,然后写入另外一个文本文件。 U N I X的实用程序可以组织起来 形成一个链,然后在这些文本文件上实现不同的处理。 第22章 操 作 系 统 241 下载