Welcome 微信登录

首页 / 操作系统 / Linux

教你解读Linux内核源码的入门方法

教你解读Linux内核源码的入门方法

putpmsg 在内的好几个系统调用都是不进行任何操作的,即有待扩充的空调用;但它们却仍然占用着sys_call_table表项,估计这是设计者们为了方便扩充系统调用而安排的;所以只需增加相应服务例程(如增加服务例程getmsg或putpmsg),就可以达到增加系统调用的作用。结语:当然对于庞大复杂的 linux内核而言,一篇文章远远不够,而且与系统调用相关的代码也只是内核中极其微小的一部分;但重要的是方法、掌握好的分析方法;所以上的分析只是起个引导的作用...
aix c/c++ 编译器

aix c/c++ 编译器

一般情况下,我们习惯直接使用cc编译程序,实际上AIX的C/C++编译器还提供了其他的一些使用方法,如后缀为_r就有xlc_r、xlC_r,这里我们做一个完整的介绍。 AIX平台上缺省的C++编译器为xlC,而C的编译器有三个: cc: 这是最习惯用的,扩展模式的C编译器 xlc: ANSI C编译器,使用UNIX的头文件 c89: ANSI C编译器,使用ANSI头文件 具体选择何种编译器,需根据程序的情况来选择,一般我们可以使用cc。另外,还...
Linux信号处理机制

Linux信号处理机制

一、信号及信号来源 信号本质 信号是在软件层次上对中断机制的一种模拟,在原理上,一个进程收到一个信号与处理器收到一个中断请求可以说是一样的。信号是异步的,一个进程不必通过任何操作来等待信号的到达,事实上,进程也不知道信号到底什么时候到达。 信号是进程间通信机制中唯一的异步通信机制,可以看作是异步通知,通知接收信号的进程有哪些事情发生了。信号机制经过POSIX实时扩展后,功能更加强大,除了基本通知功能外,还可以传递附加信息。 信号来源 信号事件的发...
Linux调试BUG实例分析

Linux调试BUG实例分析

最近在开发LINUX下的工具,调试一个BUG时遇到很郁闷的情况: 某处有个segmentation fault。懒得用gdb,于是随便加了几条调试信息,编译,运行之。直接显示错误信息。 唔......BUG在最近一条信息之前,再细分,再加调试信息,编译,运行,嗯,还得再分。 3次之后偶郁闷鸟,真正的郁闷鸟......两条消息,一条能正常显示,紧接着的,中间没有任何语句--也不是多线程--的第二条信息就是显示不出来!我靠!我招惹谁了啊?没有任何干扰啊 ...
Ubuntu下练习C

Ubuntu下练习C

Ubuntu版的linux下是没有直接的编译工具的。C,java,c++等都需要自己下载包。虽说像gcc这个命令从头就有,但是真正可以编译还是要 编译工具下下阿安装了才行。 如何编译C 1.写源码,另存为想x.c 2.打开终端,切到文件的目录 3.输入命令 :gcc x.c 4.一般都生成a.out。 这时,输命令:./a.out 即可运行。 遇到的问题 不知怎么的,C语言的很重要的地址符号“&”编译的时候不认识,老报错说此变...
Linux中库认识

Linux中库认识

soname 形式一般为lib.so.,以symbol link的方式存在于文件系统中,version的不同反映了接口的改变,其指向的实际文件的名字通常是在soname后加上..。 ldd/ldconfig 一个程序/shared库一般都要依赖其他的一些库,这可以用ldd来查看,它列出了依赖的库的soname,因为实际依赖是库的接口,而soname正是反映了库的接口信息。linux使用ELF作为可执行程序和库的格式,这些依赖的库的soname保存在E...
Linux内核算法知识点滴

Linux内核算法知识点滴

1.Linux 调度 I/O消耗型和处理器消耗型进程(保证及时的IO响应和高效的CPU利用率)负载平衡:每颗CPU上有一个进程队列,当CPU的负载差大于25%时运行负载平衡程序。(从最忙的CPU上取下一个优先级最高且CPU亲和力最小的进程到负载最轻的CPU进程队列中)。 为什么要取优先级最高的进程呢? 因为把优先级高的进程平均分配到各个CPU上去才能使系统的性能达到最高。CPU的亲和力:主要是高速缓存或是其它原因,如某个进程只能在某个CPU上运行。 ...
Linux初学者Patch程序使用攻略

Linux初学者Patch程序使用攻略

本文的目的是向Linux新手介绍一种无价的资源,Larry Wall的patch程序。patch是用来查找文件之间差异的GNU diff命令的一个接口;diff有很多选项,但是该命令最常用的用途是用来生成一个文件,该文件中列出了内容发生改变的行,显示两个原始文件、修改过的行以及由于内容没有变化而忽略掉的行。patch典型地用于把一个目录下的源代码文件更新到新的版本,从而就避免了下载整个新的源代码档案的必要。下载一个有效的 patch仅仅需要下载发生变化的那...
阅读Linux内核源码从何处着手

阅读Linux内核源码从何处着手

对Linux内核源码的分析,有两个很好的入口点:一个就是系统的引导和初始化,即从机器加电到系统核心的运行;另外一个就是系统调用,系统调用是用户程序或操作调用核心所提供的功能的接口。对于那些对硬件比较熟悉的爱好者,从系统的引导入手进行分析,可能来的容易一些;而从系统调用下口,则可能更合适于那些在dos或Uinx、Linux下有过C编程经验的高手。 下面就以系统的引导和初始化为例,简要描述一下源代码的阅读线索: 1、系统的启动和初始化: 在基于Intel...
在开源世界里我们的软件该如何编译

在开源世界里我们的软件该如何编译

基本上,尤其在Windows 和Mac OS X系统下,已经开发好的软件不需要用户再编译。程序员写好代码并编译后,封装为计算机可执行的二进制形式,用户就可以直接使用了。 然而现在,随着开源软件的增多,每个人都可以读和使用源代码,因而软件编译的最后一步工作已经转移到了用户身上,而且他们得根据自己使用的系统,Windows XP, Windows Vista, Mac OS X Tiger, Panther, Linux x86……来做编译工作。如果你发现自己...
掌握学习linux下的编程

掌握学习linux下的编程

虽说是以开源为基础的,而且在简单的程序上写起来是比较方便,不过有些时候确实让人头痛,让人想念微软的.Net或是MFC。 首先是标准不统一,最近在写一个基于线程池的服务器程序,用到了semaphore,还是存在mmap中的无名semaphore,调试得很愉快,于是高兴地把程序分发往各服务器,没料到在第一个服务器上装的时候就郁闷掉了,发现进程会永远地阻塞在sem_wait()上。后来一调查才意识到,我开发的环境是FC6(用的2.6内核),人家是支持整套Pos...
<< 1121 1122 1123 1124 1125 1126 1127 1128 1129 1130 >>