⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 linux kernel(

📁 一个操作系统必须和作为它的基础的硬件系统紧密配合。操作系统需要使用一些只有硬件才能提供的功能。为了完整的了解Linux
💻
📖 第 1 页 / 共 5 页
字号:
    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></P>
    <LI>Timer(</FONT><FONT face=宋体 lang=ZH-CN size=3>时钟</FONT><FONT size=3>)
    <P></P></LI></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>
<P align=justify>第一条语句(第一行)将寄存器</FONT><FONT size=3>15</FONT><FONT face=宋体 
lang=ZH-CN size=3>指定的地址中的内容加载到寄存器</FONT><FONT size=3>16</FONT><FONT face=宋体 
lang=ZH-CN size=3>中。第二条指令将紧接着的内存中的内容加载到寄存器</FONT><FONT size=3>17</FONT><FONT 
face=宋体 lang=ZH-CN size=3>中。第三行比较寄存器</FONT><FONT size=3>16</FONT><FONT face=宋体 
lang=ZH-CN size=3>和寄存器</FONT><FONT size=3>17</FONT><FONT face=宋体 lang=ZH-CN 
size=3>,如果相等,分支到标号</FONT><FONT size=3>100</FONT><FONT face=宋体 lang=ZH-CN 
size=3>,否则,继续执行第四行,将寄存器</FONT><FONT size=3>17</FONT><FONT face=宋体 lang=ZH-CN 
size=3>的内容存到内存中。如果内存中的数据相同,就不必存储数据。编写汇编级的程序需要技巧而且十分冗长,容易出错。</FONT><FONT 
size=3>Linux</FONT><FONT face=宋体 lang=ZH-CN 
size=3>系统的核心很少的一部分是用汇编语言编写,而这些部分之所以使用汇编语言只是为了提高效率,并且和具体的微处理器相关。</P>
<P align=justify> </P></FONT><FONT size=3>
<P align=justify>2.1.2 The C Programming Language and Compiler (C</FONT><FONT 
face=宋体 lang=ZH-CN size=3>语言和编译器</FONT><FONT size=3>)</P>
<P align=justify> </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>。</FONT><FONT 
size=3>C</FONT><FONT face=宋体 lang=ZH-CN 
size=3>允许你用逻辑算法描述程序和要处理的数据。被称为编译程序(</FONT><FONT size=3>compiler</FONT><FONT 
face=宋体 lang=ZH-CN size=3>)的特殊程序读入</FONT><FONT size=3>C</FONT><FONT face=宋体 
lang=ZH-CN 
size=3>程序,并将它转换为汇编语言,进而产生机器相关的代码。好的编译器生成的汇编指令可以和好的汇编程序员编写的程序效率接近。大部分</FONT><FONT 
size=3>Linux</FONT><FONT face=宋体 lang=ZH-CN size=3>核心是用</FONT><FONT 
size=3>C</FONT><FONT face=宋体 lang=ZH-CN size=3>语言编写的。以下的</FONT><FONT 
size=3>C</FONT><FONT face=宋体 lang=ZH-CN size=3>片断:</P></FONT><FONT size=3>
<P align=justify>if (x != y)</P>
<P align=justify>x = y;</P></FONT><FONT face=宋体 lang=ZH-CN size=3>
<P align=justify>执行了和前面示例中汇编代码完全一样的操作。如果变量</FONT><FONT size=3>x</FONT><FONT 
face=宋体 lang=ZH-CN size=3>的内容和变量</FONT><FONT size=3>y</FONT><FONT face=宋体 
lang=ZH-CN size=3>的内容不一样,变量</FONT><FONT size=3>y</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>C</FONT><FONT face=宋体 lang=ZH-CN 
size=3>代码用例程(</FONT><FONT size=3>routine</FONT><FONT face=宋体 lang=ZH-CN 
size=3>)进行组合,每一个例程执行一项任务。例程可以返回</FONT><FONT size=3>C</FONT><FONT face=宋体 
lang=ZH-CN size=3>所支持的任意的数值或数据类型。大型程序比如</FONT><FONT size=3>Linux</FONT><FONT 
face=宋体 lang=ZH-CN size=3>核心分别由许多的</FONT><FONT size=3>C</FONT><FONT face=宋体 
lang=ZH-CN size=3>语言模块组成,每一个模块有自己的例程和数据结构。这些</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>C</FONT><FONT face=宋体 lang=ZH-CN 
size=3>支持多种类型的变量。一个变量是内存中的特定位置,可用符号名引用。上述的</FONT><FONT size=3>C</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>y</FONT><FONT face=宋体 lang=ZH-CN 
size=3>引用了内存中的位置。程序员不需要关心变量在内存中的具体位置,这是连接程序(下述)必须处理的。一些变量包含不同的数据例如整数、浮点数等和另一些则包含指针。</P>
<P align=justify> </P>
<P align=justify>指针是包含其它数据在内存中的地址的变量。假设一个变量</FONT><FONT size=3>x</FONT><FONT 
face=宋体 lang=ZH-CN size=3>,位于内存地址</FONT><FONT size=3>0x80010000</FONT><FONT 
face=宋体 lang=ZH-CN size=3>,</FONT><FONT size=3> </FONT><FONT face=宋体 lang=ZH-CN 
size=3>你可能有一个指针</FONT><FONT size=3>px</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> Px</FONT><FONT face=宋体 lang=ZH-CN 
size=3>可能位于地址</FONT><FONT size=3>0x80010030</FONT><FONT face=宋体 lang=ZH-CN 
size=3>。</FONT><FONT size=3>Px</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>0x80010000</FONT><FONT face=宋体 lang=ZH-CN 
size=3>。</P>
<P align=justify> </P></FONT><FONT size=3>
<P align=justify>C</FONT><FONT face=宋体 lang=ZH-CN 
size=3>允许你将相关的变量集合成为结构。例如:</P></FONT><FONT size=3>
<P align=justify>Struct {</P>
<P align=justify>Int I;</P>
<P align=justify>Char b;</P></FONT><FONT face=宋体 lang=ZH-CN size=3>
<P align=justify>}</FONT><FONT size=3> my_struct;</P></FONT><FONT face=宋体 
lang=ZH-CN size=3>
<P align=justify>是一个叫做</FONT><FONT size=3>my_struct</FONT><FONT face=宋体 
lang=ZH-CN size=3>的数据结构,包括两个元素:一个整数(</FONT><FONT size=3>32</FONT><FONT face=宋体 
lang=ZH-CN size=3>位)</FONT><FONT size=3>I</FONT><FONT face=宋体 lang=ZH-CN 
size=3>和一个字符(</FONT><FONT size=3>8</FONT><FONT face=宋体 lang=ZH-CN 
size=3>位数据)</FONT><FONT size=3>b</FONT><FONT face=宋体 lang=ZH-CN size=3>。</P>
<P align=justify> </P></FONT><FONT size=3>
<P align=justify>2.1.3 Linkers</FONT><FONT face=宋体 lang=ZH-CN size=3>(连接程序)</P>
<P align=justify> </P>
<P 
align=justify>连接程序将几个目标模块和库文件连接在一起成为一个单独的完整程序。目标模块是汇编程序或编译程序的机器码输出,它包括机器码、数据和供连接程序使用的连接信息。比如:一个目标模块可能包括程序的所有数据库功能,而另一个目标模块则包括处理命令行参数的函数。连接程序确定目标模块之间的引用关系,即确定一个模块所引用的例程和数据在另一个模块中的实际位置。</FONT><FONT 
size=3>Linux</FONT><FONT face=宋体 lang=ZH-CN size=3>核心是由多个目标模块连接而成的独立的大程序。</P>
<P align=justify> </P></FONT><FONT size=3>
<P align=justify>2.2 What is an Operating System</FONT><FONT face=宋体 lang=ZH-CN 
size=3>(什么是操作系统?)</P>
<P align=justify> </P>
<P 
align=justify>没有软件,计算机只是一堆发热的电子元件。如果说硬件是计算机的心脏,则软件就是它的灵魂。操作系统是允许用户运行应用程序的一组系统程序。操作系统将系统的硬件抽象,呈现在用户和应用程序之前的是一个虚拟的机器。是软件造就了计算机系统的特点。大多数</FONT><FONT 
size=3>PC</FONT><FONT face=宋体 lang=ZH-CN 
size=3>可以运行一到多个操作系统,而每一个操作系统从外观和感觉上都大不相同。</FONT><FONT size=3>Linux</FONT><FONT 

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -