使用Git的一些规范
commit message 规范
代码风格统一,代码提交信息的说明准确,那么在后期协作以及Bug处理时会更加方便,先来介绍推荐采用的commit规范吧,Commit message格式如下: type(scope): subject
注意冒号后面有空格,type用于说明commit的类别,只允许使用下面7个标识:
type:type用于说明commit的类别
-
feat:新功能(feature)
-
fix:修补bug
-
docs:文档(documentation)
-
style: 格式(不影响代码运行的变动)
-
refactor:重构(即不是新增功能,也不是修改bug的代码变动)
-
test:增加测试
-
chore:构建过程或辅助工具的变动
如果type为feat和fix,则该commit将肯定出现在Change log之中。
scope:可选项,用于说明commit的影响范围
subject::commit 目的的简短描述,不超过50个字符,且结尾不加句号
Linux进程通信之管道
Linux进程间通信的基本思想是:让两个进程看到一份公共的资源!
Linux进程间通信的目的
- 数据传输:⼀个进程需要将它的数据发送给另⼀个进程
- 资源共享:多个进程之间共享同样的资源。
- 通知事件:⼀个进程需要向另⼀个或⼀组进程发送消息,通知它们发生了某种事件(如进程终止时要通知父进程)。
- 进程控制:有些进程希望完全控制另⼀个进程的执行(如Debug进程),此时控制进程希望能够拦截另一个进程的所有陷入和异常,并能够及时知道它的状态改变
通信方式之管道
管道是Unix中最古老的进程间通信的形式。 我们把从⼀个进程连接到另⼀个进程的⼀个数据流称为⼀个”管道”
- 管道是面向字节流的
- 管道的生命周期:与进程一致
- 管道只能用于单向通信
- 内核会对管道操作进行同步与互斥
NASA的C语言编程准则
美国国家航空航天局(NASA)开发人员的工作是编程界最具挑战性的工作之一。 他们编写代码并开发关键任务应用程序,安全是他们主要关注的重点。 在这种情况下,制定严谨的编码准则并遵循,对于他们来说十分重要。这些规则涵盖了软件开发的各个方面,如应该如何编写软件,应该使用哪些语言特性等等。
尽管很难就一个编码标准达成共识,NASA 的 JPL 首席科学家 Gerard J. Holzmann 还是制定了一套名为”发展安全关键代码的十大规则”的代码准则,由所有工作人员共同遵循。
由于 JPL 的工作内容与 C 语言相关,因此本指南主要关注用 C 编程语言编写的代码。但也可以灵活运用到其他语言上。
谈谈写时拷贝
COW技术初窥
Linux写时拷贝技术(copy-on-write):COW 在Linux程序中,fork()会产生一个和父进程完全相同的子进程,但子进程在此后多会exec系统调用,出于效率考虑,linux中引入了“写时复制“技术,也就是只有进程空间的各段的内容要发生变化时,才会将父进程的内容复制一份给子进程。
那么子进程的物理空间没有代码,怎么去取指令执行exec系统调用呢?
在fork之后exec之前两个进程用的是相同的物理空间(内存区),子进程的代码段、数据段、堆栈都是指向父进程的物理空间,也就是说,两者的虚拟空间不同,但其对应的物理空间是同一个。
当父子进程中有更改相应段的行为发生时,再为子进程相应的段分配物理空间,如果不是因为exec,内核会给子进程的数据段、堆栈段分配相应的物理空间(至此两者有各自的进程空间,互不影响),而代码段继续共享父进程的物理空间(两者的代码完全相同)。而如果是因为exec,由于两者执行的代码不同,子进程的代码段也会分配单独的物理空间。
在网上看到还有个细节问题就是,fork之后内核会通过将子进程放在队列的前面,以让子进程先执行,以免父进程执行导致写时复制,而后子进程执行exec系统调用,因无意义的复制而造成效率的下降。