Содержание
1.1. Предмет и задачи курса. 5
1.2. Рекомендации по литературе. 5
1.3. Краткий очерк истории ОС.. 6
1.6. Основные функции и структура ОС.. 14
1.7. ОС, используемые в дальнейшем изложении. 14
2. Управление устройствами. 14
2.1. Основные задачи управления устройствами. 14
2.2. Классификация периферийных устройств и их архитектура. 14
2.4. Архитектура подсистемы ввода/вывода. 14
2.5. Способы организации ввода/вывода. 14
2.6. Буферизация и кэширование. 14
2.8. Управление устройствами в MS-DOS. 14
2.9. Управление устройствами в Windows. 14
2.10. Управление устройствами в UNIX.. 14
3.1. Основные задачи управления данными. 14
3.2. Характеристики файлов и архитектура файловых систем.. 14
3.5. Разделение файлов между процессами. 14
3.6. Файловая система FAT и управление данными в MS-DOS. 14
3.7. Файловые системы и управление данными в UNIX.. 14
3.8. Файловая система NTFS и управление данными в Windows. 14
4.1. Основные задачи управления процессами. 14
4.2. Реализация многозадачного режима. 14
4.3. Проблемы взаимодействия процессов. 14
4.4. Управление процессами в MS-DOS. 14
4.5. Управление процессами в Windows. 14
4.6. Управление процессами в UNIX.. 14
5.1. Основные задачи управления памятью.. 14
5.2. Виртуальные и физические адреса. 14
5.3. Распределение памяти без использования виртуальных адресов. 14
5.4. Сегментная организация памяти. 14
5.5. Страничная организация памяти. 14
5.6. Сравнение сегментной и страничной организации. 14
5.7. Управление памятью в MS-DOS. 14
5.8. Управление памятью в Windows. 14
5.9. Управление памятью в UNIX.. 14
Предметом изучения в данном курсе являются операционные системы (ОС) современных компьютеров.
В первом приближении ОС можно определить как комплекс программ, обеспечивающих интерфейс между аппаратурой компьютера, прикладными программами и пользователем компьютера. Соответственно этому определению, все функции, выполняемые ОС, подчинены решению двух основных задач:
· организации эффективной работы аппаратуры компьютера;
· обеспечению удобного использования ресурсов компьютера как прикладными программами, так и пользователем, работающим с компьютером.
Основной целью курса является изучение устройства и функционирования современных ОС. При этом будут рассматриваться два круга вопросов:
· основные принципы построения ОС, наиболее распространенные алгоритмы выполнения различных функций ОС, типовые структуры данных, используемые для обеспечения работы ОС;
· практическое воплощение этих принципов, алгоритмов, структур в наиболее распространенных современных ОС.
В задачи курса не входит обучение практическим приемам работы с конкретными ОС. Это гораздо лучше делать самостоятельно. С другой стороны, не ставится и задача научить слушателей разрабатывать новые ОС. Операционные системы не являются массовыми изделиями, и участвовать в их разработке доводится лишь меньшей части программистов. Уровень знаний, которого хотелось бы достичь при изучении данного предмета, можно сравнить с тем уровнем знаний об устройстве автомобиля, который полезен хорошему водителю. Он не обязательно должен быть автомехаником, однако должен в основных чертах понимать, что находится под капотом и как оно там крутится.
Содержание лекционного курса не обязательно на 100% совпадет с данным конспектом, поэтому надежнее всего ходить на лекции и иметь к экзамену собственный конспект.
Из книг общего характера учебник /1/ более всего соответствует данному курсу, как по содержанию, так и в еще большей степени по общему взгляду на предмет. Эту книгу можно найти и в Сети, а также в локальной сети кафедры.
Похвалы и уважения заслуживает книга /2/ - огромный по объему и достаточно простой по изложению обзор всего важного об ОС.
Достаточно хороша также книга /3/, используемая как основной учебник по ОС во многих американских университетах.
Лентяям пригодится книга /4/, в которой, наряду с другими вопросами системного программирования, кратко и довольно толково изложены основные проблемы ОС. Правда, книга старовата.
Книги /5/ и /6/ содержат много полезного по практическим вопросам проектирования ОС, а /7/ остается хорошим источником по теоретическим и алгоритмическим вопросам.
Из литературы по Windows следует прежде всего рекомендовать классическую книгу /8/, которая делает понятными многие вопросы, трудно перевариваемые по официальной документации. Более глубокий разбор того, «как это сделано в Windows», можно найти в книге /9/. К сожалению, эта книга заметно уступает замечательной, но устаревшей по материалу книге того же автора /10/, которую, тем не менее, полезно прочесть тем, кого интересуют вопросы практической реализации ОС.
На фоне неисчислимых и неотличимых друг от друга пользовательских руководств по UNIX следует выделить достаточно серьезную работу /11/. Не потеряла интереса старенькая, тонкая книжка /12/, в которой содержится много полезного об основных структурах данных и алгоритмах UNIX. Намного подробнее те же вопросы рассмотрены в другой старой книге, которая давно приобрела известность в электронном варианте /13/. Бумажное издание этой книги на русском языке существует только в пиратском варианте, без указания имени автора.
Для тех, кого еще интересует MS-DOS, можно порекомендовать /14/, это одна из лучших книг на данную тему.
Некоторые алгоритмы, используемые при реализации различных ОС, хорошо изложены в классической книге /15/.
Большие коллекции литературы и документации по ОС имеются в Интернете. Среди русскоязычных сайтов можно рекомендовать, например, /16, 17, 18, 19, 20/.
Знание английского языка открывает доступ к морю свежей информации в Интернете. Огромная куча сведений по Windows содержится в /21/. На сайте /22/ можно найти интересные статьи по отдельным вопросам архитектуры Windows, а также скачать ряд полезных утилит. Из большого числа сайтов, посвященных UNIX и Linux, можно назвать, например, /23/ и /24/. На сайте /25/ можно найти много статей и книг по актуальным вопросам программирования, в том числе по ОС.
Изучение истории развития ОС показывает, что все существенные продвижения в области архитектуры ОС связаны с влиянием двух основных факторов:
· прогресс технологии, приводящий к быстрому возрастанию характеристик аппаратуры ЭВМ и к появлению принципиально новых типов аппаратуры;
· принципиально новые идеи, возникающие у проектировщиков.
Не ввязываясь в давний спор материалистов с идеалистами, в данном частном случае приходится признать, что первый, материальный фактор определял развитие ОС на 80 – 90%. Такие технологические прорывы, как изобретение магнитных дисков, микропроцессоров, создание высококачественных видеомониторов, настоятельно требовали радикальных изменений в технологии работы с компьютером, и вследствие этого обуславливали создание принципиально новых типов ОС или их отдельных подсистем. С другой стороны, некоторые идеи в области организации вычислительного процесса и интерфейса дали серьезный толчок совершенствованию архитектуры компьютеров.
Не зная хотя бы в общих чертах основных этапов развития аппаратного и программного обеспечения, трудно понять многие особенности современных ОС.
Дополнительный аргумент в пользу знания истории заключается в том, что многие технические решения, которые, казалось, навсегда ушли в прошлое вместе с конкретными системами, неожиданно вновь оказываются актуальными на новом витке развития. Некоторые примеры такого рода будут рассмотрены в курсе.
1.3.1. Предыстория ОС
Вскоре после того, как в конце 40-х годов XX века были созданы первые электронные компьютеры, очень остро встала проблема повышения эффективности использования оборудования, и прежде всего центрального процессора.
Типичный компьютер первого – второго поколений представлял собой большую комнату, уставленную шкафами и увитую кабелями. Каждое из основных устройств – центральный процессор, оперативная память, накопители на магнитных лентах, устройства ввода с перфокарт, принтер – занимало один или несколько «шкафов» или «тумб», наполненных радиолампами и механическими частями.
Все это стоило больших денег, потребляло бешеное количество электроэнергии[1] и регулярно ломалось.
В таких условиях машинное время стоило очень дорого. Тем не менее, обычная практика использования ЭВМ не способствовала экономии. Как правило, программист, разрабатывающий программу, заказывал ежедневно несколько часов машинного времени и в течение этого времени монопольно использовал машину. Выполнив очередной запуск отлаживаемой программы (которую надо было каждый раз вводить либо с клавиатуры, либо, в лучшем случае, с перфокарт), пользователь получал распечатку (чаще всего в виде массива цифр), анализировал результаты, вносил изменения в программу и снова запускал ее. Таким образом, в ходе сеанса отладки дорогостоящее оборудование простаивало 99% времени, пока программист осмысливал результаты и работал с устройствами ввода/вывода. Кроме того, сбой при вводе одной перфокарты мог потребовать начать сначала всю работу программы.