《linux 内核全然剖析》 chapter 2 微型计算机组成结构
微型计算机组成结构
系统的基本组成:
软件是一种控制硬件操作和动作的指令流。
2.1 微型计算机的组成原理
当中CPU通过地址线,数据线,和控制信号线组成的内部总线与系统其它部分进行数据通信。地址线用于提供内存或者I/O设备的地址,即指明须要读写的数据的详细位置。数据线用于在CPU和内存的I/O设备之间提供传输数据的通道,而控制线则负责指挥运行的详细读写操作
除了CPU以外,现代计算机PC主板主要由两个超大规模芯片构成的芯片组(chipsets):北桥(Northbrige)和南桥(Southbrige)芯片。北桥芯片用于与CPU,内存,和AGP视频接口,这些接口传输的速度快,北桥起着储存控制器的控制作用,于是Intel把该芯片标号为MCH(memory control chip)。南桥用来管理低中速芯片,被称为ICH(IO control hub)
2.2 I/Oport寻址和控制方式
2.2.1 I/Oport和寻址
port地址的设置一般有两种方法:统一编址和独立遍址
port统一编址的原理就是把IO控制器的port地址归入储存器寻址地址空间范围内。因此这样的编址方式也被称作储存器映像编址。
我的Ubuntu里面查看/proc/ioports 能够看到各个控制器设备或设置能够使用的地址范围:
0000-0cf7 : PCI Bus 0000:00
0000-001f : dma1
0020-0021 : pic1
0040-0043 : timer0
0050-0053 : timer1
0060-0060 : keyboard
0064-0064 : keyboard
0070-0071 : rtc0
0080-008f : dma page reg
00a0-00a1 : pic2
00c0-00df : dma2
00f0-00ff : fpu
0170-0177 : 0000:00:07.1
0170-0177 : ata_piix
01f0-01f7 : 0000:00:07.1
01f0-01f7 : ata_piix
02f8-02ff : serial
0376-0376 : 0000:00:07.1
0376-0376 : ata_piix
0378-037a : parport0
03c0-03df : vga+
03f2-03f2 : floppy
03f4-03f5 : floppy
03f6-03f6 : 0000:00:07.1
03f6-03f6 : ata_piix
03f7-03f7 : floppy
03f8-03ff : serial
0cf0-0cf1 : pnp 00:00
0cf8-0cff : PCI conf1
0d00-feff : PCI Bus 0000:00
1000-103f : 0000:00:07.3
1000-103f : pnp 00:00
1000-1003 : ACPI PM1a_EVT_BLK
1004-1005 : ACPI PM1a_CNT_BLK
1008-100b : ACPI PM_TMR
100c-100f : ACPI GPE0_BLK
1010-1015 : ACPI CPU throttle
1040-104f : 0000:00:07.3
1040-104f : pnp 00:00
1060-107f : pnp 00:0c
1080-10bf : 0000:00:07.7
10c0-10cf : 0000:00:07.1
10c0-10cf : ata_piix
10d0-10df : 0000:00:0f.0
10d0-10df : vmwgfx probe
1400-14ff : 0000:00:10.0
2000-3fff : PCI Bus 0000:02
2000-203f : 0000:02:01.0
2000-203f : e1000
2040-207f : 0000:02:02.0
2040-207f : Ensoniq AudioPCI
2080-209f : 0000:02:00.0
2080-209f : uhci_hcd
4000-4fff : PCI Bus 0000:03
5000-5fff : PCI Bus 0000:0b
6000-6fff : PCI Bus 0000:13
7000-7fff : PCI Bus 0000:1b
8000-8fff : PCI Bus 0000:04
9000-9fff : PCI Bus 0000:0c
a000-afff : PCI Bus 0000:14
b000-bfff : PCI Bus 0000:1c
c000-cfff : PCI Bus 0000:05
d000-dfff : PCI Bus 0000:0d
e000-efff : PCI Bus 0000:15
2.2.2 接口訪问控制
三种方式:循环查询,中断处理,DMA传输
循环查询不须要过多的硬件支持,简单,可是耗费宝贵的CPU时间。
中断处理的方式须要有中断控制器的支持。linux 大多数都是採用这样的方式进行接口訪问。
直接存储器訪问,(Direct memory access),该方式用于IO设备与系统直接进行批量的传输数据,整个操作过程不须要CPU的插手。有专门的DMA控制器来进行。
2.3 主存储器,BIOS和CMOS储存器
2.3.1 主存储器
就是那个RAM。。。
2.3.2 基本输入输出程序BIOS
存放在ROM里面的系统BIOS程序主要用于计算机的开机运行系统各个部分的自检,建立起操作系统须要使用的各个配置表,如中断向量表,硬盘參数表 etc
2.3.3 CMOS 储存器
这家伙用的太少了。值得一提的是CMOS内存的地址空间在基本内存地址之外,须要仅仅用IO指令来訪问。
2.4 控制器和控制卡
2.4.1 中断控制器
2.4.2 DMA控制器
DMA控制器主要是通过外部设备直接与内存数据传输来增强系统的性能。
DMA数据传输能够不受CPU控制,所以CPU能够做其它事情。
2.4.4键盘控制器
当一个键被按下的时候,键盘发送扫描码被称为接通码(Make code),当一个键放开时发送的扫描码称为断开码(Break code)。
2.4.5串行控制卡
1.原理
串行通信是指在线路上以位数据流一次一个的进行传输的通信方式。串行通信能够分为同步串行通信和异步串行通信。它们之间的主要差别在于,传输时同步的通信单位或帧的长度不同。异步串行通信以一个字符作为通信单位或一帧进行传输,而同步串行通信则以多个字符或字节组成的序列作为一帧数据进行传输。
2.串行通信的传输格式
当无数据传输时,发送方处于传号(Mark)状态,持续发送1.若须要发送数据,则发送方须要首先发送一个位间隔时间的空号起始位。接收方收到空号之后,就開始与发送方同步,然后接受随后的数据。若程序中设置奇偶校验位,那么在数据传输完毕之后,还须要接收奇偶校验位。
《linux 内核全然剖析》 chapter 2 微型计算机组成结构的更多相关文章
- 《linux 内核全然剖析》 chapter 4 80x86 保护模式极其编程
80x86 保护模式极其编程 首先我不得不说.看这章真的非常纠结...看了半天.不知道这个东西能干嘛.我感觉唯一有点用的就是对于内存映射的理解...我假设不在底层给80x86写汇编的话.我 ...
- 《linux 内核全然剖析》 fork.c 代码分析笔记
fork.c 代码分析笔记 verifiy_area long last_pid=0; //全局变量,用来记录眼下最大的pid数值 void verify_area(void * addr,int s ...
- 《linux 内核全然剖析》sched.c sched.h 代码分析笔记
版权声明:本文为博主原创文章.未经博主同意不得转载. https://blog.csdn.net/u011368821/article/details/25129835 sched.c sched.h ...
- 《linux 内核全然剖析》 sys.c 代码分析
sys.c 代码分析 setregid /* * This is done BSD-style, with no consideration of the saved gid, except * th ...
- 《linux 内核全然剖析》 mktime.c
tm结构体的定义在time.h里面 struct tm { int tm_sec; int tm_min; int tm_hour; int tm_mday; int tm_mon; int tm_y ...
- 《linux 内核全然剖析》编译linux 0.12 内核 Ubuntu 64bits 环境
我×.. . 最终好了,大概3 4个小时吧...各种毛刺问题.终究还是闯过来了.. .. ubuntu2@ubuntu:~/Downloads/linux-0.00-050613/linux-0.00 ...
- 《linux 内核全然剖析》 include/asm/io.h
include/asm/io.h #define outb(value,port) \ __asm__ ("outb %%al,%%dx"::"a" (valu ...
- 《linux 内核全然剖析》 笔记 CODE_SPACE 宏定义分析
在memory.c里面.遇到一个宏定义,例如以下: #define CODE_SPACE(addr) ((((addr)+4095)&~4095) < \ current->sta ...
- 第三十二课 linux内核链表剖析
__builtin_prefetch是gcc扩展的,用来提高访问效率,需要硬件的支持. 在标准C语言中是不允许static inline联合使用的. 删除依赖的头文件,将相应的结构拷贝到LinuxLi ...
随机推荐
- 一个Web页面的生命周期 ,面试常常被问到
常规页生命周期阶段 一般来说,页要经历下表概述的各个阶段.除了页生命周期阶段以外,在请求前后还存在应用程序阶段,但是这些阶段并不特定于页.有关更多信息,请参见 ASP.NET 应用程序生命周期概述. ...
- WebGoat学习——SQL注入(SQL Injection)
SQL注入(SQL Injection) 所谓SQL注入式攻击,就是攻击者把SQL命令插入到Web表单的输入域或页面请求的查询字符串,欺骗服务器执行恶意的SQL命令.攻击者通过web请求提交带有影响正 ...
- 开扒php内核函数,第一篇 bin2hex
这段时间真的比较有时间,所以自己用c写一下bin2hex啦 写个php的人都知道,这是个比较熟悉的函数吧,没有什么高深,只是把输入的东西以16进制输出吧了 先分析一下,这个函数要怎么写吧,他会有一定的 ...
- string subscript out of range
刚刚练习华为机试上的题目遇到了这个问题,奉上两个小题: //题目描述 // //描述: //输入一个整数,将这个整数以字符串的形式逆序输出 //程序不考虑负数的情况,若数字含有0,则逆序形式也含有0, ...
- Python cookbook-读书笔记01
1 数据结构和算法 1.1 Unpacking a sequence into separate variable(解包,赋值) >>> data = [ 'ACME', 50, 9 ...
- Eclipse使用技巧总结
Eclipse设置工作空间的字符编码: 打开eclipse开发界面,依次点击Window->Preferences->General->Workspace 修改Text file e ...
- gson在java和json串之间的应用
public class JsonToJavaUtil { /** * 将json转成成javaBean对象 * * @param <T> * 返回类型 * @param json * 字 ...
- Git 提交后开始自动构建
设定Git仓库的钩子 一般路径为 xxx.git/hooks 参考文档 https://git-scm.com/docs/githooks 修改 post-receive #!/bin/bash wh ...
- jq 选项卡
<!doctype html> <html> <head> <meta charset="utf-8"> <style> ...
- 第三百四十九、五十天 how can I 坚持
昨天是忘写博客了,今天下班才突然意思到,搞框架搞了好晚.今天重新下了个好了. 昨天,把存储过程交给同事写了,啥都不会,又一堆问题,折腾了一天. 今天相对轻松些,不过事情还没完..明天又周五了. 还有昨 ...