Translate

среда, 13 февраля 2013 г.

Глава 1

Вопрос 21. Предположим, что компьютер исполняет 1 млрд инструкций в секунду, а системный вызов включает 1000 инструкций, считая прерывание и переключение контекста. Сколько системных вызовов в секунду способен обработать компьютер при условии, что половина ресурсов процессора тратится на исполнение кода приложений?

Т.к. половина ресурсов тратится на исполнение кода приложений, у нас остается 500 млн. инструкций на системный вызовы, произведя несложные математические операции получим, что данный компьютер способен обработать 500 тысяч системных вызовов в секунду.

Глава 1

Вопрос 20. Рассмотрите список системных вызовов, приведенный в табл. 1.1. Какие, по вашему мнению, вызовы используются наиболее часто? Поясните ответ. 

Наиболее часто используемыми, на мой взгляд являют системный вызовы для работы с файлами (read, write, lseek), т.к. большинство пользоваетельских программ активно используют операции ввода-вывода, а так же вызов для выделения памяти (brk), т.к. многие программы активно используют динамическую память.

Глава 1

Вопрос 19. Почему системный вызов chroot разрешено выполнять только суперпользователю (подсказка: подумайте о безопасности)?

Начнем с того, что делает вызов chroot и как он может повлиять на работу системы. Системный вызов chroot(dirname) изменяет корневой каталог, смены рабочего каталога при этом не происходит. 

Каждый файл в иерархии каталогов можно определить, задав его имя пути, называемое обычно полным именем файла. Путь начинается из вершины структуры каталогов, называемой корневым каталогом.
В каждый момент времени у каждого процесса есть текущий рабочий каталог, в котором ищутся имена путей, не начинающиеся с косой черты [1]. 

После данного вызова файлы и каталоги, невходящие в новое поддерево файловой системы станут недоступны [2].

Используемые источники:

  1. "Операционные системы. Разработка и реализация." Э. Таненбаум А. Вудхалл;
  2. http://citforum.ru/operating_systems/manpages/CHROOT.2.shtml

Глава 1 

Вопрос 18. В операционной системе Windows не поддерживается системный вызов fork, однако это не лишает ее  возможности создания новых процессов. Сформулируйте научную догадку о том, какова семантика системного вызова Windows, создающего новый процесс.

Я не знаю каким образом создается новый процесс в Windows и для чистоты эксперимента не стал заходить на msdn. Я думаю, что если fork() просто копирует образ памяти родительского процесса, то в Windows, вероятно, заранее можно задать название программы, ее параметры а так же некоторую другую информацию, необходимую для запуска процесса в вызове WinAPI. 

Глава 1

Вопрос 17. Современные потребительские товары, такие как цифровые камеры и стерео системы, зачастую оснащены дисплеем, с помощью которого можно вводить команды и просматривать результаты их выполнения. Обычно в такие товары встроена простейшая операционная система. Какой области программного обеспечения персонального компьютера соответствует обработка команд через дисплей стереосистемы и камеры?

Обработка команд через дисплей стереосистемы и камеры относится к операциям ввода-вывода, за которые отвечает операционная система.

среда, 6 февраля 2013 г.

Глава 1

Вопрос 16. Являются ли каналы необходимой функцией операционной системы? Какая основная функциональность утрачивается при отсутствии каналов?

Операционная система, грубо говоря, представляет собой некую виртуальную машину, призванную упростить программисту работу с оборудованием, а так же менеджер ресурсов, управляющий распределением между процессами памяти, процессорного времени и т.д. Каналы же необходимы для того, чтобы обеспечить взаимодействие между процессами, которое не является необходимой частью операционной системы. Отвечая на вторую часть вопроса следует сказать, что, как было отмечено ранее, при отсутствии каналов утрачивается возможность межпроцессного взаимодействия.

Глава 1

Вопрос 15. Что случится, если в MINIX 3 пользователь 2 создаст ссылку на файл, которым владеет пользователь 1, затем пользователь 1 удалит файл, и, наконец, пользователь попытается прочитать файл?

