<<
>>

Вопросы 1.

Объясните, как тот факт, что UNIX написана на языке C, упрощает ее перенос на новые машины.

2. POSIX-интерфейс определяет набор библиотечных процедур. Объясните, почему в POSIX были стандартизированы библиотечные процедуры, а не интерфейс системных вызовов.

3. При переносе на новые архитертуры Linux зависит от компилятора gcc. Назовите одно из преимуществ и один из недостатков такой зависимости.

4. Каталог содержит следующие файлы:

Какие файлы будут перечислены командой

5. Что делает следующий конвейер оболочки Linux?

6. Напишите конвейер Linux, печатающий восьмую строку файла z в стандартный вывод.

7. Зачем в операционной системе Linux проводится различие между стандартным выводом и стандартным потоком ошибок, если по умолчанию обоим соответствует терминал?

8.

Пользователь вводит с терминала следующие команды:

a | b | с& d | e | f&

Сколько новых процессов будет работать после того, как оболочка обработает эти команды?

9. Когда оболочка Linux запускает новый процесс, она помещает копии своих переменных окружения (например, HOME) в стек процесса, чтобы процесс мог определить свой домашний каталог. Если этот процесс в дальнейшем создаст дочерний процесс, получит ли созданный дочерний процесс эти переменные автоматически?

10. Сколько примерно понадобится времени, чтобы создать в системе UNIX дочерний процесс при следующих условиях: размер текста — 100 Кбайт, размер данных — 20 Кбайт, размер стека — 10 Кбайт, размер структуры задачи — 1 Кбайт, размер структуры пользователя — 5 Кбайт.

Обработка эмулированного прерывания ядром занимает 1 мс, а компьютер может копировать 32-разрядное слово каждые 50 нс. Текстовые сегменты используются совместно, а сегменты данных и стека — нет.

11. По мере того как многомегабайтные программы становились все более распространенными, время, затрачиваемое на обработку системного вызова fork и копирование сегментов данных и стека вызывающего процесса, росло пропорционально росту размеров программ. Когда fork выполняется в Linux, адресное пространство родителя не копируется (как того требует традиционная семантика системного вызова fork). Как Linux препятствует выполнению дочерним процессом таких действий, которые могли бы полностью изменить семантику системного вызова fork?

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

13. Linux-процессы, не являющиеся процессами реального времени, имеют уровень приоритета от 100 до 139. Каков исходный статический приоритет и как для его изменения используется значение nice?

5. Имеет ли смысл забирать у процесса память, когда процесс переходит в состояние зомби? Почему да или почему нет?

6. С каким аппаратным понятием тесно связан сигнал? Приведите два примера использования сигналов.

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

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

9. Какие процессы, как правило, обладают более высоким приоритетом, демоны или интерактивные процессы?

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

11. В структуре задачи для каждого процесса хранится PID родительского процесса. Зачем?

12. Механизм копирования при записи используется в системном вызове fork как средство оптимизации: копия страницы создается только в том случае, если один из процессов (родительский или дочерний) пытается записать данные в страницу. Предположим, что процесс pi породил друг за другом процессы р2 и p3. Объясните, как в таком случае может вестись управление совместным использованием страниц.

13. Какая комбинация битов sharing_Jlags, используемых командой clone в Linux, соответствует стандартному системному вызову fork в UNIX? Созданию потока в UNIX?

14. Две задачи, A и B, нужны для выполнения одинакового объема работы. Но задача A имеет более высокий приоритет, и ей нужно выделять больше времени центрального процессора. Объясните, как этого можно достичь в каждом из планировщиков Linux, описанных в данной главе, в 0(1) и в CFS.

15. Ряд UNIX-систем работает в режиме без тиков, следовательно, у них нет периодических прерываний от таймера. Зачем это делается? И имеет ли смысл использовать режим без тиков на компьютере (например, на встроенной системе), запускающем только один процесс?

16. При загрузке операционной системы Linux (и большинства других операционных систем) начальный загрузчик, хранящийся в 0-м секторе диска, сначала загружает программу загрузки, которая затем загружает операционную систему. Зачем требуется этот лишний промежуточный этап? Было бы проще, если бы хранящийся в 0-м секторе диска начальный загрузчик загружал операционную систему напрямую.

17. Предположим, что редактор состоит из 100 Кбайт кода программы, 30 Кбайт инициализированных данных и 50 Кбайт BSS. Начальный размер стека составляет 10 Кбайт. Предположим, что одновременно запускаются три копии этого редактора. Сколько потребуется физической памяти:

а) если используется общий текстовый сегмент;

б) общий текстовый сегмент не используется?

18. Почему для Linux нужны таблицы дескрипторов открытых файлов?

19.

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

20. Опишите способ использования системного вызова mmap и сигналов для создания механизма межпроцессного взаимодействия.

21. Файл отображается на память с помощью системного вызова mmap следующим образом:

mmap(65536, 32768, READ, FLAGS, fd, 0)

Размер страниц 8 Кбайт. Какой байт файла будет считан при обращении к адресу памяти 72 000?

