Next Previous Contents

12. 更进一步...

这一节并不需要阅读,但是可能带给你一些对于 Unix 以及电子通讯世界更进一步的了解 

12.1 什么是锁定文档(lock files)?

Lock files 只是单纯的一个文档用来表示某个特定的设备正在使用中  它们保存在 /usr/spool/uucp 或是 /var/lock 里面  Linux 的 lock files 名字都是 LCK..name,其中的 name 不是设备名称就是一个 UUCP 节点名称  有些程序建立这些 locks 以便让它们自己可以独占该设备的存取权  例如如果你从你的数据机拨号出去,将会出现一个 lock 告诉其它程序现在已经有人正在使用数据机  Lock files 里面主要是包含锁住该设备的程序的行程号码(PID)  大部份的程序会查阅 lock,然后检查行程表(process table)中锁定该设备的行程来试著决定这个 lock 是否仍然有效  如果发现这个 lock 是有效的话,这个程序(应该)要结束  如果不是,某些程序会删除过时的 lock,然后使用该设备,并在行程执行时建立他们自己的 lock  其它的程序就只好结束并告诉你该设备正在使用中 

12.2 ``baud'' 对 ``bps''

``baud'' 跟 ``bps'' 可能是电脑/电子通讯这个领域里最常被错用的术语之一  当它们事实上并不相同的时候,很多人仍交替使用这些术语 

鲍率(baud)

鲍率是每秒钟数据机(调变解调器,modulator-demodulator)送出多少次信号改变的度量  例如,鲍率为 1200 的含意是信号每隔 833 微秒(microsecond)即改变一次  普遍的鲍率有 50, 75, 110, 300, 600, 1200 以及 2400 大部份的高速数据机所使用的鲍率为 2400  因为语音级(voice-grade)电话线路的频宽限制,超过 2400 的鲍率很难达的到,而只能在非常纯净的电话线品质下才能运作  ``baud''一词在 Emile Baudot 之后才有,他是非同步电报印表机(asynchronous telegraph printer)的发明者 

每秒传输位元(bps)

每秒位元传输率是每秒钟传输多少位元的度量 普遍每秒位元传输率有 50, 75, 110, 300, 1200, 2400, 4800, 9600, ... 115200  在使用 V.42bis 压缩(压缩最大率 4:1)的数据机下,理论上每秒位元传输率可以高达 115200  这是许多人在错用 ``baud'' 这个字时所指的意思 

所以,如果高速数据机以 2400 baud 运作,它们如何能够传送 14400 bps? 数据机对每个 baud 编码来表示某一数量的位元而使得 bps 能大于 baud  这样一来,当二个或更多位元编码成一个 baud 的时候,bps 就会超越 baud  如果你的数据机是以 14400 bps 连线的话,它将会以 2400 baud 的速度每个 baud 传送六个位元 

这个混淆是怎么样开始的? 嗯,回到今天的低速数据机还是昨天的高速数据机那个时代,每秒位元传输率跟信号改变率实际上是完全相等的  每个 bit 编码成一个 baud 人们交替使用 bps 以及 baud 是因为它们的数字相同  例如一台 300 bps 的数据机其信号改变率也是 300  当高速数据机普及后一切都改变了,而且每秒位元传输率超过了信号改变率 

12.3 什么是 UARTs? 它们如何影响效率?

UARTs (通用非同步接收转换器,Universal Asyncronous Receiver Transmitter)是你 PC 串列卡上的蕊片  它们的功用是把资料转成位元,将这些位元送上串列线路,然后在另一端重新建立资料  UARTs 是以位元组为单位处理资料,很方便地也是美国标准交换码(ASCII)的字元大小 

假定是你有一台连接到你 PC 的终端机 当你键入一个字元时,终端机把它交给它的转换器(也是 UART 的一种)  该转换器以指定的速率把这个位元组送到串列线路上,每次一个位元  在 PC 这一端,接收位元的 UART 拿走所有的位元,然后重新组成位元组并且放到缓冲区里去 

有两种不同的 UARTs 类型 你可能有听过愚蠢的(dumb)UARTs - 8250 还有 16450,以及先进先出式 UARTs - 16550A  要了解它们的不同,首先让我们来检验当 UART 送出或接收一个位元组时所发生的事 

这 UART 本身并不能对资料做什么处理,它只是送出以及接收它  每次送出或接收一个位元组时,CPU 都会从串列设备接到一个中断  然后 CPU 就把接收到的位元组从 UARTs 的缓冲区搬到内存的某处,或是提供另一个位元组给 UART 传送  8250 以及 16450 UARTs 只有一个位元组的缓冲区 这个意思是,每送出或接收一个位元组就会中断 CPU 一次  在低速的情况下这样没有问题 但是在高速的传输率下,CPU 会忙于处理 UART 而没有时间照料其它工作  在某些情况下,CPU 没有足够的余裕及时处理中断服务,该位元组将因资料如此快速地传入而被覆写 

这就是 16550A UARTs 有用的地方 这些蕊片具有 16 个位元组的先进先出伫列  这个意思是它在必须中断 CPU 之前可以接收或转换达 16 个位元组  它不仅是能等,而且 CPU 现在也可以同时传送全部 16 个位元组的资料  虽然中断界限(threshold)很少有设到 16 的,这对于其它只有一个位元组缓冲区的 UARTs 而言仍然是一个重要的优点  CPU 收到较少的中断,因此可以自由地做其它事情 资料不会漏失,每个人都很高兴  (也有 16550 这个 UART,但是它跟 16450 一样因为它有问题 )

一般来说, 8250 以及 16450 UARTs 应该能够胜任高达 38400 bps 的工作速率  在高于 38400 bps 的速率下,你可能开始见到资料漏失  其它的 PC 作业系统(这里的定义很宽松),像 DOS 并非是多工的,所以它们有可能可以用 8250 或 16450s 却应付的更好  这就是为什么有些人并没有看到资料漏失,直到他们改用 Linux 才发生 

无-UART(Non-UART)以及智慧型多埠卡使用数位处理机(DSP)蕊片来处理额外的缓冲以及控制,如此更能减轻 CPU 的负担  例如,Cyclades Cyclom 及 Stallion EasyIO 这些卡使用 Cirrus Logic CD-1400 RISC 蕊片,还有许多卡使用 80186 CPU 或更特别的 RISC CPU 来处理串列输出入 

心里要记得,这些愚蠢型的 UART 并非是坏的,只是它们不适合做高速传输  当你将终端机或鼠标连接到这些 UARTs 时应该不会遭遇困难  但是对高速数据机而言,16550A 可以说是必须的 

你可以花多一点点的钱购买有 16550A UARTs 的串列卡,只要询问电脑商该卡所使用的是什么型号的 UARTs 即可  或者你想升级你现在的卡,你可以只要简单地购买 16550A 蕊片并且置换你现在的 16450 UARTs 蕊片  它们的脚位兼容(pin-to-pin compatible) 有些卡有 UARTs 插槽来作这个用途使用  如果不是的话你可以焊接 注意,如果你有钱,买一张新卡将可能会省掉你许多麻烦,它们在 $50 元美金以下 


Next Previous Contents