深入学习LINUX内核共享资源文档(结合图文)
每一种系统大概可分为四个基本部分组成,见图2-l所示。其中包含有能源、输入部分、处理中心和输出部分。见图2-l所示.电脑系统也相似,也主要由这四部分组成。稍为有点差别,就是电脑系统的处理中心与输入/输出部分的通道是共同使用的,见图2-1 (b)
[img]http://www.unix5.com/upimg/allimg/080415/1020410.gif[/img]
电脑系统包括有硬件部分和软件部分,两者之间互相依存,缺一不可。硬件部分就是电脑系统的实体,是软件执行和储存的平台。软件是控制电脑硬件操作和动作的指令流。好象人类大脑中的讯息和思维,控制著人的行为、思考和动作一樣。我们要了解就是一个电脑系统的执行机制,阐明系统的处理中心和输入/输出部分的硬件组成原理和软件控制的实现。
如果想理解各种电脑的作业系统执行全过程,那就需要了解它的硬件执行环境。本章要介绍的是传统PC机系统的硬件组成,介绍了PC机中各个主要部分的功能。这些內容已基本能夠让你明撩Linux0.12內核的硬件基础。
可见,作业系统与所执行的硬件环境密切相关。如果想彻底理解Operation System的操作过程,那麼就需要了解它的硬件操作环境。基於传统微处理机系统的硬件组成方框图,这里介绍了微处理机中各个主要部分的功能。这些內容能夠令读者们建立起閱读Linux0.12內核的硬件基础。为了便於說明,术语PC/AT将用来指示具有80386或以上CPU的IBM PC及其相容微处理机,而PC则用来泛指所有微型个人电脑,包括IBM PC/XT了及其相容微处理机。
2.1 微型计算机组成原理
我们从俯瞰的角度来說明採用80386或以上CPU的PC机系统组成结构。一个传统微型电脑硬体组成结构见图2-2所示。其中,CPU透过位址線、资料線和控制信号線组成的本地汇流排(或称为內部汇流排)与系统其他部分进行资料通信,位址線用於提供记忆体或I/O设备的位址,即指明需要读/写资料的具体位置,资料線用於在CPU和记忆体或I/O设备之间提供资料传输的通道,而控制線则负责指挥执行的具体读/写操作。对於使用80386 CPU的PC机,其內部位址線和资料線都分別有32根,即都是32位元的。因此位址定址空间范围有2³²位元组,从0到4GB 。
图中上部控制器和记忆体介面通常都集成在电脑主机板上,控制器部份是以一块大型积体电路晶片为主组成的功能电路。例如,中断控制器由Intel 8259A或其相容晶片构成:DMA控制器通常採用Intel 8237A晶片构成;定时计数器的核心则是Intel 8253/8254定时晶片:键盘控制器使用的是Intel 8042晶片来与键盘中的扫描电路进行通信。
[img]http://www.unix5.com/upimg/allimg/080415/1020411.gif[/img]
图中下方的控制卡(或者称为配接卡)则是透过扩充插槽与主机板上系统汇流排连接。汇流排插槽是系统位址汇流排、资料汇流排和控制線的与扩充设备控制器的标準连接介面。这些汇流排界面标準通常有工业标準结构ISA (Industry Standard Architecture)汇流排、扩充工业标準结构汇流排EISA (Extended ISA)、週边元件互连PCI (Peripheral速图形端口AGP(Accelerated Graphics的主要区別在於资料传输速率和控制灵活性方面。随著电脑硬体的发展,传输速率更高、控制更灵活的汇流排界面还在不断推出,例如採用串列通信点对点技术的高速PCIE(PCI Express)汇流排。最初的80386机器上只有ISA汇流排,因此系统与外部I/O设备最多只能使用16位元资料線进行资料传输。
随著电脑技术的发展,很多原来使用控制卡来完成的功能(例如硬碟控制器功能)都已经集成在电脑主机板上少数几个超大型积体电路晶片中,几个甚至是一个这樣的晶片就确定了主机板的主要特性和功能,並且为了针对不同系统部分能提供更高的传输速率,汇流排结构也发生了很大的变化。现代PC机的组成结构通常可以使用图2-3来描述。除了CPU以外,现代PC主机板主要使用2个超大规模晶片构成的品片组或晶片集(Chipsets)组成:北桥(Northbridge)晶片和南桥(Southbridge)晶片。北桥晶片用於与CPU、记忆体和AGP视讯界面,这些介面具有很高的传输速率。北桥晶片还起著记忆体控制作用,因此Intel把该晶片标号为MCH (Memory Controller Hub)晶片。南桥晶片用来管理低,中速的元件,例如,PCI汇流排、IDE硬碟介面、USB埠等,因此南桥晶片的名称为ICH (I/O Controller Hub) 。之所以用“南、北”桥来分別统称这两个晶片,是由於在Intel公司公佈的典型PC主机板上,它们分別位於主版的下端和上端(即地图上的南部和北部)位置,並起著与CPU进行通道桥接的作用。
[img]http://www.unix5.com/upimg/allimg/080415/1020412.gif[/img]
虽然汇流排界面发生了很大变化,甚至今后北桥和南桥晶片都将会合二为一,但是对於我们程式设计人员来說,这些变化仍然与传统的PC机结构相容,因此为传统PC机硬体结构编制的程式仍然能执行於现在的PC机上,这从Intel的开发手冊上可以证实这个结论。所以为了便於入门学习,我们仍然以传统PC机结构为框架来讨论和学习PC的组成和程式设计方法,当然这些方法仍然适合於现代PC机结构。下面我们概要說明图2-2中各个主要控制器和控制卡的工作原理,而它们的实际程式设计方法则推迟到閱读內核相应原始码时再作详细介绍。
2.2 I/O端口定址和存取控制方式
2.2.1 I/O端口和定址
CPU为了存取I/O介面控制器或控制卡上的资料和状态资讯,需要首先指定它们的位址。这种位址就称为I/O 埠位址或者称为「端口」通常一个I/O控制器包含存取资料的资料端口、输出命令的命令端口和存取控制器执行状态的状态端口。端口位址的设置方法一般有两种:统一编址和独立编址。
端口统一编址的原理是把I/O控制器中的端口位址归入记忆体定址位址空间范围內。因此这种编址方式也成为记忆体映射编址。CPU存取一个端口的操作与存取记忆体的操作一样,也使用存取记忆体的指令。端口独立编址的方法是把I/O控制器和控制卡的定址空间单独作为一个独立的位址空间对待,称为I/O位址空间。每个端口有一个I/O位址与之对应,並且使用专门的I/O指令来存取端口。
IBM PC及其相容微处理机主要使用独立编址方式,採用了一个独立的I/O位址空间对控制设备中的暂存器进行定址和存取。使用ISA汇流排结构的传统PC机其I/O位址空间范围是0x000 - - 0x3FF,有1024个I/O端口位址可供使用。
各个控制器和控制卡所预设分配使用的端口位址范围见表2-1所示。关於这些端口的使用和程式设计方法将在后面具体涉及相关硬体时再详细进行說明。
另外,IBM Pc也部分地使用了统一编址方式。例如,CGA显示卡上显示记忆体的位址就直接佔用了记忆体位址空间0xB800 - - 0xBC00范围,因此若要让一个字元显示在萤幕上,可以直接使用记忆体操作指令往这个记忆体区域执行写操作。
[img]http://www.unix5.com/upimg/allimg/080415/1020413.gif[/img]
对於使用EISA或PCI等汇流排结构的现代PC机,有64KB的I/O位址空间可供使用。在普通Linux系统下透过查看 /proc/ioports档可以得到相关控制器或设置使用的I/O位址范围,见如下所示。
[root@plinux root]# cat /proc/ioports
0000-001f : dma1
0020-003f : pic1
0040-005f : timer
0060-006f : keyborad
0070-007f : rtc
0080-008f : dma page reg
00a0-00bf : pic2
00c0-00df : dma2
00f0-00ff : fpu
0170-0177 : idel
01f0-01f7 : ide0
02f8-02ff : serial (auto)
0376-0376 : idel
03c0-03df : vga +
03f6-03f6 : ide0
03f8-03ff : serial (auto)
0500-051f : PCI device 8086 : 24d3 (Intel Corp.)
0cf8-0cff : PCI conf1
da00-daff : VIA Tehcnologies, Inc.VT. VT6102 [Rhine-II]
da00-daff : via-rhine
e000-e01f : PCI device 8086 : 24d4 (Intel Corp.)
e000-e01f : usb-uhci
e100-e11f : PCI device 8086 : 24d7 (Intel Corp.)
e100-e11f : usb-uhci
e200-e21f : PCI device 8086 : 24de (Intel Corp.)
e200-e21f : usb-uhci
e300-e31f : PCI device 8086 : 24d2 (Intel Corp.)
e300-e31f : usb-uhci
f000-f00f : PCI device 8086 : 24db (Intel Corp.)
f000-f007 : ide0
f008-f00f : ide1
[root@plinux root]#
2.2.7 介面存取控制
PC机I/O介面资料传输控制方式一般可採用程式回圈查询方式、中断处方式和DMA传输方式。顾名思义,回圈查询方式是指CPU透过在程式中回查询指定设备控制器中的状态来判断是否可以与设备进行资料交換。这种方式需要过多硬体支援,使用和程式设计部比较简单,但是特別耗费CPU宝贵时间因此在多工作业系统中除非等待时间极短或必须,否则就不应该使用这种方式在Linux作业系统中,只有在设备或控制器能夠立刻返回资讯时才会在很少的个地方採用这种方式。
中断处理控制方式需要有中断控制器的支援。在这种控制方式下,只有当I/O设备透过中断向CPU提出处理请求时,CPU才会暂时中断当前执行的程式转去执行相应的I/O中断处理服务过程。当执行完该中断处理服务过程后,CPU会继续执行刚才被中断的程式。在I/O控制器或设备发出中断请求时,CPU透使用中断向量表(或中断描述符表)来定址相应的中断处理服务过程的入口址。因此採用中断控制方式时需要首先设置好中断向量表,並编制好相应的中处理服务过程。Linux作业系统中大多数设备I/O控制都採用中断处理方式。
直接记忆体存取DMA (Direct Memory Access) 方式用於I/O设备与系:记忆体之间进行批量资料传送,整个操作过程需要使用专门的DMA控制器来行而无需CPU插手。由於在传输过程中无须软体介入,因此操作效率很高。Linux作业系统中,软碟驱动程式使用中断和DMA方式配合来实现资料的传输工作。
2.3主记忆体、BIOS和CMOS记忆体
2.3.1 主记忆体
1981年IBM PC刚推出时系统只带有640KB的RAM主记忆体(简称记忆体)。由於所採用的8088/8086 CPU只有20根位址線,因此记忆体定址范围最高为1024KB(1MB)。在当时DOS作业系统流行年代,640K或lMB记忆容量基本上能满足普通应用程式的执行。随著电脑软体和硬体技术的高速发展目前的电脑通常都配置有512MB或者更多的实体记忆体容量,並且都採用Intel 32位CPU,即都是PC/AT电脑。因此CPU的实体记忆体定址范围已经高达4GB (透过採用CPU的新特性,系统甚至可以定址64GB的实体记忆体容量) 。但是为了与原来的PC机在软体上相容,系统1MB以下实体记忆体使用分配上仍然保持与原来的PC机基本一致,只是原来系统ROM中的基本输入输出程式BIOS一直处於CPU能定址的记忆体最高端位置处,而BIOS原来所在的位置将在电脑开机初始化时被用作BIOS的影 (Shadow)区域,即BIOS代码仍然会被复制到这个区域中。见图2-4所示。
当电脑上电初始化时,实体记忆体被设置成从位址0开始的连续区域。除了地址从OxA0000到0xFFFFF (640K到lM共384K) 和0xFFFE0000到0xFFFFFFFF (4G处的最后一64K) 范围以外的所有记忆体都可用作系统记忆体。这两个特定范围被用於I/O设备和BIOS程式。假如我们的电脑中有16MB的实体记忆体,那麼在Linux 0.1x系统中,0--640K将被用作存放內核代码和资料。Linux內核不使用BIOS功能,也不使用BIOS设置的中断向量表。640K --1M之间的384K仍然保留用作图中指明的用途。其中位址0xA0000开始的128K用作显示记忆体缓冲区,随后部分用於其他控制卡的ROM BIOS或其映射区域,而0xF0000到1M范围用於高端系统ROM BIOS的映射区。lM-16M将被內核用於作为可分配的主记忆体区。另外高速缓冲区和记忆体虛拟碟也会佔用內核代码和资料后面的一部分记忆体区域,该区域通常会跨越640K--lM的区域。
[img]http://www.unix5.com/upimg/allimg/080415/1020414.gif[/img]
2.3.2 基本输入/输出程式BIOS
存放在ROM中的系统BIOS程式主要用於电脑开机时执行系统各部分的自我检测,建立起作业系统需要使用的各种配置表,例如中断向量表、硬碟参数表並且把处理器和系统其余部分初始化到一个已知状态,而且还为DOS等作业统提供硬体设备介面服务。但是由於BIOS提供的这些服务不具备可重人性 (其中程式不可併发执行) ,並且从存取效率方面考虑,因此除了在初始化时会用BIOS提供一些系统参数以外,Linux作业系统在执行时並不使BIOS中功能。
当电脑系统上电开机或者按了机箱上的重定按钮时,CPU会自动把代码段存器CS设置为0xF000,其段基底位址被设置为0xFFFF0000,段长度设置64KB。而lP被设置为0xFFF0,因此此时CPU代码指标指向0xFFFFFFF0处即4G空间最后一个64K的最后16位元组处。由上图可知,这裡正是系统ROM BIOS存放的位置。並且BIOS会在这裡存放一条跳转指令JMP跳转到BIOS码中64KB范围內的某一条指令开始执行。由於目前PC/A7微处理机中BIOS容量大多有1MB到2MB,並储存在快闪记忆体(Flash Memory)ROM中,因此为了能夠执行或存取BIOS中超过64KB范围並且又远远不在0- -1M位址空间中的其他BIOS代码或资料,BIOS程式会首先使用一种称为32位元大模式 (Big Mode) 技术把资料段暂存器的存取范围设置成4G (而非原来的64K),这樣可以在0到4G范围內执行和运算资料。此后,BIOS在执行了一些列硬体检和初始化操作之后,就会把与原来PC机相容的64KB BIOS代码和资料复制记忆体低端l M末端的64K处,然后跳转到这个地方並且让CPU进入真实位模式工作,见图2-5所示。最后BIOS就会从硬碟或其他区块设备把作业系统机程式载入到记忆体0x7c00处,並跳转到这个地方继续执行开机程式。
汗, 文章太长了,字数有限,我还是给大家原文章地址吧,
[url=http://www.unix5.com/kaifa/kernel/20080415/376_2.html]http://www.unix5.com/kaifa/kernel/20080415/376_2.html[/url]
续篇:
[url=http://www.unix5.com/kaifa/kernel/20080415/377.html][url=http://www.unix5.com/kaifa/kernel/20080415/377.html][color=#0000ff]深入学习LINUX内核之二(图文讲解)[/color][/url][/url]
[url=http://www.unix5.com/kaifa/kernel/20080415/378.html][url=http://www.unix5.com/kaifa/kernel/20080415/377.html][color=#0000ff]深入学习LINUX内核之三(图文讲解)[/color][/url][/url]
梦里野花飞
秋风扫落叶,梦幻我轻飞,晚秋柔柔的月光照在窗帘上,曾经遥远的梦乡风声鹤唳,今夜甜甜的梦里,我变成了食指般大小的姑娘,有着一双美丽的银色翅膀,我飞呀飞,带着微笑,越过高上,穿过园林,踏过小溪,来到一片悠悠花丛里,那儿野花纷飞,青青绕绕彼相随,蟋蟀伴奏、蜜蜂歌唱、蝴蝶舞动她婀娜的翅膀,我缓缓落在花瓣上,静默地看,可惜梦里我没带相机,不然我定会将这一幕幕拍摄为最美的画面,然后,再把它放到博物馆里让全世界的人观看。梦里的野花静悄悄地飞,我的心笑然自醉,秋天的梦如此之甜美,宛如春天的溪水,似梦非梦的情景,那种似曾相识的感觉触动着我的心弦,难已忘记露珠的甜美、花儿的芳香、青草的目光,点点滴滴涌入心头,随即深深落入心底,忍不住开始冥想,回忆如梭追寻着尘封的记忆,心灵最深的地方逐渐溶化,画面一幕幕重演,原来,梦里我来了这里好多回,从过去一直到如今我都深深迷恋着这里,在野花盛开的地方,我舞动梦里银色的翅膀,小小的模样、小小的姑娘,那是生活中我永远接触不了的现象,不要告诉我就要天亮,让我一个人好好地尽情的玩。
伏下身,我拾起脚下片片花蕾,五颜六色的花瓣带着淡淡清香,拿上花儿,我飞到云端,一片片把多彩的野花织成一件美丽衣裳披在娇小的身上,在编一个花环戴在飘逸的长发上,从天空飞到花丛,在从花丛飞到草丛,我飞过的地方都有惊叹的目光,大自然中的虫虫还是植物默默称赞?“啊!好美的姑娘!”怎么我能听懂它们的交谈?原来,我依然在梦中游荡,知道吗?梦里的世界,我,并不孤单,我甚至喜欢一个人默默地在梦里游荡、飞翔,站在花的海洋,我享受属于我一个人的天堂,在这里,我,一个人,很好!没有心酸、没有负担、没有牵挂,更没有悲伤,一个人的世界一个人的想象,虽然多了一双翅膀,但我并不傲慢,梦里的我有野花为伴,躺在花蕊里笑逐颜开,无人知晓我的想像,唯有梦里的野花静静绽放,晚风轻扶欢快下降,飞舞,如同风筝悠悠荡荡,坠落,即使青春注定短暂,无怨无悔仍旧继续翱翔,如同我的梦,虽然凄美短暂,却让我流连忘返,只是,花儿请原谅,我,不能陪你们走太长、太长。
秋雨滴滴答答打乱了深夜的寂静,秋风瑟瑟闯进我的梦里,睁开眼睛,窗外朦朦胧胧的景象勾起了尘封已久的记忆,那个秋天、那个雨夜,有一个人站在风中、立在雨里,目不转睛地注视着我的脸庞,我站在房间望着窗外,数着瓦片上落下的雨滴,爱,已成过往,注定迷失方向,梦,确已苏醒,活在醉人秋风里。
-------------------------------------
[url=http://only4game.com/][b]WoW Power Leveling[/b][/url]
[url=http://veryge.com/][b]world of warcraft gold[/b][/url]
[url=http://goleveling.com/][b]guild wars gold[/b][/url]
[url=http://only4game.com/][b]ffxi gil[/b][/url]
[url=http://only4game.com/][b]eve isk[/b][/url]
北京飞热那亚留学生机票,北京至热那亚留学生特价机票
[url=http://www.ticketjipiao.com/gjjp/lxjp/gjjp_4732.html]北京飞热那亚留学生机票[/url],北京至热那亚留学生特价机票航程:北京(PEK)-意大利-热那亚(GOA)
优惠价格:4680元往返5880元
航班信息:北京飞热那亚留学生机票,北京至热那亚留学生特价机票信息查询/预订敬请来电
010-51294965(多线)65801387晚间值班电话13264275882
航空公司:中国国际航空 法国航空
行李规定:40公斤
出票方式:北京飞热那亚留学生机票,北京至热那亚留学生特价机票必须提供学生签证(F1.F2.J1.J2)以及学生证书或相关有授权签字的入学证书复印件适用电子客票:北京市内免费送票
新手混游戏论坛技巧
顶你啊兄弟............................1.如何进行跑/走的切换?
您不需要进行切换。我们设定以鼠标右键点击跑步,而左键是行走。希望您能喜欢和接受这种方式。
2.如何由一张地图到另一张地图?
您可以通过地图边缘的切屏点或者特定传送阵旁的切屏NPC处切换到另一张地图。
3.游戏中可以攻击NPC么?
目前玩家只能攻击城镇的守卫NPC,需要切换到自由pk模式,但低等级的时候劝您不要做此尝试。
4.怎么和NPC对话?
走近并把鼠标放在NPC身上,这时如果您的鼠标变成一个对话的泡泡,左键点击NPC就可以对话了。您会发现游戏里每一个NPC都有各自的性格特点,或清纯羞涩的少女,或战场归来的勇士,看似不起眼的糟老头或许曾经是不可一世的公爵……
5.游戏里在野外迷路了或者被魔物包围了该怎么办,有瞬间回城的工具么?
我们有专门的回城卷帮助玩家脱离困境,当然,这需要付出你少量的金钱。
6.游戏里的随机卷是用来做什么的?
您可以通过随机卷随机移动到怪物多的地方,这样您就不用满地图找怪了。同时您还可以用这个卷轴来做“捉迷藏”的游戏,如果您有兴趣的话。
7[u][url=http://www.17jymu.cn][b]冒险岛私服[/b][/url][/u]]里如何拾取物品?有没有快捷键?
游戏里没有专门的快捷键来拾取物品。您可以把鼠标移到物品上方变成手状后点击拾取,但您必须确定这件物品是您打落的。
8.[u][url=http://www.youmoyu.com][b][color=blue]魔域私服[/color][/b][/url][/u]里如何攻击怪物?
您可以通过鼠标左键来对魔物进行物理攻击,这时将有可能放出一些被动技能。同时您还可以通过已经设定好的快捷键对魔物进行技能和魔法的攻击。更详尽的战斗技巧请看我们关于战斗的介绍。
9.《魔域》里能不能旋转视角?
《魔域》采用了第三人称固定45°视角模式,不能旋转视角,但您可以通过3D滚轮来放大或缩小游戏画面,尽情地欣赏你在游戏中的靓丽外型和超酷装备以及更近距离的观察您的幻兽。
10.[u][url=http://www.dawanmei.com][b][color=blue]完美世界私服[/color][/b][/url][/u]里如何查看状态?
屏幕左下方有一个圆球。左边红色半球代表您的生命值HP,右边蓝色半圆代表您的魔力值MP,中间的黄色长条代表的是您当前的体力值,而外围的一圈黄色圆环代表您的xp值。
s1
真不错,顶下人过留名,雁过留声。
人过留名,雁过留声。
看帖回帖,占位顶贴!
-------
[url=http://www.bjyihy.cn][size=1][color=black]北京代办营业执照[/color][/size][/url]
[url=http://www.bjyihy.cn][size=1][color=black]北京工商代办营业执照[/color][/size][/url]
[url=http://www.bjyihy.cn][size=1][color=black]北京代办执照[/color][/size][/url]
[url=http://www.bjyihy.cn][size=1][color=black]办理营业执照[/color][/size][/url]
[url=http://www.bjyihy.cn][size=1][color=black]代办营业执照[/color][/size][/url]
页:
[1]