22. После выполнения системного вызова из предыдущей задачи процесс делает системный вызов

munmap(65536, 8192)

Будет ли он выполнен успешно? Если да, то какие байты файла останутся отображенными на память? Если нет — почему нет?

23. Может ли страничная ошибка привести к завершению работы вызвавшего ее процесса? Если да, приведите пример. Если нет, то почему нет?

24. Возможно ли, чтобы при использовании приятельской системы управления памятью два соседних свободных блока одинакового размера сосуществовали и не были объединены в один блок? Если да, приведите пример, как это может произойти. Если нет — докажите, что это невозможно.

25. В тексте утверждалось, что производительность страничной подкачки выше при выгрузке в отдельный раздел диска, а не в файл. Почему это так?

26. Приведите два примера преимущества относительных путей перед абсолютными.

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

1) процесс A хочет получить блокировку без монополизации байтов с 0-го по 10-й;

2) процесс B хочет получить блокировку с монополизацией байтов с 20-го по 30-й;

3) процесс C хочет получить блокировку без монополизации байтов с 8-го по 40-й;

4) процесс A хочет получить блокировку без монополизации байтов с 25-го по 35-й;

5) процесс B хочет получить блокировку с монополизацией байта 8.

28. Рассмотрим блокированный файл на рис. 10.16, в. Предположим, что процесс пытается получить блокировку байтов 10 и 11 и блокируется. Затем, прежде чем процесс С отпустит свою блокировку, еще один процесс пытается получить блокировку байтов 10 и 11 и также блокируется. Какую проблему добавляет к семантике эта ситуация? Предложите два решения и обоснуйте их.

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

30. Что могут сделать с файлом в Linux его владелец, группа владельца и все остальные пользователи, если режим защиты файла равен 755 (восьмеричное)?

31. У некоторых накопителей на магнитной ленте есть нумерованные блоки и возможность перезаписывать определенные блоки, не затрагивая соседние блоки. Может ли подобное устройство содержать смонтированную файловую систему Linux?

32. На рис. 10.14 после создания связи у Фреда и Лизы есть доступ к файлу x в своих каталогах. Является ли доступ к этому файлу абсолютно симметричным, то есть обладают ли оба пользователя одинаковыми правами по отношению к этому файлу?

33. Как было показано, абсолютные пути файлов отсчитываются от корневого каталога, а относительные — от рабочего каталога. Предложите эффективный способ реализации обоих способов поиска файлов.

34. Когда открывается файл /usr/ast/work/f, требуется несколько обращений к диску, чтобы прочитать Ьузел и блоки каталога. Сосчитайте количество необходимых дисковых обращений при условии, что ^узел корневого каталога постоянно находится в памяти, а размер всех каталогов — 1 блок.

35. Ьузел в системе Linux содержит 12 дисковых адресов для блоков данных, а также адреса одинарного, двойного и тройного косвенных блоков. Чему равен максимальный размер файла, если каждый из косвенных блоков может содержать 256 дисковых адресов, а размер дискового блока равен 1 Кбайт?

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

В этой таблице есть поля, отсутствующие на диске. Одно из них — это счетчик, отслеживающий количество обращений к ^узлу. Зачем нужно это поле?

37. На многопроцессорных платформах Linux поддерживает очередь выполнения для каждого процессора. Хорошая ли это идея? Объясните свой ответ.

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

39. Потоки pdflush периодически просыпаются для записи на диск очень старых страниц — старше 30 с. Зачем это нужно ?

40. Когда операционная система перезагружается после сбоя, то, как правило, выполняется программа восстановления. Предположим, эта программа обнаруживает, что значение счетчика связей в ^узле равно 2, но только одна запись каталога ссылается на данный ^узел. Может ли программа восстановления исправить такую ошибку, и если да, то как?

41. Попытайтесь угадать, какой системный вызов Linux выполняется быстрее всех.

42. Возможно ли сделать unlink для файла, для которого связь никогда не создавалась? Что произойдет?

43. Основываясь на информации, представленной в данной главе, определите, какой максимальный объем данных пользователя можно разместить на дискете емкостью 1,44 Мбайт, если использовать файловую систему Linux ext2? Предположим, что размер блоков диска равен 1 Кбайт.

44. Учитывая все неприятности, которые могут причинить студенты, если они получат права доступа суперпользователя, можете ли вы сказать, зачем вообще существует понятие суперпользователя?

45. Профессор пользуется общими файлами вместе со своими студентами, помещая их в каталог, к которому предоставлен публичный доступ. Этот каталог расположен в системе Linux на компьютере факультета вычислительной техники. Однажды профессор спохватывается, что разрешил доступ записи к одному из файлов для всех пользователей. Он изменяет разрешения доступа и убеждается, что файл соответствует оригиналу. На следующий день профессор обнаруживает, что файл был изменен. Как это могло произойти и как это можно было предотвратить?

46. Linux поддерживает системный вызов fsuid. В отличие от setuid, который предоставляет пользователю все права рабочего идентификатора (имеющиеся у выполняемой им программы), fsuid предоставляет выполняющему программу пользователю специальные права только для доступа к файлам. Почему такая функция полезна?