В тот момент, когда пользователь 2 создаст ссылку на файл (скажем с именем файл1 и номером индексного узла* скажем индекс1), которым владеет пользователь 1, он  добавить новый элемент каталога, имя которого, возможно, будет являться новым (скажем файл2), а номер индексного узла будет равен номеру индексного узла файла пользователя 1 (индекс1), получив запись** (индекс1 файл2). Таким образом даже после удаления из своего каталога пользователем 1 файла с именем файл1 и номером индексного узла индекс1 в каталоге пользователя 2 останется запись (индекс1 файл2), ссылающаяся на данный файл и MINIX 3 не станет удалять его с диска.

*Каждый файл в UNIX имеет уникальный номер, который идентифицирует файл. Этот номер представляет собой индекс в таблице индексных узлов (index nodes), или i-узлов 
(i-nodes), содержащей по одному индексному узлу на файл. Каждый индексный узел включает в себя информацию о владельце файла, о том, какие блоки на диске он занимает и т. д. [1].

** Каталог представляет собой просто файл, содержащий набор пар из номера индексного узла и ASCII- имени[1].

Используемые источники:

  1. "Операционные системы. Разработка и реализация." Э. Таненбаум А. Вудхалл;
  

Глава 1

Вопрос 14. В чем заключается существенная разница между  блочным специальным файлом и символьным специальным файлом?

Давайте сначала разберемся с тем, что представляет из себя специальный файл. Специальные файлы служат для того, чтобы устройства ввода-вывода выглядели как обычные файлы. При этом можно прочесть информацию из специальных файлов или записать ее туда с помощью тех же системных вызовов, что используются для чтения и записи файлов[1].

Устройства ввода-вывода, в свою очередь делятся на блочные (состоящие из набора произвольно адресуемых блоков, как, например, жесткий диск) и символьные (которые принимают или выдают поток символов, как, например, клавиатура, модем, принтер). 

Соответственно, разница между блочными и символьными специальными файлами заключается в том, что в первых мы можем выбирать какие именно блоки мы будем читать или записывать, а в символьных мы работаем с потоками, в которые можем так же читать или писать.

Используемые источники:

  1. "Операционные системы. Разработка и реализация." Э. Таненбаум А. Вудхалл;

Глава 1

Вопрос 13. Почему таблица процессов необходима в системах разделения времени? Нужна ли она в системах, где в каждый момент времени существует единственный процесс, занимающий все ресурсы компьютера до окончания своего выполнения?

Давайте сначала разберемся с тем, что представляет собой таблица процессов.
Во многих операционных системах вся информация каждого процесса, дополняющая содержимое его собственного адресного пространства, хранится в таблице операционной системы. Эта таблица называется таблицей процессов и представляет собой массив (или связанный список) структур, по одной на каждый существующий в данный момент процесс. Таким образом, приостановленный процесс состоит из собственного адресного пространства, обычно называемого образом памяти (core image), и компонентов таблицы процесса, содержащей, помимо других величин, значения его регистров[1]. 

Без таблицы процессов информация о процессе (значения его регистров, открытые файлы и т.д.) терялась бы после каждого переключения между процессами, следовательно каждый раз программы запускались бы заново, именно поэтому она так важна. 

Теперь давайте разберемся с системами, в которых в каждый момент времени существует единственный процесс, занимающий все ресурсы компьютера. Предположим, что в ходе выполнения процесса сработало прерывание. Операционная система должна приостановить процесс и запустить процедуру обработки прерывания (предварительно сохранив в памяти регистры процесса) а затем восстановить дальнейшую его работу. Таблица процессов ей не понадобиться, она просто вытолкнет необходимые данные в стек.

Используемые источники:

  1. "Операционные системы. Разработка и реализация." Э. Таненбаум А. Вудхалл;

Глава 1

Вопрос 12. Все версии UNIX поддерживают именование файлов с использованием двух путей - абсолютных (относительно корня) и относительных (относительно рабочего каталога). Можно ли отказаться от одного из типов, сохранив при этом лишь другой? Если да, какой из них следует сохранить?

