Ага. Уже разобрался. Это особенность двух близких микроархитектур Sandy Bridge и Ivy Bridge в отличие от исключения при установленном бите cr0.ts, которое всегда работает. Кроме того компиляторы стараются защитить программистов от выстрела в ногу и не генерируют sse и avx код в одном объектном файле.
А при чём здесь AVX? Первоначально речь шла о movaps которая к AVX не относится. Это команда SSE. А внутренняя кухня процессора при использовании разных наборов команд дело тёмное. Откуда эта информация про теневое копирование? И для чего? Регистры ymm удваивают xmm и совпадают по формату. Это же не альяс fpu/mmx.
Я один из разработчиков ОС Колибри и как раз делал переключение контекста fpu/sse. Поэтому знаю как всё работает. Обычно применяют отложенное переключение контекста. При установленном в 1 бите TS регистра cr0 первая команда сопроцессора вызывает исключение 7(#NM). Ядро сбрасывает бит TS и производит переключение контекста сопроцессора. Поэтому сложно сказать сколько тактов на самом деле займёт команда. На мой взгляд применять simd нет смысла, если объём данных меньше пары килобайт. С учётом длинных регистров avx планка ещё выше. В принципе ядро может отслеживать количество исключений для каждого процесса, и если сопроцессор активно используется переключать контекст сразу. Не знаю, используется такая схема или нет.
Портирована Mesa 9.2.5. Это адаптеры Intel поколений Gen3-Gen7. Новые версии Mesa требуют pthreads, которая пока не готова. libva версии 1.6.2.
Поддерживаются динамические библиотеки в формате PE DLL. Портированных пока немного, минимальный набор для работы с графикой и текстом.
Сделать специальный конус и стыковаться в сопло отказавшего двигателя. Там сопло с большим удлинением, значит будет надёжный контакт и упрощается центрирование всей конструкции по вектору тяги. Понадобится подсветка, камеры и софт для распознавания видео.
Они просто не позволяет в библиотеке быть игре с неработающей защитой.
Не уверен. У меня стоит несколько копий стимовской Kerbal Space Program разных версий и с разным набором модов. Замечательно запускаются без загрузки стима. Защита тат явно отсутствует.
Смех смехом, но все легкодоступные месторождения меди и олова давно исчерпаны. Если человечество откатится в каменный век, нового бронзового века уже не будет.
Когда начинали разрабатывать Арес никто и не помышлял, что появятся частники со своими ракетами. А теперь с одной стороны, потратив гигантские средства разработчики вышли на финишную прямую, а с другой появляется дешёвая альтернатива. В НАСА уже нет единства. Одни хотят доделать носитель, а потом выбивать под него программы. Другие считают, что на эти деньги можно было половину солнечной системы исследовать.
Да. Баллон с гелием под давлением в 10.7 МPa. Наддув применялся для двигателей с не очень высокой тягой, примерно до 100КН. А у третьего блока P7 тяга 270КН.
Интересно, американцы активно применяли твёрдотопливные двигатели на последних ступенях из-за простоты их запуска.
Водопроводчики-сантехники и ассенизаторы и сейчас неплохо зарабатывают. Не стоит думать, что они занимаются этим, чтобы не умереть с голоду. Есть не брезгливые люди, готовые на грязную работу за хорошее вознаграждение.
После отключения двигателей перед разделением ступеней топливо в баках взбалтывается и в трубопроводах могут возникнуть газовые пробки. Это приведёт к срыву потока на турбокомпрессоре и двигатель не запустится. Американцы для осаждения топлива применяли небольшие твёрдотопливные ускорители а наши запускают двигатели до отделения ступени.
могу предположить, что если кто-то ждёт нашего запертого спинлока, то ядро переводит страницу со спинлоком в r/o и по пейджфолту выясняет, когда мы его отпираем
Это слишком сурово. Фьютекс усыпляет поток, пока значение блокировки равно проверяемому значению. У мьютекса три состояния: 0 — свободен, 1 — захвачен одним потоком, 2 — захвачен и есть ожидающие потоки.
<code class="cpp">mutex_lock(mutex *lock)
{
//увеличиваем блокировку на 1 и проверяем предыдущее значение
//если был 0, то теперь там 1 и поток успешно захватил мьютекс
if(xchg_add(&lock,1) == 0)
return;
//ядро приостановит поток пока lock равен 2
while(xchg(&lock, 2) != 0)
syscall_futex(&lock, 2);
}
В идеальном случае lock равен 0 и захват обойдётся в одну операцию xchg_add (xadd для x86)
mutex_unlock(mutex *lock)
{
if(xchg(&lock, 0) != 1)
{
//есть ожидающие потоки
//разбудим один
syscall_futex_wake(&lock,1);
}
}
Аналогично, если нет ожидающих потоков lock равен 1 и освобождение происходит за одну операцию xchg,
в противном случае вызывается FUTEX_WAKE </code>
Поддерживаются динамические библиотеки в формате PE DLL. Портированных пока немного, минимальный набор для работы с графикой и текстом.
Интересно, американцы активно применяли твёрдотопливные двигатели на последних ступенях из-за простоты их запуска.
<code class="cpp">mutex_lock(mutex *lock) { //увеличиваем блокировку на 1 и проверяем предыдущее значение //если был 0, то теперь там 1 и поток успешно захватил мьютекс if(xchg_add(&lock,1) == 0) return; //ядро приостановит поток пока lock равен 2 while(xchg(&lock, 2) != 0) syscall_futex(&lock, 2); } В идеальном случае lock равен 0 и захват обойдётся в одну операцию xchg_add (xadd для x86) mutex_unlock(mutex *lock) { if(xchg(&lock, 0) != 1) { //есть ожидающие потоки //разбудим один syscall_futex_wake(&lock,1); } } Аналогично, если нет ожидающих потоков lock равен 1 и освобождение происходит за одну операцию xchg, в противном случае вызывается FUTEX_WAKE </code>