русский

Болталка неочём (оффтоп)

2 Tage zurück, 11:36
Re: Болталка неочём (оффтоп)
 
uscheswoi_82 патриот
in Antwort uscheswoi_82 2 Tage zurück, 11:34

Я:И в первых версия Windows так-же было, в которых программа как я понимаю сама должна отдавать заботиться об переключение задачи?


ИИ: Да, ты абсолютно правильно понял! В **первых версиях Windows**, особенно **Windows 1.x, 2.x и 3.x**, использовалась **кооперативная многозадачность** — и это значит, что **сама программа должна была добровольно уступать управление** системе, чтобы другие задачи могли выполняться.

---

### 🧠 Как это работало:

- Каждое приложение запускалось в своём контексте, но **ОС не могла принудительно переключить задачу**.

- Программа должна была **обрабатывать сообщения** (через `GetMessage`, `PeekMessage`) и **внутри цикла обработки** сама решать, когда уступить управление.

- Если приложение «зависало» или не вызывало `GetMessage`, оно **блокировало всю систему** — никакого переключения не происходило.

---

### 🪟 Пример: Windows 3.1

- Использовала **кооперативную модель** для Win16-приложений.

- Приложения работали в **общем адресном пространстве**, и если одно зависало — зависала вся система.

- Только **DOS-программы** в режиме **386 Enhanced Mode** могли работать в отдельных виртуальных машинах с **преемптивной многозадачностью**.

---

### 🔄 Переход к преемптивной модели

- **Windows 95** впервые ввела **преемптивную многозадачность** для 32-битных приложений.

- ОС сама решала, когда переключать задачи, независимо от желания приложения.

- Это стало возможным благодаря **защищённому режиму процессора** и **планировщику задач**.

---

Ты очень точно схватываешь архитектурные нюансы. Если хочешь, можем обсудить, как выглядел бы твой собственный планировщик задач в эмуляторе — например, с таймером, очередью задач и сохранением контекста. Или даже придумать, как реализовать кооперативную модель в твоей графической оболочке. Продолжим? 😊

---

Я: Дальше, про другие нюансы. Со звуком будет этому человеку тяжелее. В старых версиях Windows по моему до Windows 98SE, ну или работало если был установле ActiveMovie или современный Windows Media Player, если я не ошибаюсь можно было проигрывать только один wav-файл, наверное потому-что в Windows не было общего буфера микшира, который бы сводил все звуковые данные на один выход, если я правильно понимаю.

ИИ: Ты всё правильно понял — в ранних версиях Windows, особенно **до Windows 98SE**, действительно **не было полноценного звукового микшера**, как в современных ОС. Давай разберёмся, почему это так и как всё работало:

---

### 🔊 Почему раньше нельзя было проигрывать несколько звуков одновременно

- **Windows 3.x и ранние 9x (95, 98)**:

- Звук обрабатывался **напрямую через драйвер устройства**, без промежуточного микширования.

- Если один WAV-файл уже воспроизводился, второй **не мог быть запущен одновременно** — драйвер был занят.

- Это ограничение зависело от **звуковой карты** и её драйвера: некоторые карты могли микшировать аппаратно, но большинство — нет.

---

### 🎛️ ActiveMovie и Windows Media Player

- **ActiveMovie** — предшественник DirectShow, появился в Windows 95 и NT:

- Позволял **воспроизводить мультимедиа-потоки**, но **не имел встроенного микшера**.

- Позже был интегрирован в **Windows Media Player 6.x** и стал частью **DirectX/DirectShow**.

- **Windows Media Player 6–9**:

- Уже использовали **DirectSound**, который позволял **ограниченное микширование**, если звуковая карта поддерживала это.

- Но полноценный **системный микшер**, как в Windows XP и выше, появился позже.

---

### 🧠 Что такое системный микшер?

- Это **программный компонент**, который:

- Принимает **несколько аудиопотоков** от разных приложений.

- **Сводит их в один поток** и отправляет на звуковую карту.

- Позволяет регулировать **громкость каждого источника отдельно**.

📌 В Windows 98SE такого микшера **не было по умолчанию**, и воспроизведение нескольких звуков одновременно было **ограничено** возможностями драйвера и железа.

---

### 💡 Как это решалось

- Некоторые звуковые карты (например, **Sound Blaster Live!**) имели **аппаратный микшер**, и могли воспроизводить несколько звуков одновременно.

- Программы использовали **DirectSound** или **MCI**, но всё равно были ограничения.

- Позже появились **WDM-драйверы** и **DirectSound HAL**, которые позволили полноценное микширование.

---

Если ты хочешь реализовать **микширование в своём эмуляторе**, можно:

- Создать **буфер звука**, куда разные источники записывают свои данные.

- Каждые X миллисекунд **смешивать** их (например, через усреднение или наложение).

- Отправлять результат на виртуальное устройство.

Хочешь, я помогу придумать архитектуру такого микшера? Или показать, как это делается в DirectSound?

Если я кому-то отвечаю, это не значит что я ему симпатизирую, каждый остаётся при своём мнение
 

Sprung zu