#1 17.08.2014 07:21:50

Def
Administrator
Зарегистрирован: 08.11.2010
Сообщений: 144
IP-адрес

Изучение исходного кода ядра Linux - семафор

Здравствуйте Сеньори, изучаю сейчас исходные коды ядра Linux конкретно меня очень интересует тема процессов, семафоров и мьютексов, скачал версию ядра 3.15 распечатал себе семафор на 6 листов 4-ри листа понял а 5-тый и 6-той не доконца вообще не дошло что там происходит ( или функции завершаются или что то другое). Вообщем пожалуйста подкасиже или направте на истиный путь как вазобратся в этом куске?


static noinline void __sched __down(struct semaphore *sem)
{
    __down_common(sem, TASK_UNINTERRUPTIBLE, MAX_SCHEDULE_TIMEOUT);
}

static noinline int __sched __down_interruptible(struct semaphore *sem)
{
    return __down_common(sem, TASK_INTERRUPTIBLE, MAX_SCHEDULE_TIMEOUT);
}

static noinline int __sched __down_killable(struct semaphore *sem)
{
    return __down_common(sem, TASK_KILLABLE, MAX_SCHEDULE_TIMEOUT);
}

static noinline int __sched __down_timeout(struct semaphore *sem, long jiffies)
{
    return __down_common(sem, TASK_UNINTERRUPTIBLE, jiffies);
}

static noinline void __sched __up(struct semaphore *sem)
{
    struct semaphore_waiter *waiter = list_first_entry(&sem->wait_list,
                        struct semaphore_waiter, list);
    list_del(&waiter->list);
    waiter->up = true;
    wake_up_process(waiter->task);
}

#2 20.08.2014 07:07:42

Def
Administrator
Зарегистрирован: 08.11.2010
Сообщений: 144
IP-адрес

Изучение исходного кода ядра Linux - семафор

Я нащёл ответ на счет static inline - Ключевое слово inline необходимо для оптимизации выполнения функций,
интегрируя код этих функций в вызывающий код. Ядро Linux использует множество inline-функций, обьявленных статическими "static inline"-функция заставляет компилятор стараться внедрять код функции во все вызывающие ее участки кода и, если это возможно, избегать ассемблирования кода этой функции.Иногда компилятор не может обойтись без ассемблирования кода (в случае рекурсий), но в большинстве случаем функции, обьявленные как static inline, полностью внедряются в вызывающий код.
Целью такого внедрения является устранение всех лишних операций, выполняемых при вызове функции.Выражение #define так же позволяет убрать связанные с вязовом функции операции и обычно используется для обеспечения портируемости на другие компиляторы и встраиваемые системы.

Источник Linux Азбука ядра
(авторы Клаудия Зальезберг,Родригес Гордон Фишер,Стивен Смолски.)

Большое спасибо за внимание, тема закрыта так как ответ найден.

Board footer