linux 分层,linux基础知识点
大家好,关于linux 分层很多朋友都还不太明白,不过没关系,因为今天小编就来为大家分享关于linux基础知识点的知识点,相信应该可以解决大家的一些困惑和问题,如果碰巧可以解决您的问题,还望关注下本站哦,希望对各位有所帮助!
Linux 网络设备驱动开发(一) —— linux内核网络分层结构
Linux内核网络驱动开发的分层结构与面向对象设计
Linux内核对网络驱动程序采用统一接口设计,并运用面向对象思想进行网络设备的构造。其分层结构与网络协议层相匹配,简化数据包处理流程,便于扩展与维护。
内核网络结构分为网络协议层、网络设备层、设备驱动功能层和网络媒介层,网络驱动功能层主要通过驱动程序实现。所有网络设备抽象为接口处理,提供包括软件虚拟设备和硬件设备在内的全面网络操作。
在内核中,所有网络设备通过net_device结构表示,它充当网络设备接口,涵盖软件虚拟和硬件网络设备。全局dev_base指针连接设备链表,包含系统所有网络设备,每个节点代表一个网络设备。
net_device结构包含设备方法,如初始化、打开关闭、数据包发送和接收等,供系统访问和协议层调用。其中,sk_buff结构作为内核网络部分核心数据结构,支持网络协议栈中各层数据的添加与删除,避免了效率低下的数据复制。
sk_buff结构分为数据包缓存和内核管理指针两部分,主要指针包括头、数据、尾和结束指针。数据包大小变化导致data和tail指针更新,而head和tail保持不变。TCP数据包示例中,sk_buff还包含mac、nh和h指针,指向各层协议头,便于协议栈处理。
Linux内核中最重要的数据结构是net_device,它保存在头文件中,理解net_device对网络设备驱动开发至关重要。所有网络设备信息和操作均在net_device中实现,包括注册和设置参数。
数据包接收流程包括链路层、传输层和socket处理,最终到达用户空间。以DM9000网卡为例,数据包接收经过中断处理、netif_rx()函数和协议栈处理,直至ip_local_deliver()和ip_local_deliver_finish()函数完成防火墙相关代码加载。
UDP数据包处理涉及从socket队列取出数据,通过udp_recv()、udp_queue_recv()和sock_queue_recv()函数处理。数据读取后由sys_read()系统调用复制至用户空间。
数据包发送流程以UDP数据包为例,从socket函数sento()开始,经过sock_writev()、sock_sendmsg()、inet_sendmsg()、udp_sendmsg()、ip_build_xmit()、output_maybe_reroute()、ip_output()和ip_finish_output()函数处理,最终由dev_queue_xmit()函数将数据包发送至DM9000网卡。
通过以上详细分析,我们可以理解Linux内核网络设备驱动开发的分层结构与面向对象设计的重要性,以及数据包接收和发送流程的复杂性与细节。
linux是什么系统
Linux操作系统,是一种计算机操作系统,中文读法大致一般为“哩纽克斯”。Linux操作系统的内核的名字也是“Linux”。Linux操作系统也是自由软件和开放源代码发展中最著名的例子。Linux之所以受到广大计算机爱好者的喜爱,主要原因有两个,一是它属于自由软件,用户不用支付任何费用就可以获得它和它的源代码,并且可以根据自己的需要对它进行必要的修改,无偿对它使用,无约束地继续传播。另一个原因是,它具有Unix的全部功能,任何使用Unix操作系统或想要学习Unix操作系统的人都可以从Linux中获益。运行Linux需要的配置并不高,支持众多的PC周边设备,并且这样一个功能强大的软件完全免费,其源代码是完全公开的,任何人都能拿来使用。说到这里,各位可能怀疑这免费后面是不是隐藏着什么?作者会心甘情愿的把它拿出来而分文不取吗?其实,它代表着软件开发的另一种概念:那就是基于GNU的版权制度。
Linux操作系统的体系结构一般分为4个层次
Linux采用分层设计,它包括4个层次。每层只能与它相邻的层通信,层次间具有从上到下的依赖关系,靠上的层依赖于靠下的层,但靠下的层并不依赖于靠上的层。各层系统介绍如下。
用户应用程序层:
位于整个系统的最顶层,是Linux系统上运行的应用程序集合,常见的用户应用程序有字处理应用程序、多媒体处理应用程序、网络应用程序等。
操作系统服务:
位于用户应用程序与系统内核之间,主要是指那些为用户提供服务且执行操作系统部分功能的程序,为应用程序提供系统内核的调用接口。X窗口系统、Shell命令解释系统、内核编程接口等就属于操作系统服务子系统。这一部分也称为系统程序。
Linux内核:
靠近硬件的是内核,即Linux操作系统常驻内存部分。Linux内核是整个操作系统的核心,由它实现对硬件资源的抽象和访问调度。它为上层调用提供了一个统一的虚拟机器接口,在编写上层程序的时候不需要考虑计算机使用何种类型的物理硬件,也不需要考虑临界资源问题。每个上层进程执行时就像它是计算机上的唯一进程,独占了系统的所有内存和其他硬件资源。但实际上,系统可以同时运行多个进程,由Linux内核保证和进程对临界资源的安全使用。所有运行在内核之上的程序可分为系统程序和用户程序两大类,但他们统统运行在用户模式之下。内核之外的所有程序必须通过系统调用才能进入操作系统的内核。
硬件系统:
包含Linux所使用的所有物理设备,如CPU、内存、硬盘和网络设备等。