From af22a73381c83d91c0b31ce3549ef683ca69e4ee Mon Sep 17 00:00:00 2001 From: Yongjian Xu Date: Thu, 22 Jan 2015 12:37:57 +0800 Subject: [PATCH] Fix typo for preface --- zh/preface/cpu.md | 2 +- zh/preface/memory.md | 2 +- zh/preface/osabstract.md | 2 +- zh/preface/osconcept.md | 2 +- zh/preface/pc.md | 8 ++++---- zh/preface/preface.md | 2 +- zh/preface/preknowledge.md | 2 +- zh/preface/smallos_ucore.md | 4 ++-- zh/preface/ucore.md | 2 +- 9 files changed, 13 insertions(+), 13 deletions(-) diff --git a/zh/preface/cpu.md b/zh/preface/cpu.md index 0523154..24b3192 100644 --- a/zh/preface/cpu.md +++ b/zh/preface/cpu.md @@ -3,4 +3,4 @@ 实模式:这是个人计算机早期的8086处理器采用的一种简单运行模式,当时微软的MS-DOS操作系统主要就是运行在8086的实模式下。80386加电启动后处于实模式运行状态,在这种状态下软件可访问的物理内存空间不能超过1MB,且无法发挥Intel 80386以上级别的32位CPU的4GB内存管理能力。实模式将整个物理内存看成分段的区域,程序代码和数据位于不同区域,操作系统和用户程序并没有区别对待,而且每一个指针都是指向实际的物理地址。这样用户程序的一个指针如果指向了操作系统区域或其他用户程序区域,并修改了内容,那么其后果就很可能是灾难性的。 -保护模式:实际上,80386就是通过在实模式下初始化控制寄存器,GDTR,LDTR,IDTR与TR等管理寄存器以及页表,然后再通过加载CR0使其中的保护模式使能位置位而进入保护模式的。当80386工作在保护模式下的时候,其所有的32根地址线都可供寻址,物理寻址空间高达4GB。在保护模式下,支持内存分页机制,提供了对虚拟内存的良好支持。保护模式下80386支持多任务,还支持优先级机制,不同的程序可以运行在不同的特权级上。特权级一共分0~3四个级别,操作系统运行在最高的特权级0上,应用程序则运行在比较低的级别上;配合良好的检查机制后,既可以在任务间实现数据的安全共享也可以很好地隔离各个任务。 +保护模式:实际上,80386就是通过在实模式下初始化控制寄存器,GDTR,LDTR,IDTR与TR等管理寄存器以及页表,然后再通过加载CR0使其中的保护模式使能位置位而进入保护模式的。当80386工作在保护模式下的时候,其所有的32根地址线都可供寻址,物理寻址空间高达4GB。在保护模式下,支持内存分页机制,提供了对虚拟内存的良好支持。保护模式下80386支持多任务,还支持特权级机制,不同的程序可以运行在不同的特权级上。特权级一共分0~3四个级别,操作系统运行在最高的特权级0上,应用程序则运行在比较低的级别上;配合良好的检查机制后,既可以在任务间实现数据的安全共享也可以很好地隔离各个任务。 diff --git a/zh/preface/memory.md b/zh/preface/memory.md index 7438fdc..1fc7d90 100644 --- a/zh/preface/memory.md +++ b/zh/preface/memory.md @@ -1,7 +1,7 @@ # 内存架构 80386是32位的处理器,即可以寻址的物理内存地址空间为2\^32=4G字节。在理解面向80386处理器的操作系统的过程中,需要用到三个地址空间的概念:物理地址、逻辑地址和线性地址。地址是访问地址空间的索引。物理内存地址空间是处理器提交到总线上用于访问计算机系统中的内存和外设的最终地址。一个计算机系统中只有一个物理地址空间。线性地址空间是处理器控制下运行的应用程序可访问的地址空间。在操作系统的管理下,每个运行的应用程序都认为自己独享整个计算机系统的地址空间,这样可让多个运行的应用程序之间相互隔离,实现对地址空间的保护。处理器中的内存管理单元(MMU)通过段机制,在操作系统的帮助下,负责把线性地址转换成物理地址,这样就需要操作系统建立物理内存地址与线性内存地址的映射关系。 -Inte可能觉得80386处理器有了段机制还不够,又加入了页机制,也是完成对内存单元的安全保护,隔离,且可用把应用程序看到的逻辑地址在处理器中的内存管理单元(MMU)的页机制控制下,转换成线性地址。在操作系统的管理与控制之下。在页机制和段机制上,其实有一定程度的功能重复,但为了向兼容等目标,使得这两者一直共存。逻辑地址空间是应用程序直接使用的地址空间,比如如下C代码片段: +Intel可能觉得80386处理器有了段机制还不够,又加入了页机制,也是完成对内存单元的安全保护,隔离,且可以把应用程序看到的逻辑地址在处理器中的内存管理单元(MMU)的页机制控制下,转换成线性地址。在操作系统的管理与控制之下。在页机制和段机制上,其实有一定程度的功能重复,但为了向下兼容等目标,使得这两者一直共存。逻辑地址空间是应用程序直接使用的地址空间,比如如下C代码片段: ``` int boo=1; int *foo=&a; diff --git a/zh/preface/osabstract.md b/zh/preface/osabstract.md index 2c9d505..6d7c1a7 100644 --- a/zh/preface/osabstract.md +++ b/zh/preface/osabstract.md @@ -1,6 +1,6 @@ ### 操作系统的抽象 -操作系统为了能够更好地管理计算机系统并对应用程序提供便捷的服务,在操作系统的发展过程中,计算机科学家提出了如下四个个抽象概念,奠定了操作系统的基础。操作系统原理中的其他概念基本上都可基于上述这四个操作系统抽象。 +操作系统为了能够更好地管理计算机系统并对应用程序提供便捷的服务,在操作系统的发展过程中,计算机科学家提出了如下四个抽象概念,奠定了操作系统的基础。操作系统原理中的其他概念基本上都可基于上述这四个操作系统抽象。 **中断(Interrupt)** diff --git a/zh/preface/osconcept.md b/zh/preface/osconcept.md index bad90cd..acf6257 100644 --- a/zh/preface/osconcept.md +++ b/zh/preface/osconcept.md @@ -1,3 +1,3 @@ ### 操作系统的定义 -操作系统是计算机系统机构中的一个系统软件,它的职能主要有两个:对下面(也就是计算机硬件),有效地组织和管理计算机系统中的硬件资源(包括处理器、内存、硬盘、显示器、键盘、鼠标等各种外设);对上面(应用程序或用户),提供简洁的服务功能接口,屏蔽硬件管理带来的差异性和复杂性,使得应用程序和用户能够灵活、方便、有效地使用计算机。为了完成这两个职能,操作系统需要在其内部实现中合理地组织计算机中的软硬件资源的使用分配和处理流程,使整个计算机系统能高效地运行。 +操作系统是计算机系统结构中的一个系统软件,它的职能主要有两个:对下面(也就是计算机硬件),有效地组织和管理计算机系统中的硬件资源(包括处理器、内存、硬盘、显示器、键盘、鼠标等各种外设);对上面(应用程序或用户),提供简洁的服务功能接口,屏蔽硬件管理带来的差异性和复杂性,使得应用程序和用户能够灵活、方便、有效地使用计算机。为了完成这两个职能,操作系统需要在其内部实现中合理地组织计算机中的软硬件资源的使用分配和处理流程,使整个计算机系统能高效地运行。 diff --git a/zh/preface/pc.md b/zh/preface/pc.md index b39f7a2..d193450 100644 --- a/zh/preface/pc.md +++ b/zh/preface/pc.md @@ -1,22 +1,22 @@ # PC计算机 -这里简单介绍一下运行ucore的个人计算机(PC)硬件平台。PC可抽象为CPU、内存和 I/O 设备。CPU(中央处理器,也称处理器) 负责计算和读写内存,内存用于保存指令和数据,外部设备用于实现显,网络,声音,传输等其他其他功能。 +这里简单介绍一下运行ucore的个人计算机(PC)硬件平台。PC可抽象为CPU、内存和 I/O 设备。CPU(中央处理器,也称处理器) 负责计算和读写内存,内存用于保存指令和数据,外部设备用于实现显示,网络,声音,传输等其他功能。 操作系统直接运行在PC硬件平台上。 ![计算机抽象图](figures/pc_arch.png) ## CPU -CPUs是计算机系统的核心,从一加电开始,按照取指令,执行指令的循环周而复始地运行。取指令的过程即从某寄存器(比如,程序计数器)中获取一个内存地址,从这个内存地址中读入指令,执行机器指令,不断重复,CPU运行期间会有分支和调用指令来修改程序计数器,否则程序计数器就自动加1,让CPU从下一个内存地址单元取指令,并继续执行。 +CPU是计算机系统的核心,从一加电开始,按照取指令,执行指令的循环周而复始地运行。取指令的过程即从某寄存器(比如,程序计数器)中获取一个内存地址,从这个内存地址中读入指令,执行机器指令,不断重复,CPU运行期间会有分支和调用指令来修改程序计数器,否则程序计数器就自动加1,让CPU从下一个内存地址单元取指令,并继续执行。 ## 内存层次 ![内存层次图](figures/mem_arch.png) -计算机中有多种存放数据和指令代码的单元,比如在CPU内的寄存器(register)、缓存(cache)、内存(memory)、硬盘、磁带等。寄存器访问速度最快但成本昂贵,在80386处理器中只有十个左右的通用寄存器;ache 一般也在CPU内部,cache是内存和寄存器在速度和大小上的折衷,比寄存器慢2~10倍,容量也有限,量级大约几百KB到几十MB不等;再接下来就是内存了,内存位于CPU外,比寄存器慢10倍以上,但容量大,目前一般以GB到几百GB不等;硬盘一般比寄存器要慢1000倍以上,但掉电后其存储的数据不会丢失。由于寄存器、cache、内存、硬盘在读写速度和容量上的巨大差异,所以需要操作系统来协调数据的访问,尽量主动或协助应用软件,把经常访问的数据放到寄存器或cache中,把不长用的数据放到硬盘上,这样可以达到让多个运行的应用程序“感觉”到它可用使用很大的空间,也可用有很快的访问速度。切jx86,都在芯片上的缓存中保存了最近使用的主存数据 +计算机中有多种存放数据和指令代码的单元,比如在CPU内的寄存器(register)、缓存(cache)、内存(memory)、硬盘、磁带等。寄存器访问速度最快但成本昂贵,在80386处理器中只有十个左右的通用寄存器;cache 一般也在CPU内部,cache是内存和寄存器在速度和大小上的折衷,比寄存器慢2~10倍,容量也有限,量级大约几百KB到几十MB不等;再接下来就是内存了,内存位于CPU外,比寄存器慢10倍以上,但容量大,目前一般以GB到几百GB不等;硬盘一般比寄存器要慢1000倍以上,但掉电后其存储的数据不会丢失。由于寄存器、cache、内存、硬盘在读写速度和容量上的巨大差异,所以需要操作系统来协调数据的访问,尽量主动或协助应用软件,把经常访问的数据放到寄存器或cache中,把不常用的数据放到硬盘上,这样可以达到让多个运行的应用程序“感觉”到它可以使用很大的空间,也可以有很快的访问速度。例如x86,都在芯片上的缓存中保存了最近使用的主存数据 ## I/O ![IO设备图](figures/io_arch.png) -处理器处理的数据需要从外设(比如键盘)中获得,且在处理完毕后要传给外设(比如显示器)进一步处理。。80386 CPU 有两条特殊的 `in`和`out` 指令来在完成与设备的访问交互。其他的CPU也可以通过外设映射的*内存*来用通常的内存读写指令来管理设备。 +处理器处理的数据需要从外设(比如键盘)中获得,且在处理完毕后要传给外设(比如显示器)进一步处理。80386 CPU 有两条特殊的 `in`和`out` 指令来完成与设备的访问交互。其他的CPU也可以通过外设映射的*内存*,来用通常的内存读写指令来管理设备。 diff --git a/zh/preface/preface.md b/zh/preface/preface.md index bd43398..15ad3ed 100644 --- a/zh/preface/preface.md +++ b/zh/preface/preface.md @@ -1 +1 @@ -本章j站在一个很高的高度来看操作系统。对应用软件而言,操作系统其实是一个相比较复杂的系统软件。这样描述还太简单了一些,我们可对其进一步描述:操作系统是一个可以管理CPU、内存和各种外设,并管理和服务应用软件的软件。为了完成这些工作,操作系统需要知道如何与硬件打交道,如何更好地面向应用软件做好服务。本章将讲述操作系统学习的一些背景知识,以及对ucore操作系统做一个介绍。然后再简单介绍操作系统的基本概念、操作系统抽象以及操作系统的特征。最后还将简要介绍操作系统的历史和基本架构。 +本章站在一个很高的高度来看操作系统。对应用软件而言,操作系统其实是一个相对比较复杂的系统软件。这样描述还太简单了一些,我们可对其进一步描述:操作系统是一个可以管理CPU、内存和各种外设,并管理和服务应用软件的软件。为了完成这些工作,操作系统需要知道如何与硬件打交道,如何更好地面向应用软件做好服务。本章将讲述操作系统学习的一些背景知识,以及对ucore操作系统做一个介绍。然后再简单介绍操作系统的基本概念、操作系统抽象以及操作系统的特征。最后还将简要介绍操作系统的历史和基本架构。 diff --git a/zh/preface/preknowledge.md b/zh/preface/preknowledge.md index 3291a01..5734b0a 100644 --- a/zh/preface/preknowledge.md +++ b/zh/preface/preknowledge.md @@ -1 +1 @@ -设计实现操作系统其实就是设计实现一个可以管理CPU、内存和各种外设,并管理和服务应用软件的软件,所以本书的例子和描述需要读者学习过计算机原理课程、程序设计课程,掌握C语言编程(了解指针等的编程),对基于Intel 80386处理器体系结构有一定的了解,大致了解基于基于Intel 80386的汇编语言。本书涉及的例子和实验可在Windows环境和Linux环境下采用命令行(CLI)方式和集成开发环境(IDE)方式进行编译和运行,所以,最好能够有一台PC计算机用于进行操作系统实验。 +设计实现操作系统其实就是设计实现一个可以管理CPU、内存和各种外设,并管理和服务应用软件的软件,所以本书的例子和描述需要读者学习过计算机原理课程、程序设计课程,掌握C语言编程(了解指针等的编程),对基于Intel 80386处理器体系结构有一定的了解,大致了解基于Intel 80386的汇编语言。本书涉及的例子和实验可在Windows环境和Linux环境下采用命令行(CLI)方式和集成开发环境(IDE)方式进行编译和运行,所以,最好能够有一台PC用于进行操作系统实验。 diff --git a/zh/preface/smallos_ucore.md b/zh/preface/smallos_ucore.md index 1a8e381..7731d3e 100644 --- a/zh/preface/smallos_ucore.md +++ b/zh/preface/smallos_ucore.md @@ -1,8 +1,8 @@ -写一个操作系统难吗?别被现在上百万行的Linux和Windows操作系统吓倒。当年Thompson乘他老婆带着小孩度假留他一人在家时,写了UNIX;当年Linus还是一个21岁大学生时完成了Linux雏形。站在这些巨人的肩膀上,我们能否也尝试一下做“巨人”的滋味呢? +写一个操作系统难吗?别被现在上百万行的Linux和Windows操作系统吓倒。当年Thompson趁他老婆带着小孩度假留他一人在家时,写了UNIX;当年Linus还是一个21岁大学生时完成了Linux雏形。站在这些巨人的肩膀上,我们能否也尝试一下做“巨人”的滋味呢? MIT的Frans Kaashoek等在2006年参考PDP-11上的UNIX Version 6写了一个可在X86上跑的操作系统xv6(基于MIT License),用于学生学习操作系统。我们可以站在他们的肩膀上,基于xv6的设计,尝试着一步一步完成一个从“空空如也”到“五脏俱全”的“麻雀”操作系统—ucore,此“麻雀”包含虚存管理、进程管理、处理器调度、同步互斥、进程间通信、文件系统等主要内核功能,总的内核代码量(C+asm)不会超过5K行。充分体现了“小而全”的指导思想。 -ucore的运行环境可以是真实的X86计算机,不过考虑到调试和开发的方便,我们可采用X86模拟器,比如QEMU、BOCHS等,或X86虚拟运行环境,比如VirtualBox、VMware Player等。ucore的开发环境主要是GCC中的gcc、gas、ld和MAKE等工具,也可采用集成了这些工具的IDE开发环境Eclipse-CDT。运行环境和开发环境既可以在Linux或Windows中使用。 +ucore的运行环境可以是真实的X86计算机,不过考虑到调试和开发的方便,我们可采用X86模拟器,比如QEMU、BOCHS等,或X86虚拟运行环境,比如VirtualBox、VMware Player等。ucore的开发环境主要是GCC中的gcc、gas、ld和MAKE等工具,也可采用集成了这些工具的IDE开发环境Eclipse-CDT。运行环境和开发环境可以在Linux或Windows中使用。 diff --git a/zh/preface/ucore.md b/zh/preface/ucore.md index b2eabc1..58733e8 100644 --- a/zh/preface/ucore.md +++ b/zh/preface/ucore.md @@ -1,5 +1,5 @@ # ucore简介 -那我们准备如何一步一步实现ucore呢?安装一个操作系统的开发过程,我们可以有如下的开发步骤: +那我们准备如何一步一步实现ucore呢?按照一个操作系统的开发过程,我们可以有如下的开发步骤: 1. 启动操作系统的bootloader,用于了解操作系统启动前的状态和要做的准备工作,了解运行操作系统的硬件支持,操作系统如何加载到内存中,理解两类中断--“外设中断”,“陷阱中断”,内核态和用户态的区别; 2. 内存管理子系统,用于理解x86分段/分页模式,了解操作系统如何管理物理内存和虚存、页表管理、一类中断-“故障中断”、缺页故障处理、基于页的内存替换;