linux内核完全注释之微型计算机组成结构
计算机组成原理
1、传统计算机计算机组成框图
CPU通过地址线、数据线、控制线组成的本地总线(或内部总线),与系统的其他部分进行数据通信,地址线用于提供内存或I/O设备的地址,指明所需读写数据的具体操作位置。数据线用于在CPU和内存或I/O之间的数据传输通道;控制线用于控制内存与I/O的具体读写操作
内存的大小由地址线的位数决定:如32位232字节,共4GB
下方的各种控制卡(也可成适配卡)是通过扩展插槽与系统总线进行连接,总线插槽是系统地址线、数据总线、控制总线与扩展设备控制器的标准接口。总线接口的标准由ISA(Industry Standard Aarchitecture)总线,EISA,PCI(Peripheral component Interconnect)外围组件互连总线,AGP(Accelerated Graphics Port)加速图形端口视频总线
2、现代计算机组成结构
现代pc根据各个设备的传输数据速度不同,分为南北桥,北桥连接AGP总线、内存、CPU与总线。南桥用于硬盘、键盘、USB端口、PCI总线等中低速设备与总线的通信
I/O端口的寻址与访问控制方式
1、I/O端口寻址:CPU为了访问I/O控制卡上的数据和状态信息,需要先指定其地址,此地址就称为I/O端口地址或者端口。通常根据与不同总线通信分为访问数据的数据端口,输出命令的命令端口、访问控制器执行状态的状态端口。
2、端口地址的设置方法一般由两种:统一编址、独立编址
端口统一编址的原理是把I/O端口地址归入存储器寻址地址空间范围内,也叫存储器映像编址,CPU访问一个I/O端口的操作与访问内存一样,且命令也用访问内存命令
端口独立编址的方法是把I/O控制器与控制卡的端口地址作为一个独立的地址空间对待,称为I/O地址空间,故其访问需要专门的I/O指令
接口访问控制
PC机I/O接口数据传输控制方式一般可以采用程序循环查询方式、中断处理方式和DMA传输方式
1、循环查询方式是指CPU通过在程序中循环查询指定设备控制器中的状态来判断是否可以与设备进行数据交换(浪费CPU)
2、中断处理控制方式需要中断处理器支持,只有在I/O设备通过中断向CPU提出处理请求时,CPU才会暂时中断当前执行的程序而去执行I/O中断处理服务过程,在I/O控制器或设备发出中断请求时,CPU通过中中断向量表(中断描述符)来寻址相应的中断处理服务程序的入口地址。中断控制方式需要事先设置好中断向量表
3、直接内存访问(DMA):该方式时用过DMA控制器无需CPU干预完成内存与I/O设备之间的数据传输。
主存储器
当计算机初始化上电时,物理内存被设置成从地址0开始的连续区域。除了地址从0xA0000到0xFFFFF(640K到1M共384K)和 4G处的最后64K范围以外所有的内存都可用作系统内存。
在linux0.1x系统中,若内存大小位16M
0-640K被用作存放内核代码和数据
640K-1M之间的384K仍保留指定用途
1M-16M将被内核用作作为可分配的主存区
BIOS
1、存放在ROM中的系统BIOS程序主要用于计算机开始时候执行系统各部分的自检,建立起操作系统所需的各种配置表,例如中断向量表、硬盘参数表。(由于BIOS提供的服务不具备可重入性,为了保证访问效率,除了在初始化时候会利用BIOS提供一些系统参数以外,Linux操作系统在运行时并不使用BIOS中的功能)
2、当计算机系统上电开机或这按了机箱上的复位按钮时,CPU会自动把代码段寄存器CS设置为0xF000,段基地址则被设置为0xFFFF0000处,段长度为64K,IP程序计数器被设置为0xFFF0,因此此时CPU的代码指针指向0xFFFFFFF0,即4G空间的最后一个64K的最后16字节处。此处在系统bios的存储位置区域,而此处存储了一条跳转指令JMP跳转到BIOS代码中64KB范围内的某一条指令开始执行,由于现代PC机一般BIOS的容量都是1M-2M,并且存储在闪存中,因此为了执行访问BIOS中超出64K范围的BIOS代码或数据,BIOS程序首先会使用一种32位的大模式的技术把数据段寄存器的访问范围设置位4G,会后BIOS执行一系列硬件检测和初始化操作后,就会把与原来PC机兼容的64KBIOS代码和数据复制到内存低端1M末端的64K处,然后跳转到这个地方并且让cpu进入真正的实地址工作模式,最后BIOS从硬盘或其他块设备把操作系统引导程序加载到内存0x7C00处,并跳转到0x7C00继续执行
串行控制卡
1、异步串行通信原理
两台计算机/设备进行数据交换,即通信。计算机通信中,把计算机/设备与计算机/设备之间的语言称为通信协议。通信协议中传送一个有效数据长度单位的格式,通常用帧来表示这种格式,通信帧的一般结构包括起始同步信息、传输的实际数据、校验等信息。
串行通信是指在线路上以比特数据流一次一个比特进行传输的通信方式。串行通信可以分为异步与同步,其主要区别在于传输时同步的通信单位或帧的大小不同。同步通信与异步通信的区别就好像两个人交谈,同步通信就像两个人你说一句我说一句。而异步通行就好像两个人交谈不在同一个频道,各说各的。(异步表示一个字符一个字符发送,且无需等待对端响应,同步则是一端一端(该段有特定的含义)发送,且可能需要等待对端给出响应后方才继续发送)
2、异步串行传输的格式
在异步通信规范中,把传送1称为传号,传送0称为空号,当无数据传输时,发送端持续发送传号,而需要发送数据时,则发送端首先发送一个比特位时间间隔的空号。
接收方可能检测出三种错误:奇偶校验错误、过速错误、帧格式错误。
linux内核完全注释之微型计算机组成结构的更多相关文章
- 读《linux内核完全注释》的FAQ
以下只是个人看了<linux内核完全注释>的一点理解,如果有错误,欢迎指正! 1 eip中保存的地址是逻辑地址.线性地址还是物理地址? 这个应该要分情况.eip保存的是下一条要执行的指令地 ...
- linux内核参数注释与优化
目录 1.linux内核参数注释 2.两种修改内核参数方法 3.内核优化参数生产配置 参数解释由网络上收集整理,常用优化参数对比了网上多个实际应用进行表格化整理,使查看更直观. 学习linux也有不少 ...
- 赵炯博士《Linux内核完全注释》
赵炯:男,1963年10月5日出生,江苏苏州人,汉族. 同济大学机械工程学院机械电子教研室副教授,从事教学和科研工作. 现在主要为硕士和博士研究生开设<计算机通信技术>.<计算机控制 ...
- LINUX内核完全注释
学习教材:LINUX内核完全注释,内核版本0.11,修正版V3.0 赵炯编著 参考教材:UNIX操作系统设计--M. J. Bach, programming the 80x86 --John H. ...
- (转)linux内核参数注释与优化
linux内核参数注释与优化 原文:http://blog.51cto.com/yangrong/1321594 http://oldboy.blog.51.cto.com/2561410/13364 ...
- linux内核代码注释 赵炯 第三章引导启动程序
linux内核代码注释 第三章引导启动程序 boot目录中的三个汇编代码文件 bootsect.s和setup.s采用近似intel的汇编语法,需要8086汇编器连接器as86和ld86 head ...
- Linux内核0.11体系结构 ——《Linux内核完全注释》笔记打卡
0 总体介绍 一个完整的操作系统主要由4部分组成:硬件.操作系统内核.操作系统服务和用户应用程序,如图0.1所示.操作系统内核程序主要用于对硬件资源的抽象和访问调度. 图0.1 操作系统组成部分 内核 ...
- Linux内核完全注释阅读笔记1:O(1)时间复杂度查找timeout定时器
前言 一直有Linux kernel情节,之前也一直在看Linux kernel相关的书和代码,但是每次到最后又由于兴趣转变而荒废了.这次终于静下心来想把Linux内核相关的代码好好看看,算是对自己的 ...
- Linux内核完全注释之编程语言和环境(一)
as86汇编器 1.来源与对于linux的用途 as86来源minix-386开发的intel 8086.80386汇编编译程序和链接程序,他主要为linux创建16位的启动引导扇区程序boot/bo ...
随机推荐
- 约束优化方法之拉格朗日乘子法与KKT条件
引言 本篇文章将详解带有约束条件的最优化问题,约束条件分为等式约束与不等式约束,对于等式约束的优化问题,可以直接应用拉格朗日乘子法去求取最优值:对于含有不等式约束的优化问题,可以转化为在满足 KKT ...
- An unexpected exception occurred while creating a change object. see the error log for more details
今天再给Android项目工程中的包重命名时出现了这个错误(之前重命名的时候就没有出现,郁闷): An unexpected exception occurred while creating a c ...
- Android开发之旅:环境搭建及HelloWorld
引言 本系列适合0基础的人员,因为我就是从0开始的,此系列记录我步入Android开发的一些经验分享,望与君共勉!作为Android队伍中的一个新人的我,如果有什么不对的地方,还望不吝赐教. 在开始A ...
- 又一枚神器:nginx
一直听说过nginx的大名,也自己装过,但是未直接使用其各种牛X的功能. 今天试用了一下,只能用两字感叹:牛逼!比如它提供的配置检查功能,真是贴心极了,又比如我想要的静态内容浏览器端缓存功能,动态内容 ...
- 【LR】安装LR11后遇到的问题
(1)问题:录制脚本时无法弹出IE浏览器 解决方法: 正确的是C:\Program Files (x86)\Internet Explorer\iexplore.exe 错误是:C:\Program ...
- motan源码解读:注册中心zookeeper(1)
Apache ZooKeeper is an effort to develop and maintain an open-source server which enables highly rel ...
- 《C陷阱与缺陷》读书笔记
1. 词法“陷阱” = 不同于 == , 可以通过if( 1 == a )来避免 & | 不同于 && || 词法分析中的“贪心法” 编译器将程序分解成符号的方法是,从左到右一 ...
- BITED数学建模七日谈之六:组队建议和比赛流程建议
今天进入数学建模经验谈第六天:组队建议和比赛流程建议 数学模型的组队非常重要,三个人的团队一定要有分工明确而且互有合作,三个人都有其各自的特长,这样在某方面的问题的处理上才会保持高效率. 三个人的分工 ...
- ado无法访问数据库问题
现象:以ADO方式访问数据库的C++程序,在一台计算机上能访问成功,在另一台计算机上却访问不成功,报告不能连接错误,并且这两台计算机都装有ado. 原因:ado版本不对 解决方案:下载KB983246 ...
- flex编译命令相关
最近碰到几次flex组件集版本问题,mx容器包含s组件,错误百出,会一直提示皮肤文件错误,上网查了一下,只要在工程属性中--->Flex编译器--->附加的编译参数中加入如下命令行即可:- ...