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 ...
随机推荐
- zipline tradingcalendar
zipline/utils/ tradingcalendar.py tradingcalendar_bmf.py 巴西商品期货交易所 tradingcalendar_lse.py 伦敦证券交易所 tr ...
- Linux 客户端 下乱码的解决方法
最近使用xshell登陆英文版redhat,由于某些文件是中文编码,在xshell下显示乱码.折腾了很久终于找到了解决的方法,希望可以对大家有用.其他语言乱码的话,解决方法和此类似! 首先检查系统的l ...
- 通过DDOS攻击流程图来浅谈如何预防Ddos攻击与防御
DDOS攻击流程图 站长之家配图(来源:ppkj.net) 一 背景 在前几天,我们运营的某网站遭受了一次ddos攻击,我们的网站是一个公益性质的网站,为各个厂商和白帽子之间搭建一个平台以传递安全问题 ...
- Weblogic修改后台日志输出级别
- git 换行符问题
git 换行符问题 在windows环境中 对于autocrlf = false 不会激发 关于换行符的处理 对于autocrlf = true 会在提交是将LF替换成CRLF 切出时时CRLF 对于 ...
- Unable to find vcvarsall.bat解决方法
今天在安装scikit-learn时出现了 error: Unable to find vcvarsall.bat 在安装一些Python模块时,大部分是cpython写的模块时会发生如下错误 err ...
- STL源码分析读书笔记--第二章--空间配置器(allocator)
声明:侯捷先生的STL源码剖析第二章个人感觉讲得蛮乱的,而且跟第三章有关,建议看完第三章再看第二章,网上有人上传了一篇读书笔记,觉得这个读书笔记的内容和编排还不错,我的这篇总结基本就延续了该读书笔记的 ...
- 从 Page not found: / 提示说起,我是怎么发现webstrom与myeclipse冲突问题及解决的
#从 Page not found: / 提示说起,我是怎么发现webstrom与myeclipse冲突问题的 ## 从前面发表了两篇博文,[webstorm+nodejs+JetBrains ID ...
- geeksforgeeks@ Minimum sum partition (Dynamic Programming)
http://www.practice.geeksforgeeks.org/problem-page.php?pid=166 Minimum sum partition Given an array, ...
- cordova,phonegap 重力感应
3.0版本后,cordova通过插件模式实现设备API,使用CLI的plugin命令可以添加或者移除插件: $ cordova plugin add org.apache.cordova.device ...