Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.
Легковесный статический 
анализ для поиска 
состояний гонок в ядре 
операционной системы 
Павел Андрианов 
andrianov@ispra...
2 
Состояние гонки 
int global; 
Thread 1 
{ 
... 
global = 1; 
... 
} 
Thread 2 
{ 
... 
global = 2; 
... 
}
3 
Мотивация 
● Ошибки, связанные с параллельным 
выполнением, составляют 20% от всех 
ошибок в файловых системах ОС Linux...
4 
Основные алгоритмы для поиска 
гонок 
● Happens-Before – строит зависимости 
между операциями 
● Lockset – потенциальны...
5 
Особенности ядра 
операционной системы 
● Неявное создание потоков 
● Активное использование арифметики 
указателей 
● ...
6 
Модель потоков 
● Функция main содержит вызовы 
обработчиков событий, 
системные вызовы и другие 
функции ядра 
● Счита...
7 
Модель памяти 
Переменные 
Поля структур 
Глобальные 
переменные 
Локальные 
переменные 
A->x = B->x 
A->x ≠ A->y 
f::a...
8 
Реализация 
Анализ 
разделяемых 
данных 
Исходный код 
Список разделяемых 
переменных 
Анализ 
примитивов 
синхронизаци...
9 
Визуализация предупреждений
10 
Результаты 
● Было проанализировано ядро ОС РВ с 
>200 000 строками кода (25% покрытие) 
● Найдено 20 состояний гонок,...
11 
Спасибо за внимание 
Вопросы?
Upcoming SlideShare
Loading in …5
×

Lightweight Static Analysis for Data Race Detection in Operating System Kernels

1,947 views

Published on

Pavel Andrianov, Alexey Khoroshilov, Vadim Mutilin, ИСП РАН, Moscow

Published in: Science
  • Be the first to comment

  • Be the first to like this

Lightweight Static Analysis for Data Race Detection in Operating System Kernels

  1. 1. Легковесный статический анализ для поиска состояний гонок в ядре операционной системы Павел Андрианов andrianov@ispras.ru http://linuxtesting.org/project/ldv/ Institute for System Programming of the Russian Academy of Sciences
  2. 2. 2 Состояние гонки int global; Thread 1 { ... global = 1; ... } Thread 2 { ... global = 2; ... }
  3. 3. 3 Мотивация ● Ошибки, связанные с параллельным выполнением, составляют 20% от всех ошибок в файловых системах ОС Linux (A Study of Linux File System Evolution, FAST'13) ● Состояния гонок составляют 17% от всех ошибок в драйверах ОС Linux (Анализ типовых ошибок в драйверах ОС Linux, Труды ИСП РАН)
  4. 4. 4 Основные алгоритмы для поиска гонок ● Happens-Before – строит зависимости между операциями ● Lockset – потенциальным состоянием гонки называется ситуация, в которой доступ к одним и тем же разделяемым данным происходит с непересекающимся множеством блокировок, при этом одно из обращений является записью.
  5. 5. 5 Особенности ядра операционной системы ● Неявное создание потоков ● Активное использование арифметики указателей ● Использование специальных примитивов синхронизации
  6. 6. 6 Модель потоков ● Функция main содержит вызовы обработчиков событий, системные вызовы и другие функции ядра ● Считается, что все функции, вызываемые из main, могут выполняться параллельно int main() { switch (undef_int()) { case 0: func1(); break; case 1: func2(); break; ... } }
  7. 7. 7 Модель памяти Переменные Поля структур Глобальные переменные Локальные переменные A->x = B->x A->x ≠ A->y f::a ≠ g::a f::a->x = g::a->x A ≠ B struct mystruct { int *x; int *y; } *A, *B; int f() { struct mystruct *a; ... } int g() { struct mystruct *a; ... }
  8. 8. 8 Реализация Анализ разделяемых данных Исходный код Список разделяемых переменных Анализ примитивов синхронизации Отчет Список функций, предоставляющих локальные данные (malloc и др.) Описание примитивов синхронизации
  9. 9. 9 Визуализация предупреждений
  10. 10. 10 Результаты ● Было проанализировано ядро ОС РВ с >200 000 строками кода (25% покрытие) ● Найдено 20 состояний гонок, признанных разработчиками
  11. 11. 11 Спасибо за внимание Вопросы?

×