发现逐句翻译实在是太花时间,况且我的本意也不是出版一本书。改写成摘要吧。顺便解释一些专有名字,以防日后遗忘。
1. 介绍
Linux最初是在1991年被Linus Torvalds开发出来的,当时运行在试用了Intel 80386处理器的IBM个人电脑上。那年代能买得起这电脑,看来家里是不差钱的。
Linux是完全兼容Unix的,也就是说很多Unix程序可以直接搬到Linux上执行。
一般来说不同的Linux发行版会吧Linux内核代码放在/usr/src/linux,此书之后的路径都在此目录内。存疑
1.1 Linux和其他“类Unix”内核比较
类Unix简而言之就是能跑Unix程序的
原书说了一堆屁话,总而言之,说了些Linux,或者说类Unix内核的“卖点”:
- 虚拟内存Virtual memory,简单来说,避免应用程序直接去写内存真实地址,还能征用磁盘空间冒充一下RAM
- 虚拟文件系统Virtual filesystem,VFS。当程序读写磁盘时,不用考虑文件系统是FAT还是NTFS还是exFAT等等。
- 轻量级进程Lightweight processes,我猜应该是fork吧!
- Unix信号signal,进程间通信,典型的例子有SIGSEGV、SIGBUS、SIGILL和SIGFPE
- 线程间通信SVR4 interprocess communications,IPC。例如管道pipe,消息队列message queue
- 支持SMP架构的cpu,应该常见个人cpu都是SMP的吧。(SMP Symmetric Multiprocessor对称多处理,即多核CPU中每个核地位一样,众生平等,与之相对的是多核CPU中有某个核是老大,他能干一些其他小弟不能干的事情)
之后举了些例子,和其他内核比较,太细致,目前来说没意义。我就简单附上他的特点吧,具体意思不解释了。
- Linux是微内核而不是宏内核。
- Linux可以动态地加载一些模块module,在写驱动的时候应用得很多,比如一个设备没有显卡,那它就可以不用加载显卡驱动模块了。
- Kernel threading不是很理解原文,先不写了
- Multithreaded application support,也不是很理解
- 抢占式内核preemptive kernel,貌似不是默认编译选项。
- Multiprocessor support即之前说过的SMP支持
- 文件系统,即之前说过的虚拟文件系统特性
- Streams,不知道原文说些什么
Linux还有些其他优点 - 免费
- 随意修改
- 对硬件性能要求不高
- 性能很屌
- 写linux的人都很屌
- 内核很小
- 兼容性好
- 支持好,意思是你有问题报告给他们开发小组,他们会迅速回应。这里的问题是指系统bug等问题,如果你不会用还是别问他们了。
原文说了一堆,总而言之就是linux好炸了。
1.2 硬件支持
写得没什么意义,总之支持很多cpu架构。
1.3 Linux版本
写了一堆内核版本号的规则,不是很有意思。
本书的内核是2.6.11
1.4 操作系统基本概念
- 内核既是操作系统。
- 内核有2个基本任务:
- 处理好硬件
- 给用户程序user program一个运行的环境
- Linux内核不允许用户程序直接执行一些敏感操作(例如开关机,从硬件获取一些信息,比如tcpip的帧是从以太网获得,进一步说是从phy芯片获得),而是提交请求给内核,内核评估之后再决定是否执行。因此对于cpu来说有两种模式,user模式和kernel模式。因为在任意一瞬间,一个cpu的核心只能正在跑一个程序,要么user app,要么由于收到了user的请求正在跑kernel。这种机制也已经有了硬件的支持。
1.4.1 多用户
说简单点,允许一个操作系统同时被多个用户登录,而用户之间不会互相影响。
1.4.2 用户和组
用户是通过UID,User ID来区分的,是一串数字。通过组来分配资源。比如某个文件可以被某一群用户,也就是组,访问,而不在这组里的用户就不能。
用户里面的大哥叫superuser,他可以为所欲为。
1.4.3 进程Process
进程就是一个程序的运行实例。相当于打一个游戏多开,那每一个游戏窗口就是这个游戏程序的一个运行实例,就是进程。原书这里还黑了一下win98,说它不是multiuser操作系统。
还说到Linux是分时操作系统,每个进程在一段时间内都有平等的运行时间。
1.4.4 内核架构
就如之前所说,大多数Unix内核都是宏内核:所有的内核层都是和内核本身交织在一起,而且都是在内核态运行。说人话,宏内核大包大揽了很多本来可以不必它来完成的事情,如驱动,文件系统等等。而微内核只含有一些非常必要的功能,剩余的都剥离出去到user space,有需求的时候再来请求内核就是了。
微内核缺点就是理论上速度会有些慢,因为乱七八糟的操作都要请求内核,而cpu切换user态和kernel态是需要时间的。宏内核把很多活儿都放在内核态,切换的次数自然会少一些,而且同为内核态的进程互相交流效率也会比较高。但是就编程而言,微内核由于倾向于把不同功能的内核层分离,代码相互之间不依赖,会便于理解和开发。而且微内核对于RAM的使用也会更有效率。(强行洗白)
为了让不同内核程序分离,Linux用了module这玩意儿,module可以在kernel运行的时候加载或卸载。
1.5 Unix文件系统概述
Unix操作系统设计其实是围绕它的操作系统进行的,接下来看看主要特点,之后会用到。
1.5.1 文件Files
Unix文件用字节流构成的一个信息容器。(请告诉我哪种文件系统不是这样?)内核不会参与到如何解释一个文件的内容。Many programming libraries implemen