地址总线

【转帖】Linux 内核系统架构

孤街浪徒 提交于 2019-11-30 06:21:18
Linux 内核系统架构 描述Linux内核的文章已经有上亿字了 但是对于初学者,还是应该多学习多看,毕竟上亿字不能一下子就明白的。 即使看了所有的Linux 内核文章,估计也还不是很明白,这时候,还是需要fucking the code. 28年前(1991年8月26日)Linus公开Linux的代码,开启了一个伟大的时代。这篇文章从进程调度,内存管理,设备驱动,文件系统,网络等方面讲解Linux内核系统架构。Linux的系统架构是一个经典的设计,它优秀的分层和模块化,融合了数量繁多的设备和不同的物理架构,让世界各地的内核开发者能够高效并行工作。先来看看Linus在多年前公开Linux的邮件。 "Hello everybody out there using minix - I’m doing a (free) operating system (just a hobby, won’t be big and professional like gnu) for 386(486) AT clones. This has been brewing since april, and is starting to get ready. I’d like any feedback on things people like/dislike in minix, as my OS

用寄存器点亮LED

杀马特。学长 韩版系。学妹 提交于 2019-11-29 23:37:44
为了顺利过渡到库开发,在STM32编程的开始,我们对照51点亮一个LED的方法,给大家演示一下STM32如何用操作寄存器的方法点亮一个LED,然后再慢慢讲解到底什么是库,让大家知道库跟寄存器的关系。 1. 用51点亮一个LED   在用STM32点亮一个LED之前,我们先来复习下用51如何点亮一个LED。 硬件上我们假设51单片机的P0口的第0位接了一个LED,负逻辑亮。如果我们要点亮这个LED,代码上我们会这么写: P0 = 0XFE;//总线操作点亮 LED 这时候我们就把LED点亮了,如果要关掉LED ,则是: P0 = 0XFF;//总线操作关闭 LED 这里面我们用的是总线操作的方法,即是对P0口的8个IO同时操作,但起作用的只是P0^0。 除了这种总线操作的方法,我们还学习过位操作,利用51编译器的关键字sbit,我们可以定义一个位变量: sbit LED = P0^0; 那么LED = 0,就点亮了LED; LED = 1,就关闭了 LED。 为了让程序看起来见名知义,我们定义两个宏: #define ON 0 #define OFF 1 点亮和关闭LED的代码就变成了: LED = ON;//位操作点亮LED LED = OFF;//位操作关闭LED 稍微整理一下代码,整体效果就是: //假设51单片机的PO~0口接LED,负逻辑点亮 #define ON 0

PCI总线基本知识

家住魔仙堡 提交于 2019-11-29 18:06:47
第1章 PCI总线的基本知识 (2011-04-21 13:23:35) 转载 ▼ 标签: 杂谈 分类: 浅谈PCIe体系结构 PCI 总线作为处理器系统的局部总线,主要目的是为了连接外部设备,而不是作为处理器的系统总线连接 Cache 和主存储器。但是 PCI 总线、系统总线和处理器体系结构之间依然存在着紧密的联系。 PCI 总线作为系统总线的延伸,其设计考虑了许多与处理器相关的内容,如处理器的 Cache 共享一致性和数据完整性,以及如何与处理器进行数据交换等一系列内容。其中 Cache 共享一致性和数据完整性是现代处理器局部总线的设计的重点和难点,也是本书将重点讲述的主题之一。 独立地研究 PCI 总线并不可取,因为 PCI 总线仅是处理器系统的一个组成部分。深入理解 PCI 总线需要了解一些与处理器体系结构相关的知识。这些知识是本书所侧重描述的,同时也是 PCI 总线规范所忽略的内容。脱离实际的处理器系统,不容易也不可能深入理解 PCI 总线规范。 对于今天的读者来说, PCI 总线提出的许多概念略显过时,也有许多不足之处。但是在当年, PCI 总线与之前的存在其他并行局部总线如 ISA 、 EISA 和 MCA 总线相比,具有许多突出的优点,是一个全新的设计。 (1) PCI 总线空间与处理器空间隔离 PCI 设备具有独立的地址空间,即 PCI 总线地址空间

.2 HOST主桥(2)

南楼画角 提交于 2019-11-29 18:06:32
2.2 HOST主桥(2) 发布时间:2013-03-28 10:11:54 技术类别: 接口电路 个人分类: 浅谈PCIe体系结构 http://blog.sina.com.cn/s/blog_6472c4cc0100qli5.html PCI Express的outbound ATMU的window base register,translation baseregister. window base register是针对powerpc域的,translation base register是针对PCIExpress域的。 Outbound的BAR是mpc的地址空间,TAR是PCIE的高达64bit的地址空间。 Inbound的BAR是PCIE的高达64bit的地址空间,TAR是mpc的地址空间。 设备 在系统的 PCI 地址空间里申请一段来用,所申请的空间基址和大小保存在BAR寄存器里。 BAR里的只是 PCI 域的地址空间,需要映射到IO地址空间里或者内存地址空间里之后软件才能使用 。 映射到IO空间的话,用IO读写指令和函数去访问 设备 ;映射到内存空间的话,首先得到的是物理地址,映射到虚拟地址后就可以像用指针那样访问。 IO BAR和MEM BAR分别是映射到IO空间和内存空间的BAR;BAR寄存器的0位指示要映射到哪,有的 设备 这位可以由用户设置,有的只读。

