какова функция prandom_seed_state? - PullRequest
0 голосов
/ 24 ноября 2018

ЭТО FUNC находится в 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 голосов
/ 24 ноября 2018

Функция генерирует четырехэлементный вектор состояния из 64-разрядного начального значения путем объединения 64-разрядных значений в 32-разрядное значение.Все четыре элемента в векторе состояния установлены на одно и то же значение, но используемый алгоритм требует, чтобы элементы вектора состояния не имели слишком много ведущих нулей.

Это требование объясняется в коде реализации prandom_u32()в lib/random32.c здесь .

Функция prandom_seed_state() сама по себе не является генератором псевдослучайных чисел (PRNG) - это prandom_u32() - но она требуется для инициализации состоянияPRNG.(На практике каждый поток имеет собственное псевдослучайное состояние, чтобы избежать ненужной синхронизации.)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...