058 LINUX系统中sock.c模块的分析
                    联系方式 Email: lw510@qq.com      QQ: 497053418       MSN: lw510@qq.com
以下仅为该设计的基本说明介绍,若需要完整的设计和论文,建议您购买本设计.
058 LINUX系统中sock.c模块的分析样本
(样本只提供该系统的基本情况介绍,若需要完整的设计和论文,建议您购买本系统,凡是购买本站系统的,本站均根据您的要求,把系统上的开发信息,题目等修改成符合您的要求)
 

本设计包含内容:源代码+毕业论文
论文大概:
 
 
 
 
 

目     录
1引言………………………………………………………….……………………3
2 sock.c模块部分代码分析……….……………………………………………..3
  2.1分析内容及工具……………………………………………….………...….3
2.2与上一层的调用关系………………………………………………………..3
2.3程序流程、功能、实现以及与下层调用关系……………………………………………………………………………………4
2.3.1 int sock_setsockopt(struct socket *sock, int level, int optname,
char__user*optval, int optlen)……………………………....4
2.3.2 static int sock_set_timeout(long *timeo_p, char __user *optval,
int optlen)………………………………………………….….13
2.3.3 static void sock_warn_obsolete_bsdism(const char *name)…………..15
2.3.4 static void sock_disable_timestamp(struct sock *sk)…………….…....15
2.3.5 int sock_getsockopt(struct socket *sock, int level, int optname,
char __user *optval, int __user *optlen)………………..…….16
2.3.6 struct sock *sk_alloc(int family, int priority,
int zero_it, kmem_cache_t *slab)………………………..……22
2.3.7 void sk_free(struct sock *sk)…………………………………………...24
2.3.8 void __init sk_init(void)…………………………………………...…...25
  2.4主要数据结构关系图………………………………………………….…....26
3 结束语……………………………………………………………………….…...27
参考文献……………………………………………………………………..…….27
附 录1….……………………………………………………………………….…28
附 录2……………………………………………………………………….…….40
 
 
 

LINUX系统中sock.c模块的分析
作者:许慧   指导老师:陈国顺

摘 要:Lninux是一款公开源代码的操作系统,经过多年来众多程序员对它的使用及完善,使得Linux的功能也日趋完善。目前越来越多的人投身于Linux的源代码分析,人们希望通过分析其源代码去了解操作系统的运作,或者提高自己的编程水平.本文主要介绍了Linux内核中的sock.c模块中的部分代码的流程、功能、上下层调用关系,以及与这些函数相关的数据结构之间的关系,差错处理等。
关键字:LINUX内核 ;scoket 分析;流程图;数据结构
 
 
The Analysis Of Sock.c In Linux

Abstract:Linux is a source-open operating system,used and perfected by a lot of programmers in many years,it becomes more and more perfect. now more an more academician throw themself into the analyse in Linux source files,they hope to comprehend how the operating system running,or they want to heighten their program level.This text introduce some of the flow, function, transfer and struct relation an error manage of the sock.c in Linux.

Key Words:Linux kernel;socket analyse; flow chart;struct
 
 
1、引 言
在计算机技术的发展史上,UNIX操作系统的出现是一个非常重要的里程碑。而Linux是一个兼容了各种UNIX标准的多用户、多任务的具有复杂内核的操作系统。LINUX的一大优点就在于它的核心源代码的公开性,在安装好的系统中,LINUX的内核源代码在/usr/scr/linux下。早期的源代码并不是很多,但是随着LINUX的越来越完善,功能越来越强大,LINUX的源代码已经是非常庞大了,但是并不是杂乱无章的,通过进一步观察你可以发现源码目录中包含有 Kernel,mm 以及 net 等的目录,其中包含了许多的源文件,但是包含在其中的.c和.h文件并不是每个都会用到的,而是在编译时根据系统的配置有选择的使用。
目前越来越多的人投身于LINUX的核心源代码分析,在对LINUX源代码的分析者中,以对内存管理,中断,进程调度,文件系统,磁盘管理,网络等模块的分析的人居多,而在网络系统模块中,有分析数据报的,分析协议的等方面。在分析socket方面,研究内容多以分析net/socket.c及其涉及到的头文件为主。就sock.c来说,可以说它是比socket.c更为底层的,因为socket.c中所调用的函数很多就是调用这个文件里的。我们所要分析的而涉及到的文件就是基本包含在net下的。
2、sock.c模块部分代码分析
 
2.3.4 void sk_free(struct sock *sk)
这个函数的作用是释放一个socket,其程序流程及与下层的调用关系如图8
 
                                 N
 
                Y
 
 
                              N
 
                Y
 
 

                              Y
 
 
 
图8
函数先定义了sk_filte型的指针变量filte,以及module型变量owner,并把sk指向的sk_owner赋给它。然后判断socket是否已经被破坏,如果没有则破坏它;然后把sk指向的sk_filte赋给filte,如果赋值成功则把sk的sk_filte释放,并指向空。而后把socket的时间标志重置。读取sk->sk_omem_alloc的地址的值,如果不为空,则打印。把socket安全的释放,之后把缓冲区释放,分配CPU。
static inline void sk_filter_release(struct sock *sk, struct sk_filter *fp)是把socket中的过滤器释放,其中sk是sock型的指针变量,fp是sk_filter型的指针变量。
static void sock_disable_timestamp(struct sock *sk)(详细请参照5.3.4)
atomic_read(v)的作用是读取v的值。
static inline void security_sk_free(struct sock *sk)是在释放socket前对是否许可释放的检测,允许返回0。
kmem_cache_free(kmem_cache_t *, void *)是对缓冲区的释放,其中kmem_cache_t *是slab,int优先级。
static inline void module_put(struct module *module)的作用为分配谁拥有这一模块,module为module型的指针变量。
2.3.5 void __init sk_init(void)
   这个函数的作用是建立发送和接收数据的缓冲区的大小,设定用来发送和接收数据的最大和默认的存储空间大小。其程序流程及与下层的调用关系如图9
 
 
                         N

           Y
                         Y
 
       else if
                         Y

          N
                              图9
函数首先是建立缓冲区,并把结果赋给sk_cachep,然后判断建立是否成功,不成功则打印,否则判断物理页的大小,如果小于4096则最大与默认的发送接收队列大小都设定为32767,如果物理页大于131072,则把最大的发送队列大小设定为131071。
kmem_cache_create(const char *, size_t, size_t, unsigned long,
           void (*)(void *, kmem_cache_t *, unsigned long),
           void (*)(void *, kmem_cache_t *, unsigned long));的作用是建立缓冲区,其中第一个参数是socket的名字,size_t是socket的大小,第三个参数是协议,一般为0,接下去是缓冲区的头指针等。
058 LINUX系统中sock.c模块的分析
 

关闭窗口

与本站联系的时候,为了提高效率,请告诉本站您需要的设计编号与题目。如:001VBAC人事管理系统
编码说明:001VBAC人事管理系统,其中001VBAC 为该毕业设计的编号,VB代表开发语言,AC代表数据库(ACCESS)
版权所有:510计算机论文网:http://www.lw510.com/程序制作:510论文
Email: LW510@QQ.COM  QQ: 497053418   MSN: LW510@QQ.COM