这本书是一位面试官告诉我,。非常感谢他的忠告。面试的说明。我写后认为,足。一方面是面试的技巧。另一方面就是学习的方法。

阅读这本书非常享受,加上之前的积累,一些疑惑,另一些基础的不足,在这本书里找到了归宿。

以下。一起来享受这本书的精华吧

Unix诞生与1969年。那时候我们还在闹文革吧,可一个能够改变21世纪甚至更远的未来的操作系统问世,至少如今的Linux是基于Unix的设计哲学。

Unix是唯一一个在不同种类的计算机,众多厂商和各种硬件上提供一致的,文档齐全的API的操作系统。

Unix传统将重点尽量使各个程序接口相对小巧,简洁和正交。并有假定每一个程序的输出都可能成为还有一个程序的输入

Unix的哲学能够这样表述:一个程序仅仅做一件事情。并做好。程序要能协作,程序要能处理文本流,由于这是最通用的接口

Unix哲学从总体上能够概括为例如以下几点:

1模块原则,使用简单的接口拼合简单的部件(事实上文本流规范已经能够将程序的接口拼接起来了)

2清晰原则,代码要写的清晰可读,easy维护

3组合原则,设计时考虑拼接组合,在输入输出方面,Unix极力提倡採用简单、文本化、面向流、设备无关的格式

因此一般在Unix下多数程序都尽可能採用简单过滤器的形式,将一个输入的简单文本流处理为一个简单的文本流输出。

4分离原则,策略同机制分离。接口同引擎分离

5简洁原则,设计要简洁。复杂度能低则低

6健壮原则。源于透明和简洁

7通俗原则。接口设计避免标新立异(最少惊奇原则)

8缄默原则。即程序仅仅做该做的事。不做多余的事,默默工作

9补救原则,出现异常时。须要给出足够的错误信息

10生成原则,尽量用程序生成程序,由于这比手动生成更值得信赖

一言以蔽之, KISS(keep
it simple, stupid)

Unix的统一性理念

Unix有几个统一性理念或象征,并塑造了API及由此形成的开发风格。当中最重要的一点即“一切皆文件”模型以及在此基础上的管道概念(连接一个程序的输出和还有一个程序的输入通路)。

这里我谈谈对于机制和策略的理解,所谓机制,指的是一种设计思想,具有思想上的高度理论性质,可具有长远的现实意义,而策略是一种现实的解决方式,非常easy被时代淘汰。



多任务能力和协作进程

Unix系统拥有抢占式多任务能力,多进程并发能力。即是一个分时操作系统。在Unix中,低价的进程生成和简便的进程间通讯(IPC
Inter-Process Communication)使众多小工具、管道和过滤器组成一个均衡系统成为可能。



内部边界

Unix准绳是:程序猿最清楚一切,即当你进行危急操作时。Unix系统并不会阻止你,这意味着你要对自己的行为负责,简而言之即你必须清楚你的行为。

所以Unix拥有非常完好的权限管理体质。提倡多账户不同权限分配,这样能够有效保护系统不被无意或者恶意损坏。

Unix至少设置三层内部边界:一层是内存管理,二层是普通用户进程未经同意不能读取或者改动其它用户文件。三层即涉及安全性功能限制在尽可能小的可信代码块上

Unix文件没有文件属性和记录结构。由于其添加了文件格式的不透明性质,不适用于面向字节流工具和管道的模式。

程序设计



模块性:保持清晰和简洁,同一时候注重紧凑性和正交性

模块化不仅easy调试并定位问题,并且易于扩展。

Unix程序猿的传统是:更加笃信重视模块化、更注重正交性和紧凑性等问题。

依据经验,Hatton建议逻辑行与物理行之间为两倍的折算率。即最佳物理行数应该在400-800行之间。

紧凑性。即一个设计能否装入人脑中的特性,如有经验的用户通常不须要操作手冊,这个设计就是紧凑的。

正交性,即每一个操作仅仅改变一件事,不会影响到其他。

SPOT原则,不论什么一个知识点在系统内都应当有一个唯一的,明白的和权威的表述。反复会导致前后矛盾、产生隐蔽问题,如改动仅仅改动部分反复点等。

Unix文本文件格式的约定

以新行符结束每一行仅仅存一个记录。

每行不超过80个字符;

使用 # 引入凝视;

支持反斜杠约定。

每行一条记录格式中。使用冒号或者不论什么连续的空白作为字段分隔符;

不要过分差别tab和whitespace;

优先选用十六进制而不是八进制;

对于复杂的记录,使用“节”格式,一个记录若有多行。使用“%%\n”或者“%\n”作为记录分隔符。

Linux IPC 进程间通信机制 适用性分析与实现





linux 继承了 System  V IPC 和基于socket IPC (POSIX IPC ),主要有一下进程间通信的几种方式:

1. 管道(Pipe)和命名管道: 管道可用于具有亲缘关系进程间通信。命名管道克服管道没有名字的限制。同一时候同意非亲缘关系进程间通信



2. 信号(Signal) : 是一种比較复杂的通信方式,用于通知接受进程某与之相关联的事件发生



3. 消息队列: 是消息的链接表,包含Posix消息队列 system V 消息队列。

有足够权限的进程能够向队列中加入消息。被赋予读权限的进程则能够读走队列中的消息,消息队列克服了信号承载信息量少。管道仅仅能承载无格式字节流以及缓冲区大小受限等缺点



4. 共享内存: 使得多个进程能够訪问同一块内存空间,是最快的可用IPC 形式,往往与其它通信机制如信号量结合实现进程间同步



5. 信号量(semaphore): 作为进程间同一进程不同线程之间的同步手段



6. 套接字(Socket): 更为一般的进程间通信机制。可用于不同机器之间进程通信。

Linux 进程包括例如以下关键要素:

有一段可运行程序

专用系统堆栈空间

内核中有其进程控制块。描写叙述进程占用资源情况,接受内核调度

具有独立存储空间



版权声明:本文博客原创文章。博客,未经同意,不得转载。

Unix编程艺术札记版本的更多相关文章

  1. 转《UNIX编程艺术》读书心得

    花了一段时间看完了<UNIX编程艺术>,但不是看得特别仔细,尤其是后面作者通过对工具的讲解来阐述其设计思想,因为很多工具能未曾接触过,难免就会产生一些乏味的感觉.其实就像译者姜宏在译序里说 ...

  2. 读《UNIX编程艺术》一感

    我记得早在2006年的时候就开始频繁使用awk做文本处理方面的工作,07年的时候周围有人用perl,我还感到很不解,觉得写得很复杂,没有awk one liner 那么方便和神奇.一直在了解awk的具 ...

  3. 《Unix编程艺术》读书笔记(1)

    <Unix编程艺术>读书笔记(1) 这两天開始阅读该书,以下是自己的体会,以及原文的摘录,尽管有些东西还无法全然吃透. 写优雅的代码来提高软件系统的透明性:(P134) Elegance ...

  4. UNIX编程艺术

    本文主要是 <UNIX编程艺术>的摘录,摘录的主要是我觉得对从事软件开发有用的一些原则. 对于程序员和开发人员来说,如果完成某项任务所需要付出的努力对他们是个挑战却又恰好还在力所能及的范围 ...

  5. 《UNIX编程艺术》读书笔记

    最近这段时间比较忙,利用业余时间看完了这本书.虽然书中讲到的很多例子都是上古文物,我没有用过,不过原理都是相通的,对我的启发很大.比如无所不在的KISS原则,实践中慢慢体会到的SPOT原则,无不产生共 ...

  6. javascript DOM 编程艺术 札记2 平稳退化

    定义 指的是即便浏览器不支持javascript,页面的基础展示功能也不会受到影响的做法. 不能平稳退化的实例 javascript:这种伪协议,它可以通过链接调用javascript函数.比如< ...

  7. javascript DOM 编程艺术 札记1

    一个重要观点 DOM 是指 文档对象模型,它对应浏览器实际认知的东西.html 文本本身和 html 加载到浏览器中显示的东西并不是完全一致的,后者就是 DOM 节点树,它是浏览器实际认知的东西.一个 ...

  8. 读书笔记:JavaScript DOM 编程艺术(第二版)

    读完还是能学到很多的基础知识,这里记录下,方便回顾与及时查阅. 内容也有自己的一些补充. JavaScript DOM 编程艺术(第二版) 1.JavaScript简史 JavaScript由Nets ...

  9. JavaScript DOM编程艺术第一章:JavaScript简史

    本系列的博客是由本人在阅读<JavaScript DOM编程艺术>一书过程中做的总结.前面的偏理论部分都是书中原话,觉得有必要记录下来,方便自己翻阅,也希望能为读到本博客的人提供一些帮助, ...

随机推荐

  1. JMS的样例

    1.JMS是一个由AS提供的Message服务.它能接受消息产生者(Message Provider)所发出的消息,并把消息转发给消息消费者(Message  Consumer).2.JMS提供2种类 ...

  2. 使用国内源解决Qt在线更新慢的问题

    Qt在线安装更新工具默认使用官方的源,国内访问比较慢,可以在setting中增加国内的源来提高更新速度,如下面的源: http://mirrors.ustc.edu.cn/qtproject/onli ...

  3. VS Code开发调试.NET Core

    使用VS Code开发 调试.NET Core 应用程序   使用VS Code开发 调试.NET Core RC2应用程序,由于.NET Core 目前还处于预览版. 本文使用微软提供的示例进行开发 ...

  4. BZOJ 1324 Exca 神剑 最小割

    标题效果:鉴于加权值矩阵,带走一个地方的权利值之后,与其相邻的格儿童权利值变0.问多少可以取出到右值. 思维:Amber论文题目.不难建设,图着色.颜色从S连边,还有一种颜色向T连边.再把相邻的格子连 ...

  5. WPF案例 (三) 模拟QQ“快速换装"界面

    原文:WPF案例 (三) 模拟QQ"快速换装"界面 这个小程序使用Wpf模拟QQ快速换装页面的动画特效,通过使用组合快捷键Ctrl+Left或Ctrl+Right,可实现Image ...

  6. POJ 2756 Autumn is a Genius 大数加减法

    Description Jiajia and Wind have a very cute daughter called Autumn. She is so clever that she can d ...

  7. hdu3804(树链剖分)

    题目连接:http://acm.hdu.edu.cn/showproblem.php?pid=3804 题意:给定一棵n个结点的树及边权,回答m个询问(x,y)满足以下条件的边权: 1)该边在结点1~ ...

  8. Java參数传递方式

    原文:http://blog.sina.com.cn/s/blog_59ca2c2a0100qhjx.html,我作了些改动并添加了一个实例,添加对照 本文通过内存模型的方式来讨论一下Java中的參数 ...

  9. 命令行參数选项处理:getopt()及getopt_long()函数使用

         在执行某个程序的时候,我们通常使用命令行參数来进行配置其行为.命令行选项和參数控制 UNIX 程序,告知它们怎样动作. 当 gcc的程序启动代码调用我们的入口函数 main(int argc ...

  10. GEF的MVC体系结构

    摘要: 本文首先介绍了标准的 MVC 体系构架,同时也介绍了最常见的一类 MVC 模式的变种.之后,文章重点介绍了 MVC 结构在 gef 框架中的体现与应用,以及 gef 是如何综合利用工厂模式.命 ...