社区
Linux_Kernel
帖子详情
谁有“零拷贝”技术有资料,最好有实例或是现成的代码!
szclm
2004-04-16 09:58:39
如题
...全文
108
5
打赏
收藏
谁有“零拷贝”技术有资料,最好有实例或是现成的代码!
如题
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用AI写文章
5 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
qiansen
2004-04-22
打赏
举报
回复
http://www.hacker.com.cn/article/list.asp?id=3370
Microsoft
2004-04-19
打赏
举报
回复
//led_int_chdrv.c
#include <linux/malloc.h>
#include <linux/fs.h>
#include <linux/module.h>
#include <asm/segment.h>
#include <unistd.h>
typedef struct {
unsigned int orig_mod; //IOPMOD Register
unsigned int orig_con; //IOPCON Register
unsigned int orig_dbw; //EXTDBWTH Register
unsigned int count;
} led_demo_driver_t;
#define EXTDBWTH *(unsigned int *)0x3FF3010
#define IOPMOD *(unsigned int *)0x3FF5000
#define IOPCON *(unsigned int *)0x3FF5004
#define LED_CHDRV_MAJOR 111
char LED_INT_CHDRV_NAME[] = "LED_Int_DemoDrv";
void led_delay()
{
unsigned int i;
for(i = 0; i < 500000; ++i) ;
}
void led_interrupt( int irq, void *dev_id, struct pt_regs *regs )
{
led_demo_driver_t *dev = (led_demo_driver_t *)dev_id;
dev->count++;
printk("irq %d dev->PC = %08x \n",irq , dev->count++);//for debug interrupt
}
int led_chdev_open( struct inode *inode, struct file *file )
{
led_demo_driver_t *dev;
int flags;
dev = (led_demo_driver_t *)kmalloc(sizeof(led_demo_driver_t), GFP_KERNEL);
if(dev == NULL)
{
return -ENOMEM;
}
dev->orig_mod = IOPMOD;
dev->orig_con = IOPCON;
dev->orig_dbw = EXTDBWTH;
EXTDBWTH |= 0x0FF00000;
led_delay();
IOPMOD &= 0x7FEFF;
led_delay();
IOPCON &= 0xFFFFFFE0;
led_delay();
IOPCON |= 0x1C; //reference s3c4510 spec. page 12-4 about external irq setting
led_delay();
file->private_data = dev;
led_delay();
dev->count = 0x00;
led_delay();
save_flags_cli(flags);
if( request_irq( 0, led_interrupt, SA_INTERRUPT, "led", dev ))
{
printk("kernel: request_irq error!\n");
}
restore_flags(flags);
return 0;
}
void led_chdev_release( struct inode *inode, struct file *file )
{
led_demo_driver_t *dev = (led_demo_driver_t *)file->private_data;
int flags;
save_flags_cli(flags);
free_irq(0, dev);
if(dev) {
//
IOPMOD = dev->orig_mod;
IOPCON = dev->orig_con;
EXTDBWTH = dev->orig_dbw;
kfree(dev);
}
restore_flags(flags);
}
static struct file_operations led_chdrv_fops = {
NULL, /* lseek */
NULL, /* read */
NULL, /* write */
NULL, /* readdir */
NULL, /* select */
NULL, /* ioctl */
NULL, /* mmap */
led_chdev_open, /* open */
led_chdev_release /* release */
};
int led_init()
{
if( register_chrdev(LED_CHDRV_MAJOR, LED_INT_CHDRV_NAME, &led_chdrv_fops) )
{
printk("kernel: %s: Unable to register character device\n", LED_INT_CHDRV_NAME); return -EIO;
}
return 0;
}
此程式齣自
"嵌入式微電腦繫統實習ARM與LINUX",鄭慕德 編著,全華科技圖書股份有限公司
CoolQ
2004-04-16
打赏
举报
回复
http://www.nsfocus.net/index.php?act=sec_doc&do=view&doc_id=880&keyword=%C1%E3%BF%BD%B1%B4
具体是要作驱动的,一个驱动一个样,所以具体实现不通用。
szclm
2004-04-16
打赏
举报
回复
谢谢~
chairou
2004-04-16
打赏
举报
回复
找COOLQ吧,他对IDS有研究.这种东西还想要源码,那别人怎么吃饭啊.
详解Linux中的
零拷贝
技术
,小白也能秒懂!
前言 大白话解释,
零拷贝
就是没有把数据从一个存储区域拷贝到另一个存储区域。但是没有数据的复制,怎么可能实现数据的传输呢? 其实我们在java NIO、netty、kafka遇到的
零拷贝
,并不是不复制数据,而是减少不必要的数据拷贝次数,从而提升
代码
性能 本文内容: 1、
零拷贝
给我们带来的好处: 2、Linux系统的“用户空间”和“内核空间” 3、Linux 中
零拷贝
技术
的实现方向 4、
零拷贝
机制的原理 4.1、传统I/O 4.2、DMA 5、通过sendfile实现的
零拷贝
I/O 6、带
什么是"
零拷贝
"
技术
前言 从字面意思理解就是数据不需要来回的拷贝,大大提升了系统的性能;这个词我们也经常在java nio,netty,kafka,RocketMQ等框架中听到,经常作为其提升性能的一大亮点;下面从I/O的几个概念开始,进而在分析
零拷贝
。 I/O概念 1、缓冲区 缓冲区是所有I/O的基础,I/O讲的无非就是把数据移进或移出缓冲区;进程执行I/O操作,就是向操作系统发出请求,让它要么把缓冲区的数...
12.Kafka 的
零拷贝
技术
目录 1.传统拷贝过程 2.DMA
技术
的出现 3.
零拷贝
技术
4.Java
零拷贝
的实现 在上一篇博文 10.Kafka 消息存储中我们了解了 Kafka 内部消息是如何进行存储的。其中一个原因是 Kafka 的顺序写入机制,另外一个原因就是
零拷贝
(zero-copy)
技术
,这也是使用 Kafka 性能高的根本所在。接下来让我们简单来了解一下 Kafka 的
零拷贝
技术
1.传统拷贝...
JAVA
零拷贝
技术
和主流中间件
零拷贝
技术
应用
Java NIO对mmap->Java NIO对sendfile->和API是否使用
零拷贝
依赖于底层的系统实现是一个连接到文件的通道,可以通过文件通道读写文件,该常被用于高效的网络/文件的数据传输和大文件拷贝应用程序使用FileChannel 写完以后,数据是在PageCache上的,操作系统不定时的把PageCache的数据写入到磁盘使用把文件相关的数据强制刷入磁盘上去,避免宕机数据丢失使用之前必须先打开它,但是无法直接new一个常规通过使用一个或来获取一个FileChannel
实例
。
零拷贝
技术
在传统的内存拷贝过程中,CPU负责控制数据的传输,首先从源地址读取数据,再将数据写入目标地址。它避免了传统 I/O 操作中的多次用户态和内核态之间的上下文切换和数据拷贝,从而提高了数据传输的效率,尤其是在处理大文件时。进程通过访问这块内存,就可以访问映射文件或设备的数据,而不需要进行显式的数据拷贝。
零拷贝
并不是没有拷贝数据,而是减少用户态/内核态的切换次数以及CPU拷贝的次数。模式的数据,从而减少了 CPU 的参与,提高了数据传输效率。,显著提高了数据传输效率,减少了系统资源的消耗。
Linux_Kernel
4,469
社区成员
17,458
社区内容
发帖
与我相关
我的任务
Linux_Kernel
Linux/Unix社区 内核源代码研究区
复制链接
扫一扫
分享
社区描述
Linux/Unix社区 内核源代码研究区
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章