📄 linuxkernel.htm
字号:
<P ALIGN="JUSTIFY"> </P>
</FONT><FONT SIZE=3><P ALIGN="JUSTIFY"><LI>Memory(</FONT><FONT FACE="宋体" LANG="ZH-CN" SIZE=3>内存</FONT><FONT SIZE=3>)</LI></P>
</FONT><FONT FACE="宋体" LANG="ZH-CN" SIZE=3><P ALIGN="JUSTIFY"> </P>
<P ALIGN="JUSTIFY">所有系统都具有分级的内存结构,由位于不同级别的速度和容量不同的内存组成。</P>
<P ALIGN="JUSTIFY">最快的内存是高速缓存存储器,就象它的名字暗示的一样</FONT><FONT SIZE=3>-</FONT><FONT FACE="宋体" LANG="ZH-CN" SIZE=3>用于临时存放或缓存主内存的内容。这种内存非常快但是比较昂贵,因此多数处理器芯片上内置有少量的高速缓冲存储器,而大多数高速缓存存储器放在系统主板上。一些处理器用一块缓存内存同时缓存指令和数据,而另一些处理器有两块缓存内存</FONT><FONT SIZE=3>-</FONT><FONT FACE="宋体" LANG="ZH-CN" SIZE=3>一个用于指令,另一个用于数据。</FONT><FONT SIZE=3>Alpha AXP</FONT><FONT FACE="宋体" LANG="ZH-CN" SIZE=3>处理器有两个内置的内存高速缓存存储器:一个用于数据(</FONT><FONT SIZE=3>D-Cache</FONT><FONT FACE="宋体" LANG="ZH-CN" SIZE=3>),另一个用于指令(</FONT><FONT SIZE=3>I-Cache</FONT><FONT FACE="宋体" LANG="ZH-CN" SIZE=3>)。它的外部高速缓冲存储器(或</FONT><FONT SIZE=3>B-Cache</FONT><FONT FACE="宋体" LANG="ZH-CN" SIZE=3>)将两者混在一起。</P>
<P ALIGN="JUSTIFY">最后一种内存是主内存。相对于外部高速缓存存储器而言速度非常慢,对于</FONT><FONT SIZE=3>CPU</FONT><FONT FACE="宋体" LANG="ZH-CN" SIZE=3>内置的高速缓存存储器,主内存简直是在爬。</P>
<P ALIGN="JUSTIFY">高速缓存存储器和主内存必须保持同步(一致)。换句话说,如果主内存中的一个字保存在高速缓存存储器的一个或多个位置,那么系统必须保证高速缓存存储器和主内存的内容一样。使高速缓冲存储器同步的工作一部分是由硬件完成,另一部分则是由操作系统完成的。对于其它一些系统的主要任务,硬件和软件也必须紧密配合。</P>
<P ALIGN="JUSTIFY"> </P>
</FONT><FONT SIZE=3><P ALIGN="JUSTIFY"><LI>Buses</FONT><FONT FACE="宋体" LANG="ZH-CN" SIZE=3>(总线)</LI></P>
<P ALIGN="JUSTIFY">系统板的各个组成部分由被称为总线的连接系统互连在一起。系统总线分为三种逻辑功能:地址总线、数据总线和控制总线。地址总线指定了数据传输的内存位置(地址),数据总线保存了传输的数据。数据总线是双向的,它允许</FONT><FONT SIZE=3>CPU</FONT><FONT FACE="宋体" LANG="ZH-CN" SIZE=3>读取,也允许</FONT><FONT SIZE=3>CPU</FONT><FONT FACE="宋体" LANG="ZH-CN" SIZE=3>写。控制总线包含了各种信号线用于在系统中发送时钟和控制信号。有许多种不同的总线类型,</FONT><FONT SIZE=3>ISA</FONT><FONT FACE="宋体" LANG="ZH-CN" SIZE=3>和</FONT><FONT SIZE=3>PCI</FONT><FONT FACE="宋体" LANG="ZH-CN" SIZE=3>总线是系统用于连接外设的常用方式。</P>
<P ALIGN="JUSTIFY"> </P>
</FONT><FONT SIZE=3><P ALIGN="JUSTIFY"><LI>Controllers and Peripherals </FONT><FONT FACE="宋体" LANG="ZH-CN" SIZE=3>(控制器和外设)</LI></P>
<P ALIGN="JUSTIFY"> </P>
<P ALIGN="JUSTIFY">外设指实在的设备,如由系统板或系统板插卡上的控制芯片所控制的图形卡或磁盘。</FONT><FONT SIZE=3>IDE</FONT><FONT FACE="宋体" LANG="ZH-CN" SIZE=3>控制芯片控制</FONT><FONT SIZE=3>IDE</FONT><FONT FACE="宋体" LANG="ZH-CN" SIZE=3>磁盘,而</FONT><FONT SIZE=3>SCSI</FONT><FONT FACE="宋体" LANG="ZH-CN" SIZE=3>控制芯片控制</FONT><FONT SIZE=3>SCSI</FONT><FONT FACE="宋体" LANG="ZH-CN" SIZE=3>磁盘。这些控制器通过不同的总线连接到</FONT><FONT SIZE=3>CPU</FONT><FONT FACE="宋体" LANG="ZH-CN" SIZE=3>并相互连接。现在制造的大多数系统都是用</FONT><FONT SIZE=3>PCI</FONT><FONT FACE="宋体" LANG="ZH-CN" SIZE=3>或</FONT><FONT SIZE=3>ISA</FONT><FONT FACE="宋体" LANG="ZH-CN" SIZE=3>总线将系统的主要部件连接在一起。控制器本身也是象</FONT><FONT SIZE=3>CPU</FONT><FONT FACE="宋体" LANG="ZH-CN" SIZE=3>一样的处理器,它们可以看作</FONT><FONT SIZE=3>CPU</FONT><FONT FACE="宋体" LANG="ZH-CN" SIZE=3>的智能助手,</FONT><FONT SIZE=3>CPU</FONT><FONT FACE="宋体" LANG="ZH-CN" SIZE=3>拥有系统的最高控制权。</P>
<P ALIGN="JUSTIFY"> </P>
<P ALIGN="JUSTIFY">所有的控制器都是不同的,但是通常它们都有用于控制它们的寄存器。</FONT><FONT SIZE=3>CPU</FONT><FONT FACE="宋体" LANG="ZH-CN" SIZE=3>上运行的软件必须能够读写这些控制寄存器。一个寄存器可能包含描述错误的状态码,另一个寄存器可能用于控制用途,改变控制器的模式。一个总线上的每一个控制器都可以分别被</FONT><FONT SIZE=3>CPU</FONT><FONT FACE="宋体" LANG="ZH-CN" SIZE=3>寻址,这样软件设备驱动程序就可以读写它的寄存器进而控制它。</FONT><FONT SIZE=3>IDE</FONT><FONT FACE="宋体" LANG="ZH-CN" SIZE=3>电缆是一个好例子,它给了你分别存取总线上每一个驱动器的能力。另一个好例子是</FONT><FONT SIZE=3>PCI</FONT><FONT FACE="宋体" LANG="ZH-CN" SIZE=3>总线,允许每一个设备(如图形卡)被独立存取。</P>
<P ALIGN="JUSTIFY"> </P>
</FONT><FONT SIZE=3><P ALIGN="JUSTIFY"><LI>Address Spaces</FONT><FONT FACE="宋体" LANG="ZH-CN" SIZE=3>(寻址空间)</LI></P>
<P ALIGN="JUSTIFY"> </P>
<P ALIGN="JUSTIFY">连接</FONT><FONT SIZE=3>CPU</FONT><FONT FACE="宋体" LANG="ZH-CN" SIZE=3>和主内存的系统总线以及连接</FONT><FONT SIZE=3>CPU</FONT><FONT FACE="宋体" LANG="ZH-CN" SIZE=3>和系统硬件外设的总线是分离的。硬件外设所拥有的内存空间称为</FONT><FONT SIZE=3>I/O</FONT><FONT FACE="宋体" LANG="ZH-CN" SIZE=3>空间。</FONT><FONT SIZE=3>I/O</FONT><FONT FACE="宋体" LANG="ZH-CN" SIZE=3>空间本身可以再进一步划分,但是我们现在先不讨论。</FONT><FONT SIZE=3>CPU</FONT><FONT FACE="宋体" LANG="ZH-CN" SIZE=3>可以访问系统内存空间和</FONT><FONT SIZE=3>I/O</FONT><FONT FACE="宋体" LANG="ZH-CN" SIZE=3>空间,而控制器只能通过</FONT><FONT SIZE=3>CPU</FONT><FONT FACE="宋体" LANG="ZH-CN" SIZE=3>间接访问系统内存。从设备的角度来看,比如软驱控制器,它只能看到它的控制寄存器所在的地址空间(</FONT><FONT SIZE=3>ISA</FONT><FONT FACE="宋体" LANG="ZH-CN" SIZE=3>),而非系统内存。一个</FONT><FONT SIZE=3>CPU</FONT><FONT FACE="宋体" LANG="ZH-CN" SIZE=3>用不同的指令去访问内存和</FONT><FONT SIZE=3>I/O</FONT><FONT FACE="宋体" LANG="ZH-CN" SIZE=3>空间。例如,可能有一条指令是“从</FONT><FONT SIZE=3>I/O</FONT><FONT FACE="宋体" LANG="ZH-CN" SIZE=3>地址</FONT><FONT SIZE=3>0x3f0</FONT><FONT FACE="宋体" LANG="ZH-CN" SIZE=3>读取一个字节到</FONT><FONT SIZE=3>X</FONT><FONT FACE="宋体" LANG="ZH-CN" SIZE=3>寄存器“。这也是</FONT><FONT SIZE=3>CPU</FONT><FONT FACE="宋体" LANG="ZH-CN" SIZE=3>通过读写系统硬件外设处于</FONT><FONT SIZE=3>I/O</FONT><FONT FACE="宋体" LANG="ZH-CN" SIZE=3>地址空间的寄存器从而控制外设的方法。在地址空间中,普通外设(如</FONT><FONT SIZE=3>IDE</FONT><FONT FACE="宋体" LANG="ZH-CN" SIZE=3>控制器,串行端口,软驱控制器等等)的寄存器在</FONT><FONT SIZE=3>PC</FONT><FONT FACE="宋体" LANG="ZH-CN" SIZE=3>外设的多年发展中已经成了定例。</FONT><FONT SIZE=3>I/O</FONT><FONT FACE="宋体" LANG="ZH-CN" SIZE=3>空间的地址</FONT><FONT SIZE=3>0x3f0</FONT><FONT FACE="宋体" LANG="ZH-CN" SIZE=3>正是串行口(</FONT><FONT SIZE=3>COM1</FONT><FONT FACE="宋体" LANG="ZH-CN" SIZE=3>)的控制寄存器的地址。</P>
<P ALIGN="JUSTIFY"> </P>
<P ALIGN="JUSTIFY">有时控制器需要直接从系统内存读取大量内存,或直接写大量数据到系统内存中去。比如将用户数据写到硬盘上去。在这种情况下,使用直接内存存取(</FONT><FONT SIZE=3>DMA</FONT><FONT FACE="宋体" LANG="ZH-CN" SIZE=3>)控制器,允许硬件设备直接存取系统内存,当然,这种存取必须在</FONT><FONT SIZE=3>CPU</FONT><FONT FACE="宋体" LANG="ZH-CN" SIZE=3>的严格控制和监管下进行。</P>
<P ALIGN="JUSTIFY"> </P>
</FONT><FONT SIZE=3><P ALIGN="JUSTIFY"><LI>Timer(</FONT><FONT FACE="宋体" LANG="ZH-CN" SIZE=3>时钟</FONT><FONT SIZE=3>)</LI></P></OL>
</OL>
</FONT><FONT FACE="宋体" LANG="ZH-CN" SIZE=3><P ALIGN="JUSTIFY">所有操作系统需要知道时间,现代</FONT><FONT SIZE=3>PC</FONT><FONT FACE="宋体" LANG="ZH-CN" SIZE=3>包括一个特殊的外设,叫做实时时钟(</FONT><FONT SIZE=3>RTC</FONT><FONT FACE="宋体" LANG="ZH-CN" SIZE=3>)。它提供了两样东西:可靠的日期和精确的时间间隔。</FONT><FONT SIZE=3>RTC</FONT><FONT FACE="宋体" LANG="ZH-CN" SIZE=3>有自己的电池,所以即使</FONT><FONT SIZE=3>PC</FONT><FONT FACE="宋体" LANG="ZH-CN" SIZE=3>没有加电,它仍在运行。这也是为什么</FONT><FONT SIZE=3>PC</FONT><FONT FACE="宋体" LANG="ZH-CN" SIZE=3>总是“知道”正确的日期和时间。时间间隔计时允许操作系统精确地调度基本工作。</P>
<P ALIGN="JUSTIFY"> </P>
<P ALIGN="JUSTIFY"> </P>
</FONT><FONT SIZE=3><P ALIGN="JUSTIFY">Chapter 2</P>
<P ALIGN="JUSTIFY"> </P>
<P ALIGN="JUSTIFY">Software Basic(</FONT><FONT FACE="宋体" LANG="ZH-CN" SIZE=3>软件基础</FONT><FONT SIZE=3>)</P>
</FONT><FONT FACE="宋体" LANG="ZH-CN" SIZE=3><P ALIGN="JUSTIFY">程序是用于执行特定任务的计算机指令组合。程序可以用汇编语言,一种非常低级的计算机语言来编写,也可以使用和机器无关的高级语言,比如</FONT><FONT SIZE=3>C</FONT><FONT FACE="宋体" LANG="ZH-CN" SIZE=3>语言编写。操作系统是一个特殊的程序,允许用户通过它运行应用程序,比如电子表和文字处理等等。本章介绍了基本的编程原理,并简介操作系统的目的和功能。</P>
<P ALIGN="JUSTIFY"> </P>
</FONT><FONT SIZE=3><P ALIGN="JUSTIFY">2.1 Computer Languages(</FONT><FONT FACE="宋体" LANG="ZH-CN" SIZE=3>计算机语言</FONT><FONT SIZE=3>)</P>
<P ALIGN="JUSTIFY"> </P>
<P ALIGN="JUSTIFY">2.1.1.</FONT><FONT FACE="宋体" LANG="ZH-CN" SIZE=3>汇编语言</P>
<P ALIGN="JUSTIFY"> </P>
</FONT><FONT SIZE=3><P ALIGN="JUSTIFY">CPU</FONT><FONT FACE="宋体" LANG="ZH-CN" SIZE=3>从内存中读取和执行的指令对于人类来讲无法理解。它们是机器代码,精确的告诉计算机要做什么。比如十六进制数</FONT><FONT SIZE=3>0x89E5</FONT><FONT FACE="宋体" LANG="ZH-CN" SIZE=3>,是</FONT><FONT SIZE=3>Intel 80486</FONT><FONT FACE="宋体" LANG="ZH-CN" SIZE=3>的指令,将寄存器</FONT><FONT SIZE=3>ESP</FONT><FONT FACE="宋体" LANG="ZH-CN" SIZE=3>的内容拷贝到寄存器</FONT><FONT SIZE=3>EBP</FONT><FONT FACE="宋体" LANG="ZH-CN" SIZE=3>中。早期计算机中最初的软件工具之一是汇编程序,它读入人类可以阅读的源文件,将其装配成机器代码。汇编语言明确地处理对寄存器和对数据的操作,而这种操作对于特定的微处理器而言是特殊的。</FONT><FONT SIZE=3>Intel X86</FONT><FONT FACE="宋体" LANG="ZH-CN" SIZE=3>微处理器的汇编语言和</FONT><FONT SIZE=3>Alpha AXP</FONT><FONT FACE="宋体" LANG="ZH-CN" SIZE=3>微处理器的汇编语言完全不同。以下</FONT><FONT SIZE=3>Alpha AXP</FONT><FONT FACE="宋体" LANG="ZH-CN" SIZE=3>汇编代码演示了程序可以执行的操作类型:</P>
<P ALIGN="JUSTIFY"> </P>
</FONT><FONT SIZE=3><P ALIGN="JUSTIFY">Ldr r16, (r15) ; </FONT><FONT FACE="宋体" LANG="ZH-CN" SIZE=3>第一行</P>
</FONT><FONT SIZE=3><P ALIGN="JUSTIFY">Ldr r17, 4(r15) ; </FONT><FONT FACE="宋体" LANG="ZH-CN" SIZE=3>第二行</P>
</FONT><FONT SIZE=3><P ALIGN="JUSTIFY">Beq r16,r17,100; </FONT><FONT FACE="宋体" LANG="ZH-CN" SIZE=3>第三行</P>
</FONT><FONT SIZE=3><P ALIGN="JUSTIFY">Str r17, (r15); </FONT><FONT FACE="宋体" LANG="ZH-CN" SIZE=3>第四行</P>
</FONT><FONT SIZE=3><P ALIGN="JUSTIFY">100:		; </FONT><FONT FACE="宋体" LANG="ZH-CN" SIZE=3>第五行</P>
<P ALIGN="JUSTIFY"> </P>
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -