Linux操作系统学习——启动


 概要

  Linux操作系统内核是服务端学习的根基,也是提高编程能力、源码阅读能力和进阶知识学习能力的重要部分,本文开始将记录Linux操作系统中的各个部分源码学习历程。

1. 理解代码的组织结构

Linux源码举例,首先你得知道操作系统分为哪几个部分,他们单独做了什么功能,如何进行配合完成更为具体的功能。建立整体的印象有助于后续深入学习的时候方便理解,毕竟代码是用的不是看的,理解他的作用有利于理解为什么要这么做。

2. 深入各个模块学习

模块接口:这里推荐微软的画图工具visio或者思维导图xmind,用其画图可以将各个模块的接口列出,并绘制各个模块之间的关系,通过了解接口可以清楚各个模块之间的关系,即绘制模块组织图

工作流程:通过上面一步得到各模块间的关系,然后实际用断点或log等方式看一看整体的工作流程,在模块组织图的基础上绘制程序流程图

模块粘合层:我们的代码有很多都是用来粘合代码的,比如中间件(middleware)、Promises 模式、回调(Callback)、代理委托、依赖注入等。这些代码模块间的粘合技术是非常重要的,因为它们会把本来平铺直述的代码给分裂开来,让你不容易看明白它们的关系。这些可以作为程序流程图的补充,让其中本来无法顺畅衔接的地方变得通畅无阻。

模块具体实现 :这是最难得地方,涉及到大量具体源码的学习。深入细节容易迷失在细节的海洋里,因此需要有一些重点去关注,将非重点的内容省略。通过学习绘制模块具体架构图和模块的算法时序图,可以帮助你更好的掌握源码的精髓。

3. 需要关注的包括

代码逻辑。代码有两种逻辑,一种是业务逻辑,这种逻辑是真正的业务处理逻辑;另一种是控制逻辑,这种逻辑只是用控制程序流转的,不是业务逻辑。比如:flag 之类的控制变量,多线程处理的代码,异步控制的代码,远程通讯的代码,对象序列化反序列化的代码等。这两种逻辑你要分开,很多代码之所以混乱就是把这两种逻辑混在一起了。

重要的算法。一般来说,我们的代码里会有很多重要的算法,我说的并不一定是什么排序或是搜索算法,可能会是一些其它的核心算法,比如一些索引表的算法,全局唯一 ID 的算法、信息推荐的算法、统计算法、通读算法(如 Gossip)等。这些比较核心的算法可能会非常难读,但它们往往是最有技术含量的部分。

底层交互。有一些代码是和底层系统的交互,一般来说是和操作系统或是 JVM 的交互。因此,读这些代码通常需要一定的底层技术知识,不然,很难读懂。

4. 可以忽略的包括

出错处理。根据二八原则,20% 的代码是正常的逻辑,80% 的代码是在处理各种错误,所以,你在读代码的时候,完全可以把处理错误的代码全部删除掉,这样就会留下比较干净和简单的正常逻辑的代码。排除干扰因素,可以更高效地读代码。

数据处理。只要你认真观察,就会发现,我们好多代码就是在那里倒腾数据。比如 DAODTO,比如 JSONXML,这些代码冗长无聊,不是主要逻辑,可以不理。

忽略过多的实现细节。在第一遍阅读源码时,已弄懂整体流程为主,至于具体的实现细节先简单的理清处过一遍,不用过于纠结。当梳理清楚全部的框架逻辑后,第二遍再深入的学习研究各个模块的实现,此时应该解决第一遍中的疑惑。第三遍可以跳出代码的实现,来看Linux的设计思路、编程艺术和演进之路。

重在实践Linux的代码都是可以调试的,看很多遍也许不如跟着调试走一遍,然后再自己修改修改做一些小测试。

传授知识。当你能将知识讲述给别人听,并让别人听懂时,你已经可以自豪的说洞悉了这些知识。所以不妨从一个小的例子开始自说自话,看能不能自圆其说,甚至写成博客、做成PPT给大家讲解。

  说了一大堆的废话,下面就正式开始操作系统的深入学习记录之旅了。

5. 混沌初开

  本文分析从按下电源键到加载BIOS以及后续bootloader的整个过程。犹如盘古开天辟地一般,该过程将混沌的操作系统世界分为清晰的内核态和用户态,并经历从实模式到保护模式的变化。这里先简单介绍一下名词,便于后续理解。

实模式Real Mode):又名 Real Address Mode,在此模式下地址访问的是真实地内存地址所在位置。在此模式下,可以使用20位(1MB)的地址空间,软件可以不受限制的操作所有地址的空间和IO设备。

保护模式Protected Mode):又名 Protected Virtual Address Mode,采用虚拟内存、页等机制对内存进行了保护,比起实模式更为安全可靠,同时也增加了灵活性和扩展性。

 5.1 从启动电源到BIOS 

当我们按下电源键,主板会发向电源组发出信号,接收到信号后,电源会提供合适的电压给计算机。当主板收到电源正常启动的信号后,主板会启动CPUCPU重置所有寄存器数据,并设置初始化数据,这个初始化数据在X86架构里如下所示:

1IP          0xfff0

2CS selector 0xf000

3CS base     0xffff0000

4IP/EIP (Instruction Pointer) : 指令指针寄存器,记录将要执行的指令在代码段内的偏移地址

5CS(Code Segment Register):代码段寄存器,指向CPU当前执行代码在内存中的区域(定义了存放代码的存储器的起始地址)

实模式采取内存段来管理 0 - 0xFFFFF的这1M内存空间,但是由于只有16位寄存器,所以最大地址只能表示为0xFFFFF64KB),因此不得不采取将内存按段划分为64KB的方式来充分利用1M空间。也就是上所示的,采取段选择子 + 偏移量的表示法。这种方法在保护模式中对于页的设计上也沿用了下来,可谓祖传的智慧了。具体的计算公式如下所示:

1PhysicalAddress = Segment Selector * 16 + Offset

  该部分由硬件完成,通过计算访问0XFFFF0,如果该位置没有可执行代码则计算机无法启动。如果有,则执行该部分代码,这里也就是我们故事的开始,BIOS程序了。

 5.2 BIOS到BootLoader 

  BIOS执行程序存储在ROM中,起始位置为0XFFFF0,当CS:IP指向该位置时,BIOS开始执行。BIOS主要包括以下内存映射:

 10x00000000 - 0x000003FF - Real Mode Interrupt Vector Table

 20x00000400 - 0x000004FF - BIOS Data Area

 30x00000500 - 0x00007BFF - Unused

 40x00007C00 - 0x00007DFF - Our Bootloader

 50x00007E00 - 0x0009FFFF - Unused

 60x000A0000 - 0x000BFFFF - Video RAM (VRAM) Memory

 70x000B0000 - 0x000B7777 - Monochrome Video Memory

 80x000B8000 - 0x000BFFFF - Color Video Memory

 90x000C0000 - 0x000C7FFF - Video ROM BIOS

100x000C8000 - 0x000EFFFF - BIOS Shadow Area

110x000F0000 - 0x000FFFFF - System BIOS

12

其中最重要的莫过于中断向量表和中断服务程序。BIOS程序在内存最开始的位置(0x00000)用1 KB的内存空间(0x000000x003FF)构建中断向量表,在紧挨着它的位置用256字节的内存空间构建BIOS数据区(0x004000x004FF),并在大约57 KB以后的位置(0x0E05B)加载了8 KB左右的与中断向量表相应的若干中断服务程序。中断向量表中有256个中断向量,每个中断向量占4字节,其中两个字节是CS的值,两个字节是IP的值。每个中断向量都指向一个具体的中断服务程序。

 BIOS程序会选择一个启动设备,并将控制权转交给启动扇区中的代码。主要工作即使用中断向量和中断服务程序完成BootLoader的加载,最终将boot.img加载至0X7C00的位置启动。Linux内核通过Boot Protocol定义如何实现该引导程序,有如GRUB 2syslinux等具体实现方式,这里仅介绍GRUB2

5.3 BootLoader的工作

  boot.imgboot.S编译而成,512字节,安装在启动盘的第一个扇区,即MBR。由于空间有限,其代码十分简单,仅仅是起到一个引导的作用,指向后续的核心镜像文件,即core.imgcore.img包括很多重要的部分,如lzma_decompress.imgdiskboot.imgkernel.img等,结构如下图。

 整个流程如下:

