摘要: 这篇文章将讲述别一种进程间通信的机制——信号量。注意请不要把它与之前所说的信号混淆起来,信号与信号量是不同的两种事物。有关信号的更多内容,可以阅读我的另一篇文章:Linux进程间通信——使用信号。下面就进入信号量的讲解。一、什么是信号量为了防止出现因多个程序同时访问一个共享资源而引发的一系列问题,我... 阅读全文
posted @ 2014-05-23 15:07 Marineking 阅读(338) 评论(0) 推荐(0) 编辑
摘要: 所谓共享内存就是使得多个进程可以访问同一块内存空间,是最快的可用IPC形式。是针对其他通信机制运行效率较低而设计的。往往与其它通信机制,如信号量结合使用,来达到进程间的同步及互斥。其他进程能把同一段共享内存段“连接到”他们自己的地址空间里去。所有进程都能访问共享内存中的地址。如果一个进程向这段... 阅读全文
posted @ 2014-05-23 11:17 Marineking 阅读(1313) 评论(0) 推荐(0) 编辑
摘要: 一、什么是共享内存顾名思义,共享内存就是允许两个不相关的进程访问同一个逻辑内存。共享内存是在两个正在运行的进程之间共享和传递数据的一种非常有效的方式。不同进程之间共享的内存通常安排为同一段物理内存。进程可以将同一段共享内存连接到它们自己的地址空间中,所有进程都可以访问共享内存中的地址,就好像它们是由... 阅读全文
posted @ 2014-05-22 17:59 Marineking 阅读(434) 评论(0) 推荐(1) 编辑
摘要: 想起以前在汇编语言和数字逻辑的时候也有接触到一些这个概念,已经有点模糊了,搞不清楚哪个是低位在前哪个是高位在前。后来在Wiki和Google的帮助下也算摸清楚了一些Endianness的概念。一、字节序的起源在计算机中,字节序(Endianness)是数据中单独的可取地址的亚型(words,bytes和bits)在外部存储器中存储的顺序。通常在提到四字(ddword)、双字(dword)和字(word)的时候需要考虑其实际的字节顺序,为了简便起见它的英文也常常表示为Byte Order。Endianness这个词源自1726年Jonathan Swift的名著:Gulliver’s Trave 阅读全文
posted @ 2014-01-22 17:36 Marineking 阅读(622) 评论(0) 推荐(0) 编辑
摘要: 步骤1、配置/etc/sysconfig/network-scripts/ifcfg-eth0 里的文件。it动力的CentOS下的ifcfg-eth0的配置详情:[root@localhost ~]# vim /etc/sysconfig/network-scripts/ifcfg-eth0 DEVICE="eth0"HWADDR="00:0C:29:FD:FF:2A"NM_CONTROLLED="yes"ONBOOT="yes"IPADDR=192.168.1.31NETMASK=255.255.255.0GA 阅读全文
posted @ 2013-11-24 20:53 Marineking 阅读(335) 评论(0) 推荐(0) 编辑
摘要: Robert Love的《Linux Kernel Development》一书,比较适合内核入门。而且对某些方面的解说,比如各种下半部,非常到位。承蒙一位陌生朋友的慨然相助,我有幸得到了本书的英文第二版,把中文不好理解的地方对照英文订正一下。只订正有碍理解的,当然可能有些是我理解错误,朋友们指正。多谢了。L+7 表示从上往下数第7行;L-7表示从底向上数第7行。P8L+7:练习中一般在头文件中定义内联函数订正:实践中一般在头文件中定义内联函数P9L-13:Linux内核支持多处理器并发处理订正:原文是“The Linux Kernel supports multiprocessing”,译为 阅读全文
posted @ 2013-07-18 14:04 Marineking 阅读(419) 评论(0) 推荐(0) 编辑
摘要: 常常有人问:我想学习内核,需要什么基础吗?Linus Torvalds本人是这样回答的:你必须使用过Linux。 这个……还是有点太泛了吧,我想下面几个基础可能还是需要的,尽管不一定必需: 1, 关于操作系统理论的最初级的知识。不需要通读并理解《操作系统概念》《现代操作系统》等巨著,但总要知道分时(time-shared)和实时(real-time)的区别是什么,进程是个什么东西,CPU和系统总线、内存的关系(很粗略即可),等等。 2, 关于C语言。不需要已经很精通C语言,只要能熟练编写C程序,能看懂链表、散列表等数据结构的C实现,用过gcc编译器,就可以了。当然,如果已经精通C语言显... 阅读全文
posted @ 2013-07-18 14:03 Marineking 阅读(4200) 评论(0) 推荐(1) 编辑
摘要: 这篇文章将是这个话题的最权威的文档。它将教你如何成为一个Linux内核开发者以及学会如何和Linux内核社区一起工作。它不包含任何有关内核编程的技术细节,但是会帮你在这方面指明方向。如果这篇文档里任何部分已经过时,请把更新信息以补丁的形式发送给本文的维护者,他的联系方式列在本文档的末尾。介绍好了,你想成知道如何成为一个Linux内核开发者么?或者你的老板告诉你,“去为这个设备写一个Linux驱动。“这篇文档的目的,就是通过描述你需要经历的过程和提示你如何和社区一起工作,来教给你为达到这些目的所需要知道的所有知识。本文也尝试解释社区为什么这样工作的一些原因。内核几乎全是用C写成的,有一些架构相关 阅读全文
posted @ 2013-07-18 14:01 Marineking 阅读(807) 评论(0) 推荐(0) 编辑
摘要: Linux下很多程序甚至那些具有图形用户界面(graphical user interface,GUI)的程序,都能接受和处理命令行选项。对于某些程序,这是与用户进行交互的主要手段。具有可靠的复杂命令行参数处理机制,会使得您的应用程序更好、更有用。getopt()是一个专门设计来减轻命令行处理负担的库函数。1、命令行参数命令行程序设计的首要任务是解析命令行参数,GUI派的程序员很少关心这个。这里,对参数采用了一种比较通俗的定义:命令行上除命令名之外的字符串。参数由多项构成,项与项之间用空白符彼此隔开。参数进一步分为选项和操作数。选项用于修改程序的默认行为或为程序提供信息,比较老的约定是以短划线 阅读全文
posted @ 2013-05-15 11:03 Marineking 阅读(235) 评论(0) 推荐(0) 编辑
摘要: 存在共享资源(共享一个文件,一块内存等等)的时候,为了防止并发访问时共享资源的数据不一致,引入了同步机制。主要内容:同步的概念同步的方法-加锁死锁锁的粒度1. 同步的概念了解同步之前,先了解另外2个概念:临界区 - 也称为临界段,就是访问和操作共享数据的代码段。竞争条件 - 2个或2个以上线程在临界区里同时执行的时候,就构成了竞争条件。所谓同步,其实防止在临界区中形成竞争条件。如果临界区里是原子操作(即整个操作完成前不会被打断),那么自然就不会出竞争条件。但在实际应用中,临界区中的代码往往不会那么简单,所以为了保持同步,引入了锁机制。2. 同步的方法-加锁为了给临界区加锁,保证临界区数据的同步 阅读全文
posted @ 2013-04-25 17:56 Marineking 阅读(130) 评论(0) 推荐(0) 编辑