嵌入式linux c 学习笔记5-计算机基础

2019-07-13 00:30发布

/*
 * =====================================================================================
 *
 *       Filename:  the_base_struct_of_computer.c
 *
 *    Description:  计算机体系结构基础
 *
 *        Version:  1.0
 *        Created:  2010年10月29日 20时19分52秒
 *       Revision:  none
 *       Compiler:  gcc
 *
 *         Author:  Yang Shao Kun (), cdutyangshaokun@163.com
 *        Company:  College of Information Engineering of CDUT
 *
 * =====================================================================================
 */
现代的计算机都是基于冯.依诺曼结构,包括两个主要的部分,cpu,内存
cpu:总是周而复始的做同一件事情:从内存中取指令,然后解释执行它,然后在取下
一条指令,,,,
cpu最核心的功能单元包括一下几个部分:
    寄存器,是cpu中的高速存储器,像内存一样可以存取数据,但是比内存要快的多
            分为许多的种类。
    程序计数器:是一种特殊寄存器,保存着cpu取下一条指令的地址,cpu按程序计数
                保存的地址去内存中取指令然后解释执行,这时,它会自动的加上该
                指令的长度,指向内存中的下一条指令。
    指令译码器:应为,cpu取来的指令由若干的字节组成,有些表示内存地址,有些
                表示寄存器编号,和指令是做什么的,加减等,译码器就是负责来解
                释的。
    算术逻辑单元:做运算。
    地址和数据总线:连接内存和cpu。来进行数据的传输。
内存映射I/O:
        无论是在cpu外部接总线的设备还是在cpu内部接总线的设备都有各自的地址范
        围,都可以像访问内存一样访问。---arm
端口I/O:
        X86对于设备有独立的端口地址空间,cpu需要引出额外的地址线来连接片内设
        备,访问时用特殊的in/out 指令。
加载:
     保存在硬盘上的程序是不能被cpu直接取指令执行的,操作系统在执行程序是会把
     它重硬盘复制到内存,这样cpu才能取指令执行。这一过程叫做,load

     程序在加载到内存中后,成为操作系统调度执行的一个任务,这我们称为:进程


     操作系统哦你本生也是一段保存在磁盘上的程序,计算机在启动时执行一段固定
     的启动代码,----bootloader,首先把操作系统从磁盘加载到内存,然后执行操
     作系统中的代码把用户需要的其他程序加载到内存。操作系统是常住内存的。
   
物理地址(physical address-pa):
        如果处理器没有mmu(内存管理单元),或者没有使用,cpu执行单元发出的内存
        地址将直接传到芯片引脚上。
虚拟地址(va):
        cpu执行单元发出的内存地址将被mmu截获,把cpu到mmu的地址称为虚拟地址。
        的地址称为虚拟地址.而,mmu将这个地址翻译成例外一个地址发到cpu芯片的
        外部地址引脚上,也就是将va-》pa。


        mmu的例外的一个功能:内存保护机制。---操作系统可以在页表中设置每个内
        存的访问权限,有些是在用户模式或在特权模式访问,访问的权限又有可读,
        写,执行。当页表设定好后,在cpu访问一个va时,mmu会检察cpu当前处与何
        种模式,访问数据的模式,如果检测出不允许访问,那么产生一个异常。

        那么异常和中断的区别:
            异常的产生是由cpu内部产生。
            中断产生是由外部设备产生
通常操作系统把虚拟地址空间划分为:用户空间和内核空间,x86上的linux虚拟地址空间为:ox00000000(32位)~oxffffffff,前3G(ox00000000~0xbfffffff)是用户空间
后1G(0xc0000000~oxffffffff)是内核空间。


段错误的产生:
            用户要访问一个va,经过mmu检测后无权访问
            mmu产生一个异常,cpu从用户模式切换到特权模式,跳转到内核代么中执
            行异常服务程序。
            内核把这个异常解释为端错误,终止依法异常的进程。

cache:分为两级,一级更靠近cpu执行单元
                 二级更靠近物理内存
       是由static ram组成,掉电后里面的内容不会丢失。我们的bootloader的程序
       就放在里面(4K);