阅读:3685回复:20
请教对2.6内核的网络部分熟悉的高人 net_random_init()
请问2.6内核的网络部分 net_random_init()的nrnd_state per_cpu_net_rand_state[cpu]的作用?
为何要产生随即值? utils.c的代码含义, 协议中为何要加入此模块? |
|
沙发#
发布于:2007-03-07 11:04
#define per_cpu(var, cpu) (*((void)(cpu), &per_cpu__##var))
for_each_possible_cpu(i) { struct nrnd_state *state = &per_cpu(net_rand_state,i); __net_srandom(state, i+jiffies); } state就是{i,per_cpu_net_rand_state}组合,初始化state值.以便get_cpu_var(net_rand_state)中使用. static void __net_srandom(struct nrnd_state *state, unsigned long s) { if (s == 0) s = 1; /* default seed is 1 */ #define LCG(n) (69069 * n) state->s1 = LCG(s); state->s2 = LCG(state->s1); state->s3 = LCG(state->s2); /* "warm it up" */ __net_random(state); __net_random(state); __net_random(state); __net_random(state); __net_random(state); __net_random(state); } 追踪一下,可以发现get_cpu_var和per_cpu功能是相同的, struct thread_info { struct task_struct *task; /* main task structure */ struct exec_domain *exec_domain; /* execution domain */ unsigned long flags; /* low level flags */ unsigned long status; /* thread-synchronous flags */ __u32 cpu; /* current CPU */ int preempt_count; /* 0 => preemptable, <0 => BUG */ mm_segment_t addr_limit; /* thread address space: 0-0xBFFFFFFF for user-thead 0-0xFFFFFFFF for kernel-thread */ struct restart_block restart_block; unsigned long previous_esp; /* ESP of the previous stack in case of nested (IRQ) stacks */ __u8 supervisor_stack[0]; }; 2.6内核是抢占式内核,抢占式内核对普通Linux内核作了如下的一些修改: 抢占式内核给task struct数据结构增加了一个数据项:preempt_count。该数据项由宏preempt_disable()、preempt_enable()、以及preempt_enable_no_resched()所使用。preempt_disable对preempt_count计数进行递增,preempt_enable对preempt_count进行递减。preempt_enable宏查看当前进程的preempt_count和need_resched域的内容,如果 preempt_count为0并且need_resched为1,则调用preempt_schedule()函数。该函数将给当前进程的preempt_count项增加一个很大的值(比如让preempt_counter=preempt_counter + 0x4000000),然后调用进程调度函数schedule(),在schedule函数返回后从该进程preempt_count中再减去该值。可抢占内核也修改了schedule函数,它检测进程的preempt_counter是否很大(这是为了屏蔽一些普通调度流程中对于抢占式调度来说是冗余的那些操作),然后执行抢占式调度。 |
|
|
板凳#
发布于:2007-03-07 11:28
谢谢!
初始化时s1,s2,s3的值取决与cpu id 与jiffies , 功能含义?平常此三个值的含义?[看进程调度很复杂] |
|
地板#
发布于:2007-03-07 16:01
这是随机值,没有什么具体含义。约随机越好。平时cpu id针对是smp体系中的cpu,jiffies 当然就是嘀嗒数了
|
|
|
地下室#
发布于:2007-03-07 17:01
谢谢
我是问s1 s2 s3 的,为何要特意复杂地初始化,随机指定几个值不就行了?! |
|
5楼#
发布于:2007-03-12 09:04
那你最好看看加密算法关于随即值计算方面的
|
|
|
6楼#
发布于:2007-03-12 09:11
引用第5楼cyliu于2007-03-12 09:04发表的“”: 我是想问在此处为何特意要如此----产生随机值的含义? |
|
7楼#
发布于:2007-03-12 09:30
初始化阿,应该相当于srand。我不明白你的意思,你是说不用产生没啊?没有初始化,怎么产生随即值啊。
|
|
|
8楼#
发布于:2007-03-12 11:22
引用第7楼cyliu于2007-03-12 09:30发表的“”: 为何要产生随即值? utils.c的含义, 协议中为何要加入此模块? |
|
9楼#
发布于:2007-03-21 17:14
是否为了防止数据包的碰撞冲突,在一个随即时间尝试重发.
|
|
10楼#
发布于:2007-03-21 19:02
很多地方都需要用到随机数阿。如xfrm,route路由都需要。
|
|
|
11楼#
发布于:2007-03-22 08:40
引用第10楼cyliu于2007-03-21 19:02发表的“”: 望能详细介绍一下 |
|
12楼#
发布于:2007-03-22 14:55
我不明白你到底想要了解什么啊?如果只是验证是否使用随机数,察看一下源码都可以看到;如果说为什么要用随机数,原因可能很多阿:防止重复分配Id,防止攻击等等;如果说为什么要初始化随机,这里随机算法应该有说明。
|
|
|
13楼#
发布于:2007-03-22 17:10
引用第12楼cyliu于2007-03-22 14:55发表的“”: 谢谢! 防止重复分配Id ,防止攻击 能讲的更详细一些如何使用上述的随即数 |
|
14楼#
发布于:2007-03-26 13:20
请版主能向上面的问题详细讲解一下.谢谢!
|
|
15楼#
发布于:2007-03-29 10:11
你的问题能否明确一下,不知道你到底想要问什么?
|
|
|
16楼#
发布于:2007-03-29 12:49
引用第15楼cyliu于2007-03-29 10:11发表的“”: 爱小学都没毕业,不认识几个字! |
|
17楼#
发布于:2007-03-29 13:08
我不明白你到底想探讨如何防止重复分配Id ,如何还是防止攻击 或者是如何使用随即数,再或者是随基数在防止重复分配Id / 防止攻击方面的应用等等。
看来生气了。算我多事了!期望其他人能够来继续讨论! |
|
|
18楼#
发布于:2007-04-09 13:41
麻烦问一下cyliu版主
2.4内核不是抢占式内核? 对linux比较感兴趣,不太了解见笑了 |
|
|
19楼#
发布于:2007-04-09 16:34
2.4还不是真正意义上的抢占式内核,内核处理是不能被强占的。但是2.6内核已经实现了真正意义上抢占执行任务。
共同学习 |
|
|
上一页
下一页