006USB设备驱动

纵然是瞬间 提交于 2019-11-29 05:53:21
一、 USB驱动程序之概念介绍(第十七课/第一节) 现象: 在WINDOWS下,把USB设备接到PC机上: 右下角会弹出"发现什么USB新设备"。如发现"android phone"。 跳出一个对话框,提示安装驱动程序。 问1:既然还没有"驱动程序",为何能知道是"android phone"? 答1:Windows里已经有了USB的总线驱动程序,接入USB设备后,是"总线驱动程序"知道你是"android phone"。提示你安装的是"设备驱动程序"。 USB总线驱动程序负责:识别USB设备,给USB设备找到对应的驱动程序。 问2:USB设备种类非常多,为什么一接入电脑,就能识别出来? 答2:PC和USB设备都得遵守一些规范。比如:USB设备接入电脑后,PC机就会发出"你是什么?" USB设备就必须回答"我是xxx"。 USB总线驱动程序会发出某些命令想获取设备信息(描述符),USB设备必须返回(描述符)给PC机。 问3:PC机上接有非常多的USB设备,怎么分辨它们? 答3:USB接口只有四根线:5V,GND,D-,D+ 每一个USB设备接入PC机时,USB总线驱动程序都会给它分配一个编号,接在USB总线上的每一个USB设备都有自己的编号(地址),PC机想访问某个USB设备时,发出的命令都含有对应的编号(地址)。 问4:USB设备刚接入PC机时,还没有编号,那么PC机怎么把

和菜鸟一起学linux总线驱动之DMA传输

跟風遠走 提交于 2019-11-29 00:01:11
DMA的工作过程: 对于嵌入式中的DMA,其实是在写数据寄存器的时候用dma的传输来代替。就像i2c设备,在发送和接收数据的时候都是要往数据寄存器中写数据的。比如那个寄存器是I2C_DATA,如果用cpu来传输的话就是writel(data, I2C_DATA);而用dma传输就是配置好要传输的buf长度,然后源地址就是buf的地址,目标地址就是I2C_DATA。 这里还要注意经过cpu的是虚拟地址,而dma传输的是物理地址。 其实dma传输就是dma控制在两个物理地址之间传输数据。 Linux下用dma传输主要调用下面这些函数就可以实现外部的dma了。 具体的就可以看下面简单的解释,以下主要是dma发送的,其实接收也一样的。配置反一下就可以了。 1、初始化DMA dma_cap_zero(mask); dma_cap_set(DMA_SLAVE,mask); /*1. Init rx channel */ dws->rxchan= dma_request_channel(mask, dma_chan_filter, params); 主要就是申请DMA通道。 dma_chan_filter这个函数主要是查找你的dma传输的设备的请求信号线,其具体是在注册时填写的。 这里会根据这个函数返回的真假来判断已经注册在总线上的dma slave的。 buf =kmalloc(DMA

Intel 80386 CPU

偶尔善良 提交于 2019-11-26 19:20:50
一、80386 概述 80386处理器被广泛应用在1980年代中期到1990年代中期的IBM PC相容机中。这些PC机称为「80386电脑」或「386电脑」,有时也简称「80386」或「386」。80386的广泛应用,将PC机从 16位 时代带入了 32位 时代。80386的强大运算能力也使PC机的应用领域得到巨大扩展,商业办公、科学计算、工程设计、多媒体处理等应用得到迅速发展。它的数据总线和地址总线都是32位,直接寻址的内存空间4GB,虚拟地址空间为64TB。芯片上集成了27.5万个晶体管,主频16-33MHz。它是X86第一个真正的32位CPU,它能提供真正的多任务处理和建立虚拟系统的能力。 二、80386的引脚及功能 80386 DX有132根引脚,采用PGA(Pin Grid Array,引脚网格阵列)封装,采用这种封装工艺单根引脚所占用的面积较双列直插时小,因此引脚数目可以多一些,不必再采用引脚复用技术。因此,在80386中数据线和地址线是分开设置的,控制信号和状态信号也不再复用引脚。其中34 条地址线(A31~A2、BE3~BE0),32 条数据线(D31~D0),3 条中断线,1条时钟线,13 条控制线,20 条电源线VCC,21条地线VSS,还有8 条为空。 与8086/8088 相比,需要说明以下几点: 1)时钟( CLK2): 80386

