自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(0)
  • 资源 (9)
  • 收藏
  • 关注

空空如也

游戏引擎架构英文版(Game Engine Architecture)

不可多得的关于游戏引擎的好书,作者供职于顽皮狗游戏公司(Naughty Dog),是一位有着丰富经验的一线开发者,这是他在南加州大学互动媒体与游戏专业讲授游戏开发的课程,对于有志于游戏行业的各位同仁,必读此书。

2015-11-12

深入理解计算机系统英文版(CSAPP)

卡内基梅隆大学有美国最好的计算机学院,李开复在卡耐基梅隆大学获得博士学位,这本书是他大学计算机课程的基础课,完美介绍以后所应用到了基础理论,并结合实践讲解。

2015-11-12

API Design for C++ (C++ 语言的应用程序编程接口设计)

详细介绍如何设计C++库及各种框架,是成为出色架构师的必经之路。

2015-11-12

程序员的十个层次 你属于哪一层?

对程序员等级的一个观点独特的评价,以作者自己的视角写下了,值得一读。

2011-01-07

Foundations of Analog and Digital Electronic Circuits.pdf《模拟和数字电子电路基础》

麻省理工大学开放式课程的教材,关于数字电路和模拟电路的,是电子工程与计算机科学专业的核心课程(core subjecet),有兴趣的可以一读,非常不错(very good) 课程代号:6.002 Circuits and Electronics

2010-12-13

C程序设计语言(第2版·新版)

国外经典C语言教材,由C语言的发明者所写,资源为pdf高清版

2010-09-06

操作系统设计与实现 (第一版)

国外经典操作系统教材,详细讲解,值得一读

2010-09-06

操作系统:设计与实现 (第二版)

