OSDev

для всех
Текущее время: 23 янв 2018, 12:42

Часовой пояс: UTC + 3 часа




Начать новую тему Ответить на тему  [ Сообщений: 181 ]  На страницу Пред.  1 ... 12, 13, 14, 15, 16, 17, 18, 19  След.
Автор Сообщение
 Заголовок сообщения: Re: Express OS
СообщениеДобавлено: 04 сен 2013, 00:00 

Зарегистрирован: 21 сен 2007, 17:24
Сообщения: 1026
Откуда: Балаково
Выпущена промежуточная версия 2013.09.02.
* Внедрены 2МБ страницы.
* Внедрён менеджер блоков кратностью 4КБ, но пока только для глобальной памяти. Большинство системных объектов располагается именно в ней, поэтому система уже достаточно работоспособна. Локальная память выделяется кратностью 2МБ, менеджер 4КБ блоков будет добавлен в следующей версии.
* В обработчике исключения "Ошибка страницы" исправлена ошибка связанная с гонкой потоков. Внутри этого обработчика происходит связывание виртуальных страниц с физическими страницами. Работа состоит из двух действий - подключение физической страницы к таблице страниц, и заполнении её нулями. Если при подключении страницы она сразу становится доступной параллельным процессам, то заполнение нулями пойдёт параллельно с заполнением другими данными. Подключение страницы производится в режиме супервизора, а параллельные процессы являются пользовательскими задачами, поэтому найдено простое решение. Сначала страница подключается без атрибута доступа User, лишь с атрибутом Present, таким образом некоторое время она доступна только ядру. Атрибут User добавляется после заполнения нулями.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Express OS
СообщениеДобавлено: 04 сен 2013, 00:39 

Зарегистрирован: 26 мар 2012, 17:32
Сообщения: 208
ОМГ, а зачем нулями заполнять? Прогам нефиг закладываться на значение неинициализированных переменных (то что глобальные по стандарту нули - это CRT должна делать, а не ОС). А ещё подумай что вдруг своп будешь реализовывать, а это убрать забудешь.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Express OS
СообщениеДобавлено: 04 сен 2013, 09:07 

Зарегистрирован: 28 окт 2007, 18:33
Сообщения: 1315
Откуда: Зеленоград
Обнуление применяют как одно из средств защиты от утечек информации. Например, некая физическая страница принадлежала сначала одному приложению, а потом была выделена другому без такого затирания и без загрузки какой-то информации второго приложения с диска. В результате второе приложение может получить доступ к данным первого приложения, оставшимся в данной странице.

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


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Express OS
СообщениеДобавлено: 04 сен 2013, 10:48 

Зарегистрирован: 21 сен 2007, 17:24
Сообщения: 1026
Откуда: Балаково
Да, я уже хочу в будущем обойтись без обнуления страниц, и обнулять только некоторые области. Это значительно повышает быстродействие. Если сейчас просто убрать обнуление, тогда некоторые приложения работают, а некоторые нет. Надо проанализировать это дело.
Nable писал(а):
ОМГ, а зачем нулями заполнять? Прогам нефиг закладываться на значение неинициализированных переменных (то что глобальные по стандарту нули - это CRT должна делать, а не ОС).

Нет, именно ОС. CRT обнулениями не занимается. Ну, может быть в отладочном режиме и обнуляет.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Express OS
СообщениеДобавлено: 05 сен 2013, 01:49 

Зарегистрирован: 21 сен 2007, 17:24
Сообщения: 1026
Откуда: Балаково
В версии 2013.09.03 в обработчике исключения "Ошибка страницы" исправлена ещё одна ошибка связанная с гонкой потоков, только на этот раз в страницах выделяемых механизмом Fork copy-on-write. Новая страница подключалась к приложению до копирования содержимого. Решение такое же, с помощью манипуляций атрибутов доступа. Теперь система стабильна.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Express OS
СообщениеДобавлено: 05 сен 2013, 07:48 
Аватара пользователя

Зарегистрирован: 25 июл 2013, 08:45
Сообщения: 141
Откуда: Новочеркасск
Himik писал(а):
Теперь система стабильна

Было бы интересно узнать, какие механизмы синхронизации используются в ядре


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Express OS
СообщениеДобавлено: 05 сен 2013, 12:01 

Зарегистрирован: 21 сен 2007, 17:24
Сообщения: 1026
Откуда: Балаково
В некоторых процедурах, для блокировки параллельного запуска, на входе стоит мютекс. У каждой процедуры (или группы процедур) свой флаг блокировки, поэтому разнотипные функции и процедуры могут выполняться параллельно несколькими процессорами.
В качестве мютекса используется ассемблерная команда "lock cmpxchg [%1],%2". Здесь в [%1] адрес флага, в %2 новое значение для записи, а в регистре eax значение для сравнения со старым значением [%1], и в случае равенства, %2 записывается в [%1]. В eax записывается старое значение из [%1]. В начале в eax указывается 0, а в %2 = 1. Если в результате eax <> 0, то инструкцию зацикливаем.
На выходе из процедуры флагу просто присваивается 0.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Express OS
СообщениеДобавлено: 05 сен 2013, 13:56 
Аватара пользователя

Зарегистрирован: 25 июл 2013, 08:45
Сообщения: 141
Откуда: Новочеркасск
А разве это не спин-блокировка? Просто у меня что-то похожее, и оно отчаянно глючит


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Express OS
СообщениеДобавлено: 05 сен 2013, 14:27 

Зарегистрирован: 21 сен 2007, 17:24
Сообщения: 1026
Откуда: Балаково
maisvendoo писал(а):
А разве это не спин-блокировка? Просто у меня что-то похожее, и оно отчаянно глючит

Я в этих тонкостях не разбираюсь. Основной сущностью у меня является флаг занятости. Чтобы не глючило, нужно обязательно использовать инструкцию с блокировкой шины, это либо xchg, либо команды с префиксом lock.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Express OS
СообщениеДобавлено: 05 сен 2013, 14:39 
Аватара пользователя

Зарегистрирован: 25 июл 2013, 08:45
Сообщения: 141
Откуда: Новочеркасск
У меня такое
Захват мьютекса
Код:
/*-----------------------------------------------------------------------------
 *
 *---------------------------------------------------------------------------*/
bool mutex_get(mutex_t* mutex, bool wait)
{
   bool old_value = true;

   do
   {
      asm volatile ("xchg (,%1,), %0":"=a"(old_value):"b"(mutex), "a"(old_value));

   } while (old_value && wait);

   return !old_value;
}

Освобождение мьютекса
Код:
/*-----------------------------------------------------------------------------
 *
 *---------------------------------------------------------------------------*/
void mutex_release(mutex_t* mutex)
{
   *mutex = false;
}

При использовании бывают моменты жесткого блокирования, когда эта хреновина не отпускается даже самим захватившим потоком. Пока не реализовал ничего нового, поэтому у меня анархия процессов/потоков


Вернуться к началу
 Профиль  
 
Показать сообщения за:  Поле сортировки  
Начать новую тему Ответить на тему  [ Сообщений: 181 ]  На страницу Пред.  1 ... 12, 13, 14, 15, 16, 17, 18, 19  След.

Часовой пояс: UTC + 3 часа


Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 2


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
Перейти:  
cron
Создано на основе phpBB® Forum Software © phpBB Group
Русская поддержка phpBB