(莱昂氏unix源代码分析导读-1) 引子
那一年不知怎样,此书忽在世间出现,天下学武之人自然个个都想得到,大家你抢我夺,一塌里胡涂。
一直以来,操作系统都是程序员心中的圣殿,每个程序员都想登堂入室,掌握其中的奥秘。但是,在上世纪六七十年代,对普通程序员来说,这只能是个梦想。因为在那时,操作系统不啻为一个蛮荒巨兽,它往往由数十万乃至数百万行的汇编语句组成,对普通程序员而言,根本无法对其进行分析和理解。
Unix的出现改变了这一切。肯·汤姆森和丹尼斯·里奇在1974年7月号上的《ACM通信》上的一篇论文“The UNIX Time Sharing System”正式将unix操作系统介绍给世人,立即引起了学术界的广泛兴趣。人们惊奇的发现,同传统的操作系统相比,unix有两个显著的特点:
(1) 代码量要少1~2个数量级,但却实现了在当时看来十分强大的功能;
(2) 其内核代码多由c语言写就,只有极少量的代码由汇编完成。
例如,作为莱昂模型的unix v6,其内核仅有9000多行代码,而汇编代码仅不到1000行。
更重要的是,unix采用源代码方式进行发行,只要购买了unix许可证就可以获得整个源代码。其后不久,一本神秘的小册子开始流行,并引发了大规模的违法复印活动。这本小册子就是《莱昂氏unix源代码分析》。毫不夸张的说,这本书的流行极大促进了unix的发展,并哺育了一代unix精英。因此,此书在unix界具有极高的声誉。
时过境迁,我们现在可以轻易的找到各种开源操作系统的源码和分析,此书的重要性已大大降低。但是,它仍具有巨大的价值,它以区区9000多行代码实现了一个操作系统的基本功能,其设计之巧妙、代码质量之高,令人叹为观止。从教育的角度看,它仍然是最好的学习操作系统的教材之一。
对我来说,阅读此书是个快乐的过程,同时也是个痛苦的过程。因此,我决定写下自己的一点心得,希望能够为大家的读码过程减轻一点痛苦吧。
(莱昂氏unix源代码分析导读-1) 引子相关推荐
- (莱昂氏unix源代码分析导读-46)权限、管道
by cszhao1980 1. 文件与权限控制 进程u结构中,身份相关的信息有: 0420: char u_uid; /* e ...
- (莱昂氏unix源代码分析导读-19)再谈进程swtch
我们已经涉及到了部分进程切换的概念,在本章中,我们会从更一般的意义上考察进程切换的行为. 首先,进程切换(也称作context switch)一定是在内核中完成的. 比如,以下为发生进程切换的最常见的 ...
- (莱昂氏unix源代码分析导读-47) exec
by cszhao1980 现在,我们已经储备了足够的知识,该吹响向EXEC sys call冲锋的号角了. exec是系统中最重要也是最复杂的系统调用之一,它的作用是执行指定的"可执行文件 ...
- 读《莱昂氏UNIX源代码分析》
在unix早期的代码中,schedule和swap两个核心任务都是由0号进程来负责的,这个朴实的设计就是unix系统最最原始的设计,因为unix在开始设计的时候十分清楚进程应该做什么不应该做什么,应该 ...
- Linux内核源代码分析——fork()原理多进程网络模型
今晚和一位500强的leader喝喝小酒吃吃烤鱼,生活乐无边.这位兄弟伙才毕业2年,已经做到管理层了,机遇和能力不可谓不好.喝酒之余,聊到Linux内核的两个问题--fork().exec()的原理. ...
- Android系统匿名共享内存Ashmem(Anonymous Shared Memory)驱动程序源代码分析
文章转载至CSDN社区罗升阳的安卓之旅,原文地址:http://blog.csdn.net/luoshengyang/article/details/6664554 在上一文章Android系统匿名共 ...
- Linux内核源代码分析-目录
第一部分 Linux 内核源代码 arch/i386/kernel/entry.S 2 arch/i386/kernel/init_task.c 8 arch/i386/kernel/irq.c 8 ...
- nux 平台的 libpcap 源代码分析
nux 平台的 libpcap 源代码分析 施聪 (javer@163.com), 高级程序员.网络设计师 简介: libpcap 是 unix/linux 平台下的网络数据包捕获函数包,大多数网络监 ...
- Linux内核源代码分析——可执行文件header处理(二进制文件读写范例,写DUL工具入门指引)...
在把Linux内核源代码生成Image之前,需要把执行文件头结构信息剔除出来.这个过程对理解Linux内核具有很大的帮助.同时,由于是对可执行文件进行直接读写操作,想写DUL工具的童鞋可以在这里学习到 ...
最新文章
- opencv线性滤波(滤波与模糊的区别)
- jackson stax2-api
- python以什么方式处理文件-Python文件修改和常用方法
- 随想录(分布式系统)
- debian php mysql 包_debian php mysql
- C# 静态类初始化 结构体初始化
- 项目开发-文档-软件需求规格说明书模板文档命名规则及格式要求(免费下载链接)
- mib节点 snmp trap_(转)浅谈 Linux 系统中的 SNMP Trap
- STM32 WAVWM8978简介
- Resnet解决了什么问题
- android cts测试(编译源码获取cts测试包),如何通过Android CTS测试—testPackageSignatures...
- BZOJ 4399 魔法少女LJJ(线段树合并)
- 大学计算机音乐一起学,和学生一起学音乐
- eclips开发工具的使用
- 获得32位UUID字符串和指定数目的UUID
- 使用AFNetworking
- abp项目怎样发布到服务器,ABP 网站发布
- 金字塔打印(C语言)
- 自然语言处理:用paddle对人民日报语料进行分词,停用词,数据清洗和熵计算
- vue自定义百度地图弹窗
热门文章
- 通过Mac远程调试iPhone/iPad上的网页(转)
- 怎么在图片上面加颜色
- 会计实务:用友U8各种采购暂估处理会计分录案例
- ubuntu下的Redis操作命令
- 什么是LCD拼接屏?
- [Java] 抽象类、final类和接口
- Templete(springMVC Facelets)
- FastReport使用数据源
- eplan部件列表手动修改_EPLAN如何修改设备标示符规则,当插入元件时不显示设备标示符前的“-”号,每次删除很麻烦!...
- 中国miRNA工具和服务市场现状研究分析与发展前景预测报告(2022)