Search found 25 matches: mutex_lock

Searched query: mutex_lock

by Serge
Thu Mar 22, 2012 2:02 am
Forum: Kernel
Topic: Запуск тяжелых приожений
Replies: 18
Views: 17285

Re: Запуск тяжелых приожений

... на красную тряпку, а mov [edx+TASKDATA.state], 1 в упор не видим ? А как без change_task переключится на другую задачу ? Я не в курсе. Объясняю. mutex_lock() проверяет состояние счётчика блокировок MUTEX.count и если мьютекс уже занят, добавляет текущий поток в очередь ожидания мьютекса list_add_tail ...
by Mario
Thu Mar 22, 2012 1:40 am
Forum: Kernel
Topic: Запуск тяжелых приожений
Replies: 18
Views: 17285

Re: Запуск тяжелых приожений

И вот это вот портянка: align 4 mutex_lock: dec [ecx+MUTEX.count] jns .done pushfd cli sub esp, sizeof.MUTEX_WAITER list_add_tail esp, ecx ;esp= new waiter, ecx= list head mov edx, [TASK_BASE] mov [esp+MUTEX_WAITER.task], edx .forever: mov ...
by Serge
Thu Mar 22, 2012 12:11 am
Forum: Kernel
Topic: Запуск тяжелых приожений
Replies: 18
Views: 17285

Re: Запуск тяжелых приожений

Например так

Code: Select all

        mov     ecx, heap_mutex
        call    mutex_lock
В ядре много примеров.
by Mario
Wed Mar 21, 2012 11:59 pm
Forum: Kernel
Topic: Запуск тяжелых приожений
Replies: 18
Views: 17285

Re: Запуск тяжелых приожений

Я не работал с линуксовыми мьютексами и понимаю отнюдь не всю специфику обсуждаемую.
Еще я плохо знаю Сишный синтаксис и не знаю как запись вида:

Code: Select all

void __attribute__ ((fastcall)) mutex_lock(struct mutex*);
должна выглядеть для ассемблера.
by Serge
Wed Mar 21, 2012 11:53 pm
Forum: Kernel
Topic: Запуск тяжелых приожений
Replies: 18
Views: 17285

Re: Запуск тяжелых приожений

Все описания функций ядра я даю в одной теме, разумеется её никто не читает и поиском не пользуется.
by Serge
Wed Mar 21, 2012 11:23 pm
Forum: Kernel
Topic: Запуск тяжелых приожений
Replies: 18
Views: 17285

Re: Запуск тяжелых приожений

Mario
У ядра есть свои блокирующие мьютексы: mutex_init() mutex_lock() mutex_unlock()
by Mario
Wed Mar 21, 2012 2:55 pm
Forum: Kernel
Topic: Запуск тяжелых приожений
Replies: 18
Views: 17285

Re: Запуск тяжелых приожений

SVN r. 2486 - исправление для ревизии 1275. Заменил CLI на мьютекс: push eax .wait_lock: cmp [unpack_mutex], 0 je .get_lock call change_task jmp .wait_lock .get_lock: mov eax, 1 xchg eax, [unpack_mutex] test eax, eax jnz .wait_lock pop eax stdcall unpack, [file], eax mov [unpack_mutex], 0 Да, и эти...
by CleverMouse
Fri Sep 02, 2011 10:35 pm
Forum: Distributives
Topic: "Ночные" сборки KolibriOS
Replies: 1357
Views: 591959

Re: Динамическое определение дисковых устройств

mutex_unlock проще объявить не меняющей edx, тем более что в ветке kolibri-acpi Serge поправил код. Намного опаснее ситуация с mutex_lock, которая иногда меняет edx - в принципе конвенция вызова gcc fastcall, которой следует mutex_lock, это разрешает, но не все правки r2129 это учитывают.
by Serge
Sat Aug 27, 2011 10:13 pm
Forum: Periphery
Topic: Тестируем поддержку USB
Replies: 685
Views: 253670

Re: Тестируем поддержку USB

art_zh Хозяйки нет, гуляем :D Насчет мьютексов -- в них нет никакой необходимости: можно явно размещать мессиджи только в некэшируемых страницах. Как синхронизировать доступ к ресурсам без мьютексов ? Некешируемая страница - замечательный тормоз. А если там ещё опрос в цикле, так вообще ядро встане...
by Serge
Fri Mar 19, 2010 11:21 am
Forum: Design
Topic: Новая модель ядра
Replies: 454
Views: 210188

Re: Новая модель ядра

... Реализация взята из Linux, ABI gcc fastcall. void __attribute__ ((fastcall)) mutex_init(struct mutex*); void __attribute__ ((fastcall)) mutex_lock(struct mutex*); void __attribute__ ((fastcall)) mutex_unlock(struct mutex*); структура MUTEX определена в kernel32.inc. Прежде чем использовать ...