GNU 起源

  在unix平台下开发了一年多,整天埋头写C的代码。某天查资料时发现自己的无知。连GNU,GNOME,GTK+这些名词还不是和了解,于是恶补。在这把网上找的资料整理了一下,当笔记留在博客上。希望老鸟们不要笑。

gnu

GNU计划,又称革奴计划,是由 Richard Stallman在1983年9月27日公开发起的。它的目标是创建一套完全自由的操作系统。Richard Stallman最早是在net.unix-wizards新闻组上公布该消息,并附带一份《GNU宣言》等解释为何发起该计划的文章,其中一个理由就是要“重现当年软件界合作互助的团结精神”。
  GNU是“GNU's Not Unix”的递归缩写。Stallman宣布GNU应当发音为Guh-NOO以避免与new这个单词混淆(注:Gnu在英文中原意为非洲牛羚,发音与new相同)。UNIX是一种广泛使用的商业操作系统的名称。由于GNU将要实现UNIX系统的接口标准,因此GNU计划可以分别开发不同的操作系统部件。GNU计划采用了部分当时已经可自由使用的软件,例如TeX排版系统和X Window视窗系统等。不过GNU计划也开发了大批其他的自由软件。
  为保证GNU软件可以自由地“使用、复制、修改和发布”,所有GNU软件都在一份在禁止其他人添加任何限制的情况下授权所有权利给任何人的协议条款,GNU通用公共许可证(GNU General Public License,GPL)。这个就是被称为“反版权”(或称Copyleft)的概念。
  1985年Richard Stallman又创立了自由软件基金会(Free Software Foundation)来为GNU计划提供技术、法律以及财政支持。尽管GNU计划大部分时候是由个人自愿无偿贡献,但FSF有时还是会聘请程序员帮助编写。当GNU计划开始逐渐获得成功时,一些商业公司开始介入开发和技术支持。当中最著名的就是之后被Red Hat兼并的Cygnus Solutions。
  到了1990年,GNU计划已经开发出的软件包括了一个功能强大的文字编辑器Emacs,C语言编译器GCC,以及大部分UNIX系统的程序库和工具。唯一依然没有完成的重要组件就是操作系统的内核(称为HURD)。
  1991年Linus Torvalds编写出了与UNIX兼容的 Linux操作系统内核并在GPL条款下发布。Linux之后在网上广泛流传,许多程序员参与了开发与修改。1992年Linux与其他GNU软件结合,完全自由的操作系统正式诞生。该操作系统往往被称为“GNU/Linux”或简称Linux。(尽管如此GNU计划自己的内核Hurd依然在开发中,目前已经发布Beta版本。)
  许多UNIX系统上也安装了GNU软件,因为GNU软件的质量比之前UNIX的软件还要好。GNU工具还被广泛地移植到Windows和Mac OS上。
  GNU 包含3个协议条款,
  GPL:GNU通用公共许可证(GNU General Public License)
  LGPL:GNU较宽松公共许可证 (GNU Lesser General Public License), ) ,旧称 GNU Library General Public License (GNU 库通用公共许可证);
  GFDL :  GNU自由文档许可证(GNU Free Documentation License )的缩写形式。
  这里指的自由,并不是价格免费,这和价格无关而是使用软件对所有的用户来说是自由的。GPL 通过如下途径实现这一目标: 
  1.它要求软件以源代码的形式发布,并规定任何用户能够以源代码的形式将软件复制或发布给别的用户。 
  2.如果用户的软件使用了受 GPL 保护的任何软件的一部分,那么该软件就继承了 GPL 软件,并因此而成为 GPL 软件,也就是说必须随应用程序一起发布源代码。 
  3.GPL 并不排斥对自由软件进行商业性质的包装和发行,也不限制在自由软件的基础上打包发行其他非自由软件。 
  由于GPL很难被商业软件所应用,它要求调用它的库的代码也得GPL,全部开放,并且一同发布,不能直接连接。所以后来GNU推出了LGPL许可证
  如果你准备在你的项目中使用Linux,那么你必须了解的两个上述两个两个许可证,GPL与LGPL..
  相同点:
  因为GPL和LGPL,都是自由软件基金会建立的,所以它们之间非常类似,它们都具备Copyleft的重要特性:
  术语copyleft源于GNU项目中的俗语,是英语Copyleft的双关语(Copyright:版权),表示反版权,也就是非盈利版权的意思。他指的是开放源代码许可证中如下条款:任何人或者公司都不能把GPL/LGPL保护下的软件源代码拷贝,修改后,把这些修改保护起来——即使他们的修改可能使得软件的性能比原始的版本更好。一旦一段代码被GPL或者LGPL保护,那么代码本身和所有对它所做的修改都必须在对它感兴趣的人和组织面前公开,如果第三方修改并发布这段代码,那么必须把修改的代码和原始代码都向接受代码的人公开。
  不同点:
  在GPL与LGPL许可证保护下发布源代码的结果很相似,对旧代码所做的任何修改对于想知道这些代码的人必须是公开的,唯一真正的不同之处在于私人版权代码是否可以与开放源代码相互连接,LGPL允许实体连接私人代码到开放源代码,并可以在任何形式下发布这些合成的二进制代码。只有这些代码是动态连接的就没有限制。(使用动态链接时,即使是程序在运行中调用函数库中的函数时,应用程序本身和函数库也是不同的实体)
  GNU (pronounced /gnu/) is a free software operating system. Its name is a recursive acronym for "GNU's Not Unix", which was chosen because its design is Unix-like, but it contains no actual UNIX code. The GNU system, combined with a third-party kernel called Linux, is one of the most widely used operating systems in the world known as "GNU/Linux". The plan for the GNU operating system was announced in September 1983 by Richard Stallman and software development work began in January 1984. The project to develop GNU is known as the GNU Project, and programs released under the auspices of the GNU Project are called GNU packages or GNU programs.
  History 
  The GNU project was announced publicly on September 27, 1983, on the net.unix-wizards [1] and net.usoft newsgroups. Software development began on January 5, 1984, when Stallman quit his job at Massachusetts Institute of Technology so that they could not claim ownership or interfere with distributing GNU as free software. The correct pronunciation of GNU is g'noo (IPA: /gnu/), with a hard "g", to distinguish it from the word new. According to Stallman, the name was inspired by various plays on words, including the song The Gnu.
  The goal was to bring a wholly free software operating system into existence. Stallman wanted computer users to be free - as most were in the 60s and 70s - free to study the source code of the software they use, free to modify the behaviour of the software, and free to publish their modified versions of the software. This philosophy was published in March 1985 as The GNU Manifesto.
  The majority of the software needed had to be written from scratch, but when compatible free software components already existed, they were used. Two examples were the TeX typesetting system, and the X Window System. Most of GNU has been written by volunteers; some in their spare time, some paid by other companies. In October 1985, Stallman set up the Free Software Foundation (FSF). In the mid- and late-80s, FSF hired software developers to write the software needed for GNU. At its peak it had 15 people on its staff. FSF also holds the copyrights for some GNU software packages. Most GNU packages are licensed under the GNU General Public License (GNU GPL), while a few use the GNU Lesser General Public License (GNU LGPL), and a still smaller amount use other free software licenses.
  So that it would be convenient for people to switch to GNU, it was decided that GNU would be mostly compatible with Unix, which was a popular proprietary operating system at the time. The design of Unix had proven to be solid, and it was modular, so it could be reimplemented piece by piece.
  As GNU gained prominence, interested businesses began contributing to development or selling GNU software and technical support. The most prominent and successful of these was Cygnus Solutions, now part of Red Hat.
  Licensing 
  In order to ensure that GNU software remains free, the project released the first version of the GNU General Public License (GNU GPL) in 1989. This license is now used by most GNU programs, as well as a large number of free software programs that are not part of the GNU project; it is the most commonly used free software license in the world. It gives all recipients of a program the right to run, copy, modify and distribute it, while forbidding them from imposing further restrictions on any copies they distribute. This idea is referred to as copyleft.
  Design and implementation 
  The initial plan for GNU was to be mostly Unix-compatible, while adding enhancements where they were useful. The design of the kernel was GNU's largest departure from "traditional" Unix. GNU's kernel was to be a multi-server micro-kernel.
  The GNU Hurd runs on a microkernel (currently Mach) and consists of a set of programs called servers that offers the same functionality as the traditional Unix kernel (or Linux).
  GNU (using Hurd) can be tried using a live CD. (See External links).
  By 1990, the GNU system had an extensible text editor (Emacs), a very successful optimizing compiler (GCC), and most of the core libraries and utilities of a standard Unix distribution. The main component still missing was the kernel. In the GNU Manifesto, Stallman had mentioned that "an initial kernel exists but many more features are needed to emulate Unix." He was referring to TRIX, a remote procedure call kernel developed at MIT, whose authors had decided to distribute for free, and was compatible with Version 7 Unix. In December 1986, work had started on modifying this kernel. However, the developers eventually decided it was unusable as a starting point, primarily because it only ran on "an obscure, expensive 68000 box" and would therefore have to be ported to other architectures before it could be used. By 1988, the Mach message-passing kernel being developed at Carnegie Mellon University was being considered instead, although its release as free software was delayed till 1990 while its developers worked to remove code owned by AT&T.
  Since the Mach microkernel, by design, provided just the low-level kernel functionality, the GNU Project had to develop the higher-level parts of the kernel, as a collection of user programs. Initially, this collection was to be called Alix, but developer Michael Bushnell later preferred the name Hurd, so the Alix name was moved to a subsystem and eventually dropped completely. Eventually, development of the Hurd stalled due to technical reasons and personality conflicts.
  GNU/Hurd refers to the GNU OS distribution that uses GNU Hurd as its core. GNU Hurd is the set of programs or servers run on top of a microkernel (it currently uses the GNU Mach microkernel, but efforts port the Hurd to the L4 microkernel are currently ongoing). The "GNU" in GNU Hurd indicates that it is a part of the GNU project, while "GNU/Hurd" distinguishes it as one of the two currently available GNU systems, that is, Linux-based GNU systems (or "GNU/Linux") as opposed to Hurd-based GNU systems (or "GNU/Hurd"). Just "GNU" refers to GNU/Hurd or a Hurd-based GNU system. "GNU/Linux" is pronounced "GNU-slash-Linux", or more often, just "GNU Linux". However, the FSF contests that "GNU Linux", by the rules of the English language, refers to a distribution of the kernel Linux by the GNU project or GNU project's version of it; "GNU/Linux", they say, makes it clear that a person is referring to the combination of the kernel Linux and the GNU userland binaries, forming a complete GNU OS. Linus Torvalds, original author of the kernel, does not approve of the term "GNU/Linux"; he prefers "GNU Linux" if the GNU project "wants its own distribution."
  In 1991, Linus Torvalds wrote the Unix-compatible Linux kernel. Although it was not originally free software, Torvalds changed the license to the GNU GPL in 1992. Linux was further developed by various programmers over the Internet. In 1992, it was combined with the GNU system, resulting in a fully functional free operating system. The GNU system is most commonly encountered in this form, usually referred to as a "GNU/Linux system" or a "Linux distribution". As of 2005, Hurd is in slow development, and is now the official kernel of the GNU system. There is also a project working on porting the GNU system to the kernels of FreeBSD and NetBSD.
  On the 20th anniversary of the GNU Project (January 5, 2004), the Irish Free Software Organisation was founded to promote free software in Ireland.
  GNU software 
  Prominent components of the GNU system include the GNU Compiler Collection (GCC), the GNU C Library (glibc), the GNU Emacs text editor, and the GNOME graphical desktop.
  Many GNU programs have been ported to other operating systems and are often installed on proprietary UNIX systems to replace the proprietary utilities. As well as giving users freedom, many of these GNU programs have been proven to be more reliable than their proprietary Unix counterparts [2]. The reputation of GNU software is especially good for its software development tools, which are sometimes collectively called the GNU toolset. Making up but a small fraction of the GNU system as a whole, some people consider the toolset to be of superior quality to many of the equivalent Unix versions, even if the GNU versions are not totally POSIX compliant. With the popularity of GNU/Linux systems, many developers install the GNU toolset on other systems for compatibility or to capture uniform behavior across platforms. Many GNU programs have also been ported to Microsoft Windows, Mac OS X, and various other proprietary platforms, however, the motive for developing these programs was to contribute to replacing those systems with free software, not to enhance them.
  GNU理念
  我从www.gnu.org上找到了一篇名叫“Why Software Should Be Free”的文章,里面阐述了FREE SOFTWARE理念,这里翻译并列出其主要观点。注意,以下并非原文,但基本符合原意
  支持软件私有的人通常持有以下观点,软件私有可以为软件开发者提供必要的经济支持,而如果没有这种经济支持,那么将没有人会去开发软件。这种观点的逻辑是要么接受软件私有,要么失去软件,而事实上这是一种变相的讹诈,软件私有并非是软件存在的必要条件。如果我们假设“软件私有”与“软件开发”是无关的,那么我们就应该分别分析两者的利弊,那个方面对社会有害,我们就应该单独的抛弃它而不是把两者捆绑在一起。
  现在我们来分析一下软件私有的坏处。一共有四点;
  一, 它限制了软件的使用人数。假设一个软件已经开发出来,那么这个软件的所有投资都已经付出(无论有多少人使用它),从社会的角度来看,任何限制软件使用的行为都是对其投资的浪费
  二, 它破坏了社会和谐。假如你和你的邻居都想使用同一个软件,你购买了这个软件,你的邻居向你借,那你就会陷入两难的境地。如果借,那么你违反了版权法,如果不借,你就违背邻里互助的美德。
  三, 它不允许用户修改代码,这导致了用户无法根据自己的需求重写软件。如果一个现有的软件不能满足需求(很可能只要在原有的修改少量代码即可),用户要么自己重新写一个软件,要么就忍受现有软件的不完美。
  四, 它不利于软件的开发。“我看得远,是因为我站在巨人的肩膀上”,但是因为软件私有,我们无法获得原代码(因为这属于商业机密),所以我们每个人都无法借鉴现有的软件开发经验,至多我们只能站在周围人的肩膀上
  那么是不是消除了软件私有,我们就无法开发软件了呢?不是的,理由有两点
  一, 编程是一件有趣的事情。70年代还没有软件私有的观念,但人们同样开发了很多软件,他们是完全是出于自身的喜好去编程,并没有想到利用编程使自己变得富有。但是后来人心不古,世风日下,人们被吸引去开发软件仅仅是为了获得高的回报,所以才有了今天的局面;如果我们降低开发软件的回报(通过自由软件),事情就会慢慢回到从前,人们就又会出于自身的兴趣去开发软件。另外,相对于使程序员变得富有,仅仅养活一个程序员还是很容易做到的
  二, 自由软件也是有资金保障的。硬件开发商有时会开发相关的软件,在70年代这些软件通常是自由软件。大学也会开发软件,虽然今天他们会出售这些软件,但是在70年代,这些也是免费的。如果我们取消了软件私有制度,那么这些大学显然会被迫重新开发自由软件。而且虽然自由软件意味着软件本身是免费,但是我们可以对为软件提供服务来收取费用,比如说使用培训费,升级维护费等。另外虽然软件本身免费,但软件所依附的介质还是要收费的,靠出售这些介质也能获得一定收入。最后,自由软件组织通常会得到相当可观的捐助。所以就算是取消了软件私有制度,我们也有资金支持,不用担心没有软件用
  自由软件相对于软件私有制度还有如下的优越性
  一, 自由软件极大的提高了软件开发的生产力,因为他能使软件得到最大范围的利用,使用户能够定制自己的软件,使我们能够自由的复用别人的开发成果而避免重复劳动,使学生们能够更好的学习软件开发。
  二, 软件私有制度会将商业利益引入到软件开发中,这往往会带来恶性竞争。良性的竞争是“使优秀的事物生存下来”,而恶性竞争是“使自己存活下来,不管优秀与否。
  三, 自由软件制度不是苏联式的共产主义。苏联式的共产主义制度从本质上是中央集权,并且拒绝向公众公开信息,从这个角度来说,控制软件传播的软件私有制度才是真正的苏式共产主义
  前提与结论
  软件使用者的权益与程序开发者的权益具有同等的地位,在此基础上我们讨论何种制度可以使两者的利益最大化。以上是我立论的前提,对于那些认为软件开发者的利益至高无上的人,我只好说“道不同不相为谋”。
  软件私有化是人类私欲的一种体现形式,它是典型的为了一己私利损害公共利益的行为。我们不是活在原始森林里的野蛮人,我们生活在文明社会,人们应该互帮互助。同志们,至少在软件领域,让我们摒弃那种野蛮人的行径,建立一个充满协作精神的新社会吧!


