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 ...
随机推荐
- Windows Server 2003 激活码及激活方法
Windows Server 2003 简体中文企业版,真正免激活. CD-KEY:JB88F-WT2Q3-DPXTT-Y8GHG-7YYQY 安装序列号:JCGMJ-TC669-KCBG7-HB8X ...
- Java中Volatile关键字详解
一.基本概念 先补充一下概念:Java并发中的可见性与原子性 可见性: 可见性是一种复杂的属性,因为可见性中的错误总是会违背我们的直觉.通常,我们无法确保执行读操作的线程能适时地看到其他线程写入的值, ...
- RAC 环境下参数文件(spfile)管理
RAC环境下,初始化参数文件与但实例下参数文件有些异同,主要表现在初始化参数可以为多个实例公用,也可以单独设置各个实例的初始化参数.对于那些非共用的初始化参数则必须要单独设置,而共用的则可以单独设置, ...
- Android 注解的一些应用以及原理
在这边文章之前你首先需要对java 的注解部分有一个基本的了解(不需要太过的深入). 简单来说,注解这个东西就是用于辅助我们开发java代码的,注解本身无法干扰java源代码的执行. 在android ...
- 如何定义java中的类
3步走,如下示例代码所示: package com.imooc; //1.定义一个类 public class Telphone { //2.属性(成员变量)有什么 float screen; flo ...
- ArcGIS Engine栅格数据使用总结
jojojojo2002 原文 ArcGIS Engine栅格数据使用总结 简介:ArcGIS Engine栅格数据使用总结,一个栅格数据集由一个或者多个波段(RasterBand)的数据组成,一个波 ...
- 使用Spring MVC统一异常处理实战
1 描述 在J2EE项目的开发中,不管是对底层的数据库操作过程,还是业务层的处理过程,还是控制层的处理过程,都不可避免会遇到各种可预知的.不可预知的异常需要处理.每个过程都单独处理异常,系统的代码耦合 ...
- win7 下配置resin的一些tip
一.如何查看jdk安装目录: 通过不同方法搜索javac看看, javac.exe 是java的编译器: 可用的搜索方法: 1.cmd 控制台: where javac 2.开始菜单的搜索: 一直到 ...
- XML序列化成对象
这个是和ALM上传测试结果结合使用的//把xml序列化成对象以及把对象序列化成xml using System; using System.Data; using System.Configurati ...
- 开发环境配置(netbeans+ant迁移到eclipse+maven)
新公司入职,接手一个离职人员的项目,拿到的源码是以一个压缩包,用netbeans开发,ant管理:前端:jsp+extjs,后端:springmvc+hibernate+activiti+spring ...