- •1.Классификация программного обеспечения(по). Базовый уровень по. Системный уровень по. Драйверы. Служебный уровень по. Утилиты. Прикладной уровень по.
- •2.Операционная система(ос). Классификация ос. Эволюция ос. Функции ос. Разновидности ос.
- •Современный этап развития ос
- •3. Обобщенная модель иерархической ос(13 уровней).
- •5. Понятие процесса и потока(нити). Классификация процессов. Многозначность и многопоточность. Проблемы разработки приложений для многопоточной среды.
- •6. Состояния процесса. Многоуровневые модели состояний (5,6,7) процесса. Причины переходов из одного состояния в другое. Причины возникновения и завершения процессов.
- •Модель с пятью состояниями
- •7.Трехуровневое планирование. Оптимизация работы системы: буферизация, кэширование, свопинг.
- •Алгоритм трёхуровневое планирование
- •8.Ресурсы компьютерной системы. Классификация ресурсов. Распределение и управление ресурсами. Управление памятью.
- •9. Планирование в однопроцессорных системах. Планирование в системах пакетной обработки, системах реального времени и интерактивных системах. Алгоритмы планирования. Планировщики.
- •10.Взаимодействующие процессы. Определение и уровни взаимодействия. Классификация средств обмена информацией.
- •11. Программно-аппаратные решения проблем взаимодействующих процессов (posix, монитор Хоара, алгоритм Деккара, примитивы Дейкстра, семафоры, мьютексы и др.).
- •12. Проблемы взаимодействующих процессов: "Обедающие философы", "Читатели и писатели", "Спящий брадобрей". Описание и решения задач.
- •13. Пользовательский интерфейс ос. Классификация, примеры.
- •Текстовые ос
- •Графические ос
- •Речевые ос
- •14.Файловые системы. Файловая система fat (таблица размещения, структура загрузочной записи). Примеры файловых систем: fat32, vfat, ntfs и hpfs.
- •Корневой каталог root
- •15.Типовые средства аппаратной поддержки операционных систем, bios.
12. Проблемы взаимодействующих процессов: "Обедающие философы", "Читатели и писатели", "Спящий брадобрей". Описание и решения задач.
Проблема разбивается на три пункта:
обмен информацией между процессами,
недопущение конфликтных ситуаций,
согласование действий процессов.
Последние две проблемы можно объединить в одну и назвать ее «Синхронизация
"Обедающие философы".
С уть задачи обедающие философы в следующем. Имеется круглый стол, за которым сидят пять философов (впрочем, их число принципиального значения не имеет – для другого числа философов решение будет аналогичным). Перед каждым из них лежит тарелка с едой, слева и справа от каждого – две китайские палочки. Философ может находиться в трех состояниях: проголодаться, думать и обедать. На голодный желудок философ думать не может. Но начать обедать он может, только если обе палочки слева и справа от него свободны. Требуется синхронизировать действия философов. В данном случае общим ресурсом являются палочки.
При решении задачи будем использовать массив семафоров chopstick, описывающий текущее состояние палочек: chopstick[i] закрыт, если палочка занята, открыт – если свободна:
semaphore chopstick [5] = { 1, 1, 1, 1, 1};
Алгоритм реализации действий философа i имеет вид:
do {
wait (chopstick [i]); /* взять левую палочку */
wait (chopstick [(I + 1) % 5]); /* взять правую палочку */
. . .
обедать
. . .
signal (chopstick [i]); /* освободить левую палочку */
signal (chopstick [(i+1) % 5]); /* освободить правую палочку */
. . .
думать
. . .
while (1);
Используется массив, в котором отслеживается, чем занимается философ: ест, размышляет или пытается взять вилки. Перейти в состояние приема пищи философ может, только если в этом состоянии не находится ни один из его соседей. Голодный философ может блокироваться, если нужная ему вилка занята.
"Читатели и писатели".
Базу данных разделяют два типа процессов — читатели и писатели Читатели выполняют транзакции, которые просматривают записи базы данных, а транзакции писателей и просматривают, и изменяют записи. Предполагается, что вначале база данных находится в непротиворечивом состоянии (т.е. отношения между данными имеют .смысл). Каждая отдельная транзакция переводит базу данных из одного непротиворечивого состояния в другое. Для предотвращения взаимного влияния транзакций процесс-писатель должен иметь исключительный доступ к базе данных Если к базе данных не обращается ни один из процессов-писателей, то выполнять транзакции могут одновременно сколько угодно читателей. В одном из решений первый читатель для получения доступа к БД выполняет в отношении семафора db операцию down. А все следующие читатели просто увеличивают значение счетчика. Как только читатели прекращают свою работу, они уменьшают значение счетчика, а последний из них выполняет в отношении семафора операцию up, позволяя заблокированному писателю, если такой имеется, приступить к работе. Одновременная работа двух читателей разрешена. Писатель не может получить доступ к БД, ьак как писатели должны иметь исключительный доступ, поэтому писатель приостанавливает свою работу. До тех пор пока не останется ни одного читателя, то есть вполне возможно писатель вообще не получит доступ. Чтобы предотвратить такую ситуация, писатель должен дожидаться лишь окончания работы тех читателей, которые были активны при его прибытии.
"Спящий брадобрей".
В парикмахерской есть один брадобрей, его кресло и n стульев для посетителей. Если желающих воспользоваться его услугами нет, брадобрей сидит в своем кресле и спит. Если в парикмахерскую входит клиент, он должен разбудить брадобрея. Если клиент приходит и видит, что брадобрей занят, он либо садится на стул(если есть место), либо уходит(мет нет). Необходимо запрограммировать брадобрея и посетителей так, чтобы избежать состояния состязания. В решении можно использовать три семафора: customers, для подсчета посетителей(клиент в кресле брадобрея не считается); barbers - количество брадобреев, 0/1; mutex - для реализации взаимного исключения. Также используется переменная waiting, предназначенная для подсчета ожидающих посетителей. Она является копией переменной customers.(прочитать текущее значение семафора невозможно).
Посетитель, заглядывающий в парикмахерскую, должен сосчитать количество ожидающих посетителей. Если посетителей меньше, чем стульев, новый посетитель остается, в противном случае он уходит.
Когда брадобрей приходит на работу, он выполняет процедуру barber, блокируясь на семафоре customers, поскольку значение семафора равно 0. Затем брадобрей засыпает и спит, пока не придет новый клиент. Приходя в парикмахерскую, посетитель выполняет процедуру customer, запрашивая доступ к multex для входа в критическую область. Затем проверяет наличие свободных стульев, в случае неудачи, освобождает доступ к multex. Если свободный стул есть, посетитель увеличивает значение переменной waiting. Затем он выполняет процедуру up а семафоре customers , тем самым активируя поток брадобрея. В этот момент они оба активны. Когда посетитель освобождает доступ к multex, брадобрей захватывает его , проделывает некоторые служебные операции и начинает стричь клиента. По окончании стрижки посетитель выходит из процедуры и покидает парикмахерскую. В отличие от предыдущих программ, цикла посетителя нет, поскольку каждого посетителя стригут только одни раз. Цикл брадобрея существует, и брадобрей пытается найти следующего посетителя. Если ему это удается, он стрижет следующего посетителя, в противном случае засыпает.