1boot.img加载core.img的第一个扇区,即diskboot.img,对应代码为diskboot.S

2、diskboot.img加载core.img的其他部分模块,先是解压缩程序 lzma_decompress.img,再往下是 kernel.img,最后是各个模块 module 对应的映像。这里需要注意,它不是 Linux 的内核,而是 grub 的内核。注意,lzma_decompress.img 对应的代码是 startup_raw.S,本来 kernel.img 是压缩过的,现在执行的时候,需要解压缩。

3、加载完core之后,启动grub_main函数。

4、grub_main函数初始化控制台,计算模块基地址,设置 root 设备,读取 grub 配置文件,加载模块。最后,将 GRUB 置于 normal 模式,在这个模式中,grub_normal_execute (from grub-core/normal/main.c) 将被调用以完成最后的准备工作,然后显示一个菜单列出所用可用的操作系统。当某个操作系统被选择之后,grub_menu_execute_entry 开始执行,它将调用 GRUB boot 命令,来引导被选中的操作系统。

       在这之前,我们所有遇到过的程序都非常非常小,完全可以在实模式下运行,但是随着我们加载的东西越来越大,实模式这 1M 的地址空间实在放不下了,所以在真正的解压缩之前,lzma_decompress.img 做了一个重要的决定,就是调用 real_to_prot,切换到保护模式,这样就能在更大的寻址空间里面,加载更多的东西。

  开机时的16位实模式与内核启动的main函数执行需要的32位保护模式之间有很大的差距,这个差距谁来填补?head.S做的就是这项工作。就像 kernel boot protocol 所描述的,引导程序必须填充 kernel setup header (位于 kernel setup code 偏移 0x01f1 处) 的必要字段,这些均在head.S中定义。在这期间,head程序打开A20,打开pepg,废弃旧的、16位的中断响应机制,建立新的32位的IDT……这些工作都做完了,计算机已经处在32位的保护模式状态了,调用32位内核的一切条件已经准备完毕,这时顺理成章地调用main函数。后面的操作就可以用32位编译的main函数完成,从而正式启动内核,进入波澜壮阔的Linux内核操作系统之中。

 6. 总结 

  本文介绍了从按下电源开关至加载完毕BootLoader的整个过程,后续将继续分析从实模式进入保护模式,从而启动内核创建0号、1号、2号进程的整个过程。

欢迎转发点赞评论,感谢!

  • 9
    点赞
  • 62
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 2
    评论
