![]() |
|
Модераторы: xvr |
![]()
|
|
| Flashdown |
|
|||
![]() Шустрый ![]() Профиль Группа: Участник Сообщений: 85 Регистрация: 27.5.2006 Где: Москва Репутация: нет Всего: нет |
Рассмотрим очень простую операционную систему, состоящую из главного процесса М, работающего с центральным процессором, читающего процесса R, который работает с читающим каналом, и печатающего процесса Р, который работает с печатающим каналом. Запрограммируйте эти три процесса так, чтобы процесс R читал данные и передавал их процессу М, который обрабатывал бы эти данные и передавал процессу Р для выдачи на печать. Запрограммируйте процессы М, R и Р для случаев, когда имеются (a) два буферных пула, содержащие по К буферов;(b) один буферный пул, содержащий К. буферов.
Подскажите, как это сделать! |
|||
|
||||
| bsa |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 9185 Регистрация: 6.4.2006 Где: Москва, Россия Репутация: 16 Всего: 196 |
Причем здесь юникс?
Что за буферные пулы и между какими процессами они находятся? Я, например, эту часть вообще не понял. Это многопоточная программа или как? |
|||
|
||||
| GrayCardinal |
|
|||
|
Фигасе ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 3039 Регистрация: 9.11.2003 Репутация: 8 Всего: 58 |
Flashdown,
Можно через сокеты, можно через IPC, можно тупо через файловую систему, да мало ли. $ man 2 ipc |
|||
|
||||
| Flashdown |
|
|||
![]() Шустрый ![]() Профиль Группа: Участник Сообщений: 85 Регистрация: 27.5.2006 Где: Москва Репутация: нет Всего: нет |
вот надо через IPC
|
|||
|
||||
| GrayCardinal |
|
|||
|
Фигасе ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 3039 Регистрация: 9.11.2003 Репутация: 8 Всего: 58 |
Flashdown,
Через IPC ?Да не вопрос. Код самих процессов -то есть ? R и P ? Это тупая работа, так что увольте Еще пулы будешь сам делать, как один буфер сварганить покажу, дальше по аналогии... Будут проблемы - обращайся. Есть такая фиговина, называется семафоры (mutex). Код (из новой dlib-ы, которую я на днях выложу... наверно. http://sf.net/projects/silenbob)
Вот этим можно решать траблы с блокировкой. Сервак делает sem_init c "ключом" KEY (вообще туда адрес передается на int переменную в которой будет ключ). Клиентура - semget (KEY...) $ man 2 semget Если надо пользовать ID, который дал semget(2) (не sem_init), просто результат в переменную загоняешь (int) и можно все преведенные функции пользовать. Т.е. 1. Клиент делает down_write, пишет данные, делает up_write когда закончит. 2. Сервер делает down_read, читает данные, делает up_read когда закончит. Можно заменить на "простые" down/up, суть не меняется. И все работает без косяков. (в "догонялки" никто не играет). Скорее всего понадобится один для каждого буфера, но это не проблема - там их 9999 свободных если не ошибаюсь, и никто не пользует... В общем код глянь и RTFM. Там основная идея - что все операции (sigactions) - атомарные. Вообще по IPC неплохо справочник иметь под ручками... Вторая проблема - сам буфер(ы) (для процесса M) Тут вообще просто #include <ipc.h> int size = 4096; char * ptr; ptr = (char *) shmget (KEY, size, IPC_CREAT); На серваке (M), без IPC_CREAT на клиентуре ®. Еще на сервере можно настроечки выставить $ man 2 shmctl Ключи выбирай "от фанаря", главное чтоб во всех процессах совпадали. На счет того, чтоб сообщить процессу M что данные типа есть, лично я бы для данного случая тупо включил таймер $ man 2 alarm $ man 2 signal И не парился. Но можно попробовать через $ man 2 msgget Чтоб мессаги кидать. Сам не пользовался, рассказать не могу... Но вроде ничего сложного. |
|||
|
||||
| GrayCardinal |
|
|||
|
Фигасе ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 3039 Регистрация: 9.11.2003 Репутация: 8 Всего: 58 |
Все, отбил желание задачку решать ?
|
|||
|
||||
| bilbobagginz |
|
|||
![]() Naughtius Maximus ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 8813 Регистрация: 2.3.2004 Где: Israel Репутация: 4 Всего: 317 |
мне кажется ему задание неполное дали: для решения требуется знать какие средства есть в этой 'очь просто оперативной системе', под которую у него задание.
также обычно в домашках ограничивают: это можно а это низзя. он наверное за второй и третьей страничкой домашки поехал... -------------------- Я ещё не демон. Я только учусь. |
|||
|
||||
| GrayCardinal |
|
|||
|
Фигасе ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 3039 Регистрация: 9.11.2003 Репутация: 8 Всего: 58 |
bilbobagginz,
Бывает |
|||
|
||||
| Flashdown |
|
|||
![]() Шустрый ![]() Профиль Группа: Участник Сообщений: 85 Регистрация: 27.5.2006 Где: Москва Репутация: нет Всего: нет |
а помоему условие нормальное...
использовать можно семафоры, сигналы, разд. память, и очереди сообщ..... ну вобщем я это уже сделал.. graycardinal , спасибо |
|||
|
||||
| regis |
|
|||
|
Бывалый ![]() Профиль Группа: Участник Сообщений: 232 Регистрация: 12.12.2005 Где: Москва, Россия Репутация: нет Всего: 7 |
Судя по формулировке задачи ("...состоящую из главного процесса М, работающего с центральным процессором..."), ОС вообще имеет микроядерную архитектуру.
--------------------
В. В чем разница между hardware и software?О. В отличие от второго, по первому можно двинуть кулаком или пнуть ногой. |
|||
|
||||
![]()
|
| Правила форума "С/С++: Программирование под Unix/Linux" | |
|
|
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, xvr. |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | C/C++: Программирование под Unix/Linux | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |