zoukankan      html  css  js  c++  java
  • 17.3.10---内存中的存的信息 来源--《计算机系统要素_从零开始构建现在计算机》,在学习盘的组成原理里面

    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 函数设置一个映射。

  • 相关阅读:
    oracle函数 TO_DATE(X[,c2[,c3]])
    oracle函数 TO_CHAR(x[[,c2],C3])
    oracle函数 RAWTOHEX(c1)
    oracle HEXTORAW(c1)
    oracle函数 CONVERT(c1,set1,set2)
    oracle函数 ROWIDTOCHAR(rowid)
    oracle函数 chartorowid(c1)
    创建可按比例调整的布局的 Windows 窗体
    A Byte of Python(简明Python教程) for Python 3.0 下载
    使用异步事件在后台进行计算并报告进度
  • 原文地址:https://www.cnblogs.com/xiaoyoucai/p/6530049.html
Copyright © 2011-2022 走看看