|
Адрес |
Описание |
0000:0000 |
Таблица векторов прерываний: 256 4-байтовых адресов |
0040:0000 |
Область данных ROM-BIOS |
0050:0000 |
Область данных DOS |
xxxx:0000 |
Код BIOS (считанный из IO. SYS на диске загрузки) |
xxxx:0000 |
Обработчики прерываний DOS, включая INT 21H ( MSDOS.SYS) |
xxxx:0000 |
DOS: буфера, области данных и устанавливаемые драйверы устройств |
xxxx:0000 |
резидентная порция COMMAND.COM, |
xxxx:0000 |
Резидентные программы и данные |
xxxx:0000 |
Текущая выполняемая прикладная программа (.COM или .EXE). Программе изначально предоставляется вся память до 640K (a000:0000) или до максимально имеющегося адреса на данном PC |
xxxx:0000 |
Транзитная порция COMMAND.COM. Интерпретатор команд, внутренние команды и т.п. Перезагружается, если кто-нибудь перекроет ее. |
a000:0000 |
EGA память для некоторых видео режимов |
b000:0000 |
Видео память монохромного адаптера (и совместимых с Hercules) |
b800:0000 |
Видео память CGA (также страница 2 для Hercules) |
c800:0000 |
Внешний код ROM. ROM-BIOS ищет здесь (в 2K-блоках) код, выполняемый во время загрузки. Такие блоки ROM-памяти обычно устанавливает обработчик устройства (твердый диск или EGA BI OS). |
e000:0000 |
AT модули ROM материнской платы в блоках по 64K |
f600:0000 |
ROM-резидентный интерпретатор BASIC |
fe00:0000 |
ROM-BIOS: POST и код загрузки, обработчики прерываний и все прочее. |
f000:fff0 |
инструкция JMP на программу, выполняемую при включении или сбросе |
f000:fff5 |
дата разработки BIOS. Дата хранится в виде строки “mm/dd/yy”. |
f000:fffe |
идентификационный код IBM PC |
СВЕРХ |
Память сверх 1 мегабайта доступна на компьютерах класса AT через функцию BIOS INT 15H, и в настоящее время используется DOS для операций с RAM-дисками. |
Таблица векторов прерываний
. Все функции DOS организованы в виде программных прерываний, которые являются ни чем иным, как подпрограммами общего пользования. Чтобы знать, по какому адресу какая подпрограмма находится, в начале памяти размещается таблица из 256 адресов. Каждый адрес указывает на точку входа в определенное прерывание.Дальше располагаются области памяти DOS и BIOS, в которых хранятся различные параметры системы: количество и адреса портов устройств ввода-вывода, количество и типы дисков, системные часы, и т.д.
Следом идет собственно код BIOS и DOS, различные служебные области DOS, загружаемые драйвера, и т.д. Вслед за системными областями располагается пользовательская программа, которой предоставляется вся доступная на момент её запуска память вплоть до границы в 640К.
Что же располагается дальше? Область памяти видеоплаты, ПЗУ различных внешних устройств (видео, сетевая карта, …), отведено место под интерпретатор BASIC (хотя сейчас его никто не ставит), ПЗУ материнской платы.
Область выше 1024К недоступна программам под управлением DOS. Исключение составляют машины класса АТ, на которых используется специальный менеджер расширенной памяти, который позволяет пересылать блоки данных туда и обратно. При этом на время пересылки система выходит из режима DOS в так называемый защищенный режим и возвращается в исходное состояние по завершении пересылки.
Вообще говоря, существует 2 стандарта на расширенную память:
expanded (EMS) и extended (XMS) память. Expanded (расширенная) память появилась первой и представляла собой отдельную плату, содержащую несколько Мб памяти, поделенной на страницы по 16К. В адресном пространстве DOS отводился определенный участок (frame), размером 64К, в который можно было отобразить любые 4 страницы из расширенной памяти. Таким образом создавалось нечто вроде электронного диска, на котором можно было хранить данные и код.Extended (буквально: “растянутая”) память является как бы продолжением обычной памяти DOS за границей 1024К. Хотя сам микропроцессор способен обращаться к этой памяти напрямую, DOS способна работать лишь с первым мегабайтом. Тем не менее, начиная с версии 5.0 в MS DOS были введены средства (Int 15h) для перемещения данных в extended память и обратно. Фактически, при этой операции микропроцессор переходит из “реального” режима в “защищенный”, пересылает данные, а затем возвращается в “реальный” режим. Такое переключение, очевидно, занимает некоторое время. Существуют драйвера (например, EMM386.EXE), эмулирующие EMS память внутри extended, некоторые программы пользуются такой возможностью.
Есть еще одна область памяти, о которой стоит упомянуть, это так называемая верхняя память. Это память за границей 1024К, к которой
DOS, тем не менее, может обращаться напрямую. Как известно, полный 20-разрядный адрес получается в результате сложения 16-разрядного сегментного регистра, умноженного на 16 с 16-разрядным регистром смещения. При этом максимальный адрес может быть 0FFFFFh, что соответствует паре сегмент:смещение 0F000h:0FFFFh, или 0FFFFh:0000Fh. А что получится, если сегмент равен 0FFFFh, а смещение 00010h ? В результате сложения мы получим адрес 0100000h. Если бы процессор имел лишь 20 адресных линий. то старшая единица бы потерялась, а мы обратились бы к нулевой ячейке памяти. Однако современные процессоры имеют большее число адресных линий, поэтому мы обратимся к ячейке за пределами 1024К! Таким образом. мы имеем дополнительно почти 64К (без 16 байт), к которым мы можем обращаться, не переходя в защищенный режим. Этим приемом современная DOS активно пользуется, размещая здесь свой код, драйвера и данные, освобождая основную память для пользовательской программы.Программная организация MS DOS должна быть рассмотрена с двух позиций: пользователя и работающей программы. Попытаемся охватить оба эти подхода.
В минимальной конфигурации для работы MS DOS достаточно всего 3х файлов: IO.SYS, MSDOS.SYS и COMMAND.COM. Именно эти файлы записываются на диск командой FORMAT с ключом /S или командой SYS.
IO.SYS – обеспечивает функции работы с периферийным оборудованием (терминалом, дисками, принтером, …);
MSDOS.SYS – содержит функции управления файлами, памятью, запуска программ и т.д. Иногда его называют модулем управления прерываниями, поскольку обращение к перечисленным средствам из программ пользователя осуществляется с помощью программных прерываний;
COMMAND.COM – командный процессор, обеспечивающий пользовательский интерфейс и загрузку программ. В его функции входит прием и проверка команд, вводимых пользователем, выполнение некоторых из этих команд (называемых внутренними), запуск остальных (внешних) команд MS DOS, вывод на экран диагностических и аварийных сообщений и другие действия. Файл COMMAND.COM является частично резидентным, а частично – загружаемым (для экономии памяти).
Начиная с версии MS DOS 5 добавился еще один обязательный файл DRVSPACE.BIN, содержащий функции динамического сжатия данных при записи / чтения с диска.
Помимо перечисленных, MS DOS включает набор внешних команд (программ), реализованных в виде отдельных .COM или .EXE файлов. (FORMAT, XCOPY, …). Хотя полезно иметь на диске полный набор команд DOS, в случае нехватки дисковой памяти, их можно безболезненно удалить. Удобно, что для включения команды в состав MS DOS достаточно просто переписать файл на диск, никакой дополнительной настройки DOS при этом не требуется.
Еще один компонент MS DOS – это загружаемые драйвера устройств, имеющие расширение .SYS, которые обеспечивают управление дополнительными устройствами или расширение функций стандартных. (HIMEM.SYS, RAMDRIVE.SYS, …).
Настройка MS DOS под конкретное аппаратное обеспечение и нужды пользователя производится при помощи файлов AUTOEXEC.BAT и CONFIG.SYS, которые считываются при старте системы. Мы их рассмотрим чуть позднее.
Все команды, которые может выполнять для нас командный процессор COMMAND.COM делятся на 4 категории: внутренние и 3 вида внешних команд: программы в файлах типа COM, EXE и BAT. Внутренние команды являются наиболее важными, потому они реализованы непосредственно внутри командного процессора. Их состав зависит от версии DOS. Чаще всего употребляются команды: CLS, VER, DATE, TIME, CD/CHDIR, DIR, MD/MKDIR, RD/RMDIR, COPY, REN/RENAME, DEL/ERASE, TYPE, EXIT, SET, PATH.
Если полученная системой команда не является внутренней, то делается попытка найти на диске файл с соответствующим именем и расширением COM, EXE или BAT. Список каталогов, которые будут просмотрены при поиске определяется переменной окружения PATH. Файлы типов COM и EXE – это обычные программные файлы, которые различаются лишь внутренней структурой хранения. Файл типа COM является практически “снимком” программы в оперативной памяти и при загрузке не требует предварительной обработки. За это приходится платить тем, что COM–программа не может иметь более 64К кода.
EXE файл лишен этого недостатка, однако перед запуском операционная система должна провести подготовку: откорректировать адреса переходов и вызовов процедур в соответствии с их реальным расположением в памяти.
BAT файлы не являются выполняемыми в прямом смысле слова, это скорее сценарии выполнения последовательности обычных команд. Простейший BAT файл – это просто список команд, собранных в единый файл для удобства их выполнения, однако возможности языка BAT файлов гораздо шире. Этот язык включает операторы перехода (GOTO), цикла (FOR…IN…DO), выдачи сообщений (ECHO), работы со списком параметров (SHIFT), проверки условия (IF), обработки ошибок (ERRORLEVEL). В результате имеется возможность создания довольно сложных, разветвленных схем обработки. Дополнительные возможности дают операторы перенаправления ввода/вывода, конвейерные операции и шаблоны групповых операций с файлами. Язык BAT файлов в MS DOS является рудиментарным, однако он широко используется в других операционных системах. Например, в UNIX более половины программного обеспечения существует именно в виде скриптов, разумеется язык таких файлов в UNIX гораздо богаче.
Настройка операционной системы MS DOS под конкретное аппаратное обеспечение и нужды пользователя производится при помощи файлов AUTOEXEC.BAT и CONFIG.SYS, которые считываются при старте системы. Прежде чем мы перейдем к их рассмотрению, стоит упомянуть еще один компонент MS DOS, называемый системным окружением. Это выделенная область памяти, в которой хранятся строковые переменные, доступные для всех программ и называемые переменными окружения. Каждая строка имеет формат: переменная = значение. Часть имен переменных зарезервирована и используется системой (наиболее употребительные – это PATH, TMP, TEMP, PROMPT, COMSPEC), однако пользователь может добавлять и свои переменные. Список этих переменных может быть получен или изменен командой SET. Каждой запускаемой программе передается своя копия системного окружения, которую программа может менять как ей заблагорассудится, однако основная копия может быть изменена лишь тем командным процессором, который был загружен при старте системы, поэтому основные настройки системного окружения выносят в файл AUTOEXEC.BAT
- Файл CONFIG.SYS
- Файл autoexec.bat
Наиболее употребительные директивы:
BUFFERS = n, m /X – определяет количество буферов DOS, используемых при дисковых операциях ввода-вывода. Наличие буферов существенно ускоряет операции с файлами, если программа многократно обращается к одним и тем же участкам файла. m– количество буферов предввода, т.е. секторов диска, считываемых вслед за запрошенным, ускоряет операции последовательного чтения. При увеличении количества буферов быстродействие системы сначала увеличивается, а затем начинает снижаться, т.к. при любом обращении к данным DOS сначала просматривает все буферы в поисках необходимых данных, к тому же каждый буфер занимает около 500 байт памяти, снижая её общий объем. Ключ “/Х” позволяет переместить буфера из обычной памяти в расширенную.
COUNTRY=007,866,путь\country.sys – определяет выбор кодовой страницы, национальных форматов даты, времени, десятичных разделителей. Наличие этой команды необходимо при установке Windows, чтобы установщик мог правильно выбрать устанавливаемые шрифты
SWITCHES=… – появилась в 5.0, позволяет модифицировать поведение DOS в некоторых ситуациях: ключ /F устраняет 2х-секундную задержку после сообщения “Starting MS-DOS…”, ключ /N – запрещает пользователю вмешиваться в процесс загрузки нажатием <F5> и <F8>.
FILES = n – определяет максимальное количество открываемых файлов (файловых дескрипторов), по умолчанию равно 8, Windows требует значения не меньше 50, однако при этом дополнительно расходуется 64 байта на каждый дескриптор.
DOS=HIGH, UMB – позволяет загрузить DOS в верхнюю память (HMA) и включить возможность загрузки программ в верхние блоки памяти (UMB). Верхняя память – это почти 64К, находящиеся выше 1Мб (сегмент FFFF) и области памяти между модулями ПЗУ (сегменты C800-FE00). Загрузка DOS в HMA возможна только при загруженном драйвере HIMEM.SYS, а использование UMB – только при помощи EMM386.EXE. Данный прием позволяет предоставить дополнительно освободить около 64К оперативной памяти для прикладной программы (и довести его до 630К против обычных 570К).
LASTDRIVE=Z – определяет максимальное число доступных имен дисков, необходима при наличии CD-ROM и при работе в сети. Дополнительный расход памяти – около 90 байт на диск.
DEVICE=…, DEVICEHIGH=… – загрузка дополнительных драйверов, Последняя команда пытается загрузить драйвер в верхние блоки памяти.
Важнейшие драйвера DOS:
HIMEM.SYS – поддержка расширенной (XMS) памяти, много параметров, однако обычно они не используются.
EMM386.EXE – обеспечивает поддержку верхних блоков памяти и эмуляцию expanded памяти на компьютерах с процессором не хуже 386. У драйвера много параметров, наиболее важные: размер эмулируемой EMS, RAM–поддержка UMB, NOEMS – отключение поддержки EMS
DISPLAY.SYS con=(ega,,1) – расширение возможностей стандартного драйвера дисплея, обеспечивает возможность переключения кодовых страниц. Должен быть установлен _до_ начала установки Windows.
SETVER – позволяет обмануть программы, требующие другую версию DOS. Для этого создается специальный список программ и версий DOS, которые они требуют.
Драйвер CDROM обычно поставляется вместе с дисководом и инструкцией по установке.
Является обычным BAT-файлом, единственным отличием которого является то, что он считывается при загрузке системы. Наиболее часто здесь используются команды:
SET PATH=… – устанавливает список каталогов, в которых DOS будет производить поиск программ
SET TEMP=… – устанавливает каталог для временных файлов
MODE – устанавливает режимы работы периферийных устройств, наиболее часто используется для выбора кодовой страницы дисплея :
mode con codepage prepare=((866) путь\ega3.cpi)
mode con codepage select=866
или настройки последовательного (COM) порта.
KEYB ru,,путь\keybrd3.sys – устанавливает тип интернациональной клавиатуры и клавишу переключения
PROMPT=$p$g – устанавливает вид приглашения DOS, в данном случае – путь>
Функции MS DOS, доступные пользовательским программам, реализованы в виде программных прерываний. Программное прерывание – это ни что иное, как обычная подпрограмма, имеющая несколько особые правила вызова. Этих подпрограмм может быть не более 256, а адреса входа в каждую подпрограмму хранятся в первом килобайте оперативной памяти. Все параметры в прерывание передаются через регистры микропроцессора.
Вообще говоря, все прерывания, доступные программе, делятся на 2 класса по своему происхождению: прерывания BIOS и прерывания собственно DOS. Начнем с первой группы. BIOS – это базовая система ввода-вывода, записанная в ПЗУ материнской платы Вашего компьютера. Она реализует наиболее низкоуровневые процедуры для работы с оборудованием. Поскольку BIOS обязана обеспечить принципиальную возможность работы с различными моделями оборудования, то в ней используются лишь наиболее общие свойства и команды и не учитываются особенности конкретной модели.
Функционально BIOS разделена на 2 части: программы начального запуска, тестирования и инициализации, и систему обслуживания прерываний.
Все функции BIOS разделены по группам в соответствии с тем оборудованием. которое она обслуживает:
Прерывание |
Группа функций |
5 |
Печать графической копии экрана |
$10 |
Видеофункции |
$11 |
Список присоединенного оборудования |
$12 |
Запрос объема физической памяти |
$13 |
Функции управления диском |
$14 |
Функции управления последовательным портом RS-232 |
$16 |
Функции управления клавиатурой |
$17 |
Функции управления принтером |
$18 |
Обращение к встроенной системе ROM-BASIC |
$19 |
Перезапуск системы |
$20 - $2F |
Функции MS DOS |
Функции DOS содержатся в прерывании с номером $21. Одна часть этих функций нацелена на реализацию основного предназначения DOS – работы с дисками и файлами, другая – фактически дублирует функции BIOS для работы с оборудованием. Это дублирование было сделано с целью унификации обращения к различному оборудованию, однако результат был не всегда удачен, т.к. разное оборудование обладает разными возможностями. Самый горький пример – вывод на экран. В DOS фактически отсутствуют средства работы с цветом символов и вывода в определенную точку экрана.
Более подробно о функциях DOS Вы сможете прочитать в специальной литературе.
Операционная система MS DOS предоставляет пользователю некоторый интерфейс для работы с оборудованием (см. рис.), однако большинство программ, написанных для MS DOS, не пользуются системными функциями за исключением файловой системы. Такой на первый взгляд неразумный подход обусловлен рядом причин. Наиболее существенная из них – то, что реализация функций работы с оборудованием в MS DOS достаточно куцая, и не использует всех возможностей аппаратуры. Например, при выводе текста на экран отсутствует возможность работы с цветом, а скорость последовательного порта RS-232 ограничена 9600 бод. По существу, в MS DOS не реализовано ничего, кроме файловой системы. Вторая причина – это низкая скорость работы системных функций. Так вывод точки на графический экран с помощью функции BIOS происходит на 2 порядка медленнее (!) чем при прямой записи в видеопамять. Поэтому программирование “в обход” MS DOS очень распространено. Немаловажным фактором здесь является “открытость” MS DOS, при которой весь компьютер находится в полном распоряжении пользовательской программы.
Такая схема общения программы и компьютера имеет те преимущества, что с одной стороны программист из оборудования может выжать практически все его возможности как по функциям, так и по скорости, с другой стороны, надежность функционирования программы также полностью зависит от программиста. Чтобы понять недостатки этого подхода, давайте рассмотрим этапы разработки программ для MS DOS.
Наиболее существенными факторами при разработке коммерческой программы являются время, затраченное на её разработку и способность работать на всех совместимых компьютерах. Для медицинских приложений последний фактор не столь критичен, т.к. принято поставлять программный продукт (например, реанимационный монитор) вместе с компьютером, на котором он работает, при этом пользователь обычно лишается возможности запускать на компьютере другие программы кроме Вашей.
- Постановка задачи (техническое задание) – чрезвычайно важный, но часто пропускаемый этап.
Как видите, разработка программы под MS DOS на 85% состоит из решения различных проблем с оборудованием, т.е. разработчик становится своего рода системным программистом, который должен иметь четкое и глубокое знание как операционной системы, так и аппаратного обеспечения. В результате решению конкретной задачи предшествует примерно годовая (!) подготовительная работа.
Многих этих недостатков лишена операционная система Windows, которая будет рассмотрена в следующих разделах.
Три уровня архитектуры Wundows: центральный (ядро, менеджер событий, интерфейс графического устройства, управление системными ресурсами), аппаратно-независимый уровень, уровень приложений.
…
С развитием сети Internet и таких направлений как телемедицина, медицинские базы данных удаленного доступа, различные информационные сервера, врачебные Internet-консультации и т.д., особую актуальность приобретает знание и умение работать в операционной системе, позволяющей, с одной стороны, обращаться к различным сервисам Internet, с другой - самому создавать Internet приложения. Большинство современных операционных систем обладают такими возможностями, однако мы остановимся на UNIX. Почему? Прежде всего потому, что это одна из наиболее удачных (в смысле построения) операционных систем. Дело в том что изначально её развитие держалось на энтузиазме программистов слабо связанных временными и финансовыми рамками. В результате чего было найдено и реализовано множество интересных и оптимальных с точки зрения функциональности идей. Даже существует поговорка: “Если вы не понимаете UNIX, вы должны будете заново изобрести его''. Опыт развития систем OS/2 и Windows NT отчасти подтверждает ее.
UNIX широко распространена на серверах Internet. Известен случай, когда Microsoft перекупила кампанию HotMail и попыталась заменить на её серверах UNIX системой Windows NT. Оказалось, что NT неспособна управиться с тем потоком данных, который спокойно обрабатывался UNIX.
Еще 2 немаловажные причины: в настоящее время наблюдается волна повышения интереса к этой ОС, и многие известные фирмы, например
Sun или Corel, разрабатывают свои версии UNIX с набором программных пакетов для них. И наконец, в отличие от других ОС, существуют свободно распространяемые версии UNIX и программ под них, что немаловажно для российского пользователя.Следует оговориться, что под названием UNIX на самом деле скрывается целый класс операционных систем, ведущих свою родословную от общего корня. Наиболее известны две ветви: System V (версия AT&T) и BSD (версия Калифорнийского университета в Беркли). Однако большинство современных версий включают в себя черты обеих ветвей.
- Код системы написан на языке высокого уровня С, что сделало ее простой для понимания, изменений и переноса на другие платформы. По оценкам одного из создателей UNIX, Дэнниса Ритчи, система на языке С имела на 20-40% больший размер, а производительность ее была на 20% ниже аналогичной системы, написанной на ассемблере. Однако ясность и переносимость, а в результате - и открытость системы сыграли решающую роль в ее популярности. Можно смело сказать что UNIX является одной из наиболее открытых систем
- UNIX — многозадачная многопользовательская система с широким спектром услуг. Один мощный сервер может обслуживать запросы большого количества пользователей. При этом необходимо администрирование только одной системы. Ваша система может выполнять различные функции — работать как вычислительный сервер, как сервер базы данных, как сетевой сервер, поддерживающий важнейшие сервисы сети (telnet, ftp, электронную почту, службу имен DNS и т. д.), или даже как сетевой маршрутизатор.
- Наличие стандартов. Несмотря на многообразие версий UNIX, основой всего семейства являются принципиально одинаковая архитектура и ряд стандартных интерфейсов. Опытный администратор без большого труда сможет обслужить другую версию системы, для пользователей переход на другую версию и вовсе может оказаться незаметным.
- Простой, но мощный модульный пользовательский интерфейс. Имея в своем распоряжении набор утилит, каждая из которых решает узкую специализированную задачу, вы можете конструировать из них сложные комплексы.
- Использование единой, легко обслуживаемой иерархической файловой системы. Файловая система — это не только доступ к данным, хранящимся на диске. Через унифицированный интерфейс файловой системы осуществляется доступ к терминалам, принтерам, магнитным лентам, сети и даже к памяти.
- Очень большое количество приложений, в том числе свободно распространяемых, начиная от простейших текстовых редакторов и заканчивая мощными системами управления базами данных.
В центре находится ядро системы (kernel). Ядро непосредственно взаимодействует с аппаратной частью компьютера, изолируя прикладные программы от особенностей ее архитектуры. Ядро имеет набор услуг, предоставляемых прикладным программам. К услугам ядра относятся операции ввода/вывода (открытия, чтения, записи и управления файлами), создания и управления процессами, их синхронизации и межпроцессного взаимодействия. Все приложения запрашивают услуги ядра посредством системных вызовов.
Второй уровень составляют приложения или задачи, как системные, определяющие функциональность системы, так и прикладные, обеспечивающие пользовательский интерфейс UNIX. Однако несмотря на внешнюю разнородность приложений, схемы их взаимодействия с ядром одинаковы.
Ядро системы
Ядро обеспечивает базовую функциональность операционной системы: создает процессы и управляет ими, распределяет память и обеспечивает доступ к файлам и периферийным устройствам.
Взаимодействие прикладных задач с ядром происходит посредством стандартного интерфейса системных вызовов. Интерфейс системных вызовов представляет собой набор услуг ядра и определяет формат запросов на услуги. Процесс запрашивает услугу посредством системного вызова определенной процедуры ядра, внешне похожего на обычный вызов библиотечной функции (например, open, read, close). Ядро от имени процесса выполняет запрос и возвращает процессу необходимые данные.
Ядро состоит из трех основных подсистем:
- Файловая подсистема
- Подсистема управления процессами и памятью
- Подсистема ввода/вывода
Файловая подсистема
Файловая подсистема обеспечивает унифицированный интерфейс доступа к данным, расположенным на дисковых накопителях, и к периферийным устройствам. Одни и те же функции ореп(2), read(2), write(2) могут использоваться как при чтении или записи данных на диск, так и при выводе текста на принтер или терминал.
Файловая подсистема контролирует права доступа к файлу, выполняет операции размещения и удаления файла, а также выполняет запись/чтение данных файла. Поскольку большинство прикладных функций выполняется через интерфейс файловой системы (в том числе и доступ к периферийным устройствам), права доступа к файлам определяют привилегии пользователя в системе.
Файловая подсистема обеспечивает перенаправление запросов, адресованных периферийным устройствам, соответствующим модулям подсистемы ввода/вывода.
Запущенная на выполнение программа порождает в системе один или более процессов (или задач). Подсистема управления процессами контролирует:
- Создание и удаление процессов
- Распределение системных ресурсов (памяти, вычислительных ресурсов) между процессами
- Синхронизацию процессов
- Межпроцессное взаимодействие
Очевидно, что в общем случае число активных процессов превышает число процессоров компьютера, но в каждый конкретный момент времени на каждом процессоре может выполняться только один процесс. Операционная система управляет доступом процессов к вычислительным ресурсам, создавая ощущение одновременного выполнения нескольких задач.
Специальная задача ядра, называемая планировщиком процессов (scheduler), разрешает конфликты между процессами в конкуренции за системные ресурсы (процессор, память, устройства ввода/вывода). Планировщик запускает процесс на выполнение, следя за тем, чтобы процесс монопольно не захватил разделяемые системные ресурсы. Процесс освобождает процессор, ожидая длительной операции ввода/вывода, или по прошествии кванта времени. В этом случае планировщик выбирает следующий процесс с наивысшим приоритетом и запускает его на выполнение.
Модуль управления памятью
обеспечивает размещение оперативной памяти для прикладных задач. В случае, если для всех процессов недостаточно памяти, ядро перемещает части процесса или нескольких процессов во вторичную память (как правило, в специальную область жесткого диска), освобождая ресурсы для выполняющегося процесса. Все современные системы реализуют так называемую виртуальную память: процесс выполняется в собственном логическом адресном пространстве, которое может значительно превышать доступную физическую память. Управление виртуальной памятью процесса также входит в задачи модуля управления памятью.Модуль межпроцессного взаимодействия
отвечает за уведомление процессов о событиях с помощью сигналов и обеспечивает возможность передачи данных между различными процессами.Подсистема ввода/вывода
Подсистема ввода/вывода выполняет запросы файловой подсистемы и подсистемы управления процессами для доступа к периферийным устройствам (дискам, магнитным лентам, терминалам и т. д.). Она обеспечивает необходимую буферизацию данных и взаимодействует с драйверами устройств — специальными модулями ядра, непосредственно обслуживающими внешние устройства.
Файлы в UNIX играют ключевую роль, что не всегда справедливо для других операционных систем. Дело в том, что возможности пользователей в системе в большинстве случаев определяются правами доступа к тем или иным файлам. Файлы обеспечивают доступ к периферийным устройствам компьютера, включая диски, принтеры, терминалы, сетевые адаптеры и даже память. Для приложений UNIX доступ в дисковому файлу "неотличим" от доступа, скажем, к принтеру. Наконец, все программы, которые выполняются в системе, являются исполняемыми файлами.
Как и во многих современных операционных системах, в UNIX файлы организованы в виде древовидной структуры (дерева), называемой файловой системой. Каждый файл имеет имя, определяющее его расположение в дереве файловой системы. Корнем этого дерева является корневой каталог (root directory), имеющий имя "/". Имена всех остальных файлов содержат путь — список каталогов (ветвей), которые необходимо пройти, чтобы достичь файла. В UNIX все доступное пользователям файловое пространство объединено в единое дерево каталогов. Таким образом, полное имя любого файла начинается с "/" и не содержит идентификатора устройства (дискового накопителя, CD-ROM или удаленного компьютера в сети), на котором он фактически хранится.
|
/ – корневой каталог, все остальные файлы и каталоги располагаются в рамках структуры, порожденной корневым каталогом, назависимо от физического местоположения. /bin – программы общего пользования /dev – специальные файлы устройств /etc – системные конфигурационные файлы, наиболее важные из них – скрипты инициализации системы /lib – библиотечные модули компилятора С и других языков /mnt – обычное место монтирования внешних файловых систем /home – домашние каталоги пользователей /usr – каталоги сервисных подсистем (печати, почты, …) /var – временные файлы, протоколы, … |
Однако это не означает, что в системе присутствует только одна файловая система. В большинстве случаев единое дерево, такое каким его видит пользователь системы, составлено из нескольких отдельных файловых систем, которые могут располагаться на различных устройствах и даже иметь различную внутреннюю структуру (например, FFS, MSDOS, NTFS).
Заметим, что имя файла является атрибутом файловой системы, а не набора некоторых данных на диске, который не имеет имени как такового. Каждый файл имеет связанные с ним метаданные (хранящиеся в индексных дескрипторах — inode), содержащие все характеристики файла и позволяющие операционной системе выполнять операции, заказанные прикладной задачей: открыть файл, прочитать или записать данные, создать или удалить файл. В частности, метаданные содержат указатели на дисковые блоки хранения данных файла. Имя файла в файловой системе является указателем на его метаданные, в то время как метаданные не содержат указателя на имя файла.
Жесткая связь |
Символическая связь |
Такая организация позволяет файлу иметь более одного имени, что также называется жесткой связью (hard link). Все жесткие связи равноправны и при удалении жесткой связи удаляется имя, а не файл, и лишь когда количество имен у файла станет равным нулю, только тогда удаляются и сами данные.
Помимо жесткой, существует еще символическая связь (symbolic link), которая в отличие от жесткой связи адресует файл, который, в свою очередь, ссылается на конечный файл. По сути, в данных файла символической ссылки записано имя целевого файла. Необходимость существования символической связи объясняется тем, что жесткие связи допустимы лишь в пределах одного устройства. Символические связи допустимы в любых случаях.
Необходимо отметить, что права доступа к файлу хранятся в inode, поэтому не имеет значения, через какое имя пользователь пытается обратиться к файлу, он получит одинаковый уровень доступа.
В UNIX существуют 6 типов файлов, различающихся по функциональному назначению и действиям операционной системы при выполнении тех или иных операций над файлами:
- Обычный файл (regular file)
- Каталог (directory)
- Специальный файл устройства (special device file)
- Связь (link)
- FIFO или именованный канал (named pipe)
Обычный файл
представляет собой наиболее общий тип файлов, содержащий данные в некотором формате. Для операционной системы такие файлы представляют собой просто последовательность байтов. Вся интерпретация содержимого файла производится прикладной программой, обрабатывающей файл.Каталог
С помощью каталогов формируется логическое дерево файловой системы. Каталог — это файл, содержащий имена находящихся в нем файлов, а также указатели на дополнительную информацию — метаданные, позволяющие операционной системе производить операции над этими файлами. По существу каталог представляет собой таблицу, каждая запись которой соответствует некоторому файлу. Первое поле каждой записи содержит указатель на метаданные (номер inode), а второе определяет имя файла.Специальный файл устройства
обеспечивает доступ к физическому устройству. Доступ к устройствам осуществляется путем открытия, чтения и записи в специальный файл устройства.FIFO или именованный канал
— это файл, используемый для связи между процессами. FIFO впервые появились в System V UNIX, но большинство современных систем поддерживают этот механизм.Связь.
О связях мы говорили чуть выше. В данном случае имеется в виду символическая связь.Сокет
предназначен для организации связи между процессами. Интерфейс сокетов часто используется для доступа к сети TCP/IP.- Права доступа к файлам
- Дополнительные атрибуты файла
- Процессы
Файлы в UNIX имеют двух владельцев: пользователя (user owner) и группу (group owner). Интересно, что владелец-пользователь может не являться членом группы-владельца, что дает дополнительную гибкость в организации доступа.
Каждый файл в UNIX имеет 9 атрибутов доступа: по три (read, write, execute - читать, писать, выполнять) для владельца–пользователя, для владельца–группы и для всех остальных. Атрибуты доступа могут быть изменены владельцем файла, администратором системы либо пользователем, имеющим право на запись в файл.
Значение прав доступа различно для разных типов файлов. Для обычных файлов операции, которые можно производить, следуют из самих названий прав доступа. Например, чтобы просмотреть содержимое файла, пользователь должен иметь право на чтение (r). Редактирование файла, т. е. его изменение, предусматривает наличие права на запись (w). Наконец, для того чтобы запустить некоторую программу на выполнение, вы должны иметь соответствующее право (х). Исполняемый файл может быть как скомпилированной программой, так и скриптом командного интерпретатора. В последнем случае вам также понадобится право на чтение, поскольку при выполнении скрипта командный интерпретатор должен иметь возможность считывать команды из файла. Все сказанное, за исключением, пожалуй, права на выполнение, имеющего смысл лишь для обычных файлов и каталогов, справедливо и для других типов файлов: специальных файлов устройств, именованных каналов, и сокетов. Например, чтобы иметь возможность распечатать документ, вы должны иметь право на запись в специальный файл устройства, связанный с принтером. Для каталогов эти права имеют другой смысл, а для символических связей они вообще не используются, поскольку контролируются целевым файлом.
Права доступа для каталогов не столь очевидны. Это в первую очередь связано с тем, что система трактует операции чтения и записи для каталогов отлично от остальных файлов. Право чтения каталога позволяет вам получить имена (и только имена) файлов, находящихся в данном каталоге. Чтобы получить дополнительную информацию о файлах каталога (например, подробный листинг команды ls -/), системе придется "заглянуть" в метаданные файлов, что требует права на выполнение для каталога. Право на выполнение также потребуется для каталога, в который вы захотите перейти (т.е. сделать его текущим) с помощью команды cd. Это же право нужно иметь для доступа ко всем каталогам на пути к указанному.
Права r и х действуют независимо, право х для каталога не требует наличия права r, и наоборот. Комбинацией этих двух прав можно добиться интересных эффектов, например, создания "темных" каталогов, файлы которых доступны только в случае, если пользователь заранее знает их имена, поскольку получение списка файлов таких каталогов запрещено. Данный прием, кстати, используется при создании общедоступных архивов в сети (FTP-серверов), когда некоторые разделы архива могут использоваться только "посвященными", знающими о наличии того или иного файла в каталоге.
Существует еще несколько атрибутов, изменяющих стандартное выполнение различных операций. Как и в случае прав доступа, эти атрибуты по-разному интерпретируются для каталогов и других типов файлов.
Дополнительные атрибуты для обычных файлов
Код |
Название |
Значение |
t |
Sticky bit |
Сохранить образ выполняемого файла в памяти после завершения выполнения |
s |
Set UID, SUID |
Установить UID процесса при выполнении |
s |
Set GID, SGID |
Установить GID процесса при выполнении |
1 |
Блокирование |
Установить обязательное блокирование файла |
Установка атрибута
Sticky bit (действительное название — save text mode) редко используется в современных версиях UNIX для файлов. В ранних версиях этот атрибут применялся с целью уменьшить время загрузки наиболее часто запускаемых программ (например, редактора или командного интерпретатора). После завершения выполнения задачи ее образ (т.е. код и данные) оставались в памяти, поэтому последующие запуски этой программы занимали значительно меньше времени.Атрибуты (или флаги) SUID и SGID позволяют изменить права пользователя при запуске на выполнение файла, имеющего эти атрибуты. При этом привилегии будут изменены (обычно расширены) лишь на время выполнения и только в отношении этой программы.
Обычно запускаемая программа получает права доступа к системным ресурсам на основе прав доступа пользователя, запустившего программу. Установка флагов SUID и SGID изменяет это правило, назначая права доступа исходя из прав доступа владельца файла. Таким образом, запущенный исполняемый файл, которым владеет суперпользователь, получает неограниченные права доступа к системным ресурсам, независимо от того, кто его запустил. При этом установка SUID приведет к наследованию прав владельца-пользователя, а установка SGID — владельца-группы.
В качестве примера использования этого свойства рассмотрим утилиту passwd(l), позволяющую пользователю изменить свой пароль. Очевидно, что изменение пароля должно привести к изменению содержимого определенных системных файлов (файла пароля /etc/passwd, или базы данных пользователей). Понятно, что предоставление права на запись в эти файлы всем пользователям системы является потенциально опасным. Установка SUID для программы смены пароля passwd(l) позволяет изящно разрешить это противоречие. Поскольку владельцем файла /usr/bin/passwd является системный администратор, то кто бы ни запустил утилиту passwd(l), во время работы данной программы он временно получает права администратора, т. е. может производить запись в системные файлы. Понятно, что требования по безопасности для такой программы должны быть повышены. Утилита passwd(l) должна производить изменение пароля только пользователя, запустившего ее, и не позволять никакие другие операции (например, вызов других программ).
Блокирование файлов позволяет устранить возможность конфликта, когда две или более задачи одновременно работают с одним и тем же файлом.
Дополнительные атрибуты для каталогов
Код |
Название |
Значение |
t |
Sticky bit |
Позволяет пользователю удалять только файлы, которыми он владеет или имеет права на запись |
s |
Set GID, SGID |
Позволяет изменить правило установки владельца-группы создаваемых файлов, аналогично реализованному в BSD UNIX |
При обсуждении прав доступа отмечалось, что предоставление права на запись в каталог дает достаточно большие полномочия. Имея такое право, пользователь может удалить из каталога любой файл, даже тот, владельцем которого он не является и в отношении которого не имеет никаких прав. Установка атрибута
Sticky bit для каталога позволяет установить дополнительную защиту файлов, находящихся в каталоге. Теперь пользователь может удалить только файлы, которыми он владеет, или на которые он имеет явное право на запись, даже при наличии права на запись в каталог. Примером может служить каталог /tmp, который является открытым на запись для всех пользователей, но в котором может оказаться нежелательной возможность удаления пользователем чужих временных файлов.Атрибут SGID также имеет иное значение для каталогов. При установке этого атрибута для каталога вновь созданные файлы этого каталога будут наследовать владельца-группу по владельцу-группе каталога.
Процессы в операционной системе UNIX играют ключевую роль. От оптимальной настройки подсистемы управления процессами и числа одновременно выполняющихся процессов зависит загрузка ресурсов процессора, что влияет на производительность системы в целом. Ядро операционной системы предоставляет задачам базовый набор услуг, определяемый интерфейсом системных вызовов. Все остальные функциональные возможности системы, определяются активными процессами. От того, какие процессы выполняются в вашей системе, зависит, является ли она сервером базы данных или сервером сетевого доступа, средством проектирования или вычислительным сервером.
Следует различать понятия программа и процесс. Обычно программой называют совокупность файлов, будь то набор исходных текстов, объектных файлов или собственно выполняемый файл. Для того чтобы программа могла быть запущена на выполнение, операционная система сначала создает окружение или среду выполнения задачи, куда относятся ресурсы памяти, возможность доступа к устройствам ввода/вывода и различным системным ресурсам, включая услуги ядра.
Это окружение и получило название процесса. Таким образом, процесс состоит из инструкций, выполняемых процессором, данных и служебной информации о выполняемой задаче, такой как размещенная память, открытые файлы и статус процесса. Одна программа может породить более одного процесса.Операционная система UNIX является многозадачной. Это значит, что одновременно может выполняться несколько процессов, причем часть процессов могут являться образцами одной программы. Все процессы изолированы друг от друга, однако могут обмениваться данными при помощи специальных средств межпроцессного взаимодействия.
Все процессы подразделяются на 3 категории:
- системные процессы – являются частью ядра и запускаются особым образом при старте системы
Процесс также имеет целый набор атрибутов:
PID – уникальный идентификатор процесса (по имени обращаться нельзя – т.к. одна программа может породить несколько процессов)
PPID – идентификатор процесса, породившего данный процесс
NICE – относительный приоритет процесса, учитываемый планировщиком при определении очередности запуска. Нумерация идет в обратном порядке, т.е. чем больше номер, тем ниже приоритет.
TTY – терминальная линия, ассоциированная с процессом (если существует). Демоны не имеют своей терминальной линии.
Реальный (RUID) и эффективный (EUID) идентификаторы пользователя. Реальный – идентификатор пользователя, запустившего процесс, эффективный определяет права доступа процесса.
Реальный (RGID) и эффективный (EGID) идентификаторы группы.
- Жизненный цикл процесса
Процесс в UNIX создается системным вызовом fork. Процесс, сделавший вызов fork называется родительским, а вновь созданный процесс — дочерним. Новый процесс является точной копией породившего его процесса. Как это ни удивительно, но новый процесс имеет те же инструкции и данные, что и его родитель. Более того, выполнение родительского и дочернего процесса начнется с одной и той же инструкции, следующей за вызовом fork. Единственно, чем они различаются — это идентификатором процесса PID и идентификатором родительского процесса PPID. Существует специальная системная функция, позволяющая по PPID определить, какой из процессов является родительским, а какой – дочерним. Каждый процесс имеет одного родителя, но может иметь несколько дочерних процессов.
Для запуска задачи, т. е. для загрузки новой программы, процесс должен выполнить системный вызов ехес. При этом новый процесс не порождается, а исполняемый код процесса полностью замещается кодом запускаемой программы. Тем не менее окружение новой программы во многом сохраняется, в частности сохраняются значения переменных окружения, назначения стандартных потоков ввода/вывода, вывода сообщений об ошибках, а также приоритет процесса.
В UNIX запуск на выполнение новой программы часто связан с порождением нового процесса, таким образом сначала процесс выполняет вызов fork(2), порождая дочерний процесс, который затем выполняет ехес(2), полностью замещаясь новой программой. Такой способ загрузки называется fork-and-exec.
- Многозвенные медицинские приложения
- Распределенные системы
- Основы построения баз данных.
При разработке сложных программ их часто разбивают на функционально законченные модули, каждый из которых выполняет определенную функцию и загружается по мере необходимости. Такой подход позволяет, с одной стороны, сэкономить ресурсы системы, с другой – является технологичным для разработчика. (Примером является система РеоКардиоМонитор.)
Казалось бы, первая задача решается автоматически операционной системой, но это не так. Например, в ОС Windows не используемые участки памяти перемещаются в файл подкачки, однако остальные ресурсы (графические, таймер, прерывания, ...) не освобождаются и производительность системы падает по мере загрузки новых приложений.
Что касается технологичности, то разбиение задачи на отдельные модули позволяет подключить к работе сразу нескольких специалистов. При этом оговариваются методы обмена данными между модулями, форматы входных и выходных данных и диапазоны допустимых значений. Такой подход позволяет ускорить работу над проектом и многократно использовать наиболее удачные модули. (например, модуль “Карта пациента” используется уже в 5й программе почти без изменений).
Рассмотрим особенности организации запуска отдельных модулей и взаимодействия между ними в различных ОС. Терминология: вызывающая программа называется родителем, а вызываемая – потомком или дочерним процессом
DOS.
В этой ОС может работать лишь одна программа, однако имеется специальная функция DOS ($4B или EXEC), позволяющая текущей программе загрузить в память другую программу и передать ей управление (понятно, что программа-родитель во-первых обязана предоставить потомку необходимый объем оперативной памяти, и, во-вторых, родитель останавливается на время выполнения потомка). Для загрузки потомка часто используется вторичная копия загрузчика COMMAND.COM, которая производит необходимые настройки адресов, в результате чего в памяти образуется следующая структура:COMMAND.COM – программа-родитель – COMMAND.COM – программа-потомок
Данные от родителя потомку могут быть переданы тремя способами: через параметры командной строки, через переменные системного окружения (потомок получает копию окружения родителя) и через файлы на диске. В принципе возможна передача через оперативную память, однако при этом потомку необходимо передать указатель на необходимый участок памяти.
В Windows имеется специальный механизм для создания модулей, подключаемых на этапе выполнения. DLL, DDE, OLE, COM
В UNIX загрузка и запуск программ-потомков происходит несколько необычным образом, называемым fork & exec. При вызове функции “exec” образ текущего процесса полностью замещается кодом загружаемой программы. При этом вызванная программа наследует все права родителя в момент вызова функции exec. Таким образом обеспечивается безопасность системы. Например, в момент идентификации нового пользователя программа login выполняется с правами системного администратора, поскольку ей нужен доступ к файлу паролей. После проверки, программа login устанавливает себе права идентифицированного пользователя и через функцию exec замещает себя кодом командного интерпретатора, определенного в файле настройки. После выполнения команды exec пользователь не может получить доступ к коду команды login, т.к. её уже нет в памяти.
Если программу-родителя необходимо сохранить в памяти, то используется другая системная функция “fork” – создающая в памяти точную копию текущего процесса. Эти две копии имеют одинаковый код, одинаковые данные и их выполнение после fork начинается с одной и той же команды. Единственный способ различить эти 2 процесса – спросить у операционной системы ID родителя данного процесса. Для родителя эта функция возвратит 0, для потомка – PID родителя.
Обмен данными между процессами может происходить через специальные средства межпроцессного взаимодействия, такие как сигналы (signals), каналы (pipes), разделяемая память (shared memory), семафоры (semaphores), сообщения (messages) и файлы.
Если с предыдущим пунктом затруднений не возникло, то вам будет понятен следующий шаг в этом направлении – распределенные системы, когда разные процессы или группы процессов выполняются на разных компьютерах, объединенных каналом передачи данных (сетью). Моделью распределенной системы может служить информационная сеть поликлиники или госпиталя.
В настоящее время существуют несколько технологий создания подобных систем. В простейшем случае это системы типа клиент-сервер. В общем – каждый компонент системы является и клиентом и сервером.
Наиболее известные технологии:
COM – технология Microsoft, работает только на базе Windows NT, поддерживает около 50 клиентов, поставляется в комплекте с Windows, наиболее завершенная на сегодняшний момент;
RMI – технология. основанная на языке Java;
Corba – мультиплатформенная технология, практически отсутствуют ограничения по масштабируемости и количеству клиентов, в настоящее время завершается разработка стандартов для Corba.
Распределенные базы данных
Сетевые решения
(не завершено)
|
Предупреждение: данная статья является черновиком лекций,
читавшихся в МГТУ им.Н.Э.Баумана на кафедре БМТ-2. Файл был сконвертирован из Word-версии, поэтому прошу извинить за ошибки в форматировании. |