当前位置: 技术问答>linux和unix
学习内核编程4问
来源: 互联网 发布时间:2016-05-29
本文导语: 1、内核模块使用的内存大小有没有限制?在64位下,系统有16G内存,则我编写的内核模块能不能使用其中的大部分内存(例如15GB)? 2、整个模块采用单进程多线程结构,如果有多个CPU或CPU核心,线程锁同步的处理...
1、内核模块使用的内存大小有没有限制?在64位下,系统有16G内存,则我编写的内核模块能不能使用其中的大部分内存(例如15GB)?
2、整个模块采用单进程多线程结构,如果有多个CPU或CPU核心,线程锁同步的处理是否像在用户空间程序一样可以方便地使用临界区之类的现成技术,还是要专门的技术处理?
3、我写的是个网络服务程序,打算把其中一部分代码放在用户空间的程序中实现。也就是说这个系统包含一个内核模块和一个用户空间程序。系统执行流程是用户连接到服务器,首先由内核模块接收和处理,随后需要继续执行用户空间的程序。能不能这样运行?
4、为什么我要写一个内核模块来实现系统的功能?另一个选择是实现为用户空间的程序。两者相比,作为内核空间的进程有什么优势?我主要是要实现高效的网络数据包发送,1秒能不能响应50000个网络服务请求。
2、整个模块采用单进程多线程结构,如果有多个CPU或CPU核心,线程锁同步的处理是否像在用户空间程序一样可以方便地使用临界区之类的现成技术,还是要专门的技术处理?
3、我写的是个网络服务程序,打算把其中一部分代码放在用户空间的程序中实现。也就是说这个系统包含一个内核模块和一个用户空间程序。系统执行流程是用户连接到服务器,首先由内核模块接收和处理,随后需要继续执行用户空间的程序。能不能这样运行?
4、为什么我要写一个内核模块来实现系统的功能?另一个选择是实现为用户空间的程序。两者相比,作为内核空间的进程有什么优势?我主要是要实现高效的网络数据包发送,1秒能不能响应50000个网络服务请求。
|
问题1:内核模块使用内存是有限制的,(我记得上次在ARM中申请内存空间2M(SDRAM大小16M)时,出现内核崩溃)所以具体大小我也不晓得,你可以查查Linux内存管理方面的书看看。
问题3:可以,比如你可以为ARM写个网卡驱动,在应用层用lipcap勾取数据进行处理。
问题4:你这个实现快速传输响应,内核不需要通过TCP/IP做协议解析,可以帮数据都放到底层处理不要在应用层做了,这样会很慢的。
不只有没有回答你部分问题?
问题3:可以,比如你可以为ARM写个网卡驱动,在应用层用lipcap勾取数据进行处理。
问题4:你这个实现快速传输响应,内核不需要通过TCP/IP做协议解析,可以帮数据都放到底层处理不要在应用层做了,这样会很慢的。
不只有没有回答你部分问题?
|
问题1:
32位操作系统,配合32位CPU,寻址空间位2^32次方,计算出来是
4294967296字节,就是4G,32位系统最大支持4G空间,如果想要32位
系统支持4G以上空间的话,就要用PAE的特殊内核,采用特殊方式访问,
但是系统效率会比原生的64位系统低。
64位操作系统配合64位CPU,寻址空间是2^64次方,计算出来是
18446744073709551616字节,换算一下4G个G,太大了,反正是
N多G,一辈子也用不完。当然这是64位系统的理论最大内存支持,实际上谁也用不了这么大内存,
反正如果你的系统是64位的,CPU是64位的,那么随便插个8G,16G内存是肯定能支持的。
http://linux.chinaunix.net/bbs/viewthread.php?tid=917832
32位操作系统,配合32位CPU,寻址空间位2^32次方,计算出来是
4294967296字节,就是4G,32位系统最大支持4G空间,如果想要32位
系统支持4G以上空间的话,就要用PAE的特殊内核,采用特殊方式访问,
但是系统效率会比原生的64位系统低。
64位操作系统配合64位CPU,寻址空间是2^64次方,计算出来是
18446744073709551616字节,换算一下4G个G,太大了,反正是
N多G,一辈子也用不完。当然这是64位系统的理论最大内存支持,实际上谁也用不了这么大内存,
反正如果你的系统是64位的,CPU是64位的,那么随便插个8G,16G内存是肯定能支持的。
http://linux.chinaunix.net/bbs/viewthread.php?tid=917832