1---->冯诺依曼的内存中存两种数据:数据项和程序指令
2----->对于这两种信息采用不同的方式来处理,在某些计算机里,他们被分配到不同的内存单元中,尽管他们具有不同的功能,但这两种信息都以二进制数形式存储在具有通用结构的RAM中(一个连续的固定宽度的单元阵列,也称为字即word,或者存储单元,每一个单元都有一个独立的地址),因此,一个独立的字(代表一个数据项和一条指令)通过他的地址来制定
3---->内存单元操纵的抽象原件,冯诺依曼体系描述的计算机是一个抽象的体系,这里的‘内存’实际就是从人的大脑来的,即就是memory---->可以理解成时“记忆设备”,代表所有具有存储的原件
4----->如数组 变量 对象,这些数据抽象翻译成机器语言后,就是一堆二进制代数,一旦通过指定的地址,在数据内存中找到对应的内存单元,就可以对内存单元进行 读操作和 写操作
5---->数据寄存器:
这些寄存器为CPU提供短期记忆功能,比如,当九三(a-b)*c时,必须首先计算(a-b)的值并记住它,虽然这个结果可以暂时的被存储在内存单元中,但时更好的办法啊是存在寄存器中
6----->寻址寄存器:
为了进行读写,CPU必须连续访问内存中的数据,就是寄存器间接寻址
7---->程序计数器PC:
CPU下一条将要执行指令的地址
8----对于存储字和机器字长和数据总线的关系 我还是有点乱
一个网址--对于IO相关知识的详解
http://blog.csdn.net/g_grp/article/details/52431052
9--->虚拟地址:
虚拟地址:现代操作系统普遍采用虚拟内存管理(Virtual Memory Management)机制,这需要MMU(Memory Management Unit)的支持。MMU通常是CPU的一部分,如果处理器没有MMU,或者有MMU但没有启用,CPU执行单元发出的内存地址将直接传到芯片引脚上,被内存芯片(物理内存)接收,这称为物理地址(Physical Address),如果处理器启用了MMU,CPU执行单元发出的内存地址将被MMU截获,从CPU到MMU的地址称为虚拟地址(Virtual Address),而MMU将这个地址翻译成另一个地址发到CPU芯片的外部地址引脚上,也就是将虚拟地址映射成物理地址。
Linux中,进程的4GB(虚拟)内存分为用户空间、内核空间。用户空间分布为0~3GB(即PAGE_OFFSET,在0X86中它等于0xC0000000),剩下的1G为内核空间。程序员只能使用虚拟地址。系统中每个进程有各自的私有用户空间(0~3G),这个空间对系统中的其他进程是不可见的。
CPU发出取指令请求时的地址是当前上下文的虚拟地址,MMU再从页表中找到这个虚拟地址的物理地址,完成取指。同样读取数据的也是虚拟地址,比如mov ax, var. 编译时var就是一个虚拟地址,也是通过MMU从也表中来找到物理地址,再产生总线时序,完成取数据的。
10----->IO编址方式。
统一编址:外设接口中的IO寄存器(即IO端口)与主存单元一样看待,每个端口占用一个存储单元的地址,将主存的一部分划出来用作IO地址空间,如,在PDP-11中,把最高的4K主存作为IO设备寄存器地址。端口占用了存储器的地址空间,使存储量容量减小。
统一编址也称为“I/O内存”方式,外设寄存器位于“内存空间”(很多外设有自己的内存、缓冲区,外设的寄存器和内存统称“I/O空间”)。
独立编址(单独编址):IO地址与存储地址分开独立编址,I/O端口地址不占用存储空间的地址范围,这样,在系统中就存在了另一种与存储地址无关的IO地址,CPU也必须具有专用与输入输出操作的IO指令(IN、OUT等)和控制逻辑。独立编址下,地址总线上过来一个地址,设备不知道是给IO端口的、还是给存储器的,于是处理器通过MEMR/MEMW和IOR/IOW两组控制信号来实现对I/O端口和存储器的不同寻址。如,intel 80x86就采用单独编址,CPU内存和I/O是一起编址的,就是说内存一部分的地址和I/O地址是重叠的。
独立编址也称为“I/O端口”方式,外设寄存器位于“I/O(地址)空间”。
11---->IO端口和IO内存
IO端口:当一个寄存器或者内存位于IO空间时;
IO内存:当一个内存或者寄存器位于内存空间时
12---->访问IO的映射
在访问I/O内存之前,分配I/O内存并不是唯一要求的步骤,你还必须保证内核可存取该I/O内存。访问I/O内存并不只是简单解引用指针,在许多体系中,I/O 内存无法以这种方式直接存取。因此,还必须通过ioremap 函数设置一个映射。