Linux是一个多任务、多用户的操作系统,它以其良好的特性和资源的免费性而得到了蓬勃的发展。  本书通过大量的图示和实例,深入浅出的介绍了Linux的基本原理和应用。主要包括Linux的基本概念和操作,Linux的树型结构,Linux的文本编辑,Linux的安装和启动,用户管理,Shell编程技术,进程管理,C编译器,系统扩充,维护与监视,Linux的图形界面,网络的基本概念与设置,Linux在网络资源共享和电子邮件方面的应用,以及DNS、FTP、Web和Proxy服务器等内容。  本书可作为Linux操作系统课程的教材,也可作为电脑爱好者,相关技术人员及参加Linux认证考试人士的参考书。 一、关于Linux Linux是一个正在蓬勃发展的极富生命力的操作系统。芬兰青年Linus Torvalds和其杰作的传奇故事吸引了无数的电脑爱好者尝试去使用Linux,但他们中的大多数人却被Unix类操作系统传统的枯燥的字符界面、艰涩难懂的操作命令和数量庞大的基本概念以及基础知识所吓退。Linux在这几年中迅速地发展,Turbo Linux宣布该公司已经开始盈利了,这说明了Linux正在逐渐大众化。在未来的几年中,Linux在各行各业中的应用将遍地开花,能熟练操作Linux将是每一个系统管理员所需掌握的基本技能。 曾经有一种说法:能熟练操作Linux的人,必定是电脑业界的顶尖高手。本书正是为改变这一种看法而面世的,它主要面向那些对电脑系统有初步认识的初学者,即使读者从未接受过电脑方面的系统训练,甚至连微软的Windows都没有学过,也能从本书中获益。 二、本书特点 1)在介绍过程中,着重于概念的层次性和内容的衔接,使读者更容易进行学习。 2)为了能把深奥、复杂的概念和操作表达明白,本书使用了大量的插图和实际操作例子,使之通俗易懂。例如:在网络应用部分中的很多例子,都在中山大学服务器上运行,每天都在承受巨大的访问量。 3)配置了大量习题。 三、本书结构安排 本书共分19章,遵循由简到繁、由易到难的讲解方式来组织、安排内容。 第1章:Linux基础。本章首先对Unix进行了概述,然后介绍了Linux的技术特点、Linux的版本,以及Linux对中文的支持。 第2章:基本操作。本章主要介绍了Linux的一些基本操作。如:注册、注销、远程登录、更改时间、关闭系统等。 第3章:树型结构。本章主要介绍了Linux的文件结构、目录结构,同时还介绍了链接,并用大量的实例形象生动地说明了Linux下各种文件的操作。 第4章:文本编辑。本章主要介绍了Linux下的文本编辑器,这是使用Linux的一些基本技能。学好本章,有利于以后的学习。 第5章:Linux的安装和启动。本章主要介绍了Linux的安装和启动,其中涉及到一些原理以及其他Unix类操作系统上的原理。 第6章:用户管理。本章主要介绍了Linux下增加用户、删除用户、设置用户组的各种操作,这些操作是进入Linux系统的第一步。 第7章:Shell和Shell编程。本章主要介绍了Shell的基本概念、Shell脚本以及awk的相关知识。 第8章:进程管理。本章主要介绍了在Linux中的进程管理。其中包括了进程、进程数、进程的优先级、定时执行等。 第9章:C编译器—— gcc。本章主要介绍了Linux下面的编译器—— gcc的基本用法以及Make与Makefile的一些基本知识。 第10章:系统扩充。本章主要介绍了在Linux中系统的扩充,包括软件的安装和内核的升级等内容。 第11章:系统维护与监视。本章主要介绍了Linux中的文件系统维护与监视。其中包括交换空间、/proc的信息以及各种日志文件和进程记账等。 第12章:图形界面。本章主要介绍了X Window以及它的配置,并且介绍了在KDE环境下汉化的基本思想,用实例来讲解了Linux汉化的基础知识。 第13章:网络的基本概念与设置。本章主要介绍了网络的基本概念,并在讲解这个概念的同时,讲解Linux中的网络配置。在此同时讲解了Linux的基本的网络命令,这对于理解Linux的网络上面的基本运用有着很大的作用。 第14章:网络资源共享。本章主要介绍了NFS文件系统、NFS文件系统的架设、Samba的资源共享、打印机网络共享等内容。 第15章:电子邮件。本章主要介绍电子邮件系统、Linux下的电子邮件系统,以及建立Linux下的邮件服务器。 第16章:DNS服务器。本章主要介绍DNS工作的原理、Linux下的域名服务器系统以及BIND的安装与配置等内容。详细叙述了主DNS服务器和辅助DNS服务器的配置以及DNS的安全。 第17章:FTP服务器。本章主要介绍了wu-ftp服务器的安装、配置和使用,Proftpd服务器的安装、配置和使用。 第18章:Web服务器。本章主要介绍了Apache的安装和配置。从Apache的最基本配置到它的高级运用,在本章中都有详细的叙述。 第19章:Proxy服务器。本章主要介绍在Linux上比较常用的两个proxy服务器软件的配置。 本书最后还附有参考答案,以供读者对照课后习题进行练习。 四、本书适用对象 本书适合用于大专院校、电脑培训班等作为Linux或UNIX操作系统课程的教材,也可作为电脑爱好者、相关技术人员或准备参加Linux认证的读者的参考书。 本书写作过程中受到广东省自然科学基金和中山大学青年启动基金的帮助,在此特表感谢! Linux发展至今,经历了无数人的努力,是千万人智慧的结晶。最新的Linux发布版,完全安装需要占用1G以上的空间,要完全掌握这样一个庞大的系统,并不是一件容易的事情,这对于作者本身也毫不例外。读者在学习本书的过程中如遇到疑难问题或觉得不妥之处,可到相关网站的论坛进行探讨,网址:http://www.cnbook.net。 尽管作者写这本书时具有良好初衷而且竭尽全力,但由于水平有限和时间仓促,疏漏之处在所难免,敬请读者批评指正和原谅。 编 者 2002年12月 第1章 Linux基础 1 1.1 Unix概述 1 1.1.1 Unix的历史 1 1.1.2 Unix的特点 3 1.1.3 Unix的现状和未来 5 1.2 Linux基础知识 5 1.2.1 Linux的历史 6 1.2.2 Linux的技术特点 6 1.2.3 Linux的版本 7 1.2.4 Linux对中文的支持 8 小结 8 习题一 8 一、思考题 8 二、选择题 9 三、上机操作 9 第2章 基本操作 10 2.1 进入Linux系统 10 2.1.1 开机与系统选择 10 2.1.2 注册 10 2.1.3 控制和终端操作 11 2.1.4 进入图形界面 11 2.1.5 用Telnet方式远程连入 12 2.2 一些基本命令 13 2.2.1 修改密码 13 2.2.2 查询、修改日期与时间 14 2.2.3 观看月历 15 2.2.4 清屏 16 2.2.5 获取注册信息 16 2.2.6 与其他用户作简单通讯 17 2.2.7 观看主机配置情况 18 2.2.8 寻找命令使用方法 18 2.3 退出Linux 19 2.3.1 注销 19 2.3.2 关闭系统 19 小结 20 习题二 21 一、思考题 21 二、选择题 21 三、上机操作 21 第3章 树型结构 23 3.1 文件 23 3.1.1 Linux的文件 23 3.1.2 文件操作相关命令 24 3.2 目录和路径 27 3.2.1 树型结构基础知识 27 3.2.2 路径 30 3.2.3 与树型结构相关的操作 32 3.2.4 通配符与多文件操作 37 3.3 链接 41 3.3.1 硬链接 41 3.3.2 符号链接 42 3.4 文件的属性 43 3.4.1 显示文件的属性 43 3.4.2 权限字与权限操作 46 3.5 设备文件 48 3.6 磁盘的操作 51 3.7 备份 60 小结 62 习题三 62 一、思考题 62 二、选择题 63 三、上机操作 64 第4章 文本编辑 65 4.1 行编辑器ed 65 4.1.1 启动ed 65 4.1.2 输入和修改 65 4.1.3 查找与替换 67 4.1.4 保存与退出 67 4.2 全屏幕编辑器vi 67 4.2.1 进入vi及vi状态 67 4.2.2 光标移动 68 4.2.3 删除与恢复 69 4.2.4 替换 69 4.2.5 保存与退出 70 4.2.6 进入插入状态 70 4.2.7 寻找指定字符或字符串 72 4.2.8 块操作 75 4.3 功能强大的Emacs 76 4.3.1 Emacs是什么 76 4.3.2 Emacs的操作 77 4.4 文本的基本操作命令 87 4.4.1 more与less 87 4.4.2 pr 88 4.4.3 tail与head 89 4.4.4 spell 90 4.4.5 diff与cmp 90 4.4.6 wc 91 4.4.7 find与grep 92 小结 94 习题四 94 一、思考题 94 二、选择题 95 三、上机操作 95 第5章 Linux的安装和启动 96 5.1 安装的基本知识 96 5.1.1 硬件要求 96 5.1.2 硬盘分区 96 5.1.3 Linux的起动与多系统并存 96 5.1.4 安装前的准备 97 5.2 安装的过程 97 5.3 Loadlin方式的引导 105 5.4 安装后Linux系统的构成 107 5.5 引导过程 109 5.5.1 lilo 109 5.5.2 内核 111 5.5.3 init与inittab 112 5.5.4 Shell 114 小结 114 习题五 115 一、思考题 115 二、选择题 115 三、上机操作 115 第6章 用户管理 116 6.1 用户账号的设置 116 6.1.1 增加用户 116 6.1.2 /et/passwd文件与/etc/shadow文件 117 6.1.3 删除用户 119 6.1.4 观看和修改用户资料 120 6.2 用户组的设置 122 6.2.1 /etc/group文件 122 6.2.2 用户组的操作 123 小结 124 习题六 124 一、思考题 124 二、选择题 124 三、上机操作 125 第7章 Shell和Shell编程 126 7.1 什么是Shell 126 7.1.1 Shell的类型 126 7.1.2 为用户指定Shell 127 7.1.3 Shell的环境 128 7.2 Shell脚本 130 7.2.1 Shell脚本的编写 130 7.2.2 控制流 132 7.2.3 here文本 135 7.2.4 几个特别的Shell脚本 135 7.3 awk 141 7.3.1 调用awk 141 7.3.2 awk脚本 142 7.3.3 模式和动作 142 7.3.4 域和记录 142 7.3.5 awk内置变量 143 7.3.6 awk的字符函数 144 7.3.7 数组 144 7.3.8 控制流和循环 145 小结 145 习题七 145 一、思考题 145 二、选择题 149 三、上机操作 149 第8章 进程管理 150 8.1 进程管理的应用 150 8.2 定时执行 155 小结 156 习题八 157 一、思考题 157 二、选择题 157 三、上机操作 157 第9章 C编译器—— gcc 158 9.1 什么是gcc 158 9.1.1 gcc简介 158 9.1.2 gcc的用法 158 9.2 make与Makefile 159 小结 160 习题九 161 一、思考题 161 二、选择题 161 三、上机操作 161 第10章 系统扩充 166 10.1 软件安装 166 10.1.1 传统安装 166 10.1.2 rpm 168 10.2 内核升级 171 10.2.1 获得内核源码 171 10.2.2 配置内核 171 10.2.3 编辑与安装新内核 182 小结 185 习题十 185 一、思考题 185 二、选择题 185 三、上机操作 186 第11章 系统维护与监视 187 11.1 文件系统维护 187 11.2 交换空间 187 11.3 系统监视 189 小结 194 习题十一 195 一、思考题 195 二、选择题 195 三、上机操作 195 第12章 图形界面 196 12.1 X Window 196 12.1.1 什么是X 196 12.1.2 X的结构 196 12.2 Linux下的X——XFrea86 197 12.2.1 配置 197 12.2.2 Xfea86图形界面的功能与操作 199 12.2.3 中文化问题 202 小结 206 习题十二 206 一、思考题 206 二、选择题 206 三、上机操作 206 第13章 网络的基本概念与设置 207 13.1 什么是网络 207 13.1.1 网络的定义 207 13.1.2 网络的分类与结构 207 13.1.3 网络的硬件与软件 208 13.1.4 网络的应用 209 13.2 Internet与TCP/IP协议 210 13.2.1 Internet的历史与现状 210 13.2.2 TCP/IP基础知识 212 13.3 Linux的基本网络配置 213 13.3.1 安装与驱动网卡 213 13.3.2 设定IP地址及TCP/IP 基本参数 213 13.3.3 检测连通性 215 13.3.4 使用MODEM拨号上网 216 13.4 TCP/IP实用程序 218 13.4.1 ping 218 13.4.2 Telnet 219 13.4.3 FTP 220 13.4.4 traceroute 223 13.4.5 ifconfig 224 小结 225 习题十三 225 一、思考题 225 二、选择题 225 三、上机操作 225 第14章 网络资源共享 226 14.1 Linux/Unix系统之间 文件共享——NFS 226 14.1.1 NFS的概念 226 14.1.2 NFS的安装和启动 226 14.1.3 架设NFS文件系统 227 14.2 Linux/Windows系统之间文件 共享——Samba 229 14.2.1 什么是Samba 229 14.2.2 安装与启动Samba 229 14.2.3 Samba的配置 230 14.2.4 在Linux上访问Windows 的共享资源 233 14.3 打印机网络共享 233 14.3.1 建立打印服务器 233 14.3.2 使用远程打印机 234 小结 234 习题十四 235 一、思考题 235 二、选择题 235 三、上机操作 235 第15章 电子邮件 236 15.1 电子邮件系统 236 15.1.1 电子邮件的历史 236 15.1.2 电子邮件的体系结构和服务 236 15.2 Linux下的电子邮件系统 237 15.2.1 Linux下的邮件服务器 237 15.2.2 Linux下的邮件用户代理 242 15.3 mail命令 242 15.4 建立Linux下的邮件服务器 247 15.4.1 sendmail的复杂性 247 15.4.2 sendmail的组成结构和原理 247 15.4.3 编译和配置sendmail 251 15.4.4 技巧和提示 253 小结 256 习题十五 256 一、思考题 256 二、选择题 256 三、上机操作 257 第16章 DNS服务器 258 16.1 DNS的工作原理 258 16.1.1 域名 258 16.1.2 因特网的域名系统 258 16.1.3 DNS的消息格式 260 16.1.4 对象内容与资源记录内容 261 16.2 Linux下的域名服务器系统 261 16.3 BIND的安装与配置 262 16.3.1 BIND的编译与安装 262 16.3.2 Linux下与域名系统相关的 几个配置文件 263 16.3.3 Caching Only域名服务器 的配置 264 16.3.4 主域名服务器的配置 269 16.3.5 从域名服务器的配置 272 16.4 设置chroot的DNS 273 小结 275 习题十六 276 一、思考题 276 二、选择题 276 三、上机操作 276 第17章 FTP服务器 277 17.1 wu-ftp 277 17.1.1 wu-ftp的安装 277 17.1.2 wu-ftp的配置 278 17.1.3 wu-ftpd的启动和测试 285 17.1.4 实用命令 286 17.2 Proftpd 286 17.2.1 Proftpd的安装 286 17.2.2 Proftpd的配置 286 17.2.3 一个实例 289 17.2.4 proftpd的启动和测试 292 小结 292 习题十七 292 一、思考题 292 二、选择题 292 三、上机操作 292 第18章 Web服务器 293 18.1 Apache的安装 293 18.1.1 编辑设置 293 18.1.2 编译和安装 294 18.2 Apache的配置 294 18.2.1 全局设置 295 18.2.2 主服务器设置 297 18.3 虚拟Web服务器 308 18.3.1 虚拟主机的类型与运行方式 308 18.3.2 基于IP的虚拟主机 308 18.3.3 基于域名的虚拟主机 310 小结 312 习题十八 312 一、思考题 312 二、选择题 312 三、上机操作 312 第19章 Proxy服务器 313 19.1 Proxy的概念 313 19.1.1 什么是Proxy 313 19.1.2 Proxy的应用 313 19.2 利用Apache建立Proxy 313 19.2.1 配置前的准备工作 314 19.2.2 建立Proxy服务器 314 19.2.3 建立Cache服务器 315 19.2.4 常用的mod_proxy模块的指令 315 19.3 Squid 316 19.3.1 安装Squid 316 19.3.2 配置Squid 317 19.3.3 更多的配置参数 319 19.3.4 启动和关闭Squid 327 19.3.5 日志文件 327 小结 328 习题十九 328 一、思考题 328 二、选择题 328 三、上机操作 329 参考答案 330
Linux0.11内核源码解读第一季——汇编启动部分》是一本深入解析Linux0.11内核源代码的书籍。汇编启动部分是整个内核启动过程中的重要环节,能够帮助读者深入理解操作系统启动和初始化流程。 首先,汇编启动部分是内核启动的第一步。它通过软件中断机制在实模式下启动。通过设置系统段描述符和全局描述符表,为操作系统提供必要的运行环境。在启动过程中,汇编启动部分会初始化中断向量表、设置栈段(SS)和栈指针(SP),并跳转到引导扇区加载内核文件。 接着,书籍详细分析了引导扇区的装载过程。引导扇区会被BIOS加载到内存地址0x7C00处,然后执行引导扇区的代码。在引导扇区中,汇编启动部分会进行一些必要的初始化工作,如设置栈段和栈指针,加载中断描述符表以及读取磁盘上的内核文件。 此外,书籍还介绍了一些启动相关的概念和知识,如分段机制、实模式和保护模式之间的切换等。读者通过学习这些知识,可以更加清楚地了解硬件和操作系统之间的交互过程。 总之,汇编启动部分是Linux0.11内核启动的关键环节,对于理解操作系统启动过程非常重要。《Linux0.11内核源码解读第一季——汇编启动部分》通过深入剖析源代码,让读者能够全面了解Linux内核的启动过程,并通过这些知识来探索更深入的操作系统原理。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Rocky006

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值