Operating Systems: Design and Implementation Second Edition 操作系统设计与实现 (第二版) 安德鲁.坦尼鲍姆(Andrew S. Tanenbaum) 阿尔伯特.伍德豪尔(Albert S. Woodhull) 作者简介 安德鲁.坦尼鲍姆分别在麻省理工学院和加州大学伯克利分校获得学士和博士学位。他 现任位于荷兰阿姆斯特丹市的Vrije大学计算机科学教授并领导着一个计算机系统研究小组。 同时他还任一个研究并行、 分布及图像系统的校际研究生院 - 计算机与图像高级学院的院 长。 坦尼鲍姆先前的研究领域包括编译器、 操作系统、 网络和局域分布式系统,他现在的研 究主要集中在可扩展到数百万用户的广域分布式系统。 对这些课题的研究使他在学报和会议 上发表了70余篇论文,并出版了五部专著。 坦尼鲍姆教授同时还主持开发了大量的软件。他是Amsterdam编译工具箱的总设计师, 该工具箱被广泛地用来开发可移植的编译器,同时还用于MINIX的开发。他和他的博士研究 生及程序员们一起设计了一个基于微内核的高性能分布式操作系统 - Amoeba。 现在,以教 学和研究为目的的用户可以从Internet上免费获得MINIX 和Amoeba软件。 坦尼鲍姆的许多博士研究生在获得学位后都取得了非常丰硕的成果,这令坦尼鲍姆非 常自豪,因为这是他诲人不倦的结果。 坦尼鲍姆教授同时还是ACM的会士、 IEEE高级会员、 荷兰皇家艺术和科学院院士,他曾获 得1994年ACM Karl V. Karlstrom 杰出教育奖和1997年ACM/SIGCSE 计算机科学教育杰出贡 献奖。他被列入Internet上的 Who's Who in the World 名单,他在WWW上的主页地址为: http://www.cs.vu.nl/~ast/。 阿尔伯特.伍德豪尔分别在麻省理工学院和华盛顿大学获得学士和博士学位。他进麻省 理工学院本来是想成为一名电气工程师,可是后来却成了生物学家。 从1973年起他开始在位 于麻省Amherst的Hampshire自然科学学院工作。 当微型计算机慢慢多起来的时候,作为使用 电子检测仪器的生物学家,他开始使用微型计算机。 他给学生开设的检测仪器方面的课程逐 渐演变为计算机接口和实时程序设计。 伍德豪尔博士对教学和科学技术的发展有浓厚的兴趣,在进入研究生院之前他曾在尼 日利亚教过两年中学,近年来他曾几次利用自己的假期在尼加拉瓜教授计算机科学。 他对计算机作为电子系统,以及计算机与其他电子系统的相互配合很感兴趣。 他最喜欢 讲授的课程有计算机体系结构、 汇编语言程序设计、 操作系统和计算机通信。 他还为开发电子 器件及相关软件担当顾问。 在学术之外,伍德豪尔有不少兴趣,包括各种户外运动,业余无线电制作和读书。 他还 喜欢旅游和学习别国语言。 他的WWW主页就存在一台运行MINIX的机器上,地址是:http://m inix1.hampshire.edu/asw/。 前 言 多数操作系统教材都重理论而轻实践,本书希望在这二者之间求取较好的平衡。 本书详 细论述了操作系统的所有基本概念,包括进程、 进程间通信、 信号量、 管程、 消息传递、 调度算 法、 输入/输出、 死锁、 设备驱动程序、 存储器管理、 页面调度算法、 文件系统设计、 安全与保护 机制等。同时,本书也详细讨论了MINIX - 一个与UNIX兼容的操作系统,并提供了完整的 源代码供学习之用。 这样的安排使读者不仅学习到理论,而且能够理解它们如何应用在一个 实际的操作系统之中。 本书第一版在1987年出版时,曾引发了操作系统课程教学的一场小小的变革。 在此之前 多数课程都只讲理论。随着MINIX的出现,许多学校开始增加实验环节以使学生了解实际的 操作系统是如何运作的。 我们认为这种趋势是可取的,并希望通过本书第二版能进一步加强 这种趋势。 MINIX在其出现以来的十年间发生了许多变化,最初的代码是为基于8088芯片、256K内 存和两个软驱的IBM PC机型编写的,它基于UNIX 版本7。随着时间的推移,MINIX在许多方 面有所发展,比如当前版本可运行在众多机型上,从16位实模式的PC机到配有大容量硬盘 的奔腾机(32位保护模式),而且它不再基于UNIX版本7,而是基于国际上的POSIX标准(P OSIX 1003.1和ISO9945-1)。 与此同时,有许多新特征被添加到MINIX中,在我们看来,所 增加的特征可能已经太多了,但有些人则认为还不够,这最终导致了LINUX的诞生。 MINIX还 被移植到许多其他平台上,包括Macintosh、 Amiga、 Atari和SPARC。 本书只涉及MINIX2.0,到 目前为止,该版本只能运行于基于80X86的机器,或者可模拟此类CPU的机器,以及SPARC机 器。 与第一版相比,第二版有许多变化,原理性部分基本都被修改过,同时增加了大量新 内容。 最主要的变化是新的基于POSIX的MINIX,以及对其源代码的剖析。 另外,每本书都附 带一张CD-ROM,它包含了全部MINIX源代码,以及在PC上安装MINIX的说明(见CD-ROM主目 录下的README.TXT文件)。 在一台80X86 的PC机上安装MINIX很方便。 它需要一个至少30MB的硬盘分区,然后按照C D-ROM上README.TXT文件中的步骤进行即可。在打印README.TXT文件之前,先启动MS-DOS (若运行WINDOWS,则双击MS-DOS图标),然后键入 copy readme.txt prn 即可。 该文件也可以用edit、 wordpad、 notepad等任何可以处理ASCII正文的编辑器进行浏览。 对于没有PC机的学校和个人,有两种解决办法,即CD-ROM上提供的两个模拟程序。一 个由Paul Ashton 为SPARC机器编写,它作为用户程序在Solaris上运行,此时MINIX被编译 成SPARC上的可执行文件。 在这种模式下,MINIX不再是一个操作系统,而只是一个用户程序, 所以必须对其底层作一些修改。 另一个模拟程序由Bochs软件公司的Kevin.P.Lawton编写,它解释Intel 80386的指令 集以及足以使MINIX运行所需的I/O指令。 显然在解释器层次上运行使性能有所下降,但这使 得学生更容易进行调试。该模拟程序运行在所有支持M.I.T的X-Window的系统上,更详细的 信息请参看CD-ROM上的有关文件。 MINIX仍在继续发展,本书和CD-ROM中的内容仅仅反映了本书出版时的情况,有关MIN IX的最新动态请访问MINIX的主页:http://www.cs.vu.nl/~ast/minix.html。 MINIX也有USE NET中的新闻组:comp.os.minix,读者可以订阅该新闻组。对于仅有Email的读者可通过以 下步骤来加入MINIX的邮件用户通信组。 [email protected] 发一封信,其中 给 只需一行字:“subscribe minix-1 <您的完整用户名>”,此后你便会通过E-mail获得 很多的信息。 讲授本课程的教师可以从Prentice Hall公司获得一份习题解答手册。 从WWW地址 http: //www.cs.vu.nl/~ast/沿着“Software and supplementary material"链接可以获得一些 有用的PostScript文件,其中包含本书中所有的图表,可供需要时使用。 在MINIX的开发项目中我们有幸得到了许多人的帮助。 首先要感谢Kees Bot在MINIX标准 化和软件发布中所作的大量工作,没有他的帮助,我们不可能完成这件工作。 他自己编写了 大量的代码(如POSIX终端I/O)并修正了一些数年来一直存在的错误,他还整理了其他的 代码。 这些年来Bruce Evans、Phlip Homburg、 Will Rose和Michael Temari为MINIX的开发做 了大量的工作。 有几百人通过新闻组对MINIX作出了贡献,他们人数众多,所作出的贡献也 各不相同,在此谨向他们一并表示感谢。 John Casey、 Dale Grit、 Frans Kashoek等人阅读了本书的部分手稿并提出了宝贵建 议,在此向他们表示谢意。 Vrije大学的许多学生测试了CD-ROM中MINIX的 β版本,他们是:Ahmed Batou, Gora n Dokic, Peter Gijzel, Thomer Gil, Dennis Grimbergen, Roderick Groesbeek, Woute r haring, Guido Kollerie, Mark Lassche, Raymond Ris, Frans ter Borg, Alex van B allegooy, Ries van der Velden, Alexander Wels以及Thomas Zeeman。 我们对他们细致的 工作和详尽的报告致以衷心的感谢。 阿尔伯特·S·伍德豪尔向他从前的几位学生表示感谢,特别是Hampshire学院的Peter W. Young ,Nacional Autonoma de Nicaragua大学的Maria Isabel Sanchez 和William Pud dy Vargas。 最后要向我们的家庭成员表示感谢。 Suzanne 已是第十次在我埋头写作时给我支持,对 Barbara是第九次,Marvin是第八次,甚至小Bram也是第四次了。他们的支持和爱心对我非 常重要。(坦尼鲍姆) 至于阿尔伯特的Barbara,这倒是第一次,假如没有她的支持,耐心和幽默,我们是不 可能完成这一工作的,对我的儿子Gordon而言,由于在编写本书时,他大部分时间都不在 家中,而是在大学学习,因此是非常幸运的。 但是他的理解和关心深深吸引着我从事本书的 编写工作,有这样一个儿子是令人非常愉快的。(伍德豪尔) 安德鲁.S.坦尼鲍姆 阿尔伯特.S.伍德豪尔 译 序 坦尼鲍姆教授是国际知名的计算机科学家和教育家。 他在操作系统、 分布式系统以及计 算机网络领域都有很深的造诣。 自八十年代以来,他已先后出版了一系列面向大学生和研究 生的教材性质的专著,并被世界各国的许多大学广泛采用。 这本书就是他的最新专著之一。 操作系统是计算机系统中最核心和最底层的软件,对操作系统的深入学习关系到对整 个系统运作机制的全面理解,因此一本好教材也显得愈发重要。 本书的英文版出版于1997年, 其中涵盖了操作系统课程的所有内容,即传统上的进程管理、 存储器管理、 文件管理和设备 管理。 同时其中又包含了许多新内容,如线程、 基于消息传递的系统构造模型、 日志结构文件 系统、 安全和保护机制、 RAM盘及CD-ROM设备等,而用作例子的CPU则为Interl Pentium。 这 使得读者一方面能够学习操作系统的经典内容,另一方面又能够了解和跟踪当前的最新技 术和研究成果。 本书的另一个特点是基本原理与具体实例,即MINIX紧密结合。第2到第5章的前半部分 讲述原理,后半部分则详细地解释这些原理在MINIX的设计和实现中的应用。通过阅读这些 部分能够把握MINIX源代码的组织方式,并理解那些很关键或者很难懂的代码。这部分内容 非常翔实,有时甚至逐行地解释附录中所列的源程序。 对操作系统课程多年的授课经验以及 相关的科研工作使我们认识到:详细地剖析一个象MINIX这样的操作系统对于掌握操作系统 设计与实现的精髓是大有裨益的。 正因为上述原因,我们真切地感受到将这本书翻译、 介绍给国内读者将是一件非常有意 义的事,衷心希望我们付出的劳动能对国内的操作系统教学和实践有所帮助和促进。 本书的第一章,第二章,第三章由王鹏翻译,刘福岩和陆宁也参加了部分工作;第四 章由朱鹏翻译;第五章由敖青云翻译。全书由尤晋元教授审校并统稿。 在整个翻译过程中,上海交通大学计算机系系统软件研究室的师生给予了许多帮助。 并 且在计算机系95级本科生的操作系统课程中进行了试用,许多学生提出了很好的建议,在 此向他们表示衷心的感谢。 特别要感谢本书的责任编辑邓又强先生,本书的顺利出版与他的辛勤劳动和热情支持 是分不开的。 虽然在翻译过程中我们尽力恪守“信,达,雅”的准则,但不当和疏漏之处在所难免, 敬请读者提出宝贵建议。 译 者 1998年4月于上海交通大学 目 录 Operating Systems: Design and Implementation Second Edition..................1 作者简介.................................................................2 前 言....................................................................3 译 序....................................................................5 目 录....................................................................6 第一章 引 论...............................................................12 1.1 什么是操作系统......................................................13 1.1.1 操作系统作为虚拟机............................................13 1.1.2 操作系统作为资源管理器........................................14 1.2 操作系统发展历史....................................................14 1.2.1 第一代计算机(1945-1955):真空管和插板......................15 1.2.2 第二代计算机(1955-1965):晶体管和批处理系统................15 1.2.3 第三代计算机(1965-1980):集成电路芯片和多道程序............17 1.2.4 第四代计算机(1980-现在):个人计算机........................19 1.2.5 MINIX 的历史...................................................20 1.3 操作系统基本概念....................................................21 1.3.1 进程..........................................................22 1.3.2 文件..........................................................23 1.3.3 外壳(shell).................................................26 1.4 系统调用............................................................26 1.4.1 进程管理系统调用..............................................28 1.4.2 信号管理系统调用..............................................30 1.4.3 文件管理系统调用..............................................32 1.4.4 目录管理系统调用..............................................35 1.4.5 权限管理系统调用..............................................37 1.4.6 时间管理系统调用..............................................37 1.5 操作系统结构........................................................38 1.5.1 整体式系统....................................................38 1.5.2 层次式系统....................................................39 1.5.3 虚拟机系统....................................................40 1.5.4 客户/服务器系统...............................................42 1.6 各章节内容简介......................................................43 1.7 小结................................................................43 习 题..................................................................44 第二章 进 程..............................................................45 2.1 进程介绍 ...........................................................45 2.1.1 进程模型......................................................45 2.1.2 进程的实现.....................................................48 2.1.3 线程...........................................................50 2.2 进程间通信...........................................................52 2.2.1 竞争条件 ......................................................52 2.2.2 临界区.........................................................53 2.2.3 忙等待的互斥...................................................54 2.2.4 睡眠和唤醒....................................................57 2.2.5 信号量.........................................................60 2.2.6 管程...........................................................62 2.2.7 消息传递 .....................................................65 2.3 经典 IPC 问题........................................................67 2.3.1 哲学家进餐问题................................................67 2.3.2 读者-写者问题................................................69 2.3.3 理发师睡觉问题................................................71 2.4 进程调度.............................................................72 2.4.1 时间片轮转调度................................................73 2.4.2 优先级调度....................................................74 2.4.3 多重队列......................................................75 2.4.4 最短作业优先..................................................76 2.4.5 保证调度算法..................................................77 2.4.6 彩票调度算法..................................................77 2.4.7 实时调度......................................................78 2.4.8 两级调度法....................................................79 2.4.9 策略与机制....................................................80 2.5 MINIX 进程概述 ......................................................80 2.5.1 MINIX 的内部结构...............................................80 2.5.2 MINIX 中的进程管理.............................................82 2.5.3 MINIX 中的进程间通信...........................................83 2.5.4 MINIX 中的进程调度.............................................83 2.6 MINIX 中进程的实现...................................................84 2.6.1 MINIX 源代码的组织.............................................84 2.6.2 公共头文件.....................................................87 2.6.3 MINIX 头文件...................................................90 2.6.4 进程数据结构和头文件...........................................93 2.6.5 引导 MINIX.....................................................98 2.6.6 系统初始化....................................................100 2.6.7 MINIX 的中断处理..............................................104 2.6.8 MINIX 的进程间通信............................................110 2.6.9 MINIX 的进程调度..............................................112 2.6.10 与硬件相关的核心支持........................................113 2.6.11 公用程序和核心库............................................115 2.7 小结...............................................................117 习 题.................................................................118 第三章 输入/输出系统......................................................121 3.1 I/O 硬件原理.......................................................121 3.1.1 I/O 设备.....................................................122 3.1.2 设备控制器..................................................122 3.1.3 存储器直接存取 DMA...........................................124 3.2 I/O 软件原理.......................................................126 3.2.1 I/O 软件的目标...............................................126 3.2.2 中断处理程序................................................127 3.2.3 设备驱动程序................................................127 3.2.4 与硬件无关的 I/O 软件........................................128 3.2.5 用户空间的 I/O 软件..........................................130 3.3 死锁...............................................................131 3.3.1 资源........................................................131 3.3.2 死锁原理....................................................132 3.3.3 鸵鸟算法....................................................135 3.3.4 死锁检测和恢复..............................................136 3.3.5 死锁预防....................................................136 3.3.6 死锁避免....................................................138 3.4 MINIX I/O 系统概述................................................141 3.4.1 MINIX 的中断处理程序.........................................141 3.4.2 MINIX 的设备驱动程序.........................................142 3.4.3 MINIX 中与设备无关的 I/O 软件.................................145 3.4.4 MINIX 中用户级 I/O 软件.......................................145 3.4.5 MINIX 的死锁处理.............................................145 3.5 MINIX 中的块设备...................................................146 3.5.1 MINIX 中块设备驱动程序概述...................................146 3.5.2 公用块设备驱动程序软件......................................148 3.5.3 驱动程序库..................................................150 3.6 RAM 盘.............................................................151 3.6.1 RAM 盘硬件和软件............................................152 3.6.2 MINIX 中的 RAM 盘驱动程序概述.................................153 3.6.3 MINIX 中的 RAM 盘驱动程序实现.................................154 3.7 磁盘................................................................155 3.7.1 磁盘硬件....................................................155 3.7.2 磁盘软件....................................................157 3.7.3 MINIX 中的硬盘驱动程序概述...................................161 3.7.4 MINIX 中的硬盘驱动程序实现...................................163 3.7.5 软盘处理....................................................168 3.8 时钟...............................................................170 3.8.1 时钟硬件....................................................170 3.8.2 时钟软件....................................................171 3.8.3 MINIX 时钟驱动程序概述.......................................173 3.8.4 MINIX 时钟驱动程序的实现.....................................176 3.9 终端................................................................179 3.9.1 终端硬件....................................................179 3.9.2 终端软件....................................................183 3.9.3 MINIX 中终端驱动程序概述.....................................189 3.9.4 设备无关终端驱动程序的实现..................................200 3.9.5 键盘驱动程序的实现..........................................211 3.9.6 显示驱动程序的实现..........................................215 3.10 MINIX 中的系统任务................................................220 3.11 小结.............................................................226 习 题.................................................................226 第四章 存储器管理..........................................................229 4.1 基本的内存管理......................................................230 4.1.1 没有交换和分页的单道程序......................................230 4.1.2 固定分区的多道程序............................................231 4.2 交换................................................................232 4.2.1 使用位图的内存管理............................................234 4.2.2 使用链表的内存管理............................................235 4.3 虚拟存储器.........................................................237 4.3.1 分页..........................................................237 4.3.2 页表..........................................................241 4.3.3 TLBs—翻译后援存储器(Translation Lookaside Buffers)..........244 4.3.4 逆向页表......................................................246 4.4 页面替换算法........................................................247 4.4.1 最优页面替换算法..............................................247 4.4.2 最近未使用页面替换算法........................................247 4.4.3 先进先出页面替换算法..........................................248 4.4.4 第二次机会页面替换算法........................................249 4.4.5 时钟页面替换算法..............................................249 4.4.6 最久未使用页面替换算法 .......................................250 4.4.7 用软件模拟 LRU................................................251 4.5 分页系统中的设计问题................................................252 4.5.1 工作集模型....................................................253 4.5.2 局部与全局分配策略............................................253 4.5.3 页面大小......................................................255 4.5.4 虚拟存储器界面................................................256 4.6 分段...............................................................257 4.6.1 纯分段系统的实现.............................................260 4.6.2 分段和分页结合:MULTICS......................................260 4.6.3 分段和分页结合:Intel 的 Pentium.............................263 4.7 MINIX 内存管理概览..................................................268 4.7.1 内存布局......................................................268 4.7.2 消息处理......................................................271 4.7.3 内存管理器数据结构和算法......................................272 4.7.4 FORK、EXIT、和 WAIT 系统调用..................................275 4.7.5 EXEC 系统调用.................................................276 4.7.6 BRK 系统调用..................................................279 4.7.7 信号处理......................................................279 4.7.8 其他系统调用..................................................284 4.8 MINIX 中内存管理的实现..............................................284 4.9 第五章 5.1 5.2 5.3 5.4 5.5 5.6 4.8.1 头文件和数据结构.............................................285 4.8.2 主程序.......................................................286 4.8.3 FORK、EXIT、和 WAIT 的实现....................................287 4.8.4 EXEC 的实现...................................................289 4.8.5 BRK 的实现....................................................290 4.8.6 信号处理的实现...............................................290 4.8.7 其他系统调用的实现...........................................295 4.8.8 内存管理器工具...............................................297 小结...............................................................298 习 题.............................................................299 文件系统...........................................................302 文件...............................................................302 5.1.1 文件命名.....................................................303 5.1.2 文件结构.....................................................304 5.1.3 文件类型.....................................................305 5.1.4 文件存取.....................................................307 5.1.5 文件属性.....................................................307 5.1.6 文件操作.....................................................309 目录...............................................................309 5.2.1 层次目录系统.................................................310 5.2.2 路径名.......................................................311 5.2.3 目录操作.....................................................313 文件系统的实现.....................................................313 5.3.1 实现文件.....................................................313 5.3.2 实现目录.....................................................316 5.3.3 磁盘空间管理.................................................319 5.3.4 文件系统的可靠性.............................................320 5.3.5 文件系统性能.................................................324 5.3.6 日志结构的文件系统...........................................326 安全性.............................................................327 5.4.1 安全环境.....................................................328 5.4.2 著名的安全缺陷...............................................329 5.4.3 一般的安全性攻击............................................331 5.4.4 安全性的设计原则.............................................332 5.4.5 用户验证.....................................................333 保护机制...........................................................336 5.5.1 保护域.......................................................336 5.5.2 存取控制表...................................................337 5.5.3 权限.........................................................338 5.5.4 隐藏通道......................................................339 MINIX 文件系统概述.................................................341 5.6.1 消息.........................................................341 5.6.2 文件系统布局.................................................342 5.6.3 位图.........................................................345 5.7 5.8 习 第六章 6.1 6.2 5.6.4 i-节点......................................................346 5.6.5 块高速缓存...................................................348 5.6.6 目录和路径...................................................349 5.6.7 文件描述符...................................................350 5.6.8 文件锁.......................................................352 5.6.9 管道和设备文件...............................................352 5.6.10 一个例子:READ 系统调用......................................353 MINIX 文件系统的实现...............................................354 5.7.1 头文件和全局变量.............................................354 5.7.2 表的管理.....................................................356 5.7.3 主程序.......................................................363 5.7.4 对单个文件的操作.............................................365 5.7.5 目录和路径...................................................371 5.7.6 其他系统调用.................................................374 5.7.7 I/O 设备界面..................................................376 5.7.8 一般的实用程序...............................................377 小结...............................................................378 题.................................................................378 阅读材料和参考文献.................................................381 推荐的进一步阅读材料...............................................381 6.1.1 介绍和概论...................................................381 6.1.2 进程.........................................................382 6.1.4 存储器管理...................................................383 按字母排序的参考文献...............................................384 第一章 引 论 计算机如果离开了软件将成为一堆废铜烂铁。 有了软件,计算机可以对信息进行存储、 处理和检索,可以显示多媒体文档、 搜索Internet并完成其他工作。 计算机软件大致分为两 类:系统软件和应用软件。 系统软件管理计算机本身及应用程序;应用软件执行用户最终所 需要的功能。 最基本的系统软件是操作系统(operating system),它控制计算机的所有资 源并提供开发应用程序的基础。 现代计算机系统包含一个或多个处理器、 若干内存(常称为RAM-随机存取存储器)、 磁 盘、 打印机、 网络接口及其他输入/输出设备。 编写一个程序来管理所有这些器件以正确地使 用它们,即使不考虑优化也是一件很困难的事情。 如果每个程序员都必须处理磁盘如何工作, 再加上每读一个磁盘块都有几十种因素可能导致操作出错,那么很多程序简直没法写。 许多年以前人们就认识到必须找到某种方法将硬件的复杂性同程序员分离开来。 经过不 断探索和改进,目前采用的方法是在裸机上加载一层软件来管理整个系统,同时给用户提 供一个更容易理解和进行程序设计的接口,这被称为虚拟机(virtual machine)。这样一 层软件就是操作系统。 这种处理方式如图1-1所示。 底层是硬件,它本身可能包括两层或多层。 最低一层是物 理器件,包括集成电路芯片、 连线、 电源、 监视器等,它们的构造和工作方式属于电气工程师 的范围。 图 1-1 计算机系统由硬件、系统程序和应用程序组成。 接着是微程序(microprogram),通常存放在只读存储器中,它是一层很原始的软件, 用来控制设备并向上一层提供一个更清晰的接口。 微程序实际上是一个解释器,它先取得机 器语言指令,如ADD, MOVE和JUMP等,然后通过一个动作序列来执行这些指令。 例如为了执 行一条ADD指令,微程序必须先确定运算数据的位置,然后取数,相加,最后存放得数。由 微程序解释执行的这一套指令称为机器语言。 机器语言并不是硬件的组成部分,但硬件制造 商通常在手册中给出机器语言的完整描述,所以许多人将它认作真正的“计算机”。 采用精简指令集计算机(RISC)技术的计算机没有微程序层,其机器指令通过硬件逻 辑直接执行。例如Motorola 680X0有微程序,而IBM PowerPC 则没有。 机器语言典型地有50到100条指令,大多数用来完成数据传送、算术运算和数值比较等 操作。 在这个层次上,通过向特殊的设备寄存器写特定的数值来控制输入/输出设备。 例如将 磁盘地址、 内存地址、 读字节数和操作类型(读/写)等值写入特定的寄存器便可完成硬盘读 操作。 实际操作往往需要更多的参数,而操作完成后的返回状态也非常复杂。 进一步而言, 对于许多I/O设备,时序在程序设计中的作用非常重要。 操作系统的主要功能之一就是将所有这些复杂性隐藏起来,同时为程序员提供一套更 加方便的指令,比如,“从文件中读一个数据块”在概念上比低层的“移动磁头臂,等待 旋转延迟”之类的细节来得简单、方便。 在操作系统之上是其他系统软件,包括命令解释器(shell)、 窗口系统、 编译器、 编辑 器及类似的独立于应用的程序。 要注意它们本身并不是操作系统的组成部分,尽管它们通常 由计算机厂商提供。 这一点很重要,操作系统专指在核心态(kernel mode),或称管态(s upervisor mode)下运行的软件,它受硬件保护而免遭用户的篡改。 编译器和编辑器运行在 用户态(user mode)。如果用户不喜欢某一个编译器,他可以自己重写一个,但他却不可 以写一个磁盘中断处理程序 - 因为这是操作系统的一部分,而且硬件阻止用户对它进行 修改。 系统软件之上是应用软件,这些软件可以是购买的或者是用户自行开发的,它们用来 解决特定的问题,如字处理、表格处理、工程计算或者电子游戏等。 1.1 什么是操作系统 多数计算机用户都使用过操作系统,但要精确地给出操作系统的定义却很困难,部分 原因是操作系统完成两项相对独立的任务,下面我们逐项进行讨论。

2010-09-06

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除