Завдання на проектування
Розробити для Linux багатопоточну програмну модель наступного завдання. Мається заправна станція з двома колонками заправки бензином. На станцію заїжджають N автомашин і заправляються з будь незайнятої в цей момент колонки. Після заправки водій направляється до каси і, почекавши, якщо збирається черга, оплачує бензин. Потім повертається до автомобіля і їде зі станції, звільняючи місце. Модель повинна мати мінімальну відображення ситуації в консольному режимі з умовними зображеннями колонок і каси. Самі машини відображаються на екрані однієї з латинських букв. Переміщення умовного зображення машини до колонки бажано, переміщення водія між касою і автомобілем не потрібно, але слід якось відображати наявність черзі до каси. Очікування подій слід організувати на основі семафорів і функції очікування події. Програма повинна перед початком роботи вводити значення числа N. Відображення в текстовому режимі. br/>
Опис принципів, використаних у проекті
У сучасних ОС окрім власне процесів виділяють їх більш елементарні складові, звані нитками (threads - англійською). Інша назва цих складових російською мовою - потоки, крім того іноді використовується більш стара назва - задачі (або міні-завдання). У даному викладі буде використовуватися найменування нитка, як більш близьке до оригінальним технічним назвам розробників. p align="justify"> Зауважимо, що в ряді основоположних ОС 60-70-х років багатопрограмне функціонування ОС будувалося виключно на понятті і використанні процесів, а нитки як складові частини процесів стали широко застосовуватися відносно недавно. Тому теорія обчислювальних процесів будувалася виключно на понятті абстрактного процесу. p align="justify"> В даний час в рамках процесу можуть функціонувати кілька (і навіть багато) ниток. У найпростіших випадках у складі процесу обов'язково присутня одна нитка. Власне процес в сучасних розробках і застосуваннях спеціалізований виключно на володінні ресурсами обчислювальної системи. До ресурсів процесу відносяться області даних, які використовуються та оброблювані процесом (програмою). Більше того, оперативна пам'ять, яку процес використовує на свій розсуд, розподіляється процесу і тимчасово є як би його власністю. У сучасних ОС така пам'ять розподіляється і закріплюється за допомогою архітектурних засобів віртуальної пам'яті, якими управляє відповідна підсистема ОС. Ця підсистема - одна з найбільш важливих і відповідальних частин ОС. До інших ресурсів процесу відносять відкриті файли, які конкретизуються для процесу завдяки дескрипторах (обліково-інформаційним описувачу роботи з файлом) і позначають їх логічними номерами Хендл (handle). У багатозадачних ОС в якості ресурсів процесу з'являються дескриптори і Хендл ряду ще більш складних об'єктів (черг, конвеєрів, вікон і т.д.). p align="justify"> Хоча процес і не п...