ChinaUnix首页 > 精华文章 > C/C++ > 正文

[精彩] I/O地址的问题


http://www.chinaunix.net 作者:heefly  发表于:2008-03-07 16:26:06
发表评论】 【查看原文】 【C/C++讨论区】【关闭

不知道在此问是不是合适,只是我到这个版快的次数多一点。请斑竹原谅。


小第对计算机底层和硬件的东西不是很了解,在看到一段串口初始化的代码中,

        outportb(0x2fb,0x80);
        outportb(0x2f8,0x30);        
        outportb(0x2fb,0x03);

串口地址为0X2F8 ,OUTPORTB 是将值写到一个地址中去,对2FB操作好象是设置它的比特率,可是
1。我不明白为什么是2FB设置他的比特率,
2。还有0X03代表的是9600,不知道这个是怎么算的。
3。这个是串口,对于其他的IO呢,如并口,GPIO,怎么进行设置?
4。对于计算机IO地址的分配,不知道是怎么样的一个原理,有哪方面的书可以介绍看一下。

各位大虾帮帮忙,先谢谢了



 SST中国 回复于:2008-03-06 16:31:18

引用:原帖由 heefly 于 2008-3-6 16:17 发表 [url=http://bbs.chinaunix.net/redirect.php?goto=findpost&pid=8047065&ptid=1061711]
不知道在此问是不是合适,只是我到这个版快的次数多一点。请斑竹原谅。


小第对计算机底层和硬件的东西不是很了解,在看到一段串口初始化的代码中,

        outportb(0x2fb,0x80);
        outportb(0 ... 



一切都在硬件手册里.


 zx_wing 回复于:2008-03-06 23:47:53

引用:原帖由 heefly 于 2008-3-6 16:17 发表 [url=http://bbs.chinaunix.net/redirect.php?goto=findpost&pid=8047065&ptid=1061711]
不知道在此问是不是合适,只是我到这个版快的次数多一点。请斑竹原谅。


小第对计算机底层和硬件的东西不是很了解,在看到一段串口初始化的代码中,

        outportb(0x2fb,0x80);
        outportb(0 ... 


前三个问题请参阅串口的设备规范。对于第四个问题,抛砖引玉一下,正好总结一下自己对I/O的看法,有错的地方请大家指正。

I/O作为CPU和外设交流的一个渠道,主要分为两种,一种是Port I/O,一种是MMIO(Memory mapping I/O)。
前者就是我们常说的I/O端口,它实际上的应该被称为I/O地址空间。
对于x86架构来说,通过IN/OUT指令访问。PC架构一共有65536个8bit的I/O端口,组成64KI/O地址空间,编号从0~0xFFFF。连续两个8bit的端口可以组成一个16bit的端口,连续4个组成一个32bit的端口。I/O地址空间和CPU的物理地址空间是两个不同的概念,例如I/O地址空间为64K,一个32bit的CPU物理地址空间是4G。

MMIO占用CPU的物理地址空间,对它的访问可以使用CPU访问内存的指令进行。一个形象的比喻是把文件用mmap()后,可以像访问内存一样访问文件、同样,MMIO是用访问内存一样的方式访问I/O资源,如设备上的内存。MMIO不能被cache,原因以前很多帖子论述过,就不多说了(有特殊情况,如VGA)。

Port I/O和MMIO的主要区别在于1)前者不占用CPU的物理地址空间,后者占有(这是对x86架构说的,一些架构,如IA64,port I/O占用物理地址空间)。2)前者是顺序访问。也就是说在一条I/O指令完成前,下一条指令不会执行。例如通过Port I/O对设备发起了操作,造成了设备寄存器状态变化,这个变化在下一条指令执行前生效。uncache的MMIO通过uncahce memory的特性保证顺序性。3)使用方式不同

由于port I/O有独立的64KI/O地址空间,但CPU的地址线只有一套,所以必须区分地址属于物理地址空间还是I/O地址空间。早期的CPU有一个M/I针脚来表示当前地址的类型,后来似乎改了。刚才查了一下,叫request command line,没搞懂,觉得还是一个针脚。

IBM PC架构规定了一些固定的I/O端口,ISA设备通常也有固定的I/O端口,这些可以通过ICH(南桥)的规范查到。PCI设备的I/O端口和MMIO基地址通过设备的PCI configure space报告给操作系统,这些内容以前的帖子都很多,可以查阅一下。

通常遇到写死在I/O指令中的I/O端口,如果不是ISA设备,一般都是架构规定死的端口号,可查阅规范。

[ 本帖最后由 zx_wing 于 2008-3-7 18:54 编辑 ]


 crspo 回复于:2008-03-07 11:15:06

引用:原帖由 heefly 于 2008-3-6 16:17 发表 [url=http://bbs.chinaunix.net/redirect.php?goto=findpost&pid=8047065&ptid=1061711]
不知道在此问是不是合适,只是我到这个版快的次数多一点。请斑竹原谅。


小第对计算机底层和硬件的东西不是很了解,在看到一段串口初始化的代码中,

        outportb(0x2fb,0x80);
        outportb(0 ... 


PCI设备的PIO端口可以从配置空间获得。
其它很多设备的PIO端口是固定的,或者可以通过对桥芯片编程更改。


 RobinsonNie 回复于:2008-03-07 11:30:08

引用:原帖由 zx_wing 于 2008-3-6 23:47 发表 [url=http://bbs.chinaunix.net/redirect.php?goto=findpost&pid=8048686&ptid=1061711]

按理说MMIO是不被cache的 



cache可以通过协处理器进行配置,从而使cache针对某一memory不进行缓存,也就是禁止cache生效.


 RobinsonNie 回复于:2008-03-07 11:31:23

还是赞一个,善于总结.向你学习:mrgreen: :mrgreen: :mrgreen:


 zx_wing 回复于:2008-03-07 12:35:45

引用:原帖由 RobinsonNie 于 2008-3-7 11:30 发表 [url=http://bbs.chinaunix.net/redirect.php?goto=findpost&pid=8050264&ptid=1061711]


cache可以通过协处理器进行配置,从而使cache针对某一memory不进行缓存,也就是禁止cache生效. 


cache不是通过协处理器配置的,x86架构通过MTTR寄存器配置禁止。
我是不清楚为什么MMIO不cache但没有order accessing的效果。


 RobinsonNie 回复于:2008-03-07 13:39:45

#if __LINUX_ARM_ARCH__ >= 6
#define mb() __asm__ __volatile__ ("mcr p15, 0, %0, c7, c10, 5" \
                                   : : "r" (0) : "memory")
#else
#define mb() __asm__ __volatile__ ("" : : : "memory")
#endif
#define rmb() mb()
#define wmb() mb()

占个卧,,切到win下查下文档.


 zx_wing 回复于:2008-03-07 13:50:15

引用:原帖由 RobinsonNie 于 2008-3-7 13:39 发表 [url=http://bbs.chinaunix.net/redirect.php?goto=findpost&pid=8051262&ptid=1061711]
#if __LINUX_ARM_ARCH__ >= 6
#define mb() __asm__ __volatile__ ("mcr p15, 0, %0, c7, c10, 5" \
                                   : : "r" (0) : "memory")
#else
#define mb() __asm__ __volatile_ ... 


哦,ARM不懂,我只对通用处理器架构知道一点。
但我的意思是为啥 un-cache的MMIO不能保证访问的顺序性,是什么东西阻碍了它。刚才请教了前辈,也没搞清楚。


 scutan 回复于:2008-03-07 13:55:56

每次看zx_wing大哥的回贴都是一种享受啊.


 crspo 回复于:2008-03-07 13:58:40

引用:原帖由 zx_wing 于 2008-3-7 12:35 发表 [url=http://bbs.chinaunix.net/redirect.php?goto=findpost&pid=8050704&ptid=1061711]

cache不是通过协处理器配置的,x86架构通过MTTR寄存器配置禁止。
我是不清楚为什么MMIO不cache但没有order accessing的效果。 


可以通过多种方式配置cache策略



 crspo 回复于:2008-03-07 14:04:52

引用:原帖由 zx_wing 于 2008-3-7 13:50 发表 [url=http://bbs.chinaunix.net/redirect.php?goto=findpost&pid=8051303&ptid=1061711]

哦,ARM不懂,我只对通用处理器架构知道一点。
但我的意思是为啥 un-cache的MMIO不能保证访问的顺序性,是什么东西阻碍了它。刚才请教了前辈,也没搞清楚。 


UC类型的内存是严格按序的:
引用:
The strong uncached (UC) memory type forces a strong-ordering model on
memory accesses. Here, all reads and writes to the UC memory region appear on
the bus and out-of-order or speculative accesses are not performed. This
memory type can be applied to an address range dedicated to memory mapped
I/O devices to force strong memory ordering.




 zx_wing 回复于:2008-03-07 14:08:01

引用:原帖由 crspo 于 2008-3-7 13:58 发表 [url=http://bbs.chinaunix.net/redirect.php?goto=findpost&pid=8051346&ptid=1061711]

可以通过多种方式配置cache策略
 


:)多谢指正,PCD是所有IA32处理器支持的关闭cache的方式。
老式奔腾和486使用对地址解码通过CPU针脚进行。
主要是从p4、p6架构和xeon都用的MTTR,并且这个不是我关心的问题,所以没有提及。


 zx_wing 回复于:2008-03-07 14:11:02

引用:原帖由 crspo 于 2008-3-7 14:04 发表 [url=http://bbs.chinaunix.net/redirect.php?goto=findpost&pid=8051368&ptid=1061711]

UC类型的内存是严格按序的:
 


:mrgreen: 多谢,这个就是我要的答案,请问是从哪儿找到的?
我以前看相关资料没看到专门说MMIO的访问顺序问题,但自己又想不通它凭什么不能保证顺序访问,才有上面的问题。
我估计CPU的相关规范没讲这个是因为还存在VGA这种特殊的、MMIO可以被cache的情况,所以就没一概而论了。


 crspo 回复于:2008-03-07 14:12:59

引用:原帖由 zx_wing 于 2008-3-7 14:11 发表 [url=http://bbs.chinaunix.net/redirect.php?goto=findpost&pid=8051395&ptid=1061711]

:mrgreen: 多谢,这个就是我要的答案,请问是从哪儿找到的?
我以前看相关资料没看到专门说MMIO的访问顺序问题,但自己又想不通它凭什么不能保证顺序访问,才有上面的问题。
我估计CPU的相关规范没讲这个是 ... 


Intel® 64 and IA-32 Architectures
Software Developer’s Manual
Volume 3A:
System Programming Guide, Part 1
10.3


 zx_wing 回复于:2008-03-07 14:17:09

引用:原帖由 crspo 于 2008-3-7 14:12 发表 [url=http://bbs.chinaunix.net/redirect.php?goto=findpost&pid=8051406&ptid=1061711]

Intel® 64 and IA-32 Architectures
Software Developer’s Manual
Volume 3A:
System Programming Guide, Part 1
10.3 


多谢,找到了。:em17:


 zx_wing 回复于:2008-03-07 14:20:25

。。。。。。。。。。。。。。。。。。。。。。。。。
认错人了,刚才话收回

[ 本帖最后由 zx_wing 于 2008-3-7 14:23 编辑 ]


 RobinsonNie 回复于:2008-03-07 15:37:01

引用:
摘于: ARM Architecture Reference Manual 2.7.5 Memory-Mapped I/O
The behavior of a memory-mapped I/O location usually differs from that expected of a normal memory location. For example, two successive loads from a normal memory location return the same value each time unless there has been an intervening store to that location. For a memory-mapped I/O location, the value returned by the second load can be different from the value returned by the first load. Typically, this is because the first load has a[color=Red] side-effect [/color](such as removing the loaded value from a buffer) or because of a [color=Red]side-effect [/color]of an intervening load or store to another memory-mapped I/O location.

----

However, if the memory words, halfwords or bytes accessed by the code sequence are memory-mapped I/O locations, one access can generate a [color=Red]side-effect [/color]which changes the results of a subsequent access to a different location. If this happens, the time order of individual accesses makes a difference to the final results of the code sequence. Also, a load access to a memory-mapped I/O location can have a [color=Red]side-effect [/color]that changes the result of a subsequent access to the same location. Accesses to memory-mapped I/O locations must therefore not be optimized away, and their time order must not be changed. 

摘于LDD3-9.1.1. I/O 寄存器和常规内存: 
I/O 寄存器和 RAM 的主要不同是 I/O 操作有[color=Red]边际效果[/color], 而内存操作没有: 一个内存写的唯一效果是存储一个值到一个位置, 并且一个内存读返回最近写到那里的值. 因为内存存取速度对 CPU 性能是至关重要的, 这种无边际效果的情况已被多种方式优化: 值被缓存, 并且 读/写指令被重编排.

编译器能够缓存数据值到 CPU 寄存器而不写到内存, 并且即便它存储它们, 读和写操作都能够在缓冲内存中进行而不接触物理 RAM. 重编排也可能在编译器级别和在硬件级别都发生: 常常一个指令序列能够执行得更快, 如果它以不同于在程序文本中出现的顺序来执行, 例如, 为避免在 RISC 流水线中的互锁. 在CISC 处理器, 要花费相当数量时间的操作能够和其他的并发执行, 更快的.

当应用于传统内存时(至少在单处理器系统)这些优化是透明和有益的, 但是它们可能对正确的 I/O 操作是致命的, 因为它们干扰了那些"[color=Red]边际效果[/color]", 这是主要的原因为什么一个驱动存取 I/O 寄存器. 处理器无法预见这种情形, 一些其他的操作(在一个独立处理器上运行, 或者发生在一个 I/O 控制器的事情)依赖内存存取的顺序. 编译器或者 CPU 可能只尽力胜过你并且重编排你请求的操作; 结果可能是奇怪的错误而非常难于调试. 因此, 一个驱动必须确保没有进行缓冲并且在存取寄存器时没有发生读或写的重编排.



术语order accessing与side-effect含意是否一致.如一致:则Memory Mapped I/O满足你说的order accessing.
side-effect含意摘抄:side effect 是指:访问I/O寄存器时,不仅仅会像访问普通内存一样影响存储单元的值,更重要的是它可能改变CPU的I/O端口电平、输出时序或CPU对I/O端口电平的反应等等,从而实现CPU的控制功能。CPU在电路中的意义就是实现其side effect 。(side-effect含意转自:CU-ID马二) 
 


引用:
摘于内核代码include/asm-arm/system.h: 
[table=95%][tr][td][font=FixedSys]#if __LINUX_ARM_ARCH__ >= 6
#define mb() __asm__ __volatile__ ("mcr p15, 0, %0, c7, c10, 5" \
                                   : : "r" (0) : "memory")
#else
#define mb() __asm__ __volatile__ ("" : : : "memory")
#endif
#define rmb() mb()
#define wmb() mb()[/font][/td][/tr][/table]



一个 rmb ( read memory barrier) 保证任何出现于屏障前的读在执行任何后续读之前完成. wmb 保证写操作中的顺序.其实现依赖体具体体系结构. 而从__asm__ __volatile__ ("" : : : "memory")能看出来rmb与wmb什么都没有做,只是指示GCC我对内存进行了修改,你要老老实实的直接对Memory进行操作.进而证实满足你说的order accessing.

[table=95%][tr][td][font=FixedSys][color=#000000][color=#FF9900]// NAND flash
[/color]
[color=#0000CC]#[/color][color=#FF0000]define[/color] rNFCONF     [color=#0000CC]([/color][color=#0000CC]*[/color][color=#0000CC]([/color][color=#0000FF]volatile[/color] [color=#0000FF]unsigned[/color] [color=#0000CC]*[/color][color=#0000CC])[/color]0x4e000000[color=#0000CC])[/color]      [color=#FF9900]//NAND Flash configuration
[/color]
[color=#0000CC]#[/color][color=#FF0000]define[/color] rNFCMD      [color=#0000CC]([/color][color=#0000CC]*[/color][color=#0000CC]([/color][color=#0000FF]volatile[/color] U8 [color=#0000CC]*[/color][color=#0000CC])[/color]0x4e000004[color=#0000CC])[/color]            [color=#FF9900]//NADD Flash command
[/color]
[color=#0000CC]#[/color][color=#FF0000]define[/color] rNFADDR     [color=#0000CC]([/color][color=#0000CC]*[/color][color=#0000CC]([/color][color=#0000FF]volatile[/color] U8 [color=#0000CC]*[/color][color=#0000CC])[/color]0x4e000008[color=#0000CC])[/color]            [color=#FF9900]//NAND Flash address
[/color]
[color=#0000CC]#[/color][color=#FF0000]define[/color] rNFDATA     [color=#0000CC]([/color][color=#0000CC]*[/color][color=#0000CC]([/color][color=#0000FF]volatile[/color] U8 [color=#0000CC]*[/color][color=#0000CC])[/color]0x4e00000c[color=#0000CC])[/color]            [color=#FF9900]//NAND Flash data
[/color]
[color=#0000CC]#[/color][color=#FF0000]define[/color] rNFSTAT     [color=#0000CC]([/color][color=#0000CC]*[/color][color=#0000CC]([/color][color=#0000FF]volatile[/color] [color=#0000FF]unsigned[/color] [color=#0000CC]*[/color][color=#0000CC])[/color]0x4e000010[color=#0000CC])[/color]      [color=#FF9900]//NAND Flash operation status
[/color]
[color=#0000CC]#[/color][color=#FF0000]define[/color] rNFECC      [color=#0000CC]([/color][color=#0000CC]*[/color][color=#0000CC]([/color][color=#0000FF]volatile[/color] [color=#0000FF]unsigned[/color] [color=#0000CC]*[/color][color=#0000CC])[/color]0x4e000014[color=#0000CC])[/color]      [color=#FF9900]//NAND Flash ECC
[/color]
[color=#0000CC]#[/color][color=#FF0000]define[/color] rNFECC0     [color=#0000CC]([/color][color=#0000CC]*[/color][color=#0000CC]([/color][color=#0000FF]volatile[/color] U8  [color=#0000CC]*[/color][color=#0000CC])[/color]0x4e000014[color=#0000CC])[/color]
[color=#0000CC]#[/color][color=#FF0000]define[/color] rNFECC1     [color=#0000CC]([/color][color=#0000CC]*[/color][color=#0000CC]([/color][color=#0000FF]volatile[/color] U8  [color=#0000CC]*[/color][color=#0000CC])[/color]0x4e000015[color=#0000CC])[/color]
[color=#0000CC]#[/color][color=#FF0000]define[/color] rNFECC2     [color=#0000CC]([/color][color=#0000CC]*[/color][color=#0000CC]([/color][color=#0000FF]volatile[/color] U8  [color=#0000CC]*[/color][color=#0000CC])[/color]0x4e000016[color=#0000CC])[/color]

[color=#0000CC]#[/color][color=#FF0000]define[/color] NF_CMD[color=#0000CC]([/color]cmd[color=#0000CC])[/color]     [color=#0000CC]{[/color]rNFCMD[color=#0000CC]=[/color]cmd[color=#0000CC];[/color][color=#0000CC]}[/color]
[color=#0000CC]#[/color][color=#FF0000]define[/color] NF_ADDR[color=#0000CC]([/color]addr[color=#0000CC])[/color]   [color=#0000CC]{[/color]rNFADDR[color=#0000CC]=[/color]addr[color=#0000CC];[/color][color=#0000CC]}[/color] 
[color=#0000CC]#[/color][color=#FF0000]define[/color] NF_nFCE_L[color=#0000CC]([/color][color=#0000CC])[/color] &nbsp;&nbsp;&nbsp;&nbsp;[color=#0000CC]{[/color]rNFCONF[color=#0000CC]&[/color][color=#0000CC]=[/color][color=#0000CC]~[/color][color=#0000CC]([/color]1[color=#0000CC]<[/color][color=#0000CC]<[/color]11[color=#0000CC])[/color][color=#0000CC];[/color][color=#0000CC]}[/color]
[color=#0000CC]#[/color][color=#FF0000]define[/color] NF_nFCE_H[color=#0000CC]([/color][color=#0000CC])[/color] &nbsp;&nbsp;&nbsp;&nbsp;[color=#0000CC]{[/color]rNFCONF[color=#0000CC]|[/color][color=#0000CC]=[/color][color=#0000CC]([/color]1[color=#0000CC]<[/color][color=#0000CC]<[/color]11[color=#0000CC])[/color][color=#0000CC];[/color][color=#0000CC]}[/color]
[color=#0000CC]#[/color][color=#FF0000]define[/color] NF_RSTECC[color=#0000CC]([/color][color=#0000CC])[/color] &nbsp;&nbsp;&nbsp;&nbsp;[color=#0000CC]{[/color]rNFCONF[color=#0000CC]|[/color][color=#0000CC]=[/color][color=#0000CC]([/color]1[color=#0000CC]<[/color][color=#0000CC]<[/color]12[color=#0000CC])[/color][color=#0000CC];[/color][color=#0000CC]}[/color]
[color=#0000CC]#[/color][color=#FF0000]define[/color] NF_RDDATA[color=#0000CC]([/color][color=#0000CC])[/color]     [color=#0000CC]([/color]rNFDATA[color=#0000CC])[/color]
[color=#0000CC]#[/color][color=#FF0000]define[/color] NF_WRDATA[color=#0000CC]([/color]data[color=#0000CC])[/color] [color=#0000CC]{[/color]rNFDATA[color=#0000CC]=[/color]data[color=#0000CC];[/color][color=#0000CC]}[/color]

[color=#FF9900]/*
ARM平台上操作nand flash的源码
*/[/color]
&nbsp;&nbsp;&nbsp;&nbsp;NF_ADDR[color=#0000CC]([/color]blockPage[color=#0000CC]&[/color]0xff[color=#0000CC])[/color][color=#0000CC];[/color]        [color=#FF9900]// Page number=0
[/color]
&nbsp;&nbsp;&nbsp;&nbsp;NF_ADDR[color=#0000CC]([/color][color=#0000CC]([/color]blockPage[color=#0000CC]>[/color][color=#0000CC]>[/color]8[color=#0000CC])[/color][color=#0000CC]&[/color]0xff[color=#0000CC])[/color][color=#0000CC];[/color]   
&nbsp;&nbsp;&nbsp;&nbsp;NF_ADDR[color=#0000CC]([/color][color=#0000CC]([/color]blockPage[color=#0000CC]>[/color][color=#0000CC]>[/color]16[color=#0000CC])[/color][color=#0000CC]&[/color]0xff[color=#0000CC])[/color][color=#0000CC];[/color]

&nbsp;&nbsp;&nbsp;&nbsp;NF_CMD[color=#0000CC]([/color]0xd0[color=#0000CC])[/color][color=#0000CC];[/color]   [/color][/font][/td][/tr][/table]
要不你说,我今天都想不到回来再瞅一下这代码.直接操作Memory Mapped I/O,满足你说的Order Accessing.


 RobinsonNie 回复于:2008-03-07 15:40:49

刚才怎么回事,怎么上不了了.


 zx_wing 回复于:2008-03-07 15:47:46

引用:原帖由 RobinsonNie 于 2008-3-7 15:37 发表 [url=http://bbs.chinaunix.net/redirect.php?goto=findpost&pid=8051731&ptid=1061711]

术语order accessing与side-effect含意是否一致.如一致:则Memory Mapped I/O满足你说的order accessing.
side-effect含意摘抄:side effect 是指:访问I/O寄存器时,不仅仅会像访问普通内存一样影响存储单元 ... 


多谢回复,crspo 给的材料已经给了我答案了。


 albcamus 回复于:2008-03-07 15:57:36

PAT,MTRR 和 PCD/PWT 如果内容冲突, 谁的优先级高?


 RobinsonNie 回复于:2008-03-07 15:58:30

引用:原帖由 zx_wing 于 2008-3-7 15:47 发表 [url=http://bbs.chinaunix.net/redirect.php?goto=findpost&pid=8051793&ptid=1061711]

多谢回复,crspo 给的材料已经给了我答案了。 



互相学习.:)


 zx_wing 回复于:2008-03-07 16:14:12

引用:原帖由 albcamus 于 2008-3-7 15:57 发表 [url=http://bbs.chinaunix.net/redirect.php?goto=findpost&pid=8051837&ptid=1061711]
PAT,MTRR 和 PCD/PWT 如果内容冲突, 谁的优先级高? 


说实话不清楚。但我觉得这个命题有点不妥。
PAT、PCD/PWT描述的是虚拟地址空间。
MTRR描述的是物理地址空间。
讨论它们的优先级感觉有点奇怪。
非要说谁的高,我认为MTTR的最高,因为在总线上操作的是物理地址,应该以MTTR的为准。


 crspo 回复于:2008-03-07 16:15:20

引用:原帖由 albcamus 于 2008-3-7 15:57 发表 [url=http://bbs.chinaunix.net/redirect.php?goto=findpost&pid=8051837&ptid=1061711]
PAT,MTRR 和 PCD/PWT 如果内容冲突, 谁的优先级高? 





 zx_wing 回复于:2008-03-07 16:20:54

引用:原帖由 crspo 于 2008-3-7 16:15 发表 [url=http://bbs.chinaunix.net/redirect.php?goto=findpost&pid=8051953&ptid=1061711]

 


恩,由此可以看出,MTTR的优先级是最高的


 albcamus 回复于:2008-03-07 16:23:35

引用:原帖由 zx_wing 于 2008-3-7 16:20 发表 [url=http://bbs.chinaunix.net/redirect.php?goto=findpost&pid=8051986&ptid=1061711]

恩,由此可以看出,MTTR的优先级是最高的 



这个表看不出 谁的优先级高来吧?  刚才查了一下 最新的手册, 好象Table10-6和table 10-7才是 他们之间的优先级列表。


 zx_wing 回复于:2008-03-07 16:26:06

引用:原帖由 albcamus 于 2008-3-7 16:23 发表 [url=http://bbs.chinaunix.net/redirect.php?goto=findpost&pid=8052005&ptid=1061711]


这个表看不出 谁的优先级高来吧?  刚才查了一下 最新的手册, 好象Table10-6和table 10-7才是 他们之间的优先级列表。 


可以看出来啊,PAT的属性可以被MTTR override,就说明MTTR优先级高嘛:mrgreen: 
反正我认为物理地址空间的描述是优先级最高的




原文链接:http://bbs.chinaunix.net/viewthread.php?tid=1061711
转载请注明作者名及原文出处