Давайте сначала разберемся в том, что представляют из себя абсолютное и относительное имена файлов. Каждый файл в иерархии каталогов можно определить, задав его имя пути, называемое обычно полным именем файла. Путь начинается из вершины структуры 
каталогов, называемой корневым каталогом. Такое абсолютное имя пути состоит из списка каталогов, которые нужно пройти от корневого каталога к файлу, с разделением отдельных компонентов косой чертой. В каждый момент времени у каждого процесса есть текущий рабочий каталог, в котором ищутся имена путей, не начинающиеся с косой черты[1].  

Таким образом абсолютные пути используются файловой системой, а относительные - процессами, соответственно нельзя отказаться ни от одного, ни от другого, т.к. они используются разными частями операционной системы.

Используемые источники:

  1. "Операционные системы. Разработка и реализация." Э. Таненбаум А. Вудхалл;

Глава 1

Вопрос 11. Как в свете того, что существование суперпользователя может привести к множеству проблем безопасности, объяснить сам факт существования концепции суперпользователя?

Для того чтобы ответить на этот вопрос, нужно сначала понять кто такой суперпользователь, и чем он отличается от обычных пользователей. В книге Таненбаума-Вудхалла об этом сказано немного. Каждому пользователю, которому разрешено работать с системой MINIX 3, систем- 
ный администратор присваивает идентификатор пользователя (User IDentification, UID). Укаждого работающего процесса есть идентификатор пользователя, запустившего процесс. Дочерний процесс получает тот же самый идентификатор пользователя, что и его родитель. Пользователи могут являться членами групп, каждой из которых присваивается идентификатор группы (Group IDentification, GID). Пользователь с особым идентификатором пользователя, называемый в UNIX суперпользователем (superuser), имеет особые полномочия и может игнорировать множество правил защиты. В больших системах только системный администра-тор знает пароль, необходимый для того, чтобы стать суперпользователем[1].

Суперпользователь нужен для выполнения операций, недоступных обычным пользователям, но без которых система не сможет нормально работать.

Используемые источники:

  1. "Операционные системы. Разработка и реализация." Э. Таненбаум А. Вудхалл;

вторник, 5 февраля 2013 г.

Глава 1

Вопрос 10. У файла в MINIX идентификатор владельца равен 12 и идентификатор группы равен 1. Файлу присвоены следующие разрешения: rwxr-x---. К этому файлу пытается обратиться другой пользователь, у которого идентификатор пользователя равен 6, а идентификатор группы - 1. Что произойдет?

Давайте сначала разберемся что означает запись rwxr-x---. Это последовательность образована rwx-битами (r - read, чтение; w - write, запись; x - eXecute, выполнение), определяющими права доступа для разных пользователей.С лева на право идут: три бита владельца, далее три бита группы, и наконец три бита всех остальных пользователей. Соответственно эта запись означает, что: владелец может читать, изменять и выполнять файл, члены группы с тем же идентификатором что и у владельца могут читать и выполнять файл, а все остальные не могут ничего. Отсюда получается, что т.к. пользователь состоит в той же группе, что и владелец, он может читать и выполнять, но не изменять файл.

Глава 1

Вопрос 9. Приведите причину, по которой фирменная операционная система с исходным закрытым кодом (к примеру, Windows) должна быть лучше по качеству по сравнению с операционной системой, имеющей открытый исходный код (например, Linux). Приведите причину, по которой, напротив, операционная система с открытым исходным кодом должна быть лучше по качеству, чем фирменная операционная система с закрытым кодом.

Если система имеет закрытый код, то никто из посторонних лиц не имеет к нему доступа, соответственно злоумышленники не смогут найти брешь в системе просто читая исходники, это является причиной, по которой система с закрытым исходным кодом будет лучше.