47. В Linux-системе перейдите к каталогу /proc/####, где #### является десятичным числом, соответствующим процессу, запущенному в данный момент в системе. Ответьте на следующие вопросы, дав развернутые объяснения:

а) Каков размер большинства файлов в этом каталоге?

б) Какое время и какая дата установлены для большинства этих файлов?

в) Какой тип прав доступа предоставляется пользователям вотношении этих файлов?

48. Как при написании Android-активности для отображения веб-страницы в браузере реализуется его состояние активности, сохраняемое для минимизации объема сохраненного состояния без потери чего-либо важного?

49. Если вы пишете код для работы в сети на Android, использующий сокет для загрузки файла, то что при этом нужно принять в расчет в отличие от стандартной Linux-системы?

50. Станете ли вы при разработке чего-то вроде zygote-процесса Android для системы с несколькими потоками, запущенными в каждом ответвленном от него процессе, отдавать предпочтение запуску таких потоков в zygote-процессе или же будете запускать их после создания дочернего процесса?

51. Представьте, что Android Binder IPC используется для отправки объекта другому процессу. Позже вы получаете объект при вызове вашего процесса и обнаруживаете, что получили тот же самый объект, что был отправлен вами ранее. Что можно предположить в отношении того процесса, который вызвал ваш процесс?

61. Рассмотрите Android-систему, на которой сразу же после запуска выполняются следующие действия:

1) запускается домашнее (загрузочное) приложение;

2) запускается в фоновом режиме синхронизация приложения электронной почты с почтовым ящиком;

3) пользователь запускает приложение для фотокамеры;

4) пользователь запускает веб-браузер.

Теперь веб-страница, просматриваемая пользователем в браузере, требует все больше и больше оперативной памяти, пока ей не понадобится все, что она может получить. Что при этом происходит?

62. Напишите минимальную оболочку, способную выполнять простые команды. Она также должна быть способна запускать эти команды в фоновом режиме.

63. С помощью ассемблера и вызовов BIOS напишите программу, загружающуюся с гибкого диска на компьютере с процессором Pentium. Эта программа должна использовать вызовы BIOS для чтения ввода с клавиатуры и вывода эха вводимых символов на экран (просто чтобы продемонстрировать, что она работает).

64. Напишите программу для неинтеллектуального терминала, позволяющую соединить две (управляемые операционными системами Linux) рабочие станции через последовательные порты. Используйте для настройки портов вызовы управления терминалом стандарта POSIX.

65. Напишите клиент-серверное приложение, которое по запросу передает большой файл (через сокеты). Переделайте это приложение с использованием разделяемой памяти. Какая версия будет иметь более высокую производительность? Почему? Проведите замеры производительности с использованием файлов разного размера. Что вы установили? Что внутри ядра Linux вызывает такое поведение?

66. Реализуйте простую библиотеку потоков пользовательского уровня, которая будет работать поверх Linux. Интерфейс прикладного программирования библиотеки должен содержать такие вызовы функций: mythreads_init, mythreads_create, mythreads_join, mythreads_exit, mythreads_yield, mythreads_self и, возможно, еще несколько. Затем реализуйте для обеспечения безопасности одновременно выполняемых операций следующие переменные синхронизации: mythreads_mutex_init, mythreads_mutex_lock, mythreads_mutex_unlock. До начала четко определите интерфейс прикладного программирования и укажите семантику каждого вызова. Затем реализуйте библиотеку пользовательского уровня с простым вытесняющим (по циклической схеме) планировщиком. Вам также понадобится написать одно или несколько многопоточных приложений, которые будут использовать вашу библиотеку (чтобы протестировать ее). И наконец, замените простой механизм планировщика другим, который ведет себя как планировщик ядра 2.6 системы Linux (описанный в этой главе). Сравните производительность ваших приложений при использовании разных планировщиков.

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

<< | >>
Источник: Э. ТАНЕНБАУМ Х. БОС. СОВРЕМЕННЫЕ ОПЕРАЦИОННЫЕ СИСТЕМ Ы 4-е ИЗДАНИЕ. 2015

Еще по теме Вопросы 1.:

  1. Основные ошибки при задавании вопросов. Слишком открытые вопросы.
  2. ВОПРОС О РЕЛИГИИ - ЭТО ВОПРОС О ВЛАСТИ Молитва Господня и семейные порядки
  3. Вопросы без альтернатив, или открытые вопросы
  4. 2.6. Умеем ли мы задавать вопросы? Классификация типов вопросов
  5. § 9 Критика гражданской формы брака. – Вопрос о введении ее в русское законодательство. – Браки у раскольников и вопрос о законности сих браков.
  6. Вопрошающее наблюдение: вопрос без вопроса
  7. 7.1. СКРЫТЫЕ ВОПРОСЫ
  8. 3.3.1. Неструктурированные вопросы
  9. Вопросы
  10. Вопросы
  11. Ключевой вопрос
  12. Наводящие вопросы.