第一部分 综述 第1章 BSD系统的历史和目标 1.1 UNIX系统的历史 1.1.1 UNIX系统的起源 1.1.2 Research小组的UNIX系统 1.1.3 AT&T UNIX System III和System V 1.1.4 伯克利软件发布(BSD) 1.1.5 UNIX无处不在 1.2 BSD和其他系统 1.3 BSD向开放源代码的转变 1.3.1 Networking Release 2 1.3.2 法律诉讼 1.3.3 4.4BSD 1.3.4 4.4BSD-Lite Release 2 1.4 FreeBSD的开发模式 1.5 参考文献 第2章 FreeBSD设计概述 2.1 FreeBSD的功能和内核 2.2 内核结构 2.3 内核服务 2.4 进程管理 2.4.1 信号 2.4.2 进程组和会话 2.5 内存管理 2.5.1 BSD内存管理设计要点 2.5.2 内核中的内存管理 2.6 I/O系统 2.6.1 描述符与I/O 2.6.2 描述符管理 2.6.3 设备 2.6.4 套接口IPC 2.6.5 分散/聚集I/O 2.6.6 多文件系统支持 2.7 设备 2.8 文件系统 2.9 网络文件系统 2.10 终端 2.11 进程间通信 2.12 网络通信 2.13 网络实现 2.14 系统运行 2.15 复习题 2.16 参考文献 第3章 内核服务 3.1 内核结构 3.1.1 系统进程 3.1.2 系统入口 3.1.3 运行时刻的内核结构 3.1.4 内核的入口 3.1.5 从内核返回 3.2 系统调用 3.2.1 调用结果的处理 3.2.2 从系统调用返回 3.3 陷阱和中断 3.3.1 陷阱 3.3.2 I/O设备中断 3.3.3 软件中断 3.4 时钟中断 3.4.1 统计和进程调度 3.4.2 超时 3.5 内存管理服务 3.6 时间服务 3.6.1 真实时间 3.6.2 外部表示 3.6.3 调整时间 3.6.4 时间间隔 3.7 用户、用户组和其他身份标识 3.7.1 主机标识符 3.7.2 进程组和会话 3.8 资源服务 3.8.1 进程优先级 3.8.2 资源利用 3.8.3 资源限制 3.8.4 文件系统配额 3.9 系统运行服务 3.10 复习题 3.11 参考文献 第二部分 进程 第4章 进程管理 4.1 进程管理概述 4.1.1 多程序机制 4.1.2 调度 4.2 进程状态 4.2.1 进程结构 4.2.2 线程结构 4.3 上下文切换 4.3.1 线程状态 4.3.2 底层上下文切换 4.3.3 主动上下文切换 4.3.4 同步 4.3.5 互斥同步 4.3.6 锁管理器的锁 4.3.7 其他同步 4.4 线程调度 4.4.1 4.4BSD的调度程序 4.4.2 线程调度 4.4.3 线程优先级的计算 4.4.4 线程优先级例程 4.4.5 线程运行队列和上下文切换 4.4.6 ULE调度程序 4.5 创建进程 4.6 终止进程 4.7 信号 4.7.1 信号的历史 4.7.2 发送信号 4.7.3 接收信号 4.8 进程组和会话 4.8.1 会话 4.8.2 作业控制 4.9 监管环境 4.9.1 监管环境的语义 4.9.2 监管环境的实现 4.9.3 监管环境的限制 4.10 进程的调试 4.11 复习题 4.12 参考文献 第5章 存储管理 5.1 术语 5.1.1 进程与内存 5.1.2 调页机制 5.1.3 替换算法 5.1.4 工作集模型 5.1.5 交换机制 5.1.6 虚拟内存的优点 5.1.7 虚拟内存的硬件要求 5.2 FreeBSD虚拟内存系统概述 5.3 内核的存储管理 5.3.1 内核映射和子映射 5.3.2 内核地址空间的分配 5.3.3 内核的存储分配程序 5.3.4 内核的区域存储分配程序 5.4 进程独立拥有的资源 5.4.1 FreeBSD的进程虚拟地址空间 5.4.2 缺页处理 5.4.3 映射到对象 5.4.4 对象 5.4.5 对象到页面 5.5 共享存储 5.5.1 mmap模型 5.5.2 共享映射 5.5.3 私有映射 5.5.4 压缩影子链 5.5.5 私有快照 5.6 创建新进程 5.6.1 保留内核资源 5.6.2 复制用户地址空间 5.6.3 不通过复制创建新进程 5.7 执行一个文件 5.8 进程地址空间的操作 5.8.1 改变进程大小 5.8.2 文件映射 5.8.3 改变保护权限 5.9 终止进程 5.10 调页器接口 5.10.1 vnode调页器 5.10.2 设备调页器 5.10.3 物理内存调页器 5.10.4 交换调页器 5.11 调页机制 5.11.1 硬件高速缓存的设计 5.11.2 页面填色 5.12 页面替换 5.12.1 调页参数 5.12.2 pageout守护进程 5.12.3 交换机制 5.12.4 换入进程 5.13 可移植性 5.13.1 pmap模块的作用 5.13.2 初始化和启动 5.13.3 分配和释放映射 5.13.4 改变映射的访问和固定属性 5.13.5 管理页表的使用信息 5.13.6 初始化物理页面 5.13.7 管理内部数据结构 5.14 复习题 5.15 参考文献 第三部分 I/O系统 第6章 I/O系统概述 6.1 从用户到设备的I/O映射 6.1.1 设备驱动程序 6.1.2 I/O队列 6.1.3 中断处理 6.2 字符设备 6.2.1 原始设备和物理I/O 6.2.2 面向字符的设备 6.2.3 字符设备驱动程序的入口点 6.3 磁盘设备 6.3.1 块设备驱动程序的入口点 6.3.2 磁盘I/O请求的排序 6.3.3 磁盘标签 6.4 描述符的管理和服务 6.4.1 打开文件项 6.4.2 管理描述符 6.4.3 异步I/O 6.4.4 文件描述符的上锁机制 6.4.5 描述符上的多路I/O操作 6.4.6 select调用的实现 6.4.7 数据在内核中的转移 6.5 虚拟文件系统的接口 6.5.1 vnode的内容 6.5.2 对vnode的操作 6.5.3 路径名转换 6.5.4 文件系统的导出服务 6.6 与文件系统无关的服务 6.6.1 名字缓存 6.6.2 缓冲区管理 6.6.3 缓冲区管理的实现 6.7 可叠加的文件系统 6.7.1 简单的文件系统层 6.7.2 联合安装的文件系统 6.7.3 其他文件系统 6.8 复习题 6.9 参考文献 第7章 设备 7.1 设备概述 7.1.1 PC的I/O体系结构 7.1.2 FreeBSD海量存储I/O子系统的结构 7.1.3 设备的命名和访问 7.2 GEOM层 7.2.1 术语和拓扑规则 7.2.2 改变拓扑 7.2.3 运行 7.2.4 拓扑的灵活性 7.3 CAM层 7.3.1 SCSI子系统 7.3.2 I/O请求通过CAM子系统的路径 7.4 ATA层 7.5 配置设备 7.5.1 识别设备 7.5.2 自动配置数据结构 7.5.3 资源管理 7.6 复习题 7.7 参考文献 第8章 本地文件系统 8.1 文件系统的分层管理 8.2 inode的结构 8.2.1 inode格式的变化 8.2.2 扩展属性 8.2.3 文件系统的新功能 8.2.4 文件标志 8.2.5 动态的inode 8.2.6 管理inode 8.3 命名 8.3.1 目录 8.3.2 在目录中查找名字 8.3.3 路径名转换 8.3.4 链接 8.4 配额 8.5 文件上锁 8.6 软更新 8.6.1 文件系统中的更新依赖 8.6.2 依赖关系的数据结构 8.6.3 跟踪位映射表的依赖关系 8.6.4 跟踪inode的依赖关系 8.6.5 跟踪直接块的依赖关系 8.6.6 跟踪间接块的依赖关系 8.6.7 跟踪新间接块的依赖关系 8.6.8 跟踪新目录项的依赖关系 8.6.9 跟踪新目录的依赖关系 8.6.10 跟踪删除目录项时的依赖关系 8.6.11 截短文件 8.6.12 回收文件和目录的inode节点 8.6.13 跟踪目录项重命名时的依赖关系 8.6.14 跟踪删除文件时的依赖关系 8.6.15 fsync对软更新的要求 8.6.16 删除文件时对软更新的要求 8.6.17 fsck对软更新的要求 8.6.18 软更新的性能 8.7 文件系统的快照 8.7.1 创建文件系统快照 8.7.2 维护文件系统快照 8.7.3 大型文件系统的快照 8.7.4 快照性能 8.7.5 后台fsck 8.7.6 用户可见的快照 8.7.7 动态的转储 8.8 本地文件库 8.8.1 文件库概述 8.8.2 用户的文件I/O 8.9 伯克利快速文件系统 8.9.1 伯克利快速文件系统的组成 8.9.2 引导块 8.9.3 优化存储空间利用率 8.9.4 读写文件 8.9.5 布局策略 8.9.6 分配机制 8.9.7 将块组成簇 8.9.8 基于扩展的分配 8.10 复习题 8.11 参考文献 第9章 网络文件系统 9.1 历史和概述 9.2 NFS的结构和操作 9.2.1 NFS协议 9.2.2 FreeBSD的NFS实现 9.2.3 客户机/服务器的交互操作 9.2.4 RPC的传输问题 9.2.5 安全问题 9.3 提高性能的技术 9.3.1 租约 9.3.2 崩溃恢复 9.4 复习题 9.5 参考文献 第10章 终端处理 10.1 终端处理模式 10.2 行规程 10.3 用户接口 10.4 tty结构 10.5 进程组、会话和终端控制 10.6 C-list 10.7 RS-232和调制解调器控制 10.8 终端操作 10.8.1 打开终端 10.8.2 输出到行规程 10.8.3 终端的输出 10.8.4 终端的输入 10.8.5 ioctl例程 10.8.6 调制解调器转换 10.8.7 关闭终端设备 10.9 其他行规程 10.10 复习题 10.11 参考文献 第四部分 进程间通信 第11章 进程间通信 11.1 进程间通信的模型 11.2 实现的结构和概述 11.3 内存管理 11.3.1 mbuf 11.3.2 存储管理算法 11.3.3 mbuf工具例程 11.4 数据结构 11.4.1 通信域 11.4.2 套接口 11.4.3 套接口地址 11.4.4 锁 11.5 建立连接 11.6 传送数据 11.6.1 发送数据 11.6.2 接收数据 11.7 关闭套接口 11.8 本地进程间通信 11.8.1 信号量 11.8.2 消息队列 11.8.3 共享内存 11.9 复习题 11.10 参考文献 第12章 网络通信 12.1 内部结构 12.1.1 数据流 12.1.2 通信协议 12.1.3 网络接口 12.2 套接口到协议的接口 12.2.1 协议的用户请求例程 12.2.2 协议的控制输出例程 12.3 协议到协议的接口 12.3.1 pr_output 12.3.2 pr_input 12.3.3 pr_ctlinput 12.4 协议和网络的接口 12.4.1 发送数据包 12.4.2 接收数据包 12.5 路由选择 12.5.1 内核路由选择表 12.5.2 路由选择查找 12.5.3 路由选择重定向 12.5.4 路由选择表接口 12.5.5 用户级的路由选择策略 12.5.6 用户级路由选择接口:路由选择套接口 12.6 缓冲和拥塞控制 12.6.1 协议缓冲策略 12.6.2 队列限制 12.7 原始套接口 12.7.1 控制块 12.7.2 输入处理 12.7.3 输出处理 12.8 网络子系统的其他主题 12.8.1 带外数据 12.8.2 地址解析协议 12.9 复习题 12.10 参考文献 第13章 网络协议 13.1 IPv4网络协议 13.1.1 IPv4地址 13.1.2 广播地址 13.1.3 组播 13.1.4 端口与关联 13.1.5 协议控制块 13.2 UDP协议 13.2.1 初始化 13.2.2 输出 13.2.3 输入 13.2.4 控制操作 13.3 Internet协议(IP) 13.3.1 输出 13.3.2 输入 13.3.3 转发 13.4 TCP协议 13.4.1 TCP连接状态 13.4.2 序号变量 13.5 TCP算法 13.5.1 定时器 13.5.2 往返时间的估计 13.5.3 建立连接 13.5.4 SYN缓存 13.5.5 关闭连接 13.6 TCP输入处理 13.7 TCP输出处理 13.7.1 发送数据 13.7.2 避免糊涂窗口综合症 13.7.3 避免小数据包 13.7.4 确认延迟和窗口更新 13.7.5 重发状态 13.7.6 慢启动 13.7.7 源拥塞的处理 13.7.8 缓冲与窗口大小分配 13.7.9 使用慢启动避免拥塞 13.7.10 快速重发 13.8 ICMP协议 13.9 IPv6 13.9.1 IPv6地址 13.9.2 IPv6数据包格式 13.9.3 套接口API的调整 13.9.4 自动配置 13.10 安全 13.10.1 IPSec概述 13.10.2 安全协议 13.10.3 密钥管理 13.10.4 IPSec实现 13.10.5 密码子系统 13.11 复习题 13.12 参考文献 第五部分 系统运行 第14章 启动和关机 14.1 概述 14.2 引导 14.3 初始化内核 14.4 初始化内核模块 14.4.1 基本服务 14.4.2 初始化内核线程 14.4.3 初始化设备模块 14.4.4 内核的可加载模块 14.4.5 启动进程间通信 14.4.6 启动内核线程 14.5 用户级初始化 14.5.1 /sbin/init 14.5.2 系统的启动脚本 14.5.3 /usr/libexec/getty 14.5.4 /usr/bin/login 14.6 系统运行 14.6.1 内核的配置 14.6.2 系统关机与自动重启 14.6.3 系统调试 14.6.4 同内核传递信息 14.7 复习题 14.8 参考文献 术语表
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值