计算机组成原理 - 一些简单题和设计分析题

此生再无相见时 提交于 2019-11-26 12:34:03
为了前几天的计算机组成原理的复习,从google上搜索的一些烟台大学历年考试试题进行的一些总结,现在分享给需要的朋友。 简答题 1. CPU中包括哪几种寄存器?分别说明其作用。 答:CPU有以下寄存器: (1)指令寄存器(IR):用来保存当前正在执行的一条指令。 (2)程序计数器(PC):用来确定下一条指令的地址。 (3)地址寄存器(AR):用来保存当前CPU所访问的内存单元的地址。 (4)缓冲寄存器(DR):<1>作为CPU和内存、外部设备之间信息传送的中转站。 <2>补偿CPU和内存、外围设备之间在操作速度上的差别。 <3>在单累加器结构的运算器中,缓冲寄存器还可兼作为操作数寄存器。 (5)通用寄存器(AC):当运算器的算术逻辑单元(ALU)执行全部算术和逻辑运算时,为ALU提供一个工作区。 (6)状态条件寄存器:保存由算术指令和逻辑指令运行或测试的结果建立的各种条 件码内容。除此之外,还保存中断和系统工作状态等信息,以便使CPU和系统能及时了解机器运行状态和程序运行状态。 2.根据操作数所在位置,指出其寻址方式(填空)。 (1)、操作数在寄存器中,为____ 寄存器 ____寻址方式。 (2)、操作数地址在寄存器中,为_ 寄存器间接 _寻址方式。 (3)、操作数地址(主存)在指令中,为___ 直接 ___寻址方式。 (4)、操作数在指令中,为__ 立即 ____寻址方式。

计算机组成原理复习题二

时光毁灭记忆、已成空白 提交于 2019-11-26 12:33:28
原文地址: https://wenku.baidu.com/view/935be3d1c1c708a1284a4446 一、选择题 1、在间址周期中,_C_____。 A.所有指令的间址操作都是相同的; B.凡是存储器间接寻址的指令,它们的操作都是相同的; C.对于存储器间接寻址或寄存器间接寻址的指令,它们的操作是不同的; D.以上都不对。 2、将有关数据加以分类、统计、分析,以取得有利用价值的信息,我们称其为_C_____。 A. 数值计算 B. 辅助设计 C. 数据处理 D. 实时控制 3、定点16位字长的字,采用2的补码形式表示时,一个字所能表示的整数范围是____A_。 A.-215 ~ +(215 -1) B.-(215 –1)~ +(215 –1) C.-(215 + 1)~ +215 D.-215 ~ +215 4、根据传送信息的种类不同,系统总线分为___B___。 A. 地址线和数据线 B. 地址线、数据线和控制线 C. 地址线、数据线和响应线 D. 数据线和控制线 5、外存储器与内存储器相比,外存储器__B____。 A.速度快,容量大,成本高 B.速度慢,容量大,成本低 C.速度快,容量小,成本高 D.速度慢,容量大,成本高 一个256K×8的存储器,其地址线和数据线总和为___C___。 注解:256=2的8次方,所以地址线为8,256K*8

X86架构模式

别等时光非礼了梦想. 提交于 2019-11-26 05:26:44
计算机的工作模式 对于计算机来说,CPU(central processing Unit,中央处理器)肯定是最核心的,程序执行全都要依赖于它。 CPU和其他设备连接,要靠一种叫总线(bus)的东西,其实就是主板上密密麻麻的集成电路,这些东西组成了CPU和其他设备的高速通道。 在这些设备中,最重要的是内存(memory),因为单靠CPU是没法完成计算任务的,很多复杂的计算任务需要把中间结果保存下来,然后基于中间结果进行进一步计算,CPU本身是没有办法保存这些结果的,这就需要依赖内存了。 当然总线上也会有一些其他设备,例如显卡会连接显示器,磁盘控制器会连接硬盘,USB控制器会连接鼠标和键盘等等。 CPU和内存是完成计算任务的核心组件,CPU其实也不是单独一块,它包括三个部分,运算单元 ,数据单元和控制单元。 运算单元只管算,例如做加法,做位移等等。但是它不知道应该算哪些数据,运算结果应该放在哪里。运算单元计算的数据如果每次都要经过总线,到内存中去现拿,这样就太慢了, 所以有了数据单元。数据单元包括CPU内部的缓存和寄存器组,空间很小,但是速度飞快,可以暂时存放数据和运算结果。 有了放数据的地方,也有了算的地方,还需要有个指挥到底做什么运算的地方,这就是控制单元。控制单元是一个统一的指挥中心,它可以获得下一条指令,然后执行这条指令,这个指令会指定运算单元取出数据单元的某几个数据