Если система имеет открытый исходный код, каждый человек на планете может прочесть его и найти ошибку, но так как не все люди злоумышленники, а есть заинтересованные в надежности системы люди, то большинство из этих людей будут устранять ошибки, соответственно делая систему надежнее, тем более, что если ОС вообще не содержит ошибок (что практически невозможно), то даже если она имеет открытый исходный код, ее невозможно взломать. Большое сообщество программистов, работающих над системой является причиной большей надежности системы с открытым кодом.

Глава 1

Вопрос 8. Перечислите основные различия между операционной системой для персонального компьютера и для мэйнфрейма.

Давайте сначала разберемся в том, что представляют из себя мэйнфрейм и персональный компрьютер а так же выделим основные отличия.

Мэйнфрейм – это вычислительная система, изначально ориентированная на бесперебойное исполнение исключительно больших, смешанных рабочих нагрузок при высоком уровне коэффициента использования системы, соответствующего заданному уровню сервиса.

В отличие от других систем, мэйнфрейм специально предназначен для автоматического решения бизнес-задач с разнообразными рабочими нагрузками в соответствии с заданным уровнем сервиса. Мэйнфреймы IBM – это серверы высочайшего класса, которые используются различными компаниями для хостинга коммерческих баз данных, обработки транзакций и выполнения комплексных приложений, требующих непревзойденных показателей по устойчивости, целостности, безопасности и степени готовности. Мэйнфреймы беспрепятственно поддерживают тысячи одновременно выполняемых операций ввода/вывода, обслуживают пользователей в глобальном масштабе и обрабатывают до миллиарда транзакций в день. Мощь мэйнфреймов в условиях современного динамичного бизнеса используется для выполнения самых требовательных к ресурсам задач. [1]

Отсюда можно выделить следующие основные особенности архитектуры мэйнфрейм:

  • Бесперебойное использование, надежность **, отказоустойчивость *;
  • Высокий коэффициент использования системы - все составляющие должны быть нагружены максимально и равномерно;
  • Повышенные требования к безопасности;
  • Обслуживание тысяч одновременно выполняемых операций ввода-вывода;
  • Обслуживание пользователей в глобальном масштабе - разделение времени;
  • Обработка до миллиарда транзакций в день.

* Отказоустойчивость - это свойство сохранять свою работоспособность после отказа одного или нескольких составных компонентов. Отказоустойчивость определяется количеством любых последовательных единичных отказов компонентов, после которого сохраняется работоспособность системы в целом. Базовый уровень отказоустойчивости подразумевает защиту от отказа одного любого элемента - исключение единой точки отказа. Основной способ повышения отказоустойчивости — избыточность. Наиболее эффективный метод избыточности — аппаратная избыточность, достигается путем резервирования. [3]

** Надёжность — свойство объекта сохранять во времени в установленных пределах значения всех параметров, характеризующих способность выполнять требуемые функции в заданных режимах и условиях применения, технического обслуживания, хранения и транспортирования. [4]

Персональный компьютер - это любой компьютер общего назначения, чей размер, возможности, и первоначальная цена делают его доступными для физических лиц, и который предназначен для работы непосредственно конечному пользователю, без участия оператора. Это расходится с системами разделения времени и пакетной обработки, которые позволяют более большим и дорогим миникомпьютерам и мэйнфреймам быть использованными многими людьми, обычно одновременно. Так же большие системы обработки данных требуют для эффективной работы большой штат сотрудников. [2]

Таким образом для персонального компьютера характерно:

  • Малый размер и цена;
  • Графический интерфейс *;
  • Однопользовательский режим работы;
  • Простота в использовании;
  • Небольшой объем операций ввода-вывода.

* Это относится скорей к операционной системе.

Подводя итог составим сводную таблицу для сравнения операционных систем для мэйнфреймов и персональных компьютеров:


Используемые источники:


  1. http://www.ibm.com/developerworks/ru/edu/mainframe/index.html
  2. http://en.wikipedia.org/wiki/Personal_computer
  3. http://ru.wikipedia.org/wiki/%D0%9E%D1%82%D0%BA%D0%B0%D0%B7%D0%BE%D1%83%D1%81%D1%82%D0%BE%D0%B9%D1%87%D0%B8%D0%B2%D0%BE%D1%81%D1%82%D1%8C
  4. http://ru.wikipedia.org/wiki/%D0%9D%D0%B0%D0%B4%D1%91%D0%B6%D0%BD%D0%BE%D1%81%D1%82%D1%8C


понедельник, 4 февраля 2013 г.

Глава 1

Вопрос 7.       Какая из следующих команд должна быть разрешена только в режиме ядра:

  1. отключение всех прерываний;
  2. чтение счетчика даты/времени;
  3. изменение счетчика даты/времени;
  4. изменение схемы распределения памяти.

  • Прерывания обеспечивают возможность обработки системой ввода-вывода, аппаратных ошибок и программных сигналов. Полное их отключение изменит поведение существенно системы  и не должно быть доступно пользователю, следовательно, должно производиться в режиме ядра.
  • Чтение счетчика даты/времени не изменит поведение системы и поэтому может быть реализовано в режиме пользователя.
  • Изменение счетчика даты/времени может существенно повлиять на работу приложений (например, на проверку истечения срока лицензии) и системы в целом, поэтому должно реализовываться в режиме ядра.
  • Т.к. изменение некорректное изменение схемы распределения памяти может открыть доступ к памяти других процессов, оно должно производиться в режиме ядра, чтобы избежать несанкционированного  доступа.

Глава 1

Вопрос 6.       Почему системы разделения времени не были широко распространены на компьютерах второго поколения?

Системы разделения времени были созданы для того, чтобы максимально нагрузить процессор во время операций ввода-вывода, занимающих в бизнес приложениях до 80% и даже 90%, во время которых он простаивал. Но т.к. машины второго поколения применялись в основном для научных расчетов, таких как решение дифференциальных уравнений, и ввод-вывод почти не занимал процессорного времени, то системы разделения времени в них были не нужны.

Глава 1

Вопрос 5.       На ранних компьютерах чтение или запись каждого байта данных управлялись напрямую центральным процессором (то есть тогда не было прямого доступа к памяти). Какой смысл имеет это понятие для многозадачности?

Т.к. во время ввода-вывода (при условии наличия прямого доступа к памяти) процессор может обслуживать другой процесс (который не использует устройства ввода-вывода и память), то отсутствие данного механизма отрицательно скажется на многозадачности.

Глава 1

Вопрос 4.       Что такое подкачка? Как вы считаете, будут ли передовые персональные компьютеры будущего поддерживать подкачку данных в качестве стандартной функции?

Подкачка или спулинг (англ. spooling, Simultaneous Peripheral Operation On Line – совместные периферийные операции в режиме подключения) – это технический прием, при котором в оперативную память загружаются новые задания (процессы) автоматически, при освобождении в ней места. Данный прием нужен в системах пакетной обработки заданий, но не в персональных компьютерах. Однако в персональных компьютерах широко используется подкачка страниц (или swapping), которая является одним из механизмов виртуальной памяти и имеет несколько иную природу.

Глава 1

Вопрос 3.       Что такое многозадачность?

Многозадачность это возможность операционной системы параллельного выполнения нескольких программ (процессов).

Глава 1

Вопрос 2.       В чем различие между режимом ядра и пользовательским режимом? Почему это различие представляет важность для операционной системы?

Программы, запущенные в режиме ядра защищены от попыток их изменения на аппаратном уровне. Это очень важно для ОС, т.к. данный режим уберегает ее от несанкционированного вмешательства клиентских приложений.

Глава 1

Вопрос 1.       Каковы две главные функции операционной системы?

- Первая функция – менеджер ресурсов. ОС управляет распределением ресурсов  между программами как во времени (устройства ввода-вывода, микропроцессор), так и в пространстве (оперативная память, жесткий диск).
- Вторая функция – виртуальная машина, скрывающая от программиста сложность работы с аппаратными средствами.