Search found 25 matches: mutex_lock
Searched query: mutex_lock
- 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 ...
- 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 ...
- 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
- 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*);
- Wed Mar 21, 2012 11:53 pm
- Forum: Kernel
- Topic: Запуск тяжелых приожений
- Replies: 18
- Views: 17285
Re: Запуск тяжелых приожений
Все описания функций ядра я даю в одной теме, разумеется её никто не читает и поиском не пользуется.
- Wed Mar 21, 2012 11:23 pm
- Forum: Kernel
- Topic: Запуск тяжелых приожений
- Replies: 18
- Views: 17285
Re: Запуск тяжелых приожений
Mario
У ядра есть свои блокирующие мьютексы: mutex_init() mutex_lock() mutex_unlock()
У ядра есть свои блокирующие мьютексы: mutex_init() mutex_lock() mutex_unlock()
- 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 Да, и эти...
- 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 это учитывают.
- Sat Aug 27, 2011 10:13 pm
- Forum: Periphery
- Topic: Тестируем поддержку USB
- Replies: 685
- Views: 253670
Re: Тестируем поддержку USB
art_zh Хозяйки нет, гуляем :D Насчет мьютексов -- в них нет никакой необходимости: можно явно размещать мессиджи только в некэшируемых страницах. Как синхронизировать доступ к ресурсам без мьютексов ? Некешируемая страница - замечательный тормоз. А если там ещё опрос в цикле, так вообще ядро встане...
- 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. Прежде чем использовать ...