zoukankan      html  css  js  c++  java
  • Unix编程艺术札记版本

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

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

     

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

     

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

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

     

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

     

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

     

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

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

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

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

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

     

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

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

     

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

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

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

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

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

     

    一言以蔽之, KISSkeep 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个字符;

    使用引入凝视;

    支持反斜杠约定。

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

    不要过分差别tabwhitespace

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

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




    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 进程包括例如以下关键要素:
    有一段可运行程序
    专用系统堆栈空间
    内核中有其进程控制块。描写叙述进程占用资源情况,接受内核调度
    具有独立存储空间

    

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

  • 相关阅读:
    angularjs的$on、$emit、$broadcast
    angularjs中的路由介绍详解 ui-route(转)
    ionic入门教程-ionic路由详解(state、route、resolve)(转)
    Cocos Creator 加载使用protobuf第三方库,因为加载顺序报错
    Cocos Creator 计时器错误 cc.Scheduler: Illegal target which doesn't have uuid or instanceId.
    Cocos Creator 构造函数传参警告 Can not instantiate CCClass 'Test' with arguments.
    Cocos Creator 对象池NodePool
    Cocos Creator 坐标系 (convertToWorldSpaceAR、convertToNodeSpaceAR)
    Cocos Creator 常驻节点addPersistRootNode
    Cocos Creator 配合Tiled地图的使用
  • 原文地址:https://www.cnblogs.com/lcchuguo/p/4728086.html
Copyright © 2011-2022 走看看