免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
123下一页
最近访问板块 发新帖
查看: 7563 | 回复: 28
打印 上一主题 下一主题

[FreeBSD] 想要做一个与FreeBSD内核相关的毕设,恳请大家给一些意见! [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2012-12-19 20:10 |只看该作者 |倒序浏览
我之前一直在分析FreeBSD内核的网络部分,并进行一些内核编程,下学期就要做毕业设计啦,我很想做一个与FreeBSD内核相关的东西,但是很纠结不知道选择哪个题目比较好。原本毕设题目应该是和导师一起商量着确定的,但是我们学校对FreeBSD了解的老师比较少,所以想更多的靠自己选择一个题目。

我有两个想法,一个想法是以内核模块的方式做一个在内核中运行的纯静态的HTTP服务器,不支持CGI的,尽可能高效的处理连接请求。但怕老师可能会觉得太简单。另外一个想法是修改内核中网卡的驱动,提供一个字符设备接口,让用户空间的进程可以直接收发以太网帧,然后尝试移植FreeBSD中的TCP/IP协议栈到用户空间,做一个带TCP/IP协议栈的http服务器(两者绑定在一起),这样可以让自己很好的学习TCP/IP协议栈的实现,但是我还是更想在内核中编程,不想把编程的重点放在用户空间。

还有什么其它不错的选择吗?或者有一些参考来源也行呀!

恳请大家给一些意见,非常非常非常感谢呀!

论坛徽章:
0
2 [报告]
发表于 2012-12-19 20:14 |只看该作者
第二个感觉难度有些大,最终不一定能做的出来。

论坛徽章:
2
亥猪
日期:2014-03-19 16:36:35午马
日期:2014-11-23 23:48:46
3 [报告]
发表于 2012-12-19 23:24 |只看该作者
本帖最后由 gvim 于 2012-12-19 23:26 编辑

内核和应用层除了权限不一样,本质没什么区别,没必要看不起用户层。比如你想学学内存管理,不需要到内核层去你照样可以malloc一大块内存出来自己做分配策略(太多的web软件都这样做)。能构建现在这样的软件世界,操作系统只占了两席:Unix和Windows,其他各种软件,matlab,java,python,apache,nginx,firefox,photoshop等等。更多的创造实在用户层。
FreeBSD内核和Linux内核本质没什么区别,翻翻操作系统的书,两者很多概念上的东西是那样的,只是实现不一样,整体代码和架构不一样,因此不要觉得会FreeBSD的老师少他就无法为你提供帮助,在现有的知识范畴里面,如果他能告诉你毕业设计在Linux下面做某件事情,多半你可以考虑在FreeBSD上实施。
第一个想法除了能对Http协议熟悉一些和可能存在的文本解析的话,几乎不能带给你什么东西,因为内核层的限制你连最基本的CGI实现起来都举步维艰,http的解析需要手工解析。而且,“高效的处理连接请求”本身就是伪命题,因为没有CGI或类似handler的http server谈不上处理任何东西,效率何来?
第二个想法如果是想学习Tcp/IP的话,我到建议你用更简单的系统,把操作系统自身的复杂性控制在一定范围,比如eCos(协议占是用的FreeBSD和OpenBSD可选),或者微内核的东西比如minix。

如果一定想在内核里对网络做手脚,不妨看看某些Linux网络有而FreeBSD没有的功能,但又比较有意义的,给实现了。

论坛徽章:
0
4 [报告]
发表于 2012-12-20 00:26 |只看该作者
回复 3# gvim


    非常感谢您宝贵的意见哈!

内核和应用层确实没有什么本质的区别,无非就是有不同的权限,都是在调用一些API完成一些东西。我丝毫没有看不起用户层的! 而且我感觉用户层更有创造性!我之所以很想在FreeBSD内核中编程,是想要更好的感受FreeBSD内核的设计,这个只是针对FreeBSD内核这个软件的,“我更想在内核中编程”准确的说应该是“我更想在FreeBSD内核中编程”,因为我感觉FreeBSD内核的代码很优雅漂亮。

至于“高效的处理连接请求”,网络上很多的资源都是静态资源,几乎所有的图片都是静态的,服务器所做的事情就只是读取这些文件,然后发送给客户端。如果这个在内核中做的话,可以避免掉所有的系统调用带来的用户态与内核态的切换、以及用户态与内核态间的数据拷贝,另外还可以引入更多的性能优化方案(比如充分利用page cache等,不过这些我还没有仔细分析过,不知是否真正可行)。也就是说,这个服务器(准确的说是内核中的那部分)的目的就是尽可能高效的处理客户端对静态资源的请求。如果客户端发来CGI请求等自己不能处理的请求的话,完全可以使用某种机制,把这个请求redirect给一个传统的用户空间的进程的,再由它进行处理,不过这部分我并不打算去做。我期望的重点是,在实现基本的HTTP协议之后,尽可能的了解怎么充分的实现磁盘的缓冲机制减少IO、利用网络协议栈中的零拷贝等等,不过不一定能全都做出来。

论坛徽章:
0
5 [报告]
发表于 2012-12-20 02:43 |只看该作者
友情提示:第二个的第一部分其实已经有人做了 (netmap):
  1. NETMAP(4)              FreeBSD Kernel Interfaces Manual              NETMAP(4)

  2. NAME
  3.      netmap -- a framework for fast packet I/O

  4. SYNOPSIS
  5.      device netmap

  6. DESCRIPTION
  7.      netmap is a framework for fast and safe access to network devices (reach-
  8.      ing 14.88 Mpps at less than 1 GHz).  netmap uses memory mapped buffers
  9.      and metadata (buffer indexes and lengths) to communicate with the kernel,
  10.      which is in charge of validating information through ioctl() and
  11.      select()/poll(). netmap can exploit the parallelism in multiqueue devices
  12.      and multicore systems.

  13.      netmap requires explicit support in device drivers.  For a list of sup-
  14.      ported devices, see the end of this manual page.
复制代码

论坛徽章:
0
6 [报告]
发表于 2012-12-20 02:58 |只看该作者
另外第一个实际上也有人做过了:

http://openketa.sourceforge.net/

论坛徽章:
2
亥猪
日期:2014-03-19 16:36:35午马
日期:2014-11-23 23:48:46
7 [报告]
发表于 2012-12-20 10:35 |只看该作者
回复 4# bsdfun


呵呵,别考虑那么多所谓的效率了。效率需要和实用做平衡,效率再高不实用,或者反过来,都是意义不大的东西。
其他情况下效率大部分时候是用钱堆出来的。比如要减少磁盘负载,最根本的方法是消除磁头的移动和减少磁头读写频率,那么目前最好的就是SSD+大内存。
FreeBSD的发展基本有两条线,一条是各大学、研究机构或个人的功能捐赠,另一条是实现其他各系统实现了而又很好的功能。
所有,个人看法还是如果仅当学习的话,先从简单的系统入手;如果想在FreeBSD上练手的话,可以看看其他系统实现了而FreeBSD没有实现的功能试着弄一弄,要不给FreeBSD移植几个驱动呗,呵呵,也能学不少东西。

论坛徽章:
0
8 [报告]
发表于 2012-12-20 10:41 |只看该作者
回复 5# delphij


    非常感谢您的友情提示哈!

netmap我这学期最开始的时候一直在分析,我感觉它为用户空间提供高效的raw packet I/O的思想非常好!这个最初我还是通过未来的研究生师兄的提醒才知道的!如果我做第二个的话,我就打算在内核这部分参看netmap,然后把重点放在用户空间的协议栈的移植上。


回复 6# delphij


    openketa我还没有听说过,非常感谢您提供的宝贵的资料哈!关于把http服务器在内核空间实现最初是一个很直接的想法,但是更多的优化思想我主要是借鉴于tux和khttpd。因为可以在这些优化上深究,我才敢把它作为毕设题目的一个选择。

tux: http://www.stllinux.org/meeting_notes/2001/0719/tux/index.html
khttpd: http://www.fenrus.demon.nl/


再次感谢您提供的宝贵资料哈!

论坛徽章:
2
亥猪
日期:2014-03-19 16:36:35午马
日期:2014-11-23 23:48:46
9 [报告]
发表于 2012-12-20 10:47 |只看该作者
回复 8# bsdfun


你不如请delphij做你的导师,他可是freebsd src commiter  之一,你grep一下自己的kernel src,可以看到这个名字,呵呵。

论坛徽章:
0
10 [报告]
发表于 2012-12-20 10:55 |只看该作者
回复 7# gvim


    毕设嘛,所以想带有一些研究的性质,多一些性能的发掘,至少是理论上的。而且我感觉FreeBSD作为学术研究的平台很好,代码质量很高!其实我感觉有很多很优秀的东西最初是在FreeBSD中开发的,比如geom、netmap、jail、vimage等等。驱动的话,我们学校有可能会有其他人做,不过更多的是arm和linux上的,这个主要是做嵌入式方向的人多一些,我未来研究生的方向是网络,我想把精力更多的放在网络上边。。

您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP