prandom_seed_state的作用是什么?

时间:2018-11-24 02:41:53

标签: c linux linux-kernel

此功能位于linux-4.16.12 \ include \ linux \ random.h

static inline u32 __seed(u32 x, u32 m)
{
    return (x < m) ? x + m : x;
}

static inline void prandom_seed_state(struct rnd_state *state, u64 seed)
{
    u32 i = (seed >> 32) ^ (seed << 10) ^ seed;

    state->s1 = __seed(i,   2U);
    state->s2 = __seed(i,   8U);
    state->s3 = __seed(i,  16U);
    state->s4 = __seed(i, 128U);
}

就像随机函数一样,但是我不确定。

1 个答案:

答案 0 :(得分:2)

该函数通过将64位重新组合为32位值,从64位种子值生成一个四元素状态向量。状态向量中的所有四个元素都设置为相同的值,但是所使用的算法要求状态向量中的元素没有太多的前导零。

prandom_u32() here中的lib/random32.c实现代码中对此要求进行了说明。

prandom_seed_state()函数本身不是伪随机数生成器(PRNG),而是prandom_u32(),但是需要初始化PRNG的状态。 (实际上,每个线程都有自己的伪随机状态,以避免不必要的同步。)