linux学习笔记(一、微型计算机组成结构)

    我们都知道,计算机的大脑是cpu,就是中央处理器,它是通过总线和外界打交道的。这个总线分为3种,地址线、数据线

和控制信号线。地址线用于提供内存或I/O设备的地址;数据线用于在cpu和内存或I/O设备之间提供数据传输的通道;控制信号线则负责指挥执行的具体读/写操作。对于使用80386cpu的pc,其内部地址线和数据线部分分别有32根,即都是32位的。因此地址寻址空间范围有232B,即0~4GB

     除了cpu外,现在pc主板主要由2个超大规模芯片构成的芯片组或芯片集组成:北桥(Northbridge)芯片和南桥(Sourthbridge)芯片.北桥芯片用于cpu、内存和AGP视频接口,同时还起着存储器控制作用。南桥芯片用来管理低、中速的组件,如PCI总线、IDE硬盘接口、USB端口等。之所以用“南、北”桥来命名,是因为在Intel公司公布的典型pc主板上,它们分别位于主板的下端和上端(即地图上的南部和北部)。

    cpu为了访问I/O接口控制器或控制卡上的数据和状态信息,需要首先指定它们的地址,这种地址就成为I/O端口地址。端口地址的设置方法有两种:统一编址和独立编址。二者的区别就是是否将I/O控制器的端口地址与存储器的地址作为一个地址空间范围。

    IBM PC及其兼容机主要使用独立编址方式,但也部分地使用了统一编址。对于使用EISA或PCI等总线结构的现代pc,有64KB的I/O地址空间使用。在普通linux系统下通过查看/proc/ioports文件可以得到相关控制器或设置使用的I/O地址范围。

    PC的I/O接口数据传输方式采用:程序循环查询方式、中断处理方式、DMA传输方式

    程序循环查询方式是指cpu通过在程序中循环查询指定设备控制器中的状态来判断是否可以与设备进行数据交换。在linux系统中,只有在设备或控制器能够立刻返回信息时才会在很少的几个地方采用这种方式。

    中断处理控制方式需要中断控制器的支持。在I/O控制器或设备发出中断请求时,cpu通过使用中断向量表(或中断描述符表)来寻址相应的中断处理服务过程的入口地址。linxu系统中大多设备都采用这种方式。

    直接存储器访问DMA,用于I/O设备与系统内存之间进行批量数据传送,不需要cpu插手。在linux系统中,软盘驱动程序使用中断和DMA方式。

    现在我们买电脑的时候内存估计至少你要512MB,也许要2GB的,可是IBM PC刚推出时系统只带640KB的RAM,由于采用的8088/8086cpu只有20根地址线,所以内存寻址范围最高为1024KB。但是为了与原来的PC在软件上兼容,系统1MB以下物理内存使用分配上仍然与原来一样,只是原来系统ROM中的BIOS一直处于cpu能寻址的内存最高位置处,而BIOS原来所在的位置将在计算机开机初始化时被用作BOIS的影子区域,即BIOS代码仍然会被复制到这个区域(如果这句话不理解,下一段将详细解释)。当计算机上电初始化时,物理内存被设置成从地址0开始的连续区域。地址0xA0000~0xFFFFF(640KB~1MB)和0xFFFE0000~0xFFFFFFFF(4GB处的最后64KB)被用于I/O设备和BIOS程序,除此以外所有的内存都可用做系统内存。假如计算机中有16MB的物理内存,那么在linux0.1x系统中,0~640KB被只用作存放内核代码和数据。linux不使用BIOS功能,也不使用BIOS设置的中断向量表。其中地址从0xA0000(640KB处)开始的128KB用作显示内存缓冲区。1MB~16MB被内核用于可分配的主内存区。

     这里说一下BIOSROM中的系统BIOS程序主要用于计算机开机时执行系统各部分的自检,建立操作系统需要的个中配置表。并把处理器和系统其余部分初始化到一个已知状态。但由于BIOS提供的服务不可并发运行,所以只在初始化时用BIOS提供的参数,而linux在运行时并不使用BIOS中的功能。上一段我个人觉得有句话很难理解,其实是这个意思,计算机上电时,cpu自动把代码段寄存器设置为0xF000,其段基地址设为0xFFFF0000,段长为64KB,而IP被设为0xFFF0,因此此时cpu代码指针指向0xFFFFFFF0处,即4GB空间的最后64KB的最后16B(4GB为最大寻址空间范围)。这里正是系统ROM BIOS存放位置(就是说指令将从这里开始执行),并且BIOS会在这里存放一条跳转指令,跳转到BIOS代码中64KB范围内的某一条指令并执行。可是由于现在PCBIOS容量大多是1MB~2MB,超出了64KB的范围,为了执行超过64KB而又不再0~1MB地址中的其他BIOS代码或数据,BIOS会首先使用32位访问方式把数据段寄存器的刚问范围设为4GB,此后BIOS在执行一些硬件检测和初始化操作后,就会把与原来PC兼容的64KB BIOS代码和数据复制到内存低端1MB末端的64KB,然后跳转到这个地方并让CPU真正运行在实地址模式下。最后BIOS就会从硬盘或其他设备把操作系统引导程序加载到内存0x 7c 00处,并跳转到这个地方继续执行引导程序。刚才提到了实地址模式,这里再说明一下。在IA32下,cpu有两种工作模式,实模式和保护模式,直观地看,当pc上电,开始时cpu是工作在实模式下的,经过某种机制后,才进入保护模式,在保护模式下,cpu有着巨大的寻址能力。Intel808616位的cpu,有16位的寄存器,16位的数据总线以及20位的地址总线和1MB的寻址能力。从80386开始,Intelcpu进入32位时代。有32位地址总线,所以寻址空间可达4GB,这时需要新的方法来解决,当然保护模式的优点还不止这些。如今32位寄存器,但是地址仍然使用”SEG:OFFSET”的形式,只不过保护模式下的段的概念变了。实模式下,段值是由16位的csds等寄存器表示,但32位时,它变成了索引,这个索引指向一个数据结构的一个表项,表项中详细定义了段的起始地址、界限、属性等。

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值