Uploaded by Вадим Степанов

МР для выполнения практ.работ по МДК 01.04 Системное программирование

advertisement
Автономное учреждение профессионального образования
Ханты-Мансийского автономного округа - Югры
«Нефтеюганский политехнический колледж»
РАССМОТРЕНО
На заседании ПЦК
Протокол № __
«____»___________20___г.
Руководитель ПЦК _________Лютова Е.А.
УТВЕРЖДАЮ
Зам. директора по УМР
___________Циленко Т. В.
«____»___________20___ г.
МЕТОДИЧЕСКИЕ УКАЗАНИЯ ДЛЯ ВЫПОЛНЕНИЯ
ПРАКТИЧЕСКИХ ПО МЕЖДИСЦИПЛИНАРНОМУ КУРСУ
_____________
МДК 01.04 Системное программирование_______________
(наименование учебной дисциплины)
программы подготовки специалистов среднего звена (ППССЗ)
по специальности СПО
__________09.02.07 Информационные системы и программирование__________
(код, наименование)
базовой подготовки
Степанов В.А.
Разработчик (и):
Преподаватель
(ФИО)
«___»
(подпись)
г. Нефтеюганск 2019г.
2019г.
Методические указания для выполнения практических работ по учебной
дисциплине (междисциплинарному курсу)МДК 01.04_Системное программирование____
(наименование учебной дисциплины, МДК)
программы подготовки специалистов среднего звена (ППССЗ) по специальности СПО
09.02.07 Информационные системы и программирование
(код, наименование специальности)
базового уровня разработан на основе Федерального государственного образовательного
стандарта (далее – ФГОС) по специальности/профессии среднего профессионального
образования (далее – СПО), с рабочим учебным планом, с программой учебной
дисциплины, профессионального модуля ПМ. 01 Разработка модулей программного
обеспечения для компьютерных систем
Содержание
Номер работы
Наименование работы
Раздел 4. МДК.01.04 Системное программирование
Тема 1.4.1. Основные понятия и определения.
Практическая
Супервизор и его компоненты: управление
работа №1
задачами и процессами
Практическая
Супервизор и его компоненты: управление
работа №2
устройствами
Практическая
Супервизор и его компоненты: управление
работа №3
памятью
Практическая
Супервизор и его компоненты: управление
работа №4
данными и файлами
Практическая
Супервизор и его компоненты: управление
работа №5
исключениями и сбоями.
Практическая
Интерфейс операционной системы: основные
работа №6
принципы и стандарты
Практическая
Системные вызовы
работа №7
Практическая
Интерфейсы WinAPI
работа №8
Практическая
Интерфейсы POSIX
работа №9
Практическая
Интерфейсы API
работа №10
Практическая
32 и 64 разрядные интерфейсы
работа №11
Тема 1.4.2 Программирование на языке
низкого уровня
Практическая
работа №12
Практическая
работа №13
Практическая
работа №14
Практическая
работа №15
Практическая
работа №16
Стр.
5
9
25
33
37
44
55
59
75
89
94
Подсистемы управления ресурсами.
100
Управление процессами. Управление потоками.
105
Параллельная обработка потоков. Создание
процессов и потоков. Обмен данными между
процессами. Передача сообщений.
Форматы команд ассемблера. Структура
программы на ассемблере. Синтаксис ассемблера
Описание простых типов данных ассемблера.
116
121
125
Команды обмена данными. Команды пересылки
данных.
Практическая
работа №17
Практическая
работа №18
Практическая
работа №19
Практическая
работа №20
Команды ввода-вывода в порт. Команды работы с
адресами и указателями.
Команды работы со стеком.
130
Условные переходы. Безусловные переходы.
138
Организация циклов
143
133
Практическая
работа №21
Дифференцированный зачет
ПРАКТИЧЕСКАЯ РАБОТА № 1
Тема: Супервизор и его компоненты: управление задачами и процессами
Количество часов: 2
Цель: получение практических навыков управления задачами и процессами и
самостоятельной работы с документацией команд.
Ход работы
1. Изучите приведенные ниже краткие теоретические сведения.
2. Выполните все задания практической работы.
3. Предоставьте отчет по данной практической работе.
Теоретические сведения
Команды Windows для работы с процессами:
 at - запуск программ в заданное время
 Schtasks - настраивает выполнение команд по расписанию
 Start - запускает определенную программу или команду в отдельном
окне.
 command.com - запуск командной оболочки MS-DOS
 cmd.exe - запуск командной оболочки Windows
 Для вывода списка процессов используется команда tasklist (англ.
Task List – список задач).Для получения более подробной информации,
можно использовать центр справки и поддержки или команду help
(например: help at)
 Для остановки выполнения процесса используется команда taskkill
(англ. Task KIll – «Убить» задачу). Для остановки процесса требуется указать
идентификатор процесса PID (англ. Process IDentifier – Идентификатор
процесса). PID – это «уникальное» целое число, назначенное каждому
процессу. У всех процессов эти номера разные.
Ход работы:
Задание 1. Работа с Диспетчером задач Windows 7.
1.
2.
Запустите ОС Windows 7.
Запустите диспетчер задач. Для этого воспользуйтесь одним из
способов:
1) нажатием сочетания клавиш Ctrl+Alt+Del. При использовании
данной команды не стоит пренебрегать последовательностью
клавиш. Появится меню, в котором курсором следует выбрать
пункт «Диспетчер задач»;
2) переводом курсора на область с показаниями системной даты и
времени и нажатием правого клика, будет выведено меню, в
котором следует выбрать «Диспетчер задач».
Будет выведено окно как на рис. 1.
Рис. 1. Диспетчер задач Windows 7.
3. Поработайте с основными вкладками диспетчера задач. Вкладка
«Приложения» отображает список запущенных задач (программ)
выполняющиеся в настоящий момент не в фоновом режиме, а также
отображает их состояние. Также в данном окне можно снять задачу
переключиться между задачами и запустить новую задачу при помощи
соответствующих кнопок.

Вкладка «Процессы» отображает список запущенных процессов,
имя пользователя запустившего процесс, загрузку центрального процессора в
процентном соотношении, а также объем памяти используемого для
выполнения процесса.

Вкладка «Службы» показывает, какие службы запущены на
компьютере. Службы - приложения, автоматически запускаемые системой
при запуске ОС Windows и выполняющиеся вне зависимости от статуса
пользователя.

Вкладка «Быстродействие» отображает в графическом режиме
загрузку процессора, а также хронологию использования физической памяти
компьютера.

Вкладка «Сеть» отображает подключенные сетевые адаптеры, а
также сетевую
активность.

Вкладка «Пользователи» отображает список подключенных
пользователей.
4. Потренируйтесь в завершении и повторном запуске процессов.
5. Разберите мониторинг загрузки и использование памяти.
6. Попытайтесь запустить новые процессы при помощи диспетчера, для
этого можно использовать команды: cmd, msconfig.
7. Оформите отчет по проделанной работе.
Задание 2. Командная строка Windows.
1.
Запустите командную строку в режиме Windows, для этого
следует нажать: (Пуск) > «Все программы» >
«Стандартные» > «Командная строка»
2.
Поработайте выполнением основных команд работы с
процессами: запуская, отслеживая и завершая процессы.
3.
В появившемся окне (рис. 2) наберите: cd/ - переход в корневой
каталог;
cd windows – переход в каталог Windows.
dir - просмотр содержимого каталога.
Рис. 2. Командная строка Windows
Запустите программу «Блокнот»: C:\Windows > start notepad.exe.
Отследите выполнение процесса: C:\Windows > tasklist.
Завершите выполнение процесса: C:\Windows>taskkill/IM
notepad.exe.
7.
Проделайте те же операции с текстовым редактором WordPad.
8.
Оформите отчет по проделанной работе.
Задание 3. Самостоятельное задание.
4.
5.
6.
1.
Отследите выполнение процесса explorer.exe при помощи
диспетчера задач и командной строки.
2.
Продемонстрируйте преподавателю завершение и повторный запуск
процесса explorer.exe из:
1) диспетчера задач;
2) командной строки.
3.
Подготовьте отчет по проделанной работе.
Содержание отчета:
1.
2.
3.
4.
Титульный лист.
Название и цель работы.
Краткое теоретическое описание.
Результаты выполнения работы, выводы.
ПРАКТИЧЕСКАЯ РАБОТА № 2
Тема: Супервизор и его компоненты: управление устройствами
Количество часов: 2
Цель: приобретение навыков работы с Windows в режиме командной строки.
Ход работы
1. Изучите приведенные ниже краткие теоретические сведения.
2. Выполните все задания практической работы.
3. Предоставьте отчет по данной практической работе.
Теоретические сведения
Окно Командная строка.
Наряду с графическим интерфейсом в Windows можно также
использовать интерфейс командной строки, доставшийся Windows в
наследство от операционной системы MS DOS.
Для работы в режиме командной строки надо выбрать в подменю
Стандартные главного меню системное приложение Командная строка
(значок
). Окно этого приложения запускается также при запуске
приложения MS DOS в команде Выполнить или в Проводнике.
Закрыть окно Командная строка можно щелчком по кнопке Закрыть (
) или вводом в командной строке команды exit.
Окно Командная строка имеет специальный вид, отличный от других
окон Windows. Управление размерами и местоположением окна, а также
вывод в окне управляется с помощью меню. Это меню вызывается, если либо
щелкнуть левой кнопкой мыши по значку окна, либо щелкнуть правой
кнопкой мыши по строке заголовка:
Команда Переместить позволяет перемещать окно по экрану, а
команда Размер – изменить размер окна (только по вертикали). Команды
Свернуть, Развернуть, Восстановить и Закрыть дублируют действие
соответствующих кнопок строки заголовка окна.
Команда Изменить позволяет окну взаимодействовать с буфером
обмена (только для текстовых данных), прокрутить содержимое окна
(команда Прокрутить) или найти заданную строку текста в окне (команда
Найти).
Взаимодействие с буфером обмена в окне командной строки
выполняется с помощью команд Пометить, Копировать, Вставить и
Выделить все.
Для копирования из окна командной строки необходимо выполнить
следующие действия:
 вызвать контекстное меню для строки заголовка окна;
 в подменю команды Изменить контекстного меню выбрать команду
Пометить;
 выделить фрагмент текста, который необходимо скопировать
(сначала установить курсор мыши на первый символ копируемого фрагмента,
затем нажать левую кнопку мыши и, не отпуская ее, установить курсор мыши
на последний символ копируемого фрагмента);
 для выделения всего содержимого окна можно использовать команду
Выделить все;
 опять вызвать контекстное меню и подменю команды Изменить
контекстного меню выберите команду Копировать (можно также просто
нажать клавишу Enter).
Скопированный фрагмент можно вставить в другое место окна или в
любое приложение.
Для вставки текстовых данных в окно командной строки необходимо:
 установить курсор в то место, где будет производиться вставка;
 вызвать контекстное меню для строки заголовка окна;
 в подменю команды Изменить контекстного меню выбрать команду
Вставить.
В диалоговом окне команды Свойства задаются параметры
выводимого окна.
В закладке Общие этого окна можно выбрать размер курсора, режим
вывода (окно или полноэкранный режим), количество запоминаемых команд,
а также способ редактирования.
В закладке Шрифт можно выбрать шрифт для вывода текста в окне и,
соответственно, горизонтальный размер окна, поскольку он зависит от
величины выводимого шрифта.
В закладке Расположение задается размер буфера экрана и размер
собственно экрана (ширина в символах, высота – в строках), а также
положение верхнего левого угла окна относительно верхнего левого угла
экрана (в пикселях).
В закладке Цвета можно выбрать цвета текста и фона для окон
командной строки (основного и всплывающего).
Команда Умолчания окна Командная строка выводит закладку
Расположение команды Свойства.
Работа в режиме командной строки
Диалог пользователя в режиме командной строки осуществляется в
форме команд, вводимых в ответ на приглашение и ответов операционной
системы и пользовательской программы на введенные команды.
Приглашение по умолчанию содержит путь к текущей папке (папке, в
которой в данный момент находится пользователь) и заканчивается
символом '>'. Вид приглашения можно изменить с помощью команды
prompt.
В момент загрузки окна Командная строка текущей является папка
C:\Documents and Settings\login-пользователя.
Команда пользователя состоит из имени команды и, возможно,
параметров. Параметры обычно задают объекты, над которыми
выполняется действие команды. Кроме того, команда может содержать
опции, задающие различные режимы выполнения команды. Первым
символом опции является символ "-" или символ "/". Имя команды и
параметры могут набираться как прописными (заглавными), так и
строчными латинскими буквами (все строчные буквы переводятся в
Windows в прописные буквы). Имя команды, параметры и опции отделяются
друг от друга пробелами. Если параметр (например, имя файла) содержит
пробелы, он должен быть заключен в двойные апострофы (символ '"'). Ввод
каждой команды заканчивается нажатием клавиши Enter (Return).
В качестве имени команды могут использоваться не только имена
команд, но и имена программ (файлов с расширением .COM или .EXE), а
также командных файлов с расширением .BAT (значок
).
Если пользователь не указал, в каком каталоге следует искать
программу, то поиск производится в текущем каталоге и в каталогах,
заданных командой Path.
Для явного указания папки в команде следует в качестве имени
команды использовать полное имя файла, включающее путь к той папке, в
которой находится нужная программа или командный файл, например:
c:\doc\prog\myprog
До нажатия клавиши Enter можно редактировать строку вводимой
команды, удаляя ранее введенные символы с помощью клавиш Backspace
().
Кроме этого, можно вызвать предыдущую или следующую
выполненную команду (если они есть) с помощью клавиш  или , а также
подвести курсор в нужное место команды с помощью клавиш  или  и
выполнить корректировку команды в режиме вставки или замещения
(переключение в режим вставки или замещения выполняется с помощью
клавиши Ins).
Программы, но не команды, и командные файлы можно запустить, как
и приложения Windows, с помощью команды Выполнить (где можно, при
необходимости, указать параметры программы) или с помощью Проводника.
Ярлыки для приложений MS DOS имеют значок .
Работа с командами в Far
Вызов команд и программ в режиме командной строки можно
выполнить также и в командной оболочке Far. Команды вызова набираются
в предпоследней строке окна Far после приглашения так же, как и в окне
Командная строка.
Для того, чтобы просмотреть результаты выполнения команды,
необходимо спрятать панели оглавлений. Эта операция выполняется с
помощью клавиш Ctrl+O. Возврат панелей на экран выполняется после
повторного нажатия этих же клавиш.
Команды редактирования командной строки
Команды редактирования командной строки в Far представлены в табл.
4.1.
Таблица 4.1. Команды редактирования командной строки
Операция
Сдвиг курсора на один символ
Клавиши
 или Ctrl+S
влево.
Сдвиг курсора на один символ
 или Ctrl+D
вправо.
Сдвиг курсора на одно слово
Ctrl+
влево.
Сдвиг курсора на одно слово
Ctrl+
вправо.
Установка курсора в начало
Ctrl+Home
строки.
Установка курсора в конец
Ctrl+End
строки.
Удаление символа справа.
Del
Удаление символа слева.
 (Backspace)
Удаление слова справа.
Ctrl+Del
Удаление слова слева.
Ctrl+
(Backspace)
Копирование команды .
Ctrl+Page Up
Прокрутка в конец файла.
End
Прокрутка в начало файла.
Home
Операция
Клавиши
Прокрутка на одну страницу
Page Down
Прокрутка на одну страницу
Page Up
вниз.
вверх.
Установка курсора в начало
Ctrl+N
экрана.
Установка курсора в конец
Ctrl+E
экрана.
Команды обмена данными с командной строкой
Команды обмена данными с командной строкой в Far представлены в
табл. 4.2.
Таблица 4.2. Команды обмена данными с командной строкой
Операция
Клавиши
Копирование команды в буфер обмена.
Ctrl+Ins
Вставка команды из буфера обмена.
Shift+Ins
Вывод в командной строке предыдущей
Ctrl+E
команды.
Вывод в командной строке следующей
Ctrl+X
команды.
Очистка командной строки.
Вставка выделенного имени файла (без
Ctrl+Y
Ctrl+Enter
пути к файлу) из активной панели.
Вставка пути к файлам из активной
Ctrl+Shift+[
панели.
Вставка пути к файлам из пассивной
панели.
Ctrl+Shift+]
Команды Windows XP
Сводка команд Windows XP (в алфавитном порядке) представлена в
следующей табл. 4.3.
Таблица 4.3. Сводка команд Windows XP
Имя
Действие команды
команды
ASSOC
Вывод либо изменение сопоставлений по
расширениям имен файлов.
AT
Выполнение команд и запуск программ по
расписанию.
ATTRIB
Отображение и изменение атрибутов файлов.
BREAK
Включение/выключение режима обработки
комбинации клавиш Ctrl+C.
CACLS
Отображение/редактирование списков
управления доступом (ACL) к файлам.
CALL
Вызов одного пакетного файла из другого.
CD
Вывод имени либо смена текущей папки.
CHCP
Вывод либо установка активной кодовой
страницы.
CHDIR
Вывод имени либо смена текущей папки.
CHKDSK
Проверка диска и вывод статистики.
CHKNTFS
Отображение или изменение выполнения
проверки диска во время загрузки.
CLS
Очистка экрана.
CMD
Запуск еще одного интерпретатора командных
строк Windows.
COLOR
Установка цвета текста и фона, используемых
по умолчанию.
COMP
Сравнение содержимого двух файлов или двух
наборов файлов.
Имя
Действие команды
команды
COMPACT
Отображение/изменение сжатия файлов в
разделах NTFS.
CONVERT
Преобразование дисковых томов FAT в NTFS.
Нельзя выполнить
преобразование текущего
активного диска.
COPY
Копирование одного или нескольких файлов в
другое место.
DATE
Вывод либо установка текущей даты.
DEL
Удаление одного или нескольких файлов.
DIR
Вывод списка файлов и подпапок из указанной
папки.
DISKCOMP
Сравнение содержимого двух гибких дисков.
DISKCOPY
Копирование содержимого одного гибкого
диска на другой.
DOSKEY
Редактирование и повторный вызов командных
строк; создание макросов.
ECHO
Вывод сообщений и переключение режима
отображения команд на экране.
ENDLOCAL
Конец локальных изменений среды для
пакетного файла.
ERASE
Удаление одного или нескольких файлов.
EXIT
Завершение работы программы CMD.EXE
(интерпретатора командных строк).
FC
Сравнение двух файлов или двух наборов
файлов и вывод различий между ними.
FIND
Поиск текстовой строки в одном или
нескольких файлах.
FINDSTR
Поиск строк в файлах.
Имя
Действие команды
команды
FOR
Запуск указанной команды для каждого из
файлов в наборе.
FORMAT
Форматирование диска для работы с Windows.
FTYPE
Вывод либо изменение типов файлов,
используемых при сопоставлении по расширениям
имен файлов.
GOTO
Передача управления в отмеченную строку
пакетного файла.
GRAFTABL
Позволяет Windows отображать расширенный
набор символов в графическом режиме.
HELP
Выводит справочную информацию о командах
Windows.
IF
Оператор условного выполнения команд в
пакетном файле.
LABEL
Создание, изменение и удаление меток тома для
дисков.
MD
Создание папки.
MKDIR
Создание папки.
MODE
Конфигурирование системных устройств.
MORE
Последовательный вывод данных по частям
размером в один экран.
MOVE
Перемещение одного или нескольких файлов из
одной папки в другую.
PATH
Вывод либо установка пути поиска
исполняемых файлов.
PAUSE
Приостановка выполнения пакетного файла и
вывод сообщения.
Имя
Действие команды
команды
Восстановление предыдущего значения
POPD
текущей активной папки,
сохраненного с помощью команды PUSHD.
Вывод на печать содержимого текстовых
PRINT
файлов.
Изменение приглашения в командной строке
PROMPT
Windows.
Сохранение значения текущей активной папки и
PUSHD
переход к другой папке.
RD
Удаление папки.
RECOVER
Восстановление читаемой информации с
плохого или поврежденного диска.
Помещение комментариев в пакетные файлы и
REM
файл CONFIG.SYS.
REN
Переименование файлов и папок.
RENAME
Переименование файлов и папок.
REPLACE
Замещение файлов.
RMDIR
Удаление папки.
SET
Вывод, установка и удаление переменных среды
Windows.
Начало локальных изменений среды для
SETLOCAL
пакетного файла.
Изменение содержимого (сдвиг) подставляемых
SHIFT
параметров для пакетного файла.
SORT
Сортировка ввода.
START
Запуск программы или команды в отдельном
окне.
SUBST
Сопоставляет заданному пути имя диска.
TIME
Вывод и установка системного времени.
Имя
Действие команды
команды
Назначение заголовка окна для текущего сеанса
TITLE
интерпретатора
командных строк CMD.EXE.
Графическое отображение структуры папок
TREE
заданного диска или заданной папки.
TYPE
Вывод на экран содержимого текстовых файлов.
VER
Вывод сведений о версии Windows.
VERIFY
Установка режима проверки правильности
записи файлов на диск.
Вывод метки и серийного номера тома для
VOL
диска.
XCOPY
Копирование файлов и дерева папок.
Для того, чтобы вывести приведенный в таблице список команд
Windows XP необходимо ввести команду help без параметров.
Справка по команде Windows XP выводится либо с помощью команды
имя-команды /?
либо с помощью команды
help имя-команды
Например, справку по команде dir можно получить с помощью одной
из команд:
dir /? или help dir
Перенаправление ввода-вывода команд командной строки
Перенаправление ввода-вывода изменяет использование в качестве
источника ввода данных стандартного ввода – клавиатуры, а в качестве
стандартного вывода – экрана дисплея. Перенаправление ввода-вывода
можно задавать в командной строке следующим образом:
команда > имя-файла – перенаправление в файл с именем имя-файла
сообщений, выводимых с помощью указанной команды. Если файл уже
существовал, то он заменяется новым;
команда >> имя-файла – действует аналогично предыдущему
перенаправлению, но
если файл с именем имя-файла уже существует, то
сообщения добавляются в конец этого файла;
команда < имя-файла – чтение входных данных команды (программы)
не с клавиатуры, а из файла с именем имя-файла;
команда-1 | команда-2 – передача вывода первой команды в качестве
входных данных для команды-2 (организация конвейера команд).
Ход работы
Порядок выполнения работы:
1. Запустите системное приложение Командная строка. Увеличьте,
используя команду Свойства контекстного меню окна, ширину окна до 110
символов (для ввода длинных команд в одну строку).
2. Откройте новый файл в текстовом редакторе Блокнот.
3. Выведите справку по команде prompt и измените строку
приглашения так, чтобы она содержала следующие компоненты: ваша
фамилия (можно сокращение из 4-5 первых символов), пробел, текущие диск
и каталог, пробел, текущая дата, пробел, текущее время, символ ">".
Скопируйте справку и введенную вами команду, а также вид приглашения
после его изменения в окно текстового редактора Блокнот, добавив заголовок
"Команда PROMPT".
4. Выведите справку по команде dir и скопируйте справку в окно
текстового редактора Блокнот, добавив заголовок "Справка по команде DIR".
5. Выведите справку по команде cd (chdir) и скопируйте справку в окно
текстового редактора Блокнот, добавив заголовок "Справка по команде
CD/CHDIR".
6. Выведите справку по команде mkdir (md) и скопируйте справку в
окно текстового редактора Блокнот, добавив заголовок "Справка по команде
MKDIR/MD".
7. Перейдите, пользуясь командами dir для вывода оглавления текущей
папки и команды cd для перехода в свою подпапку (путь текущая папка 
Рабочий стол  Папка первого курса  Ваша папка).
8. Создайте в своей папке подпапку temp и сделайте эту подпапку
текущей. Скопируйте в окно текстового редактора Блокнот все введенные
вами команды dir, cd и mkdir (без вывода оглавления промежуточных папок).
9. Выведите справку по команде copy и скопируйте справку в окно
текстового редактора Блокнот, добавив заголовок "Справка по команде
COPY".
10. Откройте командную оболочку Far и выведите на левой панели
оглавление папки Рабочая папка, а на левой панели – оглавление созданной
папки temp (папка пока пустая).
11. Скопируйте с помощью команды copy в командной строке Far файл
Солома.BMP и все файлы с расширением .txt. Каждый файл или группа
файлов копируется с помощью отдельной команды copy. При копировании
файла укажите, используя команды обмена данными командной строки Far,
полный путь для копируемого файла в папке Рабочая папка. Скопируйте
(используя команды обмена Far) обе введенные команды в буфер обмена и
вставьте их в окно текстового редактора Блокнот.
12. Вернитесь в окно приложения Командная строка и выведите
справку по команде find, а затем скопируйте справку в окно текстового
редактора Блокнот, добавив заголовок "Справка по команде FIND".
13. Выведите справку по команде type, а затем скопируйте справку в
окно текстового редактора Блокнот, добавив заголовок "Справка по команде
TYPE".
14. Составьте конвейерную цепочку из команд type и find для вывода
на дисплей строк файла Кодировка символов (OEM).txt, содержащих строку
"Кодировка". Скопируйте команду и вывод этой команды в окно текстового
редактора Блокнот.
15. Сохраните файл именем Отчет 4 фамилия.txt в папке temp и
закройте файл.
16. Составьте конвейерную цепочку из команд type и find для вывода
на дисплей строк файла Оглавление.txt, содержащих строку "DOC"
с
записью оглавления в конец файла (используя перенаправление ввода-
вывода). Затем откройте файл Отчет 4 фамилия.txt в текстовом редакторе
Блокнот скопируйте введенную вами команду в окно редактора.
17. Выведите справку по команде move, а затем скопируйте справку в
окно текстового редактора Блокнот, добавив заголовок "Справка по команде
MOVE".
18. Сохраните содержимое и закройте текстовый редактор Блокнот.
Переместите файл Отчет 4 фамилия.txt из текущей папки temp в
родительскую папку (вашу папку), а затем снова откройте этот файл в
текстовом редакторе Блокнот.
19. Составьте конвейерную цепочку из команд dir и find для вывода на
дисплей имен файлов, содержащих русскую букву "о". Скопируйте команду и
вывод этой команды в окно текстового редактора Блокнот.
20. Выведите справку по команде erase (del), а затем
скопируйте
справку в окно текстового редактора Блокнот, добавив заголовок "Справка по
команде ERASE/DEL".
21. Выведите оглавление папки temp.
22. Удалите из текущего каталога все файлы, содержащие в своем
имени русскую букву "о".
23. Выведите справку по команде rename (ren), а затем скопируйте
справку в окно текстового редактора Блокнот, добавив заголовок "Справка по
команде RENAME/REN".
24. Переименуйте
файл
dircont.txt,
присвоив
ему
новое
имя
Оглавление.txt.
25. Еще раз выведите оглавление папки temp.
26. Выведите справку по команде rmdir (rd), а затем скопируйте
справку в окно текстового редактора Блокнот, добавив заголовок "Справка по
команде RMDIR/RD".
27. Перейдите в родительскую папку (вашу папку) и скопируйте
команду и вывод этой команды в окно текстового редактора Блокнот.
28. Удалите папку temp.
29. Выведите справку по команде chkdsk, а затем скопируйте справку
в окно текстового редактора Блокнот, добавив заголовок "Справка по команде
CHKDSK".
30. Проверьте вашу дискету или флэш-карту с помощью команды
chkdsk. Скопируйте команду проверки в окно текстового редактора Блокнот.
31. Покажите преподавателю содержимое вашего файла Отчет 4
фамилия.txt.
32. Скопируйте файл Отчет 4 фамилия.txt и эту лабораторную работу
на дискету или флэш-карту, а затем удалите этот файл в вашей папке.
33. Введите команду prompt $P$G для восстановления прежнего вида
приглашения.
Содержание отчета
В отчете должно быть представлено содержимое файла со всеми
справками о командах и выполненными командами.
Вопросы для самоконтроля
1. Как в Windows запускается режим командной строки?
2. Как выполняется обмен данными между окном командной строки
или окном приложения MS DOS и другими окнами?
3. Какие компоненты содержит команда в Windows?
4. Как выполняется повторное выполнение и редактирование команд в
режиме командной строки?
5. Как выполняется редактирование команд в командной оболочке Far?
6. Какие возможности по обмену данными с командной строкой
имеются в командной оболочке Far?
7. Как выводится справка для списка команд Windows и справка по
отдельной команде?
8. Как организовать вывод выходных данных команды в файл?
9. Как организовать последовательное выполнение нескольких команд
(цепочку или конвейер команд)?
10. Как перейти в вышележащий каталог и корневой каталог?
11. Что такое полное имя файла?
12. Можно ли скопировать файл в тот же каталог, в котором он
находится?
ПРАКТИЧЕСКАЯ РАБОТА № 3
Тема: Супервизор и его компоненты: управление памятью
Количество часов: 2
Цель: научиться осуществлять настройку файла подкачки. Осуществлять
управление памятью
Ход работы.
1.
Ознакомьтесь с теоретическим материалом по лабораторной
работе.
2.
Выполните предложенные задания.
3.
Продемонстрируйте результаты выполнения предложенных
заданий.
4.
Оформите отчет по практической работе.
Краткие теоретические сведения:
ОС Windows использует не только оперативную память для своей
работы. Чтобы не-много разгрузить ресурсы оперативной памяти, на жестком
диске создается специальный файл, в котором ОС также хранит текущие
данные. Называется он swap – файлом, или фай-лом подкачки, а также
виртуальной
памятью
компьютера.
Оперативную
память
называют
физической, т.к. она создана из конкретного материала, т.е. ее можно взять в
руки и рассмот-реть. Виртуальная память – ненастоящая, это область
дискового пространства, которую ОС тоже считает памятью. Слово
«виртуальный» в данном случае подразумевает «созданный на компьютере»
Файл подкачки автоматически создается ОС в корневой папке того
диска, где распо-ложена сама система. Его размер определяется исходя из
объема физической(оперативной) памяти компьютера. По умолчанию
минимальный размер файла подкачки соответствует по-лутора размерам
физической памяти, а максимальный размер обычно превышает ее в 3 раза.
Размер файла подкачки и его расположение можно изменять. Для этого
откройте вкладку Дополнительно в окне параметры быстродействия и в
области Виртуальная па-мять нажмите кнопку изменить. Откроется окно
Виртуальная память.
Текущая информация о размере файла подкачки отображается в нижней
части данно-го окна в области Общий объем файла подкачки на всех дисках
(рис. 1).
Рис. 1. Виртуальная память
Обратите внимание на то, что:
Если у вас установлено несколько жестких дисков (не логических
1.
разделов, именно жестких дисков), логично установить файл подкачки на
самый быст-рый из них. При этом лучше, чтобы ОС находилась на другом
диске.
2.
Можно разместить файл подкачки на нескольких жестких дисках
одновремен-но.
3. Если у вас только один жесткий диск, разбитый на разделы, лучше
всего уста-новить файл подкачки на самом первом из них,
физически расположенном ближе к краю диска.
4.
Не нужно устанавливать файл подкачки сразу на нескольких
логических дис-ков одного жесткого. Это только замедлит работу системы,
т.к. магнитным го-ловкам жесткого диска придется постоянно перепрыгивать
с места на место.
5.
Если у вас много оперативной памяти (512 Мбайт и выше), то
размеры файла подкачки по умолчанию (от 1 Гбайт до 1,5 Гбайт) будут
неоправданно зани-мать пространство жесткого диска. Однако, как вы знаете,
полностью отклю-чать файл подкачки нельзя. Поэтому поступите так:
установите переключатель в положение особый размер. Далее в зависимости
от ресурсов вашего жесткого диска возможно несколько вариантов: нo если
объем жесткого диска достаточно большой, то в поле Исходный раз-мер
введите значение 512 Мбайт. Максимальный размер зависит от при-ложений,
с которыми вы работаете (не более 1 Гбайт)
Нo если свободного места на диске маловато, то установите исходный
размер 2 Мбайт. Максимальный размер при этом должен быть не меньше, чем
размер физической памяти. Установите его равным ей.
Нo - если оперативной памяти не так уж много (менее 256 Мбайт), то
нужно оставить параметры, принятые по умолчанию, либо выбрать режим
Раз-мер по выбору системы, при котором Windows, собирая информацию об
использовании файла подкачки в процессе работы, при необходимости
сможет корректировать (увеличивать) его размеры.
После внесения изменений в настройки файла подкачки компьютер
нужно перезагру-зить (при уменьшении его размеров либо при создании
нового файла подкачки система сама предложит вам это). Затем для
оптимизации файла подкачки следует запустить программу дефрагментации.
Распределение работы памяти и процессора.
Windows позволяет настроить некоторые дополнительные параметры
управления быстродействием системы.
Для знакомства с ним перейдите на вкладку Дополнительно окна
параметры быст-родействия.
Обратите внимание на область Распределение времени процессор. По
умолчанию пе-реключатель Оптимизировать работу находится в положении
программ. Однако если вы работаете с большим количеством программ
одновременно, то для увеличения стабильности работы специалисты
рекомендуют установить переключатель в положении служб работа-ющих в
фоновом режиме. Однако, при этом стабильность работы повысится, скорость
вы-полнения текущего активного приложения немного снизится.
8. области Использование памяти по умолчанию ресурсы памяти также
оптимизируют работу программ. Если вами программы работают с файлами
больших объемов, то стоит установить переключатель оптимизировать работу
в положение системного КЭШа.
Уменьшение дискового пространства, занимаемого Windows. Для
уменьшения диско-вого пространства нужно удалить все неиспользуемые
программные компоненты Windows (MSN Explorer, Paint)
Очистка дисков. Для очистки дисков в Windows встроены специальные
служебные программы, найти которые можно в программной группе пуск- все
программы - стандартные – служебные - очистка диска. После запуска
программа очистка диска оценит, сколько мусора поднакопилось в ваших
закромах. Затем выдаст результаты проверки.
Диспетчер задач.
Для каждого запущенного приложения ОС отводит определенный
объем оперативной памяти, или другими словами, задачу. Каждая задача, в
свою очередь, создает один или не-сколько процессов – отдельных процедур
выполняющих
конкретную
функцию
задачи
и
занимающих
строго
определенное место в адресном пространстве памяти. Для управления задачами и процессами в Windows предназначена специальная служебная
программа – Дис-петчер задач (рис. 2). Вызвать его можно либо с помощью
контекстного меню панели задач, либо нажав комбинации клавиш Ctrl-ShiftEsc.
Рис.2. Диспетчер задач
В строке состояния располагается информация об общем количестве
процессов в па-мяти, загрузке процессора и общем количестве физической и
виртуальной памяти, использу-емой этими процессами.
Диспетчер задач является отличным инструментом борьбы с зависшими
приложения-ми. Если в поле состояние напротив той или иной задачи
появилось значение не отвечает, то нужно только выделить такую задачу и
нажать кнопку снять задачу, после чего спокойно продолжить работу. чтобы
переключить на какую-либо задачу, нужно выделить мышью ее название в
поле Задача и нажать кнопку Переключиться. Для запуска новой задачи –
кнопка новая задача и т.д.
Назначенные задания
Не только ОС может назначить выполнение тех или иных программ.
Пользователям это также под силу, а помогает им Мастер Назначенные
задания (рис. 3). С его помощью можно без вашего участия ежедневно
проверять почту, еженедельно сканировать диск, и т.д. найти этот мастер
легко: пуск - все программы - стандартные - служебные – назначенные
задания, а управлять им просто.
Рис. 3. Мастер планирования заданий
Программы автозагрузки (для экономии времени). Главное меню пуск- все програм-мы – автозагрузка.
Ход работы:
Задание 1. Быстродействие системы
Вызовите окно Свойства системы и перейти в нем на вкладку
1.
Дополнительно.
2.
Нажмите в области быстродействие на кнопку параметры.
3.
В открывшемся окне Параметры быстродействия установите
положение Обеспечить наилучшее быстродействие, которое сделает
картинку намного скромнее, зато увеличит производительность системы.
Поэкспериментируйте с меню особые эффекты для изменения
4.
визуальных эффектов. Запишите полученные результаты.
Верните состояние операционной системы в прежние настройки,
5.
для этого установите переключатель в положение Восстановить значения по
умолчанию (рис. 4).
Рис. 4. Параметры быстродействия
2.
Оформите отчет по проделанной работе.
Задание 2. Очистка дисков.
1.
Вызовите диалоговое окно свойств диска и прейдите на вкладку
сервис, на которой находятся кнопки запуска двух полезных команд:
a. проверка диска на наличие ошибок
b. программа
дефрагментации
производительности
(способствует
систе-мы).
Чтобы
повышению
найти
все
фрагментированные файлы и собрать их части в единое це-лое
необходима дефрагментация.
2.
Выполните дефрагментацию переносного устройства (флэшки).
Запишите увиденные результаты.
3.
Оформите отчет по проделанной работе.
Задание 3. Файл подкачки.
1.
Выберите нужный диск в верхней части окна. Если на данном
диске вам не нужен файл подкачки, то установите переключатель в области
Размер файла подкачки для выбранного диска в положение Без файла
подкачки. Если компьютер оснащен большим ко-личеством оперативной
памяти, то может возникнуть соблазн убрать файлы подкачки со всех дисков.
2.
Выберите параметр размер по выбору системы, который
включает динамиче-ское (т.е. изменяемое со временем) управление размером
файла подкачки ОС.
3.
Установив переключатель в положение Особый размер, вручную
установите значения файла подкачки.
4.
После внесения всех изменений нажмите кнопку Задать (рис. 5).
Рис. 5. Виртуальная память – задание файла подкачки
5.
Оформите отчет по проделанной работе.
Содержание отчета:
1.
Титульный лист.
2.
Название и цель работы.
3.
Краткий конспект теоретической части.
4.
Выводы к работе.
Практическая работа № 4
Тема: Супервизор и его компоненты: управление данными и файлами
Количество часов: 2
Цель: Развитие профессиональных навыков работы в среде графической
операционной системы Windows.
Ход работы:
1.
Выполните предложенные задания.
2.
Продемонстрируйте результаты выполнения предложенных
заданий.
3.
Оформите отчет по практической работе.
Ход работы:
Работа с файлами и папками.
1.Запустить программу Сеанс MS-DOS. С помощью команд MS-DOS
создать в каталоге Temp файл с именем personal.txt, в который записать
фамилию, имя, отчество студента. Завершить сеанс MS-DOS.
2.Сделать пять копий файла personal.txt в папке Temp.
3.Создать в папке Temp новую папку User.
4.Переместить файл personal.txt в папку User.
5.Переименовать файл копия(2)personal.txt. Новое имя ФИО.txt.
6.Выделить все файлы в папке Temp. Удалить эту группу файлов в
корзину.
7.Восстановить файл копия(3)personal.txt из корзины и скопировать его
в папку User.
8.Запустить программу поиска файлов и папок. Найти папку Windows.
9.Запустить программу поиска. Найти все файлы на жестком диске с
расширением bmp.
10.Задать обработку файлов с расширением bmp программой Paint
(Проводник-Сервис-Свойство папки-Типы файлов).
Работа со структурой каталогов.
1.В каталоге Temp
приложению 1).
создать структуру подкаталогов (согласно
2.Скопировать эту структуру из папки Temp в папку User.
3.Удалить созданную структуру из папки Temp.
4.Переместить структуру из папки User в папку Temp.
5.Переименовать папку User. Новая имя Resu.
6.Заархивировать
созданную
структуру
каталогов
с
помощью
архиватора WinRar. Использовать метод сжатия максимальный, создать
самораспаковывающийся архив.
Приложение №1
Содержание отчета:
1.
Титульный лист.
2.
Название и цель работы.
3.
Выводы к работе.
Практическая работа № 5
Тема: Супервизор и его компоненты: управление исключениями и
сбоями.
Количество часов: 2
Цель работы: Изучить причины аварийных ситуаций и сбоев в работе
компьютера. Освоить действия пользователя в аварийных ситуациях.
Ход работы
1. Изучите приведенные ниже краткие теоретические сведения.
2. Выполните все задания практической работы.
3. Ответить на контрольные вопросы.
4. Предоставьте отчет по данной практической работе.
1. Теоретическая часть
Действия пользователя при «зависании» компьютера
(для Windows 98)
Задача: отключить программу, вызывающую сбой.
1. Нажмите одновременно Ctrl +Alt +Del. Появится окно Завершение
работы программы. Программа, которая зависла, как правило, в списке
помечена надписью не отвечает
2. Выберите «зависшее» приложение и нажмите кнопку Завершить
задачу. Система попытается завершить работу со сбойным приложением с
сохранением данных. В том случае, если это невозможно, появится еще одно
окно с соответствующим предупреждением и кнопкой Завершить задачу.
3. Нажмите кнопку Завершить задачу. Если предыдущие действия не
привели к завершению работы с приложением, окно Завершение работы
программы может появиться снова.
4. Попробуйте повторить шаги 2-3.
5. Если предыдущие шаги не дали результата, нажмите
кнопку Завершить работу. Компьютер попытается завершить свою работу.
Если это удалось, включите компьютер и продолжите работу.
6. Если все безрезультатно, еще раз нажмите
клавиши Ctrl+ Alt+ Del. Компьютер попытается совершить перезагрузку.
Если это удалось, после перезагрузки можно будет продолжать работу, хотя
все несохраненные изменения будут утеряны.
7. Если вышеперечисленные действия не помогают, перезагрузите
компьютер нажатием кнопки Reset на системном блоке.
8. Если и это не дает эффекта, нажмите кнопку включения/выключения
компьютера.
9. Может случиться так, что и нажатие на кнопку
включения/выключения не даст результата. В этом случае остается лишь
выдернуть шнур питания из розетки и вставить его снова.
Запуск Windows в случае неполадок
В том случае, если загрузить ОС обычным способом не удается, можно
использовать режим защиты от сбоев. В этом случае Windows использует
базовые установки параметров, принимаемые по умолчанию, которые
должны позволить загрузить Windows, после чего можно приступить к
устранению ошибок. В режиме защиты от сбоев Windows не выполняет
загрузку драйверов и программ, которые задействованы в обычном режиме.
Существует несколько вариаций режима защиты от сбоев. Для
использования одного из них необходимо выполнить последовательность
действий:
1. нажать кнопку Пуск и выбрать команду Выключение. Затем в
диалоговом окне Выключить компьютернабрать команду Перезагрузка;
2. Подождать некоторое время до появления надписи «Выберите
операционную систему для запуска». При появлении надписи сразу же
нужно нажать клавишу F8;
3. На экране появится меню загрузки. В нем можно выбрать различные
режимы загрузки системы. Режим защиты от сбоев имеет номер 1. Тот же
режим с поддержкой сети (Safe mode with Network support) - номер 2.
4. Ввести номер подходящего режима. Рекомендуется выбрать первый
или, если пользователь хочет использовать сеть, то второй.
Безопасный режим (Safe mode)
При загрузке в данном режиме ОС использует только самые
необходимые драйверы устройств. В безопасном режиме отсутствуют
сетевые подключения, и видеосистема работает в режиме VGA. Также
загружаются стандартные службы, которые необходимы для обнаружения
причин сбоя компьютера.
Безопасный режим помогает определить причину неполадок. Если при
загрузке в этом режиме неполадки не возникают, можно изменить настройки
по умолчанию и минимальный набор драйверов устройств как возможные
причины возникновения этих неполадок. Если причиной возникающих
неполадок является добавление нового устройства
Или смена драйвера, безопасный режим можно использовать для
удаления этого устройства или отмены изменений. Также безопасный режим
может помочь в том случае, когда неполадки вызывает новое программное
обеспечение. При загрузке в безопасном режиме можно изменить настройки
нового ПО либо удалить его с компьютера.
Безопасный режим с загрузкой сетевых драйверов основан на
безопасном режиме, однако дает возможность загрузить сетевые драйверы и
службы, которые, в свою очередь, позволяют использовать локальную сеть.
Безопасный режим с поддержкой командной строки идентичен
обычному безопасному режиму, но вместо графического интерфейса
пользователя запускается командная строка.
Включить протоколирование загрузки. Данный режим позволяет
найти точную причину неполадок при загрузке системы, поскольку в
процессе загрузки система создает файл ntbtlog.txt, который хранится в
каталоге %SystemRoot% и в который записывается перечень всех
загруженных (или незагруженных) драйверов и служб.
Включить режим VGA. Данный режим позволяет устранить
неполадки, вызванные в результате неправильной конфигурации
видеосистемы. Очень часто причиной неправильной
загрузки Windowsявляется использование нового драйвера для
видеоадаптера, что приводит к отсутствию изображения на мониторе.
Основной драйвер видеоадаптера всегда используется при загрузке в
безопасном режиме.
Загрузка последней удачной конфигурации. Данные режим позволяет
выполнить откат системы к тому моменту, когда ее работа была стабильной.
Сам режим не устраняет неполадки. Все изменения, сделанные со времени
последней успешной загрузки, будут утеряны.
Режим отладки позволяет отправить данные об отладке на другой
компьютер, используя прямое кабельное подключение.
Если для установки Windows использовалась служба удаленной
установки, могут быть доступны дополнительные варианты, связанные с
восстановлением системы при помощи служб удаленного доступа.
Рассмотрим факторы, приводящие к аварийным ситуациям и сбоям в
работе компьютера.
Ошибки в работе пользователя
Этот фактор является наиболее распространенным, и его последствия
могут оказаться весьма плачевными: потеря данных, выход из строи
программного и аппаратного обеспечения компьютера. Повторим основные
правила, помогающие избежать серьезных ошибок:
1). В самом начале работы над документом сохраните его: присвойте
имя файлу и выберите папку хранения. При этом имя файла и папка должны
отражать содержание документа; вам должно быть удобно находить нужный
файл.
2) В процессе работы над документом обязательно включите режим
автосохранения.
3) В случае выполнения ошибочных действий при редактировании
какого-либо файла нажмите кнопку Отмена. Кроме того, в
ОС Windows последний ввод текста в любые окна, поля и т.д. можно
отменить нажатием клавиш Ctrl+Z.
4) Не используйте дискеты, на которых обнаружены поврежденные
участки. Даже в том случае, когда поврежденный участок имеет небольшой
объем.
5) Не перегружайте компьютер, особенно если его ресурсы невелики.
Лучше не загружать одновременно более трех приложений.
6) Не оставляйте в дисководе дискеты перед загрузкой/перезагрузкой
компьютера и после его выключения. На дискетах может находиться вирус,
поражающий системные файлы ОС при загрузке или выключении
компьютера.
7)Не открывайте файлы прямо с дискет. Скопируйте нужный файл на
жесткий диск, проведите редактирование файла, а затем при необходимости
снова скопируйте его на дискету.
8) Если вы работаете с документом, который предназначен Только для
чтения, сразу же сохраните копию этого документа под другим именем.
9) Часто при зависании тех или иных приложений отказывается
работать и мышь. В этом случае выходом является использование
клавиатуры. Ниже приводятся полезные комбинации клавиш:
 Alt + Tab –переход между открытыми окнами;
 Alt + F4– закрытие окна (когда все окна закрыты, завершает
работу Windows)
10)Периодически, хотя бы раз в 2-3 недели, проверяйте установку
системного времени и даты. Если вы работаете с некоторыми специальными
программами, ошибки в этом параметре, особенно в дате, могут повлечь за
собой серьезные последствия, например, привести к просрочке платежей по
какому-либо контракту и т.д.
Несанкционированный доступ
1) Не оставляйте компьютер включенным без присмотра.
2) Защищайте информацию паролями.
-Установите пароль на включение компьютера.
-Если вы используете Windows, создайте учетные записи для всех
пользователей, проверьте установку пароля на все учетные записи и
отключите учетную запись Гость.
-Установите пароль на Заставку.
-Защищайте паролем важные документы.
3) Резервируйте важную информацию.
4) Используйте все методы антивирусной защиты. С точки зрения
несанкционированного доступа особенно опасны вирусы, приходящие из
сети Интернет.
5) При работе в локальных сетях:
-Если у вас большое число сотрудников, множество компьютеров—
организуйте иерархическую сеть.
-Установите общий доступ только для тех документов, которые
действительно необходимы всем пользователям сети. Не предоставляйте
общего доступа к системным файлам, файлам приложений и ОС
-Пользуйтесь программной Инспектор сети.
Неисправность компонентов компьютера
Любую неисправность можно отнести к одному из трех типов:
 Неисправность одного из устройств (аппаратной части) компьютера;
 Неисправность ОС;
 Неисправность приложения.
Очень часто неисправности компонентов компьютера возникают в
результате сбоя электропитания. Возможны ситуации, когда отказ в работе
компьютера наступает в результате наличия нескольких неисправностей
одновременно. В такой ситуации необходимо детальное обследование и
тестирование аппаратной и программной частей компьютера.
Несколько советов:
1. В случае подозрения на неисправность одного из устройств,
например, жесткого диска, прежде всего следует воспользоваться
программой Проверка дисков.
2. В случае подозрения на неисправность ОС необходимо
предварительно проанализировать ситуацию: как происходит загрузка ОС,
не работает ли система в Защищенном режиме и т.д. Если вы понимаете, что
неисправна именно ОС, то, скорее всего, ее нужно переустановить.
2. Практическая часть
1.
Изучите возможные действия по диагностике неисправностей в
работе ОС и ее компонентов.
2.
Изучите порядок действий по отключению программы,
вызывающей сбой.
3.
Изучите порядок действий по удалению программы,
вызывающей сбой.
4.
Изучите особенности режима защиты от сбоев.
3. Контрольные вопросы
1.
Какие факторы могут приводить к аварийным ситуациям и сбоям
в работе компьютера?
2.
Перечислите основные рекомендации по предупреждению
ошибок в работе пользователя.
3.
Опишите рекомендуемый порядок действий пользователя при
«зависании» компьютера.
4.
В чем особенности Безопасного режима работы ОС Windows?
Содержание отчета:
1.
2.
3.
4.
Титульный лист.
Название и цель работы.
Краткое теоретическое описание.
Результаты выполнения работы, выводы.
Практическая работа № 6
Тема: Интерфейс операционной системы: основные принципы и стандарты
Количество часов: 2
Цель работы: выучить структуру рабочего стола и особенности основных
объектов. Получить первые навыки работы в операционной системе Linux.
Ход работы
1. Изучите приведенные ниже краткие теоретические сведения.
2. Выполните все задания практической работы.
3. Ответить на контрольные вопросы.
4. Предоставьте отчет по данной практической работе.
Теоретический материал
„Мой компьютер” – вызывает папку „Мой компьютер”, в которой
находятся значки всех его локальных ресурсов: жестких, гибких и компактдисков, принтера и др.
„Мои документы” – вызывает папку „Мои документы”, в которой
находятся документы пользователя (текстовые документы, музыка, рисунки,
кинофильмы и др.)
„Сетевое окружение” – открывает окно, в котором можно найти
информацию о других компьютерах, доступных в сети.
„Корзина” – сохраняет изъятые ранее файлы.
„Панель задач” – это специальная область, расположенная в нижней
части экрана и выполненная в виде панели.
На панели задач отображаются все открытые в данный момент папки или
запущенные программы, а также дополнительные панели, области и кнопки.
Для удобства работы с панелью задач кнопки на ней объединяются, когда
их становится слишком много. Например, кнопки отдельных сообщений
электронной почты автоматически объединяются в одну кнопку электронной
почты. При нажатии этой кнопки отображается удобное меню для выбора
конкретного сообщения.
На панели задач в левом нижнем углу экрана располагается кнопка-меню
„Пуск”. С ее помощью можно открыть главное меню операционной системы
Windows. В этом меню можно найти различные ссылки, кнопки и вложенные
меню.
Область уведомлений располагается на панели задач справа (системные
часы, информационные значки, сообщения, быстрый запуск, текущий статус
программ и др.)
Языковая панель расположена рядом с областью уведомлений. С ее
помощью можно узнать, какая раскладка клавиатуры в данный момент
включена.
В папке „Мой компьютер” располагается несколько объектов – их
количество зависит от того, на сколько дисков разбит жесткий диск, а также,
сколько дополнительных устройств для считывания информации установлено в
системном блоке. Щелкнув по любому значку, можно ознакомиться со всеми
находящимися на нем файлами и папками. А просто выделив значок,
«коснувшись» его курсором мыши, в левой части окна можно увидеть
подробную информацию об этом диске.
Жесткие диски
Жесткий диск (или винчестер) служит постоянным и стационарным
накопителем информации в компьютере. На нем хранятся операционная
система, различные программы и отдельные файлы. Объем памяти жесткого
диска исчисляется в байтах.
В связи с технологическими особенностями хранения информации на
жестком диске при больших объемах теряется некоторая часть свободного
пространства. Для уменьшения этих потерь, да и просто для удобства
использования, жесткий диск принято разбивать на несколько логических
дисков.
Логический диск – это часть винчестера, которую операционная система
воспринимает как отдельный, самостоятельный диск.
Каждый логический диск винчестера имеет в системе свое собственное
имя, состоящее из одной буквы латинского алфавита и двоеточия.
Устройства со съемными носителями
Дисковод (Диск 3,5(А:)) – устройство для чтения дискет. На значке
дисковода помимо него самого изображена дискета. Контекстное меню этого
устройства точно такое же, как и у логических дисков, однако дискеты можно
еще и отформатировать.
Форматирование – это разметка накопителя информации и создание
таблиц, в которых хранятся сведения о размещении данных.
Устройством для чтения дисков является CD-дисковод или CD/DVDдисковод. Первый может считывать информацию только с обычных CD-дисков,
второй – и с обычных, и с DVD-дисков.
CD-RW или DVD-RW – устройства для чтения дисков и записи
информации на диски.
К пунктам контекстного меню, помимо стандартных, прибавляются
пункты «Извлечь»/«Вставить» (заменяющие кнопку извлечения диска на самом
приводе) и, иногда, «Автозапуск».
«Автозапуск» - это пункт, присущий только дисководам компакт-дисков.
„Корзина” - это особая папка на диске, в которую попадают все удаленные
файлы.
Поскольку файлы, находящиеся в корзине полностью не удалены с диска,
они занимают на нем тот же объем, причем он может быть большим. Поэтому
нужно время от времени освобождать корзину вручную. Для этого нужно
открыть папку „Корзина” и в меню „Файл” выбрать команду „Очистить
корзину”.
С помощью „Корзины” можно не только удалять файлы или папки
целиком, но и восстанавливать их. Любые удаляемые объекты сначала
помещаются в корзину и только после того, как дается команда «Очистить», все
эти объекты исчезнут раз и навсегда.
Используя метод перетаскивания, можно поместить любой объект системы
в корзину. Для того чтобы восстановить удаленный объект, просто щелкните
левой клавишей мыши по пиктограмме „Корзина”, выберите в открывшемся
диалоговом окне нужную пиктограмму и переместите ее на любой диск или
рабочий стол.
Любая специальная программа, предназначенная для
выполнения
определенного задания по обслуживанию операционной системы Windows,
называется утилитой.
Папка „Сетевое окружение” дает возможность обратиться к любому
компьютеру в локальной сети. При условии, что компьютер сам подключен к
локальной сети, и подключен правильно.
Через „Сетевое окружение” можно заглянуть на жесткий диск любого
сетевого компьютера, владелец которого предоставил доступ к своим ресурсам,
открыть или переписать к себе на винчестер любой документ. Или наоборот –
отправить файл на другой компьютер по сети.
Чтобы определить сегодняшнюю дату нужно подвести курсор мышки к
правой части панели задач, где находятся часы. Автоматически появится
сегодняшняя дата.
Сделав два щелчка на часах, появится окно «Свойства: Дата и время», в
котором отображается сегодняшняя дата, время на данный момент, текущий
часовой пояс, где также можно посмотреть другие часовые пояса и «Время
Интернета» (здесь можно синхронизировать время с Интернет- временем).
Теоретический материал.
Перечень команд:
Chvt - Выводит на дисплей указанный виртуальный терминал
login [имя пользователя] - Запрашивает у пользователя имя и пароль для
входа в систему и запускает новый сеанс работы на текущем терминале. Заодно
команда проверяет наличие новой почты для заданного пользователя, запускает
интерпретатор, указанный в файле /etc/passwd для этого пользователя (по
умолчанию запускается bash), и выполняет настроечные сценарии
интерпретатора для данного пользователя.
Logout - Выход из текущего сеанса и вывод приглашения на вход.
shutdown [параметры] время [сообщение] - Останавливает систему,
предотвращая повреждение файловой системы. В большинстве систем для
использования этой команды необходимо иметь статус привилегированного
пользователя. Параметры команды позволяют указать необходимость
выключения или перезапуска компьютера. Существует возможность указать
задержку перед остановкой, набрав знак плюс и число минут до остановки
(например, +5). Можно также набрать слово now, эквивалентное +0.
Кроме того можно указать сообщение, которое появится на терминалах всех
пользователей, работающих в системе.
Параметры
Параметр Действие
-r
Быстрая перезагрузка без проверки цельности файловой системы.
-h
Остановить систему после завершения работы. На большинстве
современных компьютеров это приводит к выключению питания.
-k
Отправить предупредительное сообщение, но не завершать работу.
-r
Перезапуск системы.
Вся информация о пользователях хранится в файле /etc/passwd. Это
обычный текстовый файл, право на чтение которого имеют все пользователи
системы, а право на запись имеет только администратор (суперпользователь). В
этом файле хранятся пароли пользователей, правда в зашифрованном виде.
Подобная открытость - недостаток с точки зрения безопасности, поэтому
зашифрованные пароли хранятся в отдельном закрытом для чтения и записи
файле /etc/shadow.
Аналогично, информация о группах хранится в файле /etc/group и
содержит списки пользователей, принадлежащих той или иной группе.
Каждая строка файла /etc/passwd является записью конкретного
пользователя и имеет следующий формат: name:passwdencod:UID:GID:comments:home-dir:shell
- всего 7 полей (атрибутов), разделенных двоеточиями.
Name -Регистрационное имя пользователя. Это имя пользователь вводит
в ответ на приглашение системы login.
passwd-encod - Пароль пользователя в закодированном виде. Алгоритмы
кодирования известны, но они не позволяют декодировать пароль. При входе в
систему пароль, который вы набираете, кодируется, и результат сравнивается с
полем passwd-encod. В случае совпадения пользователю разрешается войти в
систему. Даже в закодированном виде доступность пароля представляет
некоторую угрозу для безопасности системы. Поэтому пароль хранят в
отдельном файле, а в поле passwd-encod ставится символ 'x'.
UID - Идентификатор пользователя является внутренним представлением
пользователя в системе. Этот идентификатор наследуется задачами, который
запускает пользователь, и файлами, которые он создает. По этому
идентификатору система проверяет пользовательские права (например, при
чтении файли или запуске программы). Суперпользователь имеет UID = 0, что
дает ему неограниченные права в системе.
GID - Определяет идентификатор первичной группы пользователя. Этот
идентификатор соответствует идентификатору в файле /etc/group, который
содержит имя группы и полный список пользователей, являющихся ее членами.
Принадлежность пользователя к группе определяет дополнительные права в
системе. Группа определяет общие для всех членов права доступа и тем самым
обеспечивает возможность совместной работы (например, совместного
исользования файлов).
Comments-Обычно, это полное "реальное" имя пользователя. Это поле
может содержать дополнительную информацию, например, телефон или адрес
электронной почты. Некоторые программы (например, finger и почтовые
системы) используют это поле.
home-dir - Домашний каталог пользователя. При входе в систему
пользователь оказывается в этом каталоге.
Имя программы, которую Linux использует в качестве
shell
командного интерпретатора. При входе пользователя в систему Linux
автоматически запустит указанную программу.
Переназначение пароля пользователя
Команда passwd.
Изменение учетных записей пользователей
Команда usermod аналогична команде useradd и даже имеет с ней
общие
параметры. Однако вместо того, чтобы добавлять новые учетные записи
эта
команда позволяет изменять уже существующие. Вызвав команду
usermod, следует
сообщить регистрационное имя пользователя, а также те детали учетной
записи,
которые должны быть изменены:
-с -Новый комментарий. Для этого также можно использовать команду
chfn. (Несколько подряд идущих слов должны быть взяты в кавычки)
-d - Переместить домашний каталог в новое место. Если при этом
используется параметр -m, то будет скопировано также и содержимое
домашнего каталога.
-e - Аналогично useradd.
-f - Аналогично useradd.
-g - Аналогично useradd.
-G - Аналогично useradd.
-l рег._имя_
Новое регистрационное имя пользователя. Имя
домашнего каталога_польз-ля при этом не будет изменено. Для этого
необходимо применить параметры -d и -m.
-m - Используется только вместе с параметром -d. В результате
применения этих двух параметров содержимое домашнего каталога копируется
в новый каталог.
-o - Используется вместе с параметром -u. Игнорировать необходимость
уникальности идентификационного номера пользователя.
-s - Аналогично useradd. Можно использовать команду chsh,
-u - Новый идентификационный номер пользователя для данной учетной
записи. Если параметр -o не используется, новый идентификационный номер
пользователя должен быть уникален.
Удаление учетных записей пользователя
Команде userdel нужен всего лишь один параметр - регистрационное имя
пользователя, учетная запись которого подлежит удалению. Если
применить
дополнительный параметр -r, то команда userdel удалит также и
домашний каталог
пользователя со всеми хранящимися в нем файлами.
Ход работы
1.
Представить схематический рисунок рабочего стола и описать
назначение основных его элементов.
2.
Определить какие диски есть на вашем компьютере.
3.
Пояснить назначение папки корзина и просмотреть её содержание.
4.
Узнать
информацией
каких
компьютеров
вы
можете
воспользоваться при работе на вашем компьютере.
5.
Определить сегодняшнюю дату.
6.
Пересчитать основные программы (приложение), которые есть на
вашем компьютере.
Для знакомства со свойствами основных объектов необходимо:
1.
Определить основные параметры вашего компьютера.

тип процессора

объем оперативной памяти

тип монитора

тип клавиатуры

тип мыши
2.
Изменить оформление рабочего стола.
3.
Установить время на компьютере, совпадающее с временем на
ваших часах.
4.
Определить общий объем диска D; и объем свободного места на нем.
5.
Установить минимально возможный интервал времени между двумя
щелчками клавиши мыши при двойном щелчке.
Контрольные вопросы:
1.
Что такое жесткий диск?
2.
Что такое логический диск?
3.
Для чего предназначен CD – дисковод?
Linux устанавливают загрузчик LILO(LInux Loader) по умолчанию.
Для указания параметров загрузки и управления работой LILO
используется конфигурационный файл /etc/lilo.conf, который можно
редактировать. После внесения изменений в /etc/lilo.conf следует выполнить
команду lilo, чтобы внесенные в файл изменения вступили в силу.
Для того чтобы получить дополнительную информацию по
параметрам LILO, обратитесь к справочной странице файла lilo.conf (выполнив
команду man lilo.conf) или к любому из документов, хранящихся в каталоге
/usr/share/lilo*/doc.
После начала процесса загрузки автоматически запускается сценарий
инициализации (init). Свою работу он начинает со считывания
конфигурационного файла запуска по умолчанию /etc/inittab. Важнейший
настроечный параметр этого файла определяет основной уровень выполнения
(run level). После определения основного уровня выполнения сценарий
инициализации передает управление системой утилите getty, которая создает
подключения для терминалов и выводит подсказку входа в систему. Затем getty
передает управление еще одной утилите, называемой login, которая считывает
имя пользователя и его пароль.
Возможные уровни исполнения:
Уровень
0
Описание
Принудительное завершение всех процессов и остановка
процессора.
1
Однопользовательский режим. Как правило, используется для
техобслуживания системы.
2
Многопользовательский режим (консоль) без поддержки сетевой
файловой
системы.
3
Многопользовательский режим с поддержкой работы сети.
4
Не используется.
5
Многопользовательский режим с поддержкой сети и графической
системы Х.
6
системы.
Принудительное завершение всех процессов и перезагрузка
Завершение работы системы можно рассматривать просто как изменение
уровня исполнения. С этой точки зрения команды reboot, halt, poweroff и
shutdown также можно отнести к командам, предназначенным для изменения
уровня исполнения. Команда reboot, являющаяся символической ссылкой на
команду halt, выполняет команду shutdown -r now, завершая все процессы и
перезагружая систему. Команда halt также выполняет команду shutdown -h now,
завершая все процессы, однако не выключая сам компьютер. Подобным
образом работает и команда poweroff (также являющаяся ссылкой на halt),
которая переводит систему на уровень исполнения 0 и, при наличии поддержки
системой BIOS режима расширенного управления питанием (Advanced Power
Management - APM), производит отключение системы.
В команде shutdown после ее имени указывается время выключения
системы либо в формате +m (количество минут, которое должно пройти до
выключения системы после выполения команды), либо в формате hh:mm
(абсолютное время суток, где hh означает час, а mm - минуту). Для
немедленного выключения системы можно воспользоваться параметром now.
- длина пароля не должна быть меньше 6 символов;
- пароль должен включать по крайней мере 2 алфавитных символа и 1
цифру или специальный
символ;
- пароль должен содержать хотя бы 3 символа, не встречавшихся в вашем
предыдущем пароле.
Контрольные вопросы.
1.
Какая команда служит для создания пароля пользователя?
2.
Какая команда служит для создания и удаления пользователя?
3.
Какая команда служит для назначения прав пользователя?
Содержание отчета:
1.
Титульный лист.
2.
Название и цель работы.
3.
Краткое теоретическое описание.
Результаты выполнения работы, выводы
Практическая работа №7.
Тема: «Системные вызовы»
Цель работы: изучение принципов взаимодействия LINUX- системы с
внешними устройствами и формирования системных и
инсталляционных дисков.
Количество часов: 2
Ход работы
1. Изучите приведенные ниже краткие теоретические сведения.
2. Выполните все задания практической работы.
3. Ответить на контрольные вопросы.
4. Предоставьте отчет по данной практической работе.
Теоретическая часть
Монтирование и демонтирование файловой системы
Файловое дерево формируется из отдельных частей, называемых
файловыми системами. Каждая файловая система состоит из одного корневого
каталога, его подкаталогов и файлов. Файловые системы прикрепляются к
файловому дереву с помощью команды mount. Эта команда берет из
существующего файлового дерева каталог (называется точкой монтирования) и
делает его корневым каталогом присоединяемой файловой системы. Например,
команда
mount /dev/sd0a /users
монтирует файловую систему, находящуюся на устройстве /dev/sd0a, под
именем users. После монтирования с помощью команды ls /users можно
посмотреть, что содержит эта файловая система.
Таким образом, в системе LINUX вся файловая система представлена как
единое дерево каталогов. Аналогично монтируется сетевая файловая система.
Например:
mount host.asu.ugatu.ac.ru:/users /husers
где сетевой диск /users на машине host.asu.ugatu.ac.ru монтируется как каталог
/husers. Монтирование внешних устройств при их использовании необходимо
выполнять, если в системе нет соответствующих настроек для их
автоматического монтирования.
Демонтирование файловой системы можно выполнить командой umount.
Для этого в файловой системе не должно быть открытых файлов и процессов, ее
использующих. То есть она должна быть незанятой. Пример размонтирования
файловой системы /users
umount /users
Подключение диска CD-ROM к системе выполняется командой
mount /cdrom
Для снятия диска его необходимо размонтировать командой
umount /cdrom
Формат функции mount может включать ключ t со знаком минус (-t), за
которым следует параметр, определяющий тип файловой системы и может
принимать следующие значения:
vfat либо msdos - файловая система на основе FAT;
ext2 – файловая система типа UNIX;
minix – файловая система, соответствующая стандарту POSIX для
взаимодействия между различными платформами;
qnx – тип файловой системы QNX, поддерживается только для чтения;
ufs – файловая система BSD, только для чтения;
ntfs – файловая система Windows NT, но только для чтения.
Поддерживается также ряд экспериментальных файловых систем,
например, ext3 - журнальная файловая система, extfs - файловая система с
криптографической защитой и т.д. Например, монтирование дискеты,
отформатированной в DOS, к каталогу /media/floppy:
mount -t vfat /dev/fd0 /media/floppy
или
mount /media/floppy
где /dev/fd0 - системное имя файла-устройства на гибких дисках.
Дискета, отформатированная в LINUX-системе, может быть смонтирована
следующим образом
mount -t ext2 /dev/fd0 /mnt/a
Командой df или mount (без ключей) можно посмотреть, какие файловые
системы смонтированы и какой объем они имеют.
2.2. Форматирование дисков
Форматирование дисков выполняется в два этапа. На первом этапе
непосредственно производится форматирование (несмонтированного) диска.
Форматирование можно выполнить командой fdformat (на 1,44 Мбайт) с
проверкой
fdformat /dev/fd0u1440
На втором этапе создается корневая файловая система с использованием
системной функции mke2fs (mkfs) с аргументами:
mke2fs -m ext2 /dev/fd0
Создание файловой системы в стиле MS DOS можно выполнить
командой mformat без проверки (приставка m позволяет выполнять DOS команды в среде Linux: mdir, mcopy и др.)
mformat a:
При форматировании и создании файловой системы диск должен быть
размонтирован.
2.3. Запись системных образов на дискеты
Можно выполнить загрузку ОС Linux на трех дискетах. Для этого
необходимо скопировать на дискеты из каталога /home/bootdisk двоичные
образы файлов bootdisk, modules1 и rescuefloppy из существующей системы
следующими командами:
а) запись образа bootdisk на первую дискету с помощью команды, которая
может работать с любой UNIX - системой
dd if=bootdisk of=/dev/fd0
или запись образа командой, предназначенной для работы с ОС Linux (не на
Linux может работать некорректно)
cat bootdisk > /dev/fd0
б) запись образа modules1 на вторую дискету
cat modules1 > /dev/fd0
в) запись образа modules1 на третью дискету
cat rescuefloppy > /dev/fd0
Эти двоичные образы файлов при их загрузке создают ядро операционной
системы, корневую файловую систему и электронный диск в оперативной
памяти.
2.4. Загрузка системы с дискет
Сформированная
на
дискетах
система
не
поддерживает
многопользовательский режим работы. Загрузка системы начинается с диска,
содержащего образ bootdisk. На сообщение системы о загрузке Linuxвыбрать в
меню пункт manual installation, нажать клавишу Enter для инсталляции системы
с последующей загрузкой. При формировании запросов в возникающих
диалоговых окнах последовательно заменять дискеты в дисководе. Загрузка
завершается появлением значка-приглашения системы #.
Ход работы:
1. Отформатировать в системе Linux три гибких диска.
2. Создать на дискете файловую систему MS DOS.
3. Смонтировать дискету на каталог /media/floppy.
4. Проверить результат монтирования командой df.
5. Создать на дискете рабочий каталог и в него записать текстовый файл
(создать новый, либо скопировать с жесткого диска).
6. Просмотреть содержимое корневой файловой системы гибких дисков и
рабочего каталога.
7. Запретить изменение данных на гибких дисках и отдельно в рабочем
каталоге методом изменения атрибутов соответствующего файла.
8. Проверить установленный уровень доступа к гибким дискам и рабочему
каталогу.
9. Скопировать рабочий каталог с гибкого диска на жесткий диск и
убедиться, что функция копирования выполнена успешно.
10. Размонтировать устройство на гибких дисках и убедиться, что эта
операция выполнена успешно с использованием команды df.
11. На первую дискету скопировать образ bootdisk, на вторую – modules1,
и на третью – rescuefloppy.
12. Выполнить загрузку компьютера с гибких дисков.
16. Завершить работу системы командой halt.
Контрольные вопросы
1. Каким образом можно отформатировать диск для поддержки файловой
системы на основе FAT, NTFS и для взаимодействия разных типов файловых
систем.
2. В чем заключаются функции монтирования и размонтирования
файловой системы и какими командами они выполняются в ОС Linux.
3. Какие образы требуются для создания гибкого системного диска ОС
Linux, где они размещаются.
4. Каким способом можно перенести образы на формируемый системный
диск.
5. Как ограничить доступ к устройствам на гибких дисках.
6. Какие режимы работы может поддерживать ОС Linux на гибких дисках
и какие режимы работы нельзя подключить.
Содержание отчета:
1.
2.
3.
Титульный лист.
Название и цель работы.
Краткое теоретическое описание.
4. Результаты выполнения работы, выводы
Практическая работа №8.
Тема: «Интерфейс winapi. Структура приложения windows.»
Цель работы: Изучить последовательность действий по созданию
исполняемой программы в ОС windows из исходного текста. Получить
практические навыки использования функций предоставляемых операционной
системой windows
Количество часов: 2
Ход работы
1. Изучите приведенные ниже краткие теоретические сведения.
2. Выполните все задания практической работы.
3. Ответить на контрольные вопросы.
4. Предоставьте отчет по данной практической работе
Теоретические сведения
Интерфейс прикладного программирования
Интерфейс прикладного программирования (Application Programming
Interface) — набор готовых констант, структур и функций, используемых при
разработке программных приложений и обеспечивающих правильное
взаимодействие между приложением и операционной системой. В операционной
системе windows интерфейс прикладного программирования называют WinAPI.
Окна и сообщения
В основе системы windows лежит механизм обработки сообщений,
который транслирует практически каждое событие (нажатие клавиши,
перемещение мыши...) в сообщение. Типичное приложение построено на основе
цикла сообщений, который принимает сообщения и перенаправляет их
соответствующим функциям – обработчикам. Хотя сообщения передаются
приложениям, они адресованы не им, а другим компонентам операционной
системы – окнам. Окно – представляет некую абстрактную сущность, через
которую взаимодействуют пользователь и компьютер. Все окна находятся в
иерархической зависимости: некоторые из них являются окнами верхнего
уровня, другие подчинены своим родительским окнам. В Windows существует
множество типов окон. Самыми очевидными типами окон являются большие
прямоугольные окна, связанные с приложениями, которые можно переместить,
изменить их размеры, минимизировать и т. д. Многие элементы, отображаемые
внутри главного или диалогового окна, сами по себе являются окнами. Каждая
кнопка, поле ввода, полоса прокрутки, окно списка, пиктограмма, даже фон
экрана обрабатывается операционной системой как окно.
Классы окон
Основное поведение окна определяется классом окна. Класс окна несет
информацию о начальном внешнем виде окна, пиктограмме по умолчанию,
курсоре и ресурсе меню, связанном с окном, а также – адрес оконной функции.
Когда приложение обрабатывает сообщения, оно обычно делает это посредством
вызова функции DispatchMessage() для каждого принятого сообщения - это
происходит в цикле обработки сообщений. В свою очередь, функция
DispatchMessage() вызывает соответствующую оконную функцию, проверяя, для
какого класса окна предназначено сообщение. Именно эта оконная функция
обрабатывает сообщение, переданное окну.
Существует множество стандартных классов окон, предусмотренных самой
операционной системой Windows. Эти системные глобальные классы реализуют
функциональные возможности общих элементов управления. Любое приложение
может использовать эти классы в своих окнах, например можно реализовать
элемент управления – поле ввода, используя класс окна Edit.
Приложение также может определять собственные классы окон с помощью
функции RegisterClass(). Эта функция позволяет программисту реализовать
поведение окна, не являющегося частью ни одного из поддерживаемых системой
глобальных классов. Например, таким образом, приложение реализует
функциональные возможности своего главного окна, регистрирует пиктограмму
окна и ресурса меню.
Типы сообщений
Существует много разновидностей сообщений, представляющих события на
разных уровнях. Каждое простое событие, каждое простое действие посылается
окну в виде сообщения. Приложению приходит множество сообщений, однако
приложение не должно заботиться о смысле каждого отдельного сообщения.
Вместо обработки всех возможных сообщений приложение имеет свободу выбора:
необработанные сообщения передаются в функции обработки сообщений
операционной системы по умолчанию.
Windows-сообщение состоит из нескольких частей, для его представления
используется структура MSG:
typedef struct tagMSG {
HWND
UINT
hwnd;
// окно, которому посылается это сообщение
message; // значение самого сообщение
WPARAM
wParam;
// для передачи дополнительной информации
LPARAM
lParam;
// для передачи дополнительной информации
DWORD
time;
// время, когда произошло событие
POINT
pt;
// точка, где произошло события (для мыши)
} MSG;
Поле hwnd идентифицирует окно, которому посылается сообщение.
Каждое окно в Windows имеет такой идентификатор. Поле message
идентифицирует само сообщение. Это поле может иметь множество различных
значений, означающих одно из многих различных сообщений, которые могут
получать приложения Windows.
Для идентификаторов сообщений обычно используются символьные
представления (WM_PAINT, WM_TIMER), а не числовые значения. Эти
символьные значения определены в заголовочных файлах Windows (программисту
необходимо включать в исходный программы текст файл windows.h – он содержит
директивы #include для остальных заголовочных файлов).
Оконная функция
Windows посылает сообщения окну, вызывая оконную
функцию. ОС
Windows вызывает оконную функцию каждый раз:
1.
при создании окна;
2.
при удалении окна;
3.
при изменении размеров окна, перемещении, при свертывании окна;
4.
при выборе пункта меню;
5.
при манипуляции с полосами прокрутки или с мышью;
6.
чтобы сообщить программе о необходимости перерисовать рабочую
область окна.
Все эти вызовы имеют форму сообщений. В большинстве Windowsпрограмм основная часть программы направлена на обработку этих сообщений.
Любое событие, относящееся к окну, передается оконной функции
В виде сообщения. Затем оконная функция соответствующим образом реагирует
на это сообщение или передает сообщение в функцию DefWindowProc() для
обработки по умолчанию.
Сообщения могут быть и синхронные (queued), и асинхронные (nonqueued).
Синхронными сообщениями называются сообщения, которые Windows помещает в
очередь сообщений программы, и которые извлекаются и диспетчеризируются в
цикле обработки сообщений. Асинхронные сообщения передаются непосредственно
окну, когда Windows вызывает оконную функцию. Синхронные сообщения
помещаются (отправляются) в очередь сообщений (post), а асинхронные посылаются
прямо в оконную функцию (send).
Точка входа в программу
При разработке консольных приложений на языке С или С++, от
разработчика требуется наличие функции main. Операционная система вызывает
ее при запуске программы. Если программе необходимо «узнать» информацию о
том, какие клавиши нажаты, или воспользоваться сервисом операционной
системы, она вызывает соответствующие функции.
При запуске в Windows операционная система вызывает в программе функцию
WinMain(). В любом приложении обязательно должна присутствовать эта
функция, на которую возлагается ряд специфических задач. Cамая важная из них
– создание основного окна программы, с которым должны быть связаны
операторы, способные обрабатывать сообщения, передаваемые операционной
системой этому окну. Точкой входа программы для Windows является функция
WinMain(), которая всегда определяется следующим образом:
int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance,
LPSTR lpCmdLine, int nCmdShow)
Эта функция использует последовательность вызовов WINAPI и при
завершении, возвращает операционной системе Windows целое число.
Описание параметров функции WinMain():
1.
hInstance - дескриптор экземпляра приложения. Дескриптор
экземпляра приложения - это уникальное число, которое идентифицирует
программу, в системе Windows. Каждая копия одной и той же запущенной
несколько раз программы называется «экземпляром» и у каждой свое
значение hInstance;
2.
hPrevInstance в настоящее время устарел и всегда равен NULL;
3.
LpCmdLine - указатель на оканчивающуюся нулем строку, в которой
содержатся параметры командной строки;
4.
nCmdShow - определяет, как приложение первоначально отображается
на дисплее: пиктограммой (nCmdShow = SW_SHOWMINNOACTIVE) или в
виде открытого окна (nCmdShow = SW_SHOWNORMAL).
Функция WinMain() выполняет следующие действия:
6. сохранение дескриптора экземпляра приложения в переменной;
7. регистрация класса окна приложения и другие инициализации;
8. создание главного окна приложения и, возможно, других, подчиненных
окон;
9. отображение созданного окна и прорисовка содержимого его внутренней
части;
10.
запуск цикла обработки сообщений, помещаемых в очередь
приложения;
11.
завершение работы приложения при извлечении из очереди
сообщения WM_QUIT.
Регистрация класса окна
Обычно приложение создает окно в два шага. Сначала с помощью функции
RegisterClass() регистрируется класс окна, а затем создается окно
зарегистрированного класса с помощью функции CreateWindow(). Класс окна
определяет общее поведение нового типа окон, включая адрес новой оконной
функции. Такие второстепенные аспекты как размер, расположение и внешнийвид
окна определяются при его создании.
Новый класс окна регистрируется при вызове функции:
ATOM RegisterClass(const WNDCLASS *lpwc);
Параметр lpwc указывает на структуру WNDCLASS, которая описывает
класс (тип) нового окна. Возвращаемое значение - атом Windows это 16-разрядное
значение, которое идентифицирует уникальную символьную строку во внутренней
таблице Windows.
Поля структуры WNDCLASS:
1. lpszClassName - название нового класса окон;
2. lpfnWndProc — (указатель на функцию) указывает адрес оконной функции.
Эта функция отвечает за обработку всех сообщений, получаемых окном. Она
может обрабатывать эти сообщения сама или вызывать функцию по
умолчанию DefWindowProc;
3. style — определяет некоторые глобальные характеристики окна. Для этого
параметра можно установить комбинацию значений, используя операцию
поразрядного ИЛИ. Например, значение CS_DBLCLKS указывает Windows
генерировать события о двойном щелчке кнопкой мыши. Значения
CS_HREDRAW и CS_VREDRAW указывают, что окно должно полностью
перерисовываться каждый раз при изменении горизонтального или
вертикального размера;
4. hIcon – дескриптор пиктограммы, используемой для представления
минимизированных окон этого класса;
5. hCursor – дескриптор стандартного указателя мыши для окон этого класса;
6. hbrBackground – дескриптор кисти интерфейса GDI, для прорисовки фона
окна;
7. lpszMenuName - определяет ресурс меню (по имени или с помощью макроса
MAKEINTRESOURCE по целому идентификатору), который используется
для стандартного меню этого класса;
8. cbClsExtra и cbWndExtra - используются, чтобы выделить дополнительную
память для класса окна и для отдельных окон, через них
задается размер дополнительной памяти. Приложения могут использовать
эту память для хранения специальной информации, относящейся к классу
окна или к отдельным окнам.
Создание окна
Регистрация нового класса является первым шагом в создании окна. Затем
приложение должно создать окно с помощью функции CreateWindow(), которая
возвращает дескриптор созданного окна типа HWND:HWND CreateWindow(LPCSTR
lpClassName, LPCSTR lpWindowName,DWORD dwStyle, int x, int y, int
nWidth, int nHeight, HWND hWndParent, HMENU hMenu, HANDLE hInstance,
LPVOID *lpParam)
У каждого окна в Windows имеется уникальный дескриптор типа HWND.
Дескриптор окна – это один из важнейших описателей, которыми оперирует
программа для Windows. Для многих функций Windows требуется дескриптор
окна, благодаря которому Windows знает, к какому окну применить функцию.
Описание параметров функции CreateWindow():
• lpClassName - указывает имя класса, поведение которого наследует данное
окно. Этот класс должен быть зарегистрирован с помощью фунцкии
RegisterClass() или быть одним из предопределенных классов элементов
управления. Эти переопределенные классы включают в себя стандартные
классы элементов управления с именами “button”, “combobox”, “listbox”,
“edit”, “scrollbar” и т. д.
• lpWindowName - определяет строку, которая выводится в заголовке окна;
• dwStyle - определяет стиль окна. Используется для инициализации
локальных свойств окна. Как и в случае стиля класса, стиль окна также
обычно является комбинацией значений (объединенных операцией
поразрядного ИЛИ). Для определения стиля главного окна чаще всего
используют стиль перекрывающегося окна, для чего через параметр
dwStyle передают символическую константу WS_OVERLAPPEDWINDOW,
определенную во включаемых файлах следующим образом:
#define WS_OVERLAPPEDWINDOW (WS_OVERLAPPED| \
WS_CAPTION|WS_SYSMENU|WS_THICKFRAME| \
WS_MINIMIZEBOX|WS_MAXIMIZEBOX)
• x и y – координаты расположения окна на экране;
• nWidth и nHeight - геометрические размеры окна;
• hWndParent — дескриптор родительского окна. Если окно является главным
окном приложения, то параметру hWndParent присваивается значение NULL;
• hMenu - дескриптор родительского меню. Значение NULL на месте
дескриптора меню hMenu говорит о том, что у окна будет только меню
класса, общее для всех окон этого класса;
• hInstance - экземпляр приложения, которое создает окно;
• lpParam - используется для передачи окну дополнительных данных (если их
нет, то он должен быть равен NULL).
Отображение окна
Не смотря на то, что функция CreateWindow() создает окно, это не значит, что
оно будет автоматически отображаться на экране дисплея. Для отображенияокна
следует воспользоваться функцией ShowWindow(). Первым параметром в эту
функцию передается дескриптор окна, вторым параметром является константа,
которая задает начальный вид окна на экране.
BOOL ShowWindow(HWND hwnd, int nCmdShow)
Функция ShowWindow() выводит окно на экран. Если второй параметр этой
функции имеет значение SW_SHOWNORMAL, то фон рабочей области окна
закрашивается той кистью, которая задана в классе окна. Если второй параметр
имеет значение SW_HIDE — окно будет невидимым.
Функция UpdateWindow() передает функции окна сообщение WM_PAINT.
Получив это сообщение, функция обновляет содержимое экрана.
void UpdateWindow(HWND hwnd)
1.3.10 Цикл обработки очереди сообщений
После создания и отображения окна функция WinMain должна подготовить
приложение к получению событий от клавиатуры, мыши и т. д. Windows
предоставляет очередь сообщений для каждой программы, работающей в данный
момент в системе. Когда происходит ввод информации, Windows преобразовывает
ее в сообщение, которое помещается в очередь сообщений приложения. Программа
извлекает сообщения из очереди, выполняя блок операторов, известный как цикл
обработки сообщений (message loop). Простейший цикл обработки сообщений
имеет следующий вид:
. . .
MSG msg;
while(GetMessage(&msg, NULL, 0, 0)){
// Преобразование некоторых сообщений, полученных с
// помощью клавиатуры
TranslateMessage(&msg);
// Отправить сообщение оконной функции
DispatchMessage(&msg);
}
. . .
Цикл обработки начинается с извлечения сообщений из очереди при помощи
функции:
BOOL GetMessage(MSG FAR* lpmsg,HWND hwnd, UINT
uMsgFilterMin,UINT uMsgFilterMax)
Если при вызове этой функции указать вторым аргументом NULL, то
программа будет получать сообщения от всех окон, созданных программой. При
помощи параметров uMsgFilterMin и uMsgFilterMax можно отфильтровать
сообщения, получаемые программой. Если на их месте передать 0, то программа
будет получать все сообщения.Функция GetMessage() заполняет структуру MSG
информацией о сообщении. Структура MSG содержит информацию об окне,
которому предназначено сообщение, численное значение самого сообщения, время
и координаты (для сообщений от мыши) возникновения сообщения, а также два
дополнительных параметра wParam и lParam, значения которых зависят от
особенностей сообщения.
Каждое сообщение (за исключением WM_QUIT) направлено одному из окон
приложения. Поскольку приложение не должно напрямую вызывать оконную
функцию, то для передачи сообщения нужному окну используется функция:
LONG DispatchMessage(const MSG FAR* lpmsg)
Эта функция передает сообщение обратно в Windows. Windows отправляет
сообщение для его обработки соответствующей оконной функции – таким образом
Windows вызывает оконную функцию.
После того, как оконная функция обработает сообщение, Windows
возвращает управление в приложение к следующему оператору после
DispatchMessage(), цикл обработки сообщений в очередной раз возобновляет
работу, вызывая GetMessage(). Если поле message сообщения msg, равно любому
значению, кроме WM_QUIT, то функция GetMessage() возвращает ненулевое
значение. Сообщение WM_QUIT, извлеченное из очереди заставляет прервать
цикл обработки сообщений.
Перед вызовом функции DispatchMessage() могут быть вызваны специальные
функции. Например, для преобразования некоторых сообщений, полученных с
помощью клавиатуры, в более понятные сообщения можно при помощи функции
BOOL TranslateMessage(const MSG FAR* lpmsg)
Завершение работы приложения
Приложение завершает свою работу тогда, когда функция WinMain()
передает управление Windows. Передать управление можно в любом месте
WinMain().
После входа в цикл обработки очереди сообщений, единственным способом
завершить приложение является посылка в очередь приложения сообщения
WM_QUIT. Сообщение WM_QUIT, является средством завершения работы
приложения. Оно обычно помещается в очередь сообщений только оконной
функцией данного приложения, при помощи функции PostQuitMessage().
Когда функция GetMessage() извлекает сообщение WM_QUIT из очереди,
она возвращает нуль (FALSE), что приводит к завершению работы приложения.
При завершении приложения следует освободить занятые ресурсы.
Обработка сообщений
При обработке сообщений главная роль отводится функции окна (оконной
функции). Оконная функция может иметь любое имя. В программе может
содержаться более одной оконной функции. Оконная функция всегда связана с
определенным классом окна.
Оконная функция всегда определяется следующим образом:
LRESULT CALLBACK WndProc(HWND hWnd, UINT msg, WPARAM wParam,
LPARAM lParam);
Все четыре параметра оконной функции идентичны первым четырем полям
структуры MSG. Первым параметром является дескриптор окна, получающего
сообщение. Если в программе создается несколько окон на основе одного и того же
класса окна тогда параметр hWnd идентифицирует конкретное окно, которое
получает сообщение.
Функция вызывается непосредственно операционной системой Windows и не
может вызываться приложением напрямую.
Каждое получаемое окном сообщение идентифицируется номером, который
содержится в параметре msg оконной функции. Если оконная функция
обрабатывает сообщение, то ее возвращаемым значением должен быть 0.
Все сообщения, не обрабатываемые оконной функцией, должны
передаваться в функцию DefWindowProc() (такой механизм позволяет Windows
обрабатывать окно совместно с приложением). При этом значение, возвращаемое
функцией DefWindowProc(), должно быть возвращаемым значением оконной
функции. Функция DefWindowProc() играет ключевую роль в формировании
информационных потоков сообщений Windows, и ее вызов в функции окна
обязателен.
Удаление окна
Сообщение WM_DESTROY является еще одним важным сообщением. Это
сообщение показывает, что Windows находится в процессе ликвидации окна в ответ
на полученную от пользователя команду (пользователь вызывает поступление
этого сообщения, если нажмет мышью на пиктограмме “Close”, выберет пункт
“Close” из системного меню или нажмет комбинацию клавиш Alt+F4).
Главное окно стандартно реагирует на это сообщение, вызывая функцию
PostQuitMessage(). Эта функция ставит сообщение WM_QUIT в очередь сообщений
приложения. Это заставляет функцию WinMain прервать цикл обработки
сообщений и выйти в систему, завершив работу приложения.
Создание проекта
в среде VisualStudio
Для создания проекта необходимо:
1. выбрать пункт меню File
New
Project;
2. в левой части окна (Project types) выбрать тип проекта
Visual C++
Win32;
3. в правой части окна (Templates) выбрать Win32 Project;
4. в поле «Name» ввести имя проекта, в поле «Location» выбрать каталог
проекта и нажать «Ok» затем «Next»;
5. в окне «Application Settings» установить поле «Empty project»
6. выбрать пункт главного меню Project
Properties, и в левой части
окна выбрать пункт Configuration Properties
General, затем в правой
части окна установить параметр «Character Set» в значение «Not Set» и
нажать «Ok»;
7. для добавления нового файла в проект необходимо нажать правой
кнопкой мыши на имени проекта и в выпадающем меню выбрать пункт
Add
New Item, в появившемся окне выбрать «C++ File (.cpp)», в поле
Name указать имя файла например main и нажать кнопку «Add»;
8. в новом файле можно разместить текст программы (например из
раздела 1.4 этой лабораторной работы)
9. для компиляции проекта нужно нажать правой кнопкой мыши на
имени проекта и в выпадающем меню выбрать пункт «Build» или
«Rebuild»
Порядок выполнения работы
На занятии выполните следующие учебные эксперименты:
Написать программу которая создает стандартное окно windows, при
нажатии левой кнопки мыши, на экране появляется сообщение «Mouse click».
Текст программы приведен ниже.
#include <windows.h>
// Заголовок оконной функции
LRESULT CALLBACK WndProc(HWND hWnd, UINT msg, WPARAM wParam, LPARAM lParam);
// Функция WinMain
int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance,
LPSTR lpCmdLine, int nCmdShow){
char class_name[] = "main_window";
// Название класса окна
char app_title[] = "Simple window"; // Заголовок главного окна
WNDCLASS wc; // Структура для информации о классе окна
HWND hWnd;
// Дескриптор главного окна приложения
MSG msg;
// Структура для хранения сообщения
// Заполнение структуры WNDCLASS для регистрации класса окна.
memset(&wc, 0, sizeof(wc));
// Заполнение структуры нулями
wc.lpszClassName = class_name;
// Имя класса окон
wc.lpfnWndProc = &WndProc;
// Адрес оконной функции
wc.style = CS_HREDRAW|CS_VREDRAW;
// Стиль класса окон
wc.hInstance = hInstance;
// Экземпляр приложения
wc.hIcon = LoadIcon(NULL, IDI_APPLICATION);
// Пиктограмма для окон
wc.hCursor = LoadCursor(NULL, IDC_ARROW);
// Курсор мыши для окон
wc.hbrBackground = (HBRUSH)GetStockObject(WHITE_BRUSH); // Кисть для окон
wc.lpszMenuName = NULL;
// Ресурс меню окон
// Pегистрация класса окна
RegisterClass(&wc);
// Главное окно приложения
hWnd = CreateWindow(
class_name,
// Имя класса окон
app_title,
// Заголовок окна
WS_OVERLAPPEDWINDOW, // Стиль окна
20,
// X-координаты
20,
// Y-координаты
500,
// Ширина окна
400,
// Высота окна
NULL,
// Дескриптор родительского окна
NULL,
// Дескриптор меню окна
hInstance,
// Дескриптор экземпляра приложения
NULL);
// Дополнительная информация
if(!hWnd){
// Окно не создано, отобразить предупреждение
MessageBox(NULL, "Create: error", app_title, MB_OK|MB_ICONSTOP);
return FALSE;
}
// Отображение окна.
ShowWindow(hWnd, SW_SHOWNORMAL);
// Обновление клиентской области окна.
UpdateWindow(hWnd);
// Запуск цикла обработки очереди сообщений.
// Функция GetMessage получает сообщение из очереди, выдает false при
// выборке из очереди сообщения WM_QUIT
while(GetMessage(&msg, NULL, 0, 0)){
// Преобразование некоторых сообщений, полученных с помощью клавиатуры
TranslateMessage(&msg);
// Отправить сообщение оконной функции
DispatchMessage(&msg);
}
return msg.wParam;
}
// Оконная функция
LRESULT CALLBACK WndProc(HWND hWnd, UINT msg, WPARAM wParam, LPARAM lParam) {
char str[] = "Text";
switch(msg){
// Необходимо обновить содержимое клиентской области окна
case WM_PAINT:
HDC hDC;
PAINTSTRUCT ps;
hDC=BeginPaint(hWnd, &ps);
// Получить контекст окна
TextOut(hDC, 20, 20, str, strlen(str)); // Нарисовать текст
EndPaint(hWnd, &ps);
// Освободить контекст окна
break;
// Нажата левая клавиша мыши в клиентской области окна
case WM_LBUTTONDOWN:
MessageBox(NULL, "Mouse click", "Message", MB_OK|MB_ICONINFORMATION);
break;
// Закрытие окна.
case WM_DESTROY:
// В очередь сообщений приложения помещается сообщение WM_QUIT
PostQuitMessage(0);
break;
// Необработанные сообщения передаются в стандартную //
функцию обработки сообщений по умолчанию
default: return DefWindowProc(hWnd, msg, wParam, lParam);
}
return 0;
После успешной компиляции сделайте следующие изменения в программе:
• Измените текст заголовка программы
• Измените стиль класса окна. Стили можно комбинировать при помощи
операции побитового ИЛИ. Ниже приведен список стилей класса окна
• Измените пиктограмму окна на одну из следующих:
IDI_QUESTION
IDI_ASTERISK
IDI_WARNING
IDI_ERROR
• Измените курсор мыши на один из следующих:
IDC_IBEAM
IDC_CROSS
IDC_UPARROW
IDC_HAND
IDC_SIZE
• Измените цвет клиентской области окна на один из следующих:
BLACK_BRUSH
BLACK_PEN
GRAY_BRUSH
• Измените стиль окна Стили можно комбинировать при помощи операции
побитового ИЛИ. Ниже приведен список стилей окна:
WS_BORDER WS_CAPTION
WS_DISABLED
WS_DLGFRAME WS_HSCROLL
WS_OVERLAPPED
WS_OVERLAPPEDWINDOW
WS_POPUP WS_SIZEBOX
WS_SYSMENU
WS_THICKFRAME
WS_VSCROLL
Запишите наблюдения об изменениях внешнего вида окна в отчет этой
лабораторной работы.
1.5 Задание на самостоятельную работу
Модифицировать программу из раздела 1.4 так, чтобы при нажатии левой
кнопки мыши в клиентской части окна, на экране появлялся MessageBox в котором
выводится следующая информация:
• высота и ширина экрана;
• координаты расположения окна на экране;
• ширина и высота окна;
При нажатии правой кнопки мыши в клиентской части окна, программа
создает еще одно новое окно с заголовком «Child window».
Дополнительные условия:
• Ширину и высоту экрана, и т.д можно получить при помощи функции
GetSystemMetrics().
• Координаты и размеры окна можно узнать при помощи функции
GetWindowRect()
• Описание функций и их параметров можно найти в справочном
руководстве MSDN.
• Нажатию правой кнопки мыши соответствует сообщение
WM_RBUTTONDOWN
• Создавать новое окно следует при помощи функции CreateWindow()
• Новое окно программы должно быть производным от главного окна
программы, для этого необходимо указать стиль окна WS_CHILD при вызове
функции CreateWindow().
1.7 Контрольные вопросы
1. Какая функция является точкой входа в Windows-программу?
2. Какие основные действия выполняет функция WinMain?
3. Для чего необходимо регистрировать класс окна?
4. Какие характеристики класса окон можно задать при его регистрации? Какие
поля структуры, описывающей класс окна, являются наиболее важными?
5. Что такое оконная функция? Для чего она предназначена? Кто ее вызывает в
процессе работы приложения?
6. Что такое дескриптор окна? Для чего он необходим?
7. Для чего служит цикл обработки сообщений? Откуда приложение извлекает
очередное сообщение?
8. Каким образом прерывается цикл обработки сообщений, предоставляя
приложению возможность завершения работы?
9. Что такое синхронные и асинхронные сообщения?
Содержание отчета:
1.
2.
3.
Титульный лист.
Название и цель работы.
Краткое теоретическое описание.
4. Результаты выполнения работы, выводы
Практическая работа № 9
Тема: Интерфейсы POSIX
Цель: Приобретение практических навыков работы с интерфейсом
командной строки ОС Linux.
Количество часов: 2
Ход работы
1. Изучите приведенные ниже краткие теоретические сведения.
2. Выполните все задания практической работы.
3. Ответить на контрольные вопросы.
4. Предоставьте отчет по данной практической работе
Теоретические сведения.
Основные команды ОС Linux.
Обратите внимание:
- при указании имен файлов в командах можно использовать метасимволы
(‘*’ - заменяет любое количество символов, в том числе ни одного, ‘?’ - заменяет
любой одиночный символ, [список символов] - заменяет одиночный символ из
указанного списка или диапазона символов);
- все ключи в командной строке Linux являются регистрозависимыми;
2.2.1 Команды для работы с каталогами
2.2.1.1 Команда: mkdir
Назначение: создать каталог
Формат: mkdir имя_каталога1 [имя_каталога2...]
Пример: mkdir abc mykat
Комментарий: для того, чтобы создать каталог, должны быть правильно
установлены права доступа.
2.2.1.2 Командаls.
Назначение: просмотр каталога.
Формат: ls [-опции] [путь]
Пример:ls abc
Комментарий: Чтобы увидеть имена скрытых файлов, используйте опцию а.
Для получения информации о типах файлов (каталог, исполняемый файл, ссылка),
используйте опцию F. При использовании этой опции в поле имени выводится
символ, который определяет тип файла (табл. 3).
Для получения подробной информации о файлах и каталогах используйте
опцию l. При этом о каждом файле и каталоге вы получите следующую
информацию: тип файла, права доступа, число ссылок, имя владельца, имя группы,
размер, дата последнего изменения, имя файла или каталога.
Таблица 3
Тип
файла
Символ
Каталог
Исполняемый
файл
/
Мягкая
ссылка
*
Обычный
файл
отсутствует
@
2.2.1.3 Командаcd.
Назначение: переход в указанный каталог.
Формат: cd [имя_каталога]
Пример: cd /u/home/bpi
Комментарий: для перехода в домашний каталог используйте команду cd без
параметров. Для перемещения по файловой системе можно использовать
сокращенные имена каталогов, приведенные в табл. 4.
Таблица 4
Тип каталога
Домашний
Текущий
Родительский
Сокращенное имя
~
.
..
2.2.1.4 Команда pwd.
Назначение: вывод абсолютного имени текущего каталога.
Пример:pwd
2.2.1.5 Команда rmdir.
Назначение: удаление каталогов.
Формат: rmdir [-опции] имя_каталога
Пример: rmdir kat1 kat 2
Комментарий: для удаления каталога, содержащего файлы, используйте
опцию -r, без указания этой опции команда не будет выполняться. Для этой цели
можно также применить команду rm –rf имя_каталога.
2.2.2 Команды для работы с файлами
2.2.2.1 Команда cat.
Назначение: просмотр текстовых файлов.
Формат: cat имя_файла
Пример: cat file1
Комментарий: для просмотра больших файлов используйте команду more,
так как она позволяет осуществлять постраничный просмотр файлов.
2.2.2.2 Команда more.
Назначение: постраничный просмотр текстовых файлов.
Формат: more имя_файла
Пример: more /etc/passwd
Комментарий: для управления просмотром используются следующие
управляющие клавиши: пробел – переход на следующую страницу, b – переход на
предыдущую страницу, q – выход.
2.2.2.3 Команда head.
Назначение: просмотр указанного числа начальных строк файла.
Формат: head [-n] имя_файла.
Параметр: n - количество выводимых строк (по умолчанию выводится 10
строк)
Пример: head /etc/passwd
2.2.2.4 Команда tail.
Назначение: просмотр указанного числа конечных строк файла .
Формат: tail [-n] имя_файла
Параметр: n - количество выводимых строк (по умолчанию выводится 10
строк)
Пример: tail /etc/passwd
2.2.2.5 Команда cp.
Назначение: копирование файлов и каталогов.
Формат: cp [-опции] исходный_файл целевой_файл
Примеры:
а) cp abc1 ./tmp/November – копирование файла;
б) cp –a kat_1 kat_2 – копирование каталога kat_1 в каталог kat_2.
Комментарий: команда cp с опцией rпозволяет копировать каталоги вместе с
входящими в них файлами и каталогами.
2.2.2.6 Команда mv.
Назначение: перемещение и переименование файлов и каталогов.
Формат: mv [-опции] старое_имя новое_имя
Пример: mv file1 file2
2.2.2.7 Команда rm.
Назначение: удаление файлов.
Формат: rm [-опции] имя_файла
Пример: rm file1 file2
Комментарий: если Вы хотите, чтобы команда запрашивала подтверждение
на удаление файла, то используйте опцию i
2.2.2.8 Команда touch.
Назначение: создание пустого файла.
Формат: touch [-опции] имя_файла
Пример: touch myfile
2.2.2.9 Команда chmod.
Назначение: изменение прав доступа к файлу или каталогу.
Формат: chmod режим имя_файла
Здесь «режим» имеет следующую структуру и способ записи:
Права доступа могут быть заданы в команде не только в символьном виде, но
и в цифровой форме (восьмеричное значение).
Примеры:
а) chmod g-x june - лишить членов группы права на выполнение файла ./june;
б) chmod 774 october – дать все права доступа к файлу ./october владельцу и
членам группы и право чтения для остальных пользователей системы;
в) chmod g+rw,o+r april или chmod 764 april –добавить права чтения и записи
в файл ./april членам группы пользователей и права чтения для всех остальных
пользователей.
2.2.2.10 Команда find .
Назначение:
используется
для
поиска
и
вывода
имен
файлов,
соответствующих заданной строке символов.
Формат: find начальная_точка_поиска [-опции],
где «начальная_точка_поиска» определяет каталог, начиная с которого по
всем подкаталогам будет вестись поиск.
Примеры:
а) вывести на экран имена файлов из домашнего каталога и его подкаталогов,
начинающихся на f:
find ~ -name "f*" –print, где
-name - после этой опции указывается имя файла, который нужно найти,
"f*" - строка символов, определяющая имя файла,
-print - опция, задающая вывод результатов поиска на экран.
б) вывести на экран имена файлов в каталоге /etc, начинающихся с символа
p:
find /etc -name "p*" -print
в) найти в домашнем каталоге файлы, имена которых заканчиваются
символом “%” и удалить их:
find~ -name "*%" -exec rm {} \;
Здесь опция -exec rm {}; задает применение команды rm ко всем файлам,
имена которых соответствуют указанной после опции -name строке символов.
Комментарий: команда пытается обратиться к каждому из найденных
файлов, поэтому в случае отсутствия соответствующих прав доступа на экране
рядом с именем найденного файла будет выводиться сообщение об отсутствии прав
доступа. Для того, чтобы отфильтровать сообщения об таких ошибках, необходимо
направить выходной поток ошибок на фиктивное устройство null:
find /etc -name "p*" –print 2>/dev/null
2.2.2.11 Команда wc.
Назначение: вывод числа символов или строк в файле.
Формат: wc [-опции] имя_файла
Примеры:
а) wc –c file1 - выводит число символов в файле file1,
б) wc –l file2 - выводит число строк в файле file1.
2.2.2.12 Команда ln.
Назначение: создание ссылки на файл.
Формат: ln [-опции] имя_файла имя_ссылки
Пример: ln folder1/file1 intro- создает в текущем каталоге жесткую ссылку с
именем intro на файл folder1/file1. Для создания мягкой ссылки необходимо
использовать опцию –s.
2.2.2.13 Команда mount.
Назначение: подключение (монтирование) нового устройства к файловой
системе.
Формат: mount [-опции] имя_файла имя_ссылки
Пример: mount –t vfat /dev/fd0 /tc – монтирует файловую систему из раздела
fd0 в каталог /tc
2.2.2.14 Команда grep.
Назначение: поиск заданной символьной строке в указанном файле
Формат: grep строка имя_файла
Примеры:
а) показать строки во всех файлах домашнего каталога с именами,
начинающимися на ‘f’, в которых есть слово ‘super’:
grep super f*
б) вывести на экран полную информацию о файлах текущего каталога,
которые были изменены 10 февраля:
ls –l | grep "feb 10"
2.2.3 Команды для управления сеансом работы пользователя
2.2.3.1 Команда who.
Назначение: - вывод списка активных пользователей.
Формат: who
Комментарий: для вывода имени текущего пользователя существует
команда whoami.
2.2.3.2 Команда uname.
Назначение: вывод информации о версии операционной системы.
Формат: uname
2.2.3.3 Команда type.
Назначение: определение типа команды (внутренняя или внешняя).
Формат: type команда
Пример: type find
Комментарий: для внутренних команд на экран выводится сообщение о том,
что команда является встроенной в командный процессор, для внешних - имя
каталога, в котором находится соответствующая программа.
2.2.3.4 Команда man.
Назначение: вывод справочной информации по указанной команде.
Формат: man команда
Пример: man find
Комментарий: для управления просмотром можно использовать следующие
клавиши: пробел - перемещение по документу на одну страницу вперед; ENTER –
перемещение по документу на одну строку вперед; b (-1) – возврат на одну
страницу; q- выход из режима просмотра описания.
2.2.3.5 Команда history.
Назначение: выводит на экран список ранее выполненных команд из буфера
интерпретатора команд.
Формат: history
Комментарий: информацию, полученную с помощью команды history,
можно использовать для вызова ранее выполненных команд:
! <номер_команды> - повторное выполнение команды с заданным номером
из буфера команд. Например, по команде !5будет повторно выполнена пятая
команда из буфера.
!
<номер-команды>:s/<что_меняем>/<на_что_меняем>
-
повторное
выполнение команды с заданным номером и модификацией командной строки.
Например, по команде ! 5:s/a/Fбудет повторно выполнена пятая команда из буфера
с заменой ключа ‘a’ на ‘F’.
2.2.3.6 Команда alias.
Назначение: назначает псевдоним любой команде Linux.
Формат: alias новое_имя=”команда”
Комментарий: используется для удобства ввода длинных команд. Например,
команда alias ll=”ls –a –l” задает новую команду ll, эквивалентную команде ls –a –l
Чтобы псевдонимы были доступны при входе в систему, они должны быть
описаны в файле ~/.bash_profile. Команда без аргументов выводит список всех
псевдонимов.
2.2.4 Команды переназначения ввода и вывода
Linux имеет средства переназначения потоков ввода и вывода данных для
любых программ, работающих под ее управлением. Например, если какая-либо
программа по умолчанию выводит результаты на экран монитора, то можно этот
вывод направить в определенный файл на диске. Для этого имеются специальные
команды:
‘<’ - переназначить ввод данных;
‘>’ - переназначить вывод с замещением данных;
‘>>’ - переназначить вывод с добавлением данных к уже существующим.
Примеры:
ls>catalog – вывод содержимого текущего каталога в файл catalog;
sort<catalog – сортировка данных из файла catalog.
Краткое описание некоторых полезных команд приведено в таблице 6.
Таблица 6
hostname
Сетевое имя машины
whoami
Имя текущего пользователя
uname -m
Покажет архитектуру машины
uname -r
Версия ядра
сat
имя_файла
>
В текущем каталоге создаст файл и запишет в него
информацию вводимую с клавиатуры. Для завершения ввода с
клавиатуры необходимо ввести признак конца файла (CTRL ; D
)
cat
/etc/passwd
cat
/etc/shells
cat
/proc/cpuinfo
cat
/etc/fstab
cat
/proc/interrupts
cat
/proc/meminfo
cat
/proc/swaps
cat
/proc/version
cat
/proc/net/dev
cat
/proc/partitions
cat
/proc/modules
Информация о доступных командных интерпретаторах
Информация о процессоре
Информация о смонтированных файловых системах
Информация о прерываниях
Информация о памяти
Информация об области свопинга
Информация о версии ядра и другая информация
Информация о сетевых интерфейсах и их статистика
Информация о доступных разделах дисковой памяти
Информация о загруженных модулях ядра
date
Текущая дата
cal
Календарь на текущий месяц
echo
Вывести на экран аргументы команды
w
Показывает пользователей в системе, и что они делают
whereis
имя
Информация об учетных записях пользователей
Показать путь к указанной программе (имя)
Справочник
по
командам
ОС
Linux
можно
найти
по
адресу
//hpc.icc.ru/documentation/cmnds.pdf.
2.3 Примеры использования команд управления файлами и каталогами
2.3.1. Копирование файла в домашнем каталоге. Скопировать файл ~/abc1 в
файл april и в файл may:
cd
cp abc1 april
cp abc1 may
2.3.2. Копирование нескольких файлов в каталог. Скопировать файлы april и
may в каталог monthly :
mkdir monthly
cp april may monthly
2.3.3. Копирование файлов в произвольном каталоге. Скопировать файл
monthly/may в файл с именем june:
cp monthly/may monthly/june
ls monthly
2.3.4. Копирование каталогов в текущем каталоге. Скопировать каталог
monthly в каталог monthly.04:
cp -r monthly monthly.04
2.3.5. Копирование каталогов в произвольном каталоге. Скопировать каталог
monthly.04 в каталог /tmp
cp -r monthly.04 /tmp
2.3.6. Переименование файлов в текущем каталоге. Изменить название файла
april на july в вашем домашнем каталоге:
cd
mv april july
2.3.7. Перемещение файлов в другой каталог. Переместить файл july в
каталог monthly.04
mv july monthly.04
ls monthly.04
2.3.8. Переименование каталогов в текущем каталоге. Переименовать каталог
monthly.04 в monthly.05
mv monthly.04 monthly.05
2.3.9. Перемещение каталога в другой каталог. Переместить каталог
monthly.05 в каталог reports:
mkdir reports
mv monthly.05 reports
2.3.10. Переименование каталога, не являющегося текущим. Переименовать
каталог reports/monthly.05 в reports/monthly:
mv reports/monthly.05 reports/monthly
2.3.11. Установка и отмена прав доступа:
- установить владельцу файла ./may права на выполнение:
chmod u+x may
- лишить владельца файла ./may права на выполнение:
chmod u-x may
- отменить права на чтение каталога monthly для членов группы и всех
остальных пользователей:
chmod g-r, o-r monthly
- установить права на запись в файл ./abc1 членам группы:
chmod g+w abc1
2.3.12. Поиск файлов и каталогов:
- найти в домашнем каталоге и подкаталогах файлы с именем may и удалить
их:
find ~ -name "may" -exec rm {} \;
- найти все файлы с именем, содержащим строку ‘fstab’:
locate fstab
- найти все файлы с именем fstab:
whereis fstab
Замечание: команда find при выполнении поиска пытается войти во все
каталоги, начиная с указанной начальной точки поиска, поэтому при отсутствии
соответствующих прав доступа на экран часто будет выводиться сообщение об
ошибке доступа. Для того, чтобы отфильтровать эти сообщения, рекомендуется
отправить их на фиктивное null-устройство следующим образом: find / -name
"memo" 2>/dev/null
Здесь проводится поиск файла memo, а для фильтрации поток данных с
диагностическими сообщениями переназначается на фиктивное устройство.
Напомним, что по системным соглашениям любой процесс имеет следующие
стандартные потоки данных: 0 –ввод, 1 –вывод, 2 - диагностические сообщения.
Ход работы:
1. Осуществить вход в систему, используя в качестве имени пользователя
(pmyykk), где yy - номер группы (например, 41,42...), а kk - номер бригады
(например, 01,02...). Полезно одновременно открыть несколько сеансов (окон)
работы с Linux. Для этого необходимо выполнить пункт 1 требуемое число раз.
Например, если Вы открыли два сеанса, то на одном экране можно знакомиться с
документацией по команде, а на другом выполнять соответствующее задание.
2. Определите полное имя вашего домашнего каталога. Этот каталог будет
считаться текущим в последующих упражнениях.
3. Постройте иерархическую структуру файловой системы, чтобы она имела
следующий вид, показанный на рисунке 1. Здесь yy – номер группы, kk – номер
бригады.
Рис. 1
Обратите внимание, что часть этой иерархической структуры уже
существует, а Вы должны достроить только недостающую часть.
4. Перейдите в каталог trash_kk.
5.
Посмотрите
содержимое
каталога trash_kk,
используя
в
команде ls различные опции.
6. Проверьте, существует ли в корневом каталоге файл с именем unix.
7. Существует ли в каталоге /var/spool подкаталог с именем cron? Если
существует, то докажите, что это именно каталог.
8. Посмотрите содержимое вашего домашнего каталога. Кто является
владельцем его файлов и подкаталогов?
9. Создайте с помощью команды cat в домашнем каталоге файл abc1, в
который запишите свою фамилию, имя, отчество, наименование учебной группы и
номер бригады.
10. Выполните все примеры, приведенные в разделе 2.3. Результаты
выполнения команд занесите в отчет.
11. Создайте три новых каталога с именами letters, memos, misk в вашем
домашнем каталоге одной командой.
12. Удалите эти каталоги одной командой.
13. Попробуйте удалить каталог ~/tmp_kk командой rm. Что получилось? Как
можно удалить этот каталог ?
14. Удалите каталог ~/abc/bc2 из вашего домашнего каталога. Проверьте,
действительно ли каталог был удален.
15. С помощью команды man определите, какая опция команды ls позволяет
просматривать не только содержимое указанного каталога. но и подкаталогов,
входящих в него. Проверьте работу этой опции.
16.
Определите
при
помощи
команды man,
какой
набор
опций
команды ls позволяет отсортировать список с развернутым описанием файлов по
времени последнего изменения. Создайте псевдоним для этой команды с именем
“l_kk”, проверьте его работоспособность.
17. Определите типы команд cd, pwd, find, grep, vim.
18.
Определите,
используя
конвейер
команд who и wc,
пользователей, подключенных к серверу в данный момент времени.
количество
19. Используя информацию, полученную командой history, выполните
модификацию и исполнение нескольких команд из буфера команд (по указанию
преподавателя).
20. Сохраните в файле history_kk все команды, которые Вы выполнили в
лабораторной работе. Содержимое этого файла включите в отчет.
4. Контрольные вопросы
1. Дайте определение командной строки. Приведите примеры.
2. Как определить абсолютное имя текущей директории?
3. Проведите сравнение понятия файла в MS Windows и Linux.
4. Используется ли понятие устройства при обращении к файлу в ОС Linux?
5. Как восстановить удаленные файлы в ОС Linux?
6. Назовите и дайте характеристику основным типам файлов в ОС Linux.
7. Как определить только тип файлов и их имена в текущем каталоге?
8. Какие файлы считаются скрытыми? Как получить информацию о скрытых
файлах?
9. Как удалить файл и каталог?
10. Как определить, какие команды выполнил пользователь в сеансе работы?
Какие проблемы при этом могут возникнуть?
11. Каким образом можно исправить и запустить на выполнение команду,
которую пользователь уже использовал в сеансе работы?
12. Можно ли в одной строке записать несколько команд? Если да, то как?
13. Что такое символ экранирования? Приведите примеры использования
этого символа.
14. Какая информация выводится на экран о файлах и каталогах, если
используется опция l в команде ls?
15. Что такое относительное имя файла? Приведите примеры.
16. Назовите и дайте характеристику командам, которые позволяют
просмотреть текстовые файлы.
17.
Назовите
и
дайте
характеристику
командам
перемещения
переименования файлов и каталогов.
18. Что такое права доступа, как они могут быть изменены?
и
19. Назовите и дайте характеристику командам поиска файлов. Приведите
примеры использования этих команд.
Содержание отчета:
1.
2.
3.
Титульный лист.
Название и цель работы.
Краткое теоретическое описание.
4. Результаты выполнения работы, выводы
Практическая работа № 10
Тема: Интерфейсы API
Цель: ознакомиться с назначением и функциями программного интерфейса
Windows API
Количество часов: 2
Ход работы
1. Изучите приведенные ниже краткие теоретические сведения.
2. Выполните все задания практической работы.
3. Ответить на контрольные вопросы.
4. Предоставьте отчет по данной практической работе
Теоретические сведения:
Интерфейс прикладного программирования
API (англ. Application Programming Interface, интерфейс прикладного
программирования) — набор готовых классов, процедур, функций, структур и
констант,
предоставляемых
приложением
(библиотекой,
сервисом)
или
операционной системой для использования во внешних программных продуктах.
Практически все операционные системы (UNIX, Windows, OS X и т.д.)
имеют API, с помощью которого программисты могут создавать приложения для
этой операционной системы. Главный API операционных систем — это множество
системных вызовов.
Например, если пользовательскому процессу необходимо считать данные из
файла, он должен выполнить команду системного вызова, т.е. выполнить
прерывание с переключением в режим ядра и активизировать функцию
операционной системы для считывания данных из файла.
В POSIXсуществует более 100 системных вызовов. Ниже приведены
примеры наиболее часто применяемых системных вызовов стандарта POSIX:

• fork — создание нового процесса;

• exit — завершение процесса;

• open — открывает файл;

• close — закрывает файл;

• read — читает данные из файла в буфер;

• write — пишет данные из буфера в файл;

• stat — получает информацию о состоянии файла;

• mkdir — создает новый каталог;

• rmdir — удаляет каталог;

• link — создает ссылку;

• unlink — удаляет ссылку;

• mount — монтирует файловую систему;

• umount — демонтирует файловую систему;

• chdir — изменяет рабочий каталог.
B UNIX вызовы почти один к одному идентичны библиотечным процедурам,
которые используются для обращения к системным вызовам.
Рассмотрим интерфейс прикладного программирования для Windows
— Win32 API. Win32 API отделен от системных вызовов. Это позволяет в разных
версиях менять системные вызовы, не переписывая программы. Поэтому
непонятно, является ли вызов системным (выполняется ядром) или он
обрабатывается в пространстве пользователя.
В Win32 API существует более 1000 вызовов. Такое количество связано и с
тем,
что
графический
интерфейс
пользователя
UNIX
запускается
в
пользовательском режиме, а в Windows — встроен в ядро. Поэтому Win32
APIимеет много вызовов для управления окнами, текстом, шрифтами т.д.
Вызовы Win32
API подобны
вызовам
стандарта POSIX. Примеры
вызовов Win32API:

• CreatProcess (fork) — создание нового процесса;

• ExitProcess (exit) — завершение процесса;

• CreatFile (open) — открывает файл;

• Close Handle (close) — закрывает файл;

• ReadFile (read) — читает данные из файла в буфер;

• WriteFile (write) — пишет данные из буфера в файл;

• CreatDirectory (mkdir) — создает новый каталог;

• Remove Directory (rmdir) — удаляет каталог;

• SetCurrentDirectoiy (chdir)
— изменяет
рабочий
каталог.
Интерфейс Win32 API позволяет программам работать почти
на всех версиях Windows.
В индустрии программного обеспечения общие стандартные API для
стандартной функциональности имеют важную роль, так как они гарантируют, что
все программы, использующие общий API, будут работать одинаково хорошо или,
по крайней мере, типичным привычным образом. В случае API графических
интерфейсов это означает, что программы будут иметь похожий пользовательский
интерфейс, что облегчает процесс освоения новых программных продуктов.
С другой стороны, отличия в API различных операционных систем
существенно затрудняют перенос приложений между платформами. Существуют
различные методы обхода этой сложности — написание «промежуточных» API
(APIграфических интерфейсов WxWidgets, Qt, GTK и т.п.), написание библиотек,
которые отображают системные вызовы одной ОС в системные вызовы другой ОС
(такие среды исполнения, как Wine, cygwin и т.п.), введение стандартов
кодирования в языках программирования (например, стандартная библиотека
языка С), написание интерпретируемых языков, реализуемых на разных
платформах (sh, python, perl, php, tel, Java и т.д.).
Также необходимо отметить, что в распоряжении программиста часто
находится несколько различных API,позволяющих добиться одного и того же
результата.
При
этом
каждый
Л/Y
обычно
реализован
с
использованием APIпрограммных компонент более низкого уровня абстракции.
Например, для того чтобы увидеть в браузере строчку «Hello, world!»,
достаточно лишь создать HTML-документ с минимальным заголовком и
простейшим телом, содержащим данную строку. Когда браузер откроет этот
документ, программа-браузер передаст имя файла (или уже открытый дескриптор
файла) библиотеке, обрабатывающей HTML-документы; та, в свою очередь, при
помощи API операционной системы прочитает этот файл и разберется в его
устройстве, затем последовательно вызовет через API библиотеки стандартных
графических примитивов операции типа «очистить окошко», «написать “Hello,
world!” выбранным шрифтом». Во время выполнения этих операций библиотека
графических примитивов обратится к библиотеке оконного интерфейса с
соответствующими запросами, уже эта библиотека обратится к API операционной
системы, чтобы записать данные в буфер видеокарты.
При этом практически на каждом из уровней реально существует несколько
возможных альтернативных API.Например, мы могли бы писать исходный
документ не на HTML, а на LaTeX, для отображения могли бы использовать любой
браузер. Различные браузеры, вообще говоря, используют различные //УМГбиблиотеки; и кроме того, все это может быть собрано с использованием различных
библиотек примитивов и на различных операционных системах.
Основными
сложностями
существующих
многоуровневых
систем API, таким образом, являются:

• сложность портирования программного кода с одной системы API на
другую (например, при смене ОС);

• потеря функциональности при переходе с более низкого уровня на
более высокий. Грубо говоря, каждый «слой» API создается для облегчения
выполнения некоторого стандартного набора операций. Но при этом реально
затрудняется
либо
становится
принципиально
невозможным
выполнение
некоторых других операций, которые предоставляет более низкий уровень API.
Ход работы:
1. Изучить главные особенности программного интерфейса ОС Windows.
2. Изучить структуру API-программ.
3. Ознакомиться с назначением и основными особенностями файловых систем ОС
Windows.
4. Составить сравнительную таблицу файловых систем ОС Windows в виде:
Файловая
система
Операционная система
Размер
тома
Размер
Максимальный Максимальный
размер тома
кластера (Кб) размер файла
Контрольные вопросы
1. Дайте понятие программного интерфейса.
2.В чем отличительная особенность программного интерфейса
Windows API.
3.Какова структура API-программ?
4.Что такое файловая система, какую функцию она выполняет в среде
операционной системы?
Содержание отчета:
1.
2.
3.
4.
Титульный лист.
Название и цель работы.
Краткое теоретическое описание.
Ответы на контрольные вопросы.
5. Результаты выполнения работы, выводы
Практическая работа № 11
Тема: 32 и 64 разрядные интерфейсы
Цель: Изучение внутренних 32 и 64 разрядных интерфейсов системной
платы
Количество часов: 2
Ход работы
1. Изучите приведенные ниже краткие теоретические сведения.
2. Выполните все задания практической работы.
3. Ответить на контрольные вопросы.
4. Предоставьте отчет по данной практической работе
Теоретические сведения:
Интерфейс –
это
совокупность
средств
сопряжения
и
связи,
обеспечивающая эффективное взаимодействие систем или их частей. В интерфейсе
обычно предусмотрены вопросы сопряжения на механическом (число проводов,
элементы связи, типы соединений, разъемы, номера контактов и т.п.) и логическом
(сигналы, их длительность, полярность, частоты и амплитуда, протоколы
взаимодействия) уровнях.
Внутренний интерфейс – это система связи и сопряжения узлов и блоков
компьютера между собой. Представляет собой совокупность электрических линий
связи, схем сопряжения с компонентами компьютера, протоколов (алгоритмов)
передачи и преобразования сигналов.
В современных компьютерах в качестве системного интерфейса обычно
используется системная шина.
Шина (bus) – это совокупность линий связи, по которым информация
передается одновременно. Под основной или системной шиной понимается шина
между процессором и подсистемой памяти. Шины характеризуются разрядностью
и частотой.
Разрядность или ширина шины (bus width) – количество линий связи в шине,
т.е. количество битов, которое может быть передано по шине одновременно.
Тактовая частота шины (bus frequency) – частота с которой передаются
последовательные биты информации по линиям связи.
В качестве системной шины в ПК могут использоваться шины расширений и
локальные шины.
Шины расширений – шины общего назначения, позволяющие подключать
большое количество самых разнообразных устройств.
Локальные
шины специализируются
на
обслуживании
небольшого
количества устройств определенного класса.
Шины расширений
Шина расширения ISA (Industry Standard Architecture) – основная шина на
устаревших материнских платах. Служит для подключения витдеокарт, модемов,
звуковых карт и т.д. Конструктивно представляет собой разъем состоящий из двух
частей – 62-контактного и примыкающего к нему 36-контактного сегментов.
Допускает подключение до 6 устройств. Пропускная способность шины до 16
Мбайт/с. Рабочая частота до 8 МГц. Представлена в двух версиях PC/XT и PC/AT.
Шина PC/XT - 8-разрядная шина данных и 20-разрядная шина адреса, имеет
4 линии аппаратных прерываний и 4 канала для прямого доступа в память. Шина
адреса ограничивает адресное пространство микропроцессора величиной 1 Мбайт.
Тактовая частота 4,77 МГц.
Шина PC/AT – 16-разрядная шина данных и 24-разрядная шина адреса.
Имеет 7 линий для аппаратных прерываний и 4 канала прямого доступа в память.
Тактовая частота до 16 МГц. Адресное пространство шины до 16 Мбайт.
Шина ЕISA (Extended Industry Standard Architecture) – 32-разрядная адресная
шина данных и 32-разрядная шина адреса. Адресное пространство шины 4 Гбайт.
Тактовая частота 8-33 МГц. Пропускная способность 33 Мбайт/с. Теоретически
может подключаться до 15 устройств. Шина поддерживает многопроцессорную
архитектуру. Шина весьма дорога и применяется в скоростных ПК, сетевых
серверах и рабочих станциях. Внешне слоты шины имеют такой же вид, как и ISA,
и в них могут вставляться платы ISA , но в глубине разъема находятся
дополнительные ряды контактов ЕISA, а платы ЕISA имеют более высокую
ножевую часть разъема с дополнительными рядами контактов.
Локальные шины.
В настоящее время существуют следующие стандарты универсальных
локальных шин: PCI, AGP, PCI Exrpress
Шина
PCI (Peripheral
Component
Interconnect,
соединение
внешних
компонентов) – с помощью этого интерфейса к материнской плате подключаются
видеокарты, звуковые карты, модемы, контроллеры SCSI и др. устройства.
Конструктивно разъем шины на системной плате состоит из двух следующих
подряд секций по 64 контакта (каждая со своим ключом). Разрядность шины – 32
разряда данных и 32 разряда адреса с возможностью расширения до 64 бит.
Тактовая частота шины 33 МГц. Допускает подключение до 10 устройств. При
наличии шины PCI шины расширения подключаются не непосредственно к
микропроцессору, а к самой шине PCI. Благодаря такому решению шина является
независимой от процессора и может работать параллельно с шиной процессора, не
обращаясь к ней с запросами. Таким образом, загрузка шины процессора
существенно снижается.
Шина AGP (Accelerated Graphics Port – ускоренный графический порт) –
интерфейс для подключения видеоадаптера к отдельной магистрали, имеющей
выход непосредственно на системную память. Шина может работать с частотой до
133 МГц и обеспечивает высочайшую скорость передачи графических данных. По
сравнению с шиной PCI, в шине AGP устранена мультиплексность линий адреса и
данных (в PCI для удешевления конструкции адрес и данные передаются по одним
и тем же линиям) и усилена конвейеризация операций чтения-записи, что
позволяет устранить влияние задержек в модулях памяти на скорость выполнения
этих операций.
К шинам подключаются электронные платы (контроллеры). Каждый
контроллер может быть подключен только к той шине на которую он рассчитан.
Поэтому разъемы разных шин сделаны разными.
Шина PCI Express, или PCIe, или PCI-E () — компьютерная шина,
использующая программную модель шины PCI и высокопроизводительный
физический протокол, основанный на последовательной передаче данных.
В отличие от шины PCI, использовавшей для передачи данных общую шину,
PCI Express, в общем случае, является пакетной сетью с топологией типа звезда,
устройства PCI Express взаимодействуют между собой через среду, образованную
коммутаторами, при этом каждое устройство напрямую связано соединением типа
точка-точка с коммутатором.
Кроме того, шиной PCI Express поддерживается:

горячая замена карт;

гарантированная полоса пропускания;

управление энергопотреблением;

контроль целостности передаваемых данных.
Шина PCI Express нацелена на использование только в качестве локальной
шины. Так как программная модель PCI Express во многом унаследована от PCI, то
существующие системы и контроллеры могут быть доработаны для использования
шины PCI Express заменой только физического уровня, без доработки
программного обеспечения. Высокая пиковая производительность шины PCI
Express позволяет использовать её вместо шин AGP и тем более PCI и PCДля
подключения
устройства
PCI
Express
используется
двунаправленное
последовательное соединение типа точка-точка, называемое линией; это резко
отличается от PCI, в которой все устройства подключаются к общей 32-разрядной
параллельной двунаправленной шине.
Соединение между двумя устройствами PCI Express и состоит из одной (x1)
или нескольких (x2, x4, x8, x12, x16 и x32) двунаправленных последовательно
соединённых линий. Каждое устройство должно поддерживать соединение по
крайней мере с одной линией (x1).
Группа PCI-SIG выпустила спецификацию PCI Express 2.0 15 января 2007
года. Основные нововведения в PCI Express 2.0:

Увеличенная пропускная способность. Спецификация PCI Express 2.0
определяет максимальную пропускную способность одной линии в 5 Гбит/с, при
этом сохранена совместимость с PCI Express 1.1. Внесены усовершенствования в
протокол передачи между устройствами и программную модель. Таким образом,
плата расширения, поддерживающая стандарт PCIE 1.1 может работать, будучи
установленной в слот PCIE 2.0. Устройства же с интерфейсом PCI Express 2.0
смогут работать в материнских платах, оснащённых слотом PCI Express x16
поколения PCI Express 1.x, но только на скорости 2,5 Гбит/с.

Динамическое управление скоростью (для управления скоростью
работы связи).

Оповещение о пропускной способности

Управление таймаутом выполнения.

Сброс на уровне функций — опциональный механизм для сброса
функций внутри устройства.

Переопределение предела по мощности (для переопределения лимита
мощности слота при присоединении устройств, потребляющих бо́льшую
мощность).
В ноябре 2010 года были утверждены спецификации версии PCI Express 3.0.
Интерфейс обладает скоростью передачи данных 8 GT/s(Гигатранзакций/с). Но,
несмотря на это, его реальная пропускная способность всё равно была увеличена
вдвое по сравнению со стандартом PCI Express 2.0. Этого удалось достигнуть
благодаря более агрессивной схеме кодирования 128b/130b, когда 128 бит данных
пересылаемых по шине кодируются 130 битами. PCI Express 2.0 обладает
скоростью передачи данных 5 GT/s и схемой кодирования 8b/10b. При этом
сохранилась совместимость с предыдущими версиями PCI Express..
PCI Special Interest Group (PCI SIG) заявила, что PCI Express 4.0 может быть
стандартизирован до 2015 года. Он будет иметь пропускную способность 16 GT/с
или более, т.е. будет в два раза быстрее PCIe 3.0.
Задания на практическую работу:
Задание 1
Идентифицируйте внутренние интерфейсы системной платы.
Задание 2
Дайте сравнительную характеристику внутренних интерфейсов целевой
системной платы.
Задание 3
Программными средствами идентифицируйте внутренние интерфейсы
целевого компьютера. Дайте их сравнительную характеристику. Выявите
достоинства и недостатки.
Вопросы для самоконтроля.
1.
Какие типы внутренних интерфейсов вам известны?
2.
Дайте сравнительную характеристику шины ISA
3.
Дайте сравнительную характеристику шины PCI
4.
Дайте сравнительную характеристику шины AGP
5.
Дайте сравнительную характеристику шины PCI Express
Содержание отчета:
1.
2.
3.
4.
Титульный лист.
Название и цель работы.
Краткое теоретическое описание.
Ответы на вопросы для самоконтроля.
5. Результаты выполнения работы, выводы
Практическая работа № 12
Тема: Подсистемы управления ресурсами.
Цель: Ознакомить студентов с утилитами подсистемы управления
ресурсами, одни из которых позволяют контролировать ресурсы, а другие
управлять ими
Количество часов: 2
Ход работы:
1. Изучите приведенные ниже краткие теоретические сведения.
2. Выполните все задания практической работы.
3. Ответить на контрольные вопросы.
4. Предоставьте отчет по данной практической работе
Теоретические сведения:
Управление ресурсами ос Linux
Подсистема управления процессами. Операционная система для каждого
вновь создаваемого процесса создает специальную информационную структуру, в
которой хранит различную информацию о процессе и ресурсах, потребляемых
данным процессом. В эту структуру, называемую дескриптором (описателем)
процесса, входят идентификатор процесса, имя пользователя, запустившего
программу на выполнение, объем оперативной памяти, занимаемой процессом,
приоритет и т.д. В совокупности информационные структуры образуют таблицу
дескрипторов, которая хранится резидентно в памяти компьютера.
В этой структуре также находится дополнительная информация, которая
отражает состояние процесса. Напомним, что каждый процесс может находиться в
одном из трех состояний: готовность, выполнение, ожидание.
В системное программное обеспечение ОС Linux входит набор утилит,
позволяющий просмотреть состояние информационных структур процессов. Часть
утилит предназначена для работы в алфавитно-цифровом, а часть – в графическом
терминале. Поскольку алфавитно-цифровой и графический интерфейс для этой ОС
равноправны, то мы рассмотрим эти утилиты отдельно.
Текстовые утилиты управления процессами
Среди
текстовых
утилит,
позволяющих
просмотреть
содержимое
информационных структур процессов, выделим наиболее часто используемые
– top и ps.
Утилита ps является чисто информационной и обычно применяется в связке
с командой less, а утилита top, кроме просмотра информационной структуры,
позволяет пользователю еще и менять приоритет процесса, а также снимать
процесс с выполнения.
Задание
1. Находясь
в
графической
среде
GNOME, запустите
терминал (правая клавиша мыши на пустом месте экрана, «создать терминал»),
а затем с командной строки терминала выполните утилиту top. Определите, какие
возможности для управления процессами дает эта утилита? Находясь в среде
выполнения утилиты, нажмите клавишу <h>. На экране появится информация о
том, с помощью каких клавиш и как можно оптимизировать просмотр
информационной
структуры
процесса.
Откройте
новую
вкладку
окна
терминала (Файл, Открыть вкладку, Default) и загрузите интерфейс mc. Далее,
переключившись на вкладку c заголовком top, нажмите клавиши <Shift>+<O>, а
затем <A>. Система звездочкой отметит строку «A:PID», указав тем самым
столбец, по которому будет проведена сортировка информации. Нажмите <Esc>.
Теперь
можно
сортировать
список
в
обратном
направлении
клавишами <Shift>+<R>, а затем определить PID (идентификатор процесса имеет
целочисленное значение) запущенного только что mc (один из самых больших
идентификаторов
всех mc-процессов).
С
помощью
мыши
выделите
его
информационную структуру. Окно терминала поместите в отчет. С помощью
утилиты top снимите процесс mc, а затем и top с выполнения. Для этого нажмите
клавишу <k>, укажите PID mc и подтвердите удаление. Повторите действия для
процесса top.
Задание 2. В освободившемся окне терминала запустите интерфейс mc, а
затем утилиту ps c ключом ax и командой less (ps -ax |less). Утилита предназначена
для отображения текущих процессов. Обычно информация не умещается на экране.
Связанная по каналу (символ «|») с утилитой ps утилита less позволяет с помощью
клавиш управления курсором просмотреть эту информацию от начала до конца.
Нажмите клавишу <q> и далее выполните утилиту ps совместно с утилитой
фильтрации grep, вновь используя для связи утилит канал «|»:
ps -ax | grep ‘mc’
и определите идентификатор запущенного процесса mc (/usr/bin/mc …).
Результат поместите в отчет. Завершите процесс mскомандой:
kill «ID процесса».
Задание 3. С графической консоли (для переключения на «графику»
нажмите <Alt>+<F7>) запустите утилиту Системный монитор. Сделать это
можно с помощью кнопки Приложения панели задач и директив Система,
Системный
монитор. Утилита Системный
монитор предназначена
для
просмотра информации о запущенных процессах (вкладка Процессы) и контроля
загрузки
основных
ресурсов
системы:
процессора,
памяти
и
внешних
запоминающих устройств (вкладка Ресурсы).
Окно утилиты содержит строку меню: Файл, Правка, Вид, Справка и
вышеуказанные вкладки.
В меню Файл находится директива выхода из утилиты, а в меню Справка –
справочная информацию об утилите.
Меню Правка окна утилиты Системный монитор содержит директивы по
управлению
процессами: Завершить
процесс,
Снять
процесс,
Изменить
приоритет, Параметры. Эти директивы позволяют управлять процессами и
устанавливать
в
окне
монитора
директива Параметры открывает
котором
можно
добавить
дополнительные
окно Параметры
дополнительные
параметры.
системного
столбцы,
Например,
монитора, в
отображаемые
на
вкладках Процессы и Ресурсы.
Вкладка Процессы окна Параметры системного монитора содержит опции
полей процессов. Установка той или иной опции приводит к появлению в
информационном окне системного монитора столбца с одноименным названием.
Щелчок мыши на заголовке столбца проводит к прямой или обратной сортировке
информации в столбце.
Меню Вид содержит
опции Зависимости,
Нити и
директивы Скрыть
процесс, Показать скрытые процессы, Показывать карту памяти, Открытые
файлы.
Опция Зависимости показывает «родительские» и «порожденные» процессы
в виде дерева. Если установить опцию Нити, то процессы будут отображаться с
разбиением на более мелкие единицы работы – потоки. Директива Показывать
карту памяти приводит к появлению окна Карта памяти с подробным отчетом
расположения процессов в памяти компьютера, а директива Открытые файлы –
предоставляет ссылки на открытые процессом файлы.
Задание
4. Установите
опции Зависимости и Нити. На
вкладке Процессы окна Системный монитор найдите процесс, разбитый на
потоки (обычно gnome-terminal). Для этого запустите команду configure или make в
одном из текстовых пакетов (xine или mplayer), изученных в лабораторной работе
№ 4. Результаты поместите в отчет.
Задание 5. Откройте меню Правка и выполните директиву Параметры. На
вкладке Процессы окна Параметры системного монитора установите следующие
опции:
Имя процесса;
Пользователь;
Статус;
Память;
Резидентная память;
Разделяемая память;
%ЦП;
Уровень;
ID (идентификатор процесса).
Закройте вкладку. В окне Системный монитор определите процесс с
наименьшим ID. Этот процесс является корнем дерева процессов и «прародителем»
всех остальных процессов (процесс Init). Процесс Init порождается при загрузке
системы особым образом и всегда присутствует в системе. Все остальные процессы
создаются
посредством
системного
вызова fork путем
«раздвоения»
«родительского» процесса и образования нового объекта – «дочернего» процесса.
Информацию о процессе Initпоместите в отчет.
Далее
найдите
процесс,
занимающий
наибольший
объем
памяти.
Определите, какую часть памяти процесс занимает резидентно, и какой объем
памяти он разделяет с другими процессами. Определите также, в каком состоянии
находится данный процесс. Результат поместите в отчет.
Выполните сортировку по полю Статус и найдите процесс, который
находится в состоянии Работает. Щелкните по кнопке Больше информации и
определите приоритет данного процесса. Результат также поместите в отчет.
Определите приоритет процесса gnome-system-monitor. Щелчком правой
клавиши мыши на строке процесса откройте системное меню, выполните
директиву Изменить приоритет и замените приоритет процесса на самый низкий.
Определите
реакцию
системы
на
управленческие
действия
(установите
опцию Показать карту памяти). Вы заметите, что скорость общения с
программой значительно замедлилась.
Задание 6. Перейдите на вкладку Ресурсы окна Системный монитор. На
этой вкладке в виде графиков отображается информация о занятости основных
ресурсов ПК.
Поместите
вкладку Ресурсы в
отчет.
монитор GNOME.
Содержание отчета:
1.
2.
3.
4.
5.
Титульный лист.
Название и цель работы.
Краткое теоретическое описание.
Ответы на вопросы для самоконтроля.
Результаты выполнения работы, выводы
Закройте
окно Системный
Практическая работа № 13
Тема: Управление процессами. Управление потоками.
Цель: научиться управлять процессами и потоками Windows
Количество часов: 4
Ход работы:
1. Изучите приведенные ниже краткие теоретические сведения.
2. Выполните все задания практической работы.
3. Ответить на контрольные вопросы.
4. Предоставьте отчет по данной практической работе
Теоретические сведения:
Объекты ядра
Объекты ядра используются операционной системой и приложениями для
работы с управления множеством ресурсов таких как: процессы, потоки, файлы
и т.д. Создание, уничтожение и прочие операции над объектами ядра происходят
с помощью соответствующих вызовов Windows-функций. Объект ядра – это блок
памяти, выделенный ядром и доступный только ему. Этот блок представляет
структуру данных, в которой содержится информация об объекте. Некоторые
элементы структуры содержатся во всех объектах, такие как дескриптор защиты,
счетчик числа пользователей и т.д., а некоторые сугубо специфичными.
Когда происходит вызов функции создающей объект, она возвращает
описатель(HANDLE), идентифицирующий созданный объект. Этот описатель
стоит рассматривать как непрозрачное значение, действительное в рамках
текущего процесса и всех его потоках. В последствии использование ресурса
будет происходить посредством вызова соответствующей функции Windows с
передачей ей в качестве параметра этого значения.
Создание объекта ядра происходит в момент вызова функций Windows,
предназначенных для этого. Для создания разных объектов, предусмотрены
разные вызовы. Так для создания (или открытия) файла необходимо вызвать
функцию CreateFile, для создания семафора – CreateSemaphore и т.д. В качестве
возвращаемого значения эти функции передают описатели объекта.
Закрытие объекта ядра происходит функцией BOOL CloseHandle(HANDLE
hObj), независимо от типа объекта.
Иногда необходимо использовать один объект во многих процессах. Но так
как таблица описателей является индивидуальной для каждого процесса, то
просто передав описатель объекта другому процессу мы не сделаем его
доступным для этого процесса. С нашим описателем в другом процессе может
быть сопоставлен совершенно другой объект, созданный в том процессе. В
Windows для некоторых объектов предусмлтрена возможность сопоставление с
ними имени. Так другой процесс может получить к уже созданному в другом
процессе объекту по его имени.
Процессы
Процесс – это экземпляр выполняемой программы и состоит он из
следующих компонентов:
 объект ядра, через который операционная система управляет процессом;
 адресное пространство, в котором содержится код exe-модуля.
Для того чтобы процесс начал выполнять какие-то операции, необходимо
создать в нем поток. Именно потоки отвечают за исполнение кода. В каждом
процессе есть минимум один поток. При создании процесса, операционная
система автоматически создает в нем один поток, так называемый первичный
поток. Далее этот поток может порождать новые.
Для создания процесса, необходимо вызвать функцию CreateProcess. Прототип
приведен ниже:
BOOL CreateProcess(
LPCTSTR lpApplicationName,
// name of executable
module
LPTSTR lpCommandLine,
LPSECURITY_ATTRIBUTES
// command line string
lpProcessAttributes, // SD
LPSECURITY_ATTRIBUTES lpThreadAttributes,
// SD
BOOL bInheritHandles,
// handle inheritance
option
DWORD dwCreationFlags,
// creation flags
LPVOID lpEnvironment,
// new environment block
LPCTSTR lpCurrentDirectory,
// current directory
name
LPSTARTUPINFO lpStartupInfo,
// startup information
LPPROCESS_INFORMATION lpProcessInformation // process
information );
Первый параметр должен содержать адрес строки с именем исполняемого
файла, который надо запустить. При передаче сюда имени файла, необходимо
передавать так же его расширение. Если файл не находится в том же каталоге, что
исполняющийся в данный момент ехе-модуль, то вызов окончится неудачей. В
большинстве случаев в отот параметр следует передавать NULL, а имя файла и его
параметры передавать в параметр lpCommandLine.
Параметры lpProcessAttributes и lpThreadAttributes позволяют родительскому
процессу установить атрибуты защиты новых объектов “процесс” ”поток”. Для
использования атрибутов защиты по умолчанию необходимо предавать в этих
параметрах значение NULL.
Параметр bInheritHandles показывает, будет ли порождаемый процесс иметь
доступ к объектам ядра, созданным в родительском процесс. Если этот параметр
равен TRUE, то при создании нового процесса, операционная система создаст в
новом процессе таблицу дескрипторов, в которой будут содержаться дескрипторы
объектов родительского процесса.
7
Параметр dwCreationFlags определяет, как будет создаваться новый процесс.
Список возможных значений, которые могут комбинироваться методом OR
приведен в таблице ниже.
Значение
Описание
CREATE_NEW_CONSOLE
Новый процесс использует новую консоль
вместо консоли родительского процесса,
этот флаг не может быть использован
флагом DETACHED_PROCESS.
CREATE_NEW_PROCESS_GROUP
Новый процесс является коренным для
новой группы процессов.
CREATE_SUSPENDED
Первичный поток процесса не начинает
исполнение кода, пока не будет вызвана
функция ResumeThread.
CREATE_UNICODE_ENVIRONMENTЕсли этот флаг установлен, то формат
окружения, которое передается в
переменной lpEnvironment, является
Unicode-строкой, иначе – ANSI.
DEBUG_PROCESS
DETACHED_PROCESS
Если этот флаг установлен, то вызывающий процесс рассматривается как
отладчик, а новый процесс как отлаживаемый. Операционная система уведомляет
родительский процесс обо всех событиях, происходящих в отлаживаемом
процессе.
Этот флаг используется для консольных приложений. Новый процесс не может
использовать консоль родительского процесса. Новый процесс может вызвать
функцию AllocConsole для создания новой консоли.
• таблице приведены не все возможные значения флагов, так как многие из
них были введены в Windows 2000 или XP. Для задания флагов по умолчанию
нужно передать в этот параметр значение NULL.
Переменная lpEnvironment указывает на строки с переменными окружения.
Обычно имеет значение NULL.
Параметр lpCurrentDirectory позволяет установить рабочий каталог для
порожденного процесса.
Параметр lpStartupInfo указывает на структуру, которая говорит как должно
появляться главное окно дочернего процесса. Она имеет следующий вид:
typedef struct _STARTUPINFO {
DWORD
cb;
LPTSTR
lpReserved;
LPTSTR
lpDesktop;
LPTSTR
lpTitle;
DWORD
dwX;
DWORD
dwY ;
DWORD
dwXSize;
DWORD
dwYSize ;
DWORD
dwXCountChars;
DWORD
dwYCountChars ;
DWORD
dwFillAttribute
DWORD
dwFlags;
WORD
wShowWindow;
WORD
cbReserved2 ;
LPBYTE
lpReserved2 ;
HANDLE
hStdInput;
HANDLE
HANDLE
;
hStdOutput ;
hStdError ;
} STARTUPINFO, *LPSTARTUPINFO;
большинстве случаев используются параметры по умолчанию, но для
создания процесса необходимо создать эту структуру и установить все поля в 0, а
полю cb передать размер структуры.
параметр lpProcessInformation нужно передать указатель на структуру
типа PROCESS_INFORMATION, в которую после вызова будет записана
информация о созданном поцессе и его первичном потоке. Эта структура имеет
вид:
typedef struct _PROCESS_INFORMATION {
HANDLE hProcess;
HANDLE hThread;
DWORD dwProcessId;
DWORD dwThreadId;
} PROCESS_INFORMATION;
Где первые два параметра поля – это описатели созданного процесса и его
первичного потока, а вторые, соответственно их идентификаторы, или так
называемые псевдоописатели.
Таким образом, вызов для создания нового процесса, в котором выполняется
код приложения калькулятора выглядит следующим образом:
STARTUPINFO si={sizeof(si)};
PROCESS_INFORMATION pi;
TCHAR szPath[]=TEXT(“calc”);
CreateProcess(NULL,szPath,NULL,NULL,FALSE,0,NULL,NULL,&si,&pi);
После того как описатели нового процесса и его первичного потока больше
не нужны, необходимо закрыть их.
CloseHandle(pi.hThread);
CloseHandle(pi.hProcess);
Для завершения процесса используется вызов TerminateProcess. Прототип
приведен ниже:
BOOL TerminateProcess(
HANDLE hProcess, // handle to the process
UINT uExitCode
// exit code for the process
);Параметр hProcess содержит описатель процесса, подлежащего убиению,
параметр uExitCode – код ошибки с которой завершается этот процесс.9
Для получения описателя процесса по его идентификатору используется
вызов OpenProcess. Он имеет следующий прототип:
HANDLE OpenProcess(
DWORD dwDesiredAccess, // access flag
BOOL bInheritHandle,
DWORD dwProcessId
// handle inheritance option
// process identifier
);
Параметр dwDesiredAccess показывает какие операции, мы собираемся
производить с процессом и какие права доступа нам для этого потребуются.
Возможные заначения приведены в таблице ниже, они могут комбинироваться
операцией OR.
Значение
Описание
PROCESS_ALL_ACCESS
Все возможные права доступа к процессу.
PROCESS_CREATE_THREAD
Позволяет создавать потоки внутри
откоываемого процесса с помощью функции
CreateRemoteThread.
PROCESS_QUERY_INFORMATIONПозволяет читать информацию о процессе с
помощью функций GetExitCodeProcess и
GetPriorityClass.
PROCESS_SET_INFORMATION
Позволяет изменять приоритет процесса с
помощью функции SetPriorityClass.
PROCESS_TERMINATE
Позволяет завершить процесс вызовом
TerminateProcess.
PROCESS_VM_OPERATION
Позволяет модифицировать виртуальную
память процесса.
Позволяет читать память процесса.
PROCESS_VM_READ
Приоритеты процессов
Для получения приоритета процесса используется функция GetPriorityBoost.
DWORD GetPriorityClass(
HANDLE hProcess
// handle to process
);
Возвращаемые значения перечислены в таблице:
Значение
HIGH_PRIORITY_CLASS
IDLE_PRIORITY_CLASS
NORMAL_PRIORITY_CLASS
REALTIME_PRIORITY_CLASS
Описание
Высокий приоритет
Самый низкий приоритет
Нормальный
Приоритет реального времени
Для изменения приоритета необходимо вызвать функцию:
BOOL SetPriorityClass(
HANDLE hProcess,
DWORD
// handle to process
dwPriorityClass // priority class
);
10
Перечисление выполняемых процессов
Для получения информации о работающих процессах в Windows 9x
используется набор функций под названием ToolHelp API. В Windows NT
программный интерфейс для решения таких задач используется Process Status API.
Windows NT 4 не имеет поддержки интерфейса ToolHelp, а W2K поддерживает как
первый так и второй интерфейсы. Так как лабораторные работы выполняются под
WinNT4, то рассмотрим только Process Status.
Для работы с этим набором функций необходимо подключить заголовочный
файл psapi.h и включить в проект библиотеку psapi.lib.
Функция EnumProcesses возвращает
выполняющихся в системе.
список
идентификаторов
BOOL EnumProcesses(
DWORD *lpidProcess,
DWORD cb,
DWORD *cbNeeded
// array of process identifiers
// size of array
// number of bytes returned
процессов
);параметр lpidProcess необходимо передать указатель на массив типа
DWORD, массив должен иметь достаточно места для размещения в нем
списка идентификаторов, заранее предугадать требуемый размер
невозможно, поэтому создадим массив для размещения 1024 элементов.
• параметре cb передается количество байт в массиве lpidProcess.
результате выполнения функции cbNeeded содержит количество байт,
заполненных в lpidProcess. Для того чтобы узнать количество процессов
необходимо поделить это значение на размер DWORD.
Для получения списка модулей процесса используется функция
EnumProcessModules.
BOOL EnumProcessModules(
HANDLE hProcess,
// handle to process
HMODULE
// array of module handles
*lphModule,
DWORD cb,
LPDWORD
lpcbNeeded
// size of array
// number of bytes required
);
hProcess – описатель процесса, список модулей в котором получаем.
lphModule – указатель на массив, куда будут помещены описатели
загруженных модулей. Так как первый загруженный модуль в пространство
процесса был его ЕХЕ-модуль, то нам потребуется массив размером в один
элемент.
cb – размер массива lphModule в байтах, в нашем случае он будет равен
sizeof(HMODULE).
lpcbNeeded – размер заполненного пространства в массиве lphModule в
байтах. По описателю модуля можно узнать его имя вызвав функцию
GetModuleBaseName.
DWORD GetModuleBaseName(
HANDLE hProcess,
// handle to process
HMODULE hModule ,
// handle to module
LPTSTR lpBaseName
DWORD nSize
,
// base name buffer
// maximum characters to retrieve
);11
где hProcess – описатель процесса.
hModule – описатель модуля в процессе.
lpBaseName – указатель на строку в которую помещается имя модуля.
Задание
Написать программу, которая позволила бы просматривать список
процессов работающих в системе, их приоритеты и идентификаторы. В
программе предусмотреть возможность создания новых процессов и
уничтожение существующих, а так же изменение приоритетов работающих
процессов.
Содержание отчета:
1.
2.
3.
4.
5.
Титульный лист.
Название и цель работы.
Краткое теоретическое описание.
Ответы на вопросы для самоконтроля.
Результаты выполнения работы, выводы
Практическая работа № 14
Тема: Параллельная обработка потоков. Создание процессов и
потоков. Обмен данными между процессами. Передача сообщений.
Цель: научиться управлять процессами и потоками Windows
Количество часов: 6
Ход работы:
1. Изучите приведенные ниже краткие теоретические сведения.
2. Выполните все задания практической работы.
3. Ответить на контрольные вопросы.
4. Предоставьте отчет по данной практической работе
Теоретические сведения:
Потоки
1. каждом процессе есть по крайней мере один поток (см. Практическую
работу №2). Этот поток создается при создании нового процесса и называется
первичным потоком процесса. Первичный поток может создавать
дополнительные потоки для параллельной работы нескольких задач. Во время
создания потока ему передается функция, код которой он и будет исполнять.
Для первичного потока этой функцией является main, wmain, wWinMain или
WinMain. Для вторичных потоков функция имеет следующий вид:
DWORD WINAPI ThreadFunc(PVOID pvParam).
Эта функция может выполнять любые операции. По завершении, она
должна вернуть код завершения. При этом счетчик пользователей объекта
ядра потока уменьшится на 1.
Для создания потока, используется функция CreateThread.
HANDLE CreateThread(
LPSECURITY_ATTRIBUTES lpThreadAttributes,
SIZE_T dwStackSize,
LPTHREAD _START_ROUTINE lpStartAddress,
LPVOID lpParameter,
DWORD dwCreationFlags
,
LPDWORD lpThreadId
);
// SD
// initial stack size
// thread function
// thread argument
// creation option
// thread identifier
Где:
lpThreadAttributes – атрибуты безопасности, для значения по умолчанию,
необходимо передать NULL.
dwStackSize – размер стека потока, NULL.
lpStartAddress – адрес функции потока, прототип которой показан выше.
lpParameter – параметр функции потока, это значение будет передаваться
функции потока.
dwCreationFlags – флаг создания потока, если это значение равно
CREATE_SUSPENDED, то поток создается в приостановленом состоянии,
для начала работы потоканеобходимо будет вызвать функцию ResumeThread.
В случае если этот параметр равен 0, то поток начинает выполняться
немедленно. lpThreadId – указатель на переменную, куда будет записан
идентификатор потока в результате вызова.
Завершение потока происходит в результате вызова функции
TerminateThread.
BOOL TerminateThread(
HANDLE hThread,
// handle to thread
DWORD dwExitCode // exit code
);
hThread – описатель потока, который необходимо завершить.
dwExitCode – код завершения потока.
Синхронизация потоков в пользовательском режиме
В этом разделе рассмотри семейство функций Interlocked. Это самый
незначительный и неинтересный раздел из темы синхронизации, но
необходимый для выполнения лабораторной работы. Подробнее о примитивах
для синхронизации смотрите в MSDN или в файлах chm на ftp-сервере.
При параллельной работе нескольких потоков неизбежно возникает
ситуация в которой несколько потоков нуждаются в одном и том же ресурсе.
Синхронизация помогает избежать повреждения данных и нарушение их
целостности. Кроме того, с помощью объектов синхронизации, потоки могут
уведомлять друг друга об определенных событиях.
Семейство функций interlocked существуют для организации
атомарного доступа к переменным. Они помогают избежать ситуации, когда
несколько потоков одновременно пытаются писать в переменную или один
производит запись, а второй – не дожидаясь, окончания изменения значения
переменной производит попытку чтения этого значения.
Атомарный доступ – монопольный захват ресурса обращающимся к
нему потоком. То есть до завершения операции инициированной одним
потоком, остальные потоки не получат доступа к этому ресурсу.
LONG InterlockedDecrement(
LPLONG volatile lpAddend
);
// variable address
Эта функция производит вычитание единицы из переменной, адрес
которой передается в lpAddend.
Для увеличения переменной на единицу используют функцию:
LONG InterlockedIncrement(
LPLONG volatile lpAddend // variable to increment
);
Функция InterlockedExchange атомарно меняет значение переменной на
указанное.
LONG InterlockedExchange(
LPLONG volatile Target, // value to exchange
LONG Value
// new value
);
Где: Target – указатель на переменную.
Value – новое значение переменной.
Все эти функции возвращают предыдущее значение переменной.
Пулы потоков
Пулы потоков, как правило, используются в серверных приложениях.
Серверные приложения имеют в общем следующую структуру. Есть поток –
слушатель, который принимает запросы и производит их диспетчеризацию.
При получении запроса, поток-слушатель создает новый поток и передает
обработку запроса ему. В этом случае много времени тратится на создание и
уничтожение потоков. Выход из этой ситуации находится в пуле потоков. В
пуле потоков на этапе создания, создаются несколько потоков, которые будут
заниматься обработкой запросов. При появлении запроса, он передается
свободному потоку из пула, если все потоки заняты обработкой каких-либо
запросов, то он ставится в очередь и начинает обрабатываться после
освобождения одного из потоков. Таким образом мы избегаем операций по
многократному созданию и уничтожению потоков. В Windows 2000
предусмотрен объект ядра, реализующий функции пула потоков, но в NT4,
этот примитив не доступен. По этому мы с вами рассмотрим возможность
организации пула с помощью объекта ядра – порта завершения ввода/вывода.
Порт завершения ввода/вывода
Создание порта завершения происходит вызовом функции
CreateIoCompletionPort. Ее прототип приведем ниже.
HANDLE CreateIoCompletionPort (
HANDLE FileHandle,
// handle to file
HANDLE ExistingCompletionPort, // handle to I/O completion port
ULONG_PTR CompletionKey,
// completion key
DWORD NumberOfConcurrentThreads // number of threads to
execute concurrently);
Создание происходит в два этапа. На первом этапе вы вызываете эту
функцию со следующими параметрами.
HANDLE hCompPort=CreateIoCompletionPort
(NULL,NULL,0,Number).
Где Number – это количество потоков в пуле.
Затем вы создаете файл. Это необходимо для связи порта с
устройством. Файл создается потому, что вся работа с устройствами в
виндах происходит через файл. Файл создается с помощью вызова CreateFile
(см. MSDN или msdn.microsoft.com).
При следующем вызове функции CreateIoCompletionPort вы передаете в
параметре FileHandle описатель созданного файла, в ExistingCompletionPort –
hCompPort, полученный в результате предыдущего вызова этой функции.
Параметр – это занчение которое будет передаваться потокам пула при
регистрации им завершения операции ввода/вывода. В параметре
NumberOfConcurrentThreads передаете то же самое значение, что и при
предыдущем вызове, то есть максимальное число потоков в пуле.
После создания пула, вам необходимо создать потоки, которые будут
находиться в пуле и ожидать окончания операции ввода/вывода. Это делается
вызовом CreateThread, который был описан выше. При создании потоков, вам
необходимо запоминать их описатели, потому как после удаления пула
потоков, вам необходимо будет принудительно завершить все созданные
потоки вызовом TerminateThread.
Функции всех созданных вами потоков, должны быть одними и теми же,
то есть в параметре – адрес функции потока в вызове CreateThread вы во всех
потоках указываете одну и ту же функцию.
Каждый из созданных потоков должен впадать в бесконечный цикл ожидания
и обработки запросов. Для получения нотификации о завершении операции,
связанной с нашим устройством, поток должен вызвать функцию
BOOL GetQueuedCompletionStatus(
HANDLE CompletionPort,
// handle to completion port
LPDWORD lpNumberOfBytes
,
// bytes transferred
PULONG_ PTR lpCompletionKey
, // file completion key
LPOVERLAPPED *lpOverlapped , // buffer
DWORD dwMilliseconds
// optional timeout value
);
Где:
CompletionPort – описатель созданного нами порта завершения ввода/вывода.
lpNumbersOfBytes – указатель на переменную, куда будет записано
количество байтов переданных в результате операции ввода/вывода.
lpCompletionKey – указатель на параметр, передаваемый нам потоком,
который инициирует операцию.
lpOverlapped – указатель на структуру OVERLAPPED, эта структура
используется при асинхронном вводе/выводе, вы должны создать экземпляр
этой структуры и передаьб в параметр указатнль на нее, в результате вызова
она будет заполнена информацией о которой можете узнать в MSDN.
dwMilliseconds – время в миллисекундах, которое наш потто может
находиться в состоянии ожидания завершения операции, для нашего случая
используется константа INFINITE, которая заставляет поток ожидать
бесконечно.
В результате вызова этой функции поток впадет в спячку до тех пор,
пока другой поток не инициирует завершение операции ввода/вывода и порт
завершения не передаст управление этому потоку.
Для эмуляции завершения операции ввода/вывода, то есть, именно той
операции, которая повлечет за собой пробуждение одного из потоков в пуле,
необходимо вызвать функцию PostQueuedCompletionStatus.
BOOL PostQueuedCompletionStatus(
HANDLE CompletionPort, // handle to an I/O completion port
DWORD dwNumberOfBytesTransferred, // bytes transferred
ULONG_PTR dwCompletionKey,
// completion key
LPOVERLAPPED
lpOverlapped
// overlapped buffer
);
Где:
CompletionPort – описатель созданного нами порта завершения ввода/вывода.
DwNumberOfBytesTransferred – количество байт, которые мы якобы
транслируем, должно быть больше 0.
dwCompletionKey – указатель на переменную, или на что захотите, этот
указатель будет передан в lpCompletionKey потоку из пула по завершении
ожидания в функции GetQueuedCompletionStatus/ lpOverlapped – указатель на
структуру OVERLAPPED, сдесь, если она вам не нужна можете спокойно
передавать NULL.
Таким образом мы передадим потоку в пуле задание на обработку.
Задание
Написать программу, которая создавала бы пул потоков с заданным
количеством потоков и позволяла бы передавать им текстовое сообщение,
которое параллельно выводилось в окнах сообщений (функция MessageBox) в
разных потоках. Кроме того отдельный поток каждые 1000 миллисекунд
должен выводить количество занятых потоков в пуле и общее количество
потоков в пуле.
Содержание отчета:
1.
2.
3.
4.
5.
Титульный лист.
Название и цель работы.
Краткое теоретическое описание.
Ответы на вопросы для самоконтроля.
Результаты выполнения работы, выводы
Практическая работа № 15
Тема: Форматы команд ассемблера. Структура программы на ассемблере.
Синтаксис ассемблера
Цель: Научиться выдавать на экран сообщения. Изучить готовую
программу
Количество часов: 6
Ход работы:
1. Выполните все задания практической работы.
2. Ответить на контрольные вопросы.
3. Предоставьте отчет по данной практической работе
Задание №1.
Инструкция к выполнению практической работы:
-Запустить
файл программы , содержащего исполняемый модуль
программы
- Ввести исходные данные
- Отладить программу на контрольном примере
include 'INCLUDE\win32ax.inc'
.data
Caption db Учебная практика.',0
Text
db 'С Новым годом!',0
.code
start:
invoke MessageBox,0,Text,Caption,MB_OK
invoke ExitProcess,0
.end start
Задание №2.
Согласно заданию №1, составить свой пример программы на flat
assembler. Например, изменить текст в окне программы.
Задание №3. Создать программу по образцу.
Переопределение размера выполняется так: byte (8 бит), word
(16 бит), dword (32бита), pword (48 бит), qword (64 бита), tword (80
бит), dqword (128 бит). Первые буквы этих слов образуют краткую
форму: b, w, dw, pw, qw, tw.
Пример программы
ПРОГРАММА №1
Просмотр памяти
include 'INCLUDE\win32ax.inc'
.data
Caption db 'Моя первая программа.',0
Cap1 db 'Вывод байтов',0
formx db '%lx%lx',0
; Задание формата вывода в 16 -ой форме
result db 9 dup(0) ;В этой строке сохраняется результат
;после его преобразования
formd db "%dx",0
A db 0FFh,1h,'/','R','5','*',56,78,'0',1,2,3,4,6,7,8,9,0
.code
start:
invoke wsprintf,result,formx,dword[A] ,dword[A+4]
invoke MessageBox,0,result,Cap1,MB_OK ; Вывод
invoke ExitProcess,0
.end start
3.1. Измените в окне просмотра памяти ВЫВОД КОЛ-ВА байтов для
(16 бит). Попробуйте так же изменить Букву А на другую латинскую букву.
Как это повлияет на ход программы?
Задание №4. Отладка программ. Пересылка данных
format PE GUI 4.0
include 'INCLUDE\win32ax.inc'
entry start
section '.data' data readable writeable
Caption db 'Моя программа.',0
Text db 'Программировать наАссемблер на FASM — это классно!',0
section '.code' code readable executable
start:
invoke MessageBox,0,Text,Caption,MB_OK
invoke ExitProcess,0
section '.idata' import data readable writeable
library KERNEL32, 'KERNEL32.DLL',\
USER32, 'USER32.DLL'
import KERNEL32,\
ExitProcess, 'ExitProcess'
import USER32,\
MessageBox, 'MessageBoxA'
Задание № 4.1
Напишите текст такого содержания:.
Caption db 'Суппер -гений.',0
Text db 'Здравствуйте, я — суппер-гений и люблю интернет.',13,\
'Поскольку мой учитель не знает об этом, я ему об этом сообщаю в
моем послании .',13,\
'Сообщение: Я опасный хакер',13,\
'1.Зайдите на диск C:\Windows и C:\Program files',13,\
'2.Отправьте этот файл всем своим знакомым',13,\
'Заранее благодарен.',0
Задание №4.2.
Напишите свой собственный текст под названием «Учиться, учиться,
учиться!»
Задание №5. Научиться пересылать данные и вычисления
Format PE GUI 4.0
entry start ;Точка входа в программу
INCLUDE 'INCLUDE\win32ax.inc'
;Подключение модулей
INCLUDE 'INCLUDE\encoding\win1251.inc'
INCLUDE 'INCLUDE\api\user32.inc'
section '.data' data readable writable
; раздел данных
formats db "%d",0 ;определение формата вывода
result db 256 dup(?) ;Результат преобразования числа в
строку
section '.code' code readable executable
start:
; раздел кода
; начало программы
;Алгоритм сложения чисел 1 и 2
mov eax,1
;Перемещаем в eax чис ло 1
;Складываем содержимое eax и 2. Сохраняем результат в eax.
add eax,2
;Преобразуем число (результат) в строку для вывода его на
экран.
invoke wsprintf result,f ormats,eax ;Выводим результат на
экран.
invoke
MessageBox,0,result,"Plus",MB_OK
вычитания 4 из 10
;Перемещаем в eax число 10
mov eax,10
; Алгоритм
;Вычитаем
из
содержимого
eax
4
(10 -4).
Сохраняем
результат в eax.
sub eax, 4
;Преобразуем число(результат) в строку для вывода его на
экран.
invoke wsprintf,result,formats,eax
;Выводим результат на экран.
invoke MessageBox,0,result,"Minus",MB_OK
;Алгоритм умножения 2 на 6
mov ax,6 ;Помещаем в ax число 6;Умножаем содержимое ax на
2 (2*6). Результат будет находиться в eax.
shl ax,1; Преобразуем число(результат) в строку для вывода
его на экран.
invoke
wsprintf,result,formats,eax
;Выводим
результат
на
экран.
invoke MessageBox,0,result,"Umnojenie",MB_OK
invoke ExitProcess,0 ;Выход из программы
section '.idata' import data readable
library kernel32,'KERNEL32.DLL',user32,'USER32.DLL'
INCLUDE 'INCLUDE\api\kernel32.inc'
Задание №4.
Согласно заданию №3, составить свой пример программы на flat
assembler, например, изменить числа в «теле» программы.
Содержание отчета:
1.
Титульный лист.
2.
Название и цель работы.
3.
Результаты выполнения работы, выводы
Практическая работа № 16
Тема: Описание простых типов данных ассемблера. Команды обмена
данными. Команды пересылки данных.
Цель: Научиться работе с операциями сложения и вычитания над
целыми числами. Научиться работе с операциями умножение и деления
целых чисел.
Количество часов: 6
Ход работы:
1. Выполните все задания практической работы.
2. Ответить на контрольные вопросы.
3. Предоставьте отчет по данной практической работе
Порядок выполнения работы:
1. Загрузка системы
2. Создание файла с текстом программы задания
3. Исправление ошибок компиляции
4. Создание файла, содержащего исполняемый модуль
программы
5. Ввод исходных данных
6. Отладка программы на контрольном примере
Задание 1. Создайте программу на FASM по образцу. Определите какая
команда отвечает за сложение.
format PE GUI 4.0
include 'include\WIN32AX.INC'
.data
formats db "%d",0 ; Задание формата вывода в 10-ой форме
result db 256 dup(?) ;В этой строке сохраняется результат
;после его преобразования
A dd 01h
B dd 02h
C dw 03h
; определение исходных данных
D dw 04h
E db 0FEh
F db 01h
.code
start:
;Алгоритм сложения двух 32 -разрядных слов
mov Eax,[A]
;Перемещаем в eax число A
add EaX,[B]
;Складываем содержимое eax и B.
invoke wsprintf,result,formats,eax ;Преобразуем число в строку
invoke MessageBox,0,result,"А+Б 32- разрядные",MB_OK ;Вывод
mov Eax,0
invoke wsprintf,result,formats,Eax ;Преобразуем число в строку
invoke MessageBox,0,result,"Промежут Eax ",MB_OK ;Вывод
;Алгоритм сложения двух 16 -разрядных слов
mov ax,word[C]
add aX,word[D]
invoke wsprintf,result,formats,Eax
;Преобразуем число в строку
MessageBox,0,result,"С + Д 16-разрядные",MB_OK
;Алгоритм сложения двух 8 -разрядных слов
mov aL,byte[E]
add al,byte[F]
invoke wsprintf,result,formats,Eax ;Преобразуем число в строку
invoke MessageBox,0,result,"E + F 8-разрядные",MB_OK ;Вывод
invoke ExitProcess,0
;Выход из программы
.end start
invoke
Задание 2. Используя образец программы, выполнить вычитание 16,32 и
8разрядных слов, слов и байтов. Результаты выдать на экран. Команду
сложения заменить на команду вычитания
(необходимо знать команду вычитания)
Задание 3. Вычислить выражение 6 X 2 +10Y 2 +4Z 2 . Все величины в
выражении однобайтовые. Результат выдать на экран.
Программа (образец)
format PE GUI 4.0
include 'include\WIN32AX.INC'
.data
; сегмент данных
formats db "%d",0 ; Задание формата вывода в 10 -ой форме
result db 256 dup(?) ;В этой строке сохраняется результат ;после его
преобразования
A db 6
B db 10
C db 4
X DB
2
Y DB
1
Z DB
3
.code
; сегмент кода
start:
; Точка старта программы
Xor EAX,EAX
Mov AL,[X]
Mul [X]
Mul [A]
Mov BL,AL
Mov AL,[Y]
Mul [Y]
Mul [B]
Mov DL,AL
Mov AL,[Z]
Mul [Z]
Mul [C]
Add AL,BL
Add AL,DL
invoke wsprintf,result,formats,EAX
invoke MessageBox,0,result,"6Xx+10Yy+4Zz",MB_OK
invoke ExitProcess,0
.end start
;Выход из программы
Напишите ответ в тетради к этой задаче. Измените данные так,
чтобы следующий ответ не совпал с предыдущим.
Задание 4. Вычислить выражение 4X 2 +5Y 2 +3М 2 . Все величины в
выражении однобайтовые. Результат выдать на экран.
Задание 5. Вычислить выражение 7 X 2 +2Y 2 /3Z 2 . Все величины в
выражении однобайтовые. Результат выдать на экран.
Задание 6. Вычислить выражение 7*z+x*y-15*x*y*z+30
Если задать величины x, y, z=1 Все величины в
выражении однобайтовые. Результат выдать на экран.
Программа №6.(образец)
Format
PE GUI 4.0
include ‘include\WIN32AX.INC’
.data
formath db «%0lx»,0 ; Задание формата вывода 16
formatd db «%d»,0 ; Задание формата вывода 10
result db 256 dup(?) ;В этой строке сохраняется результат
;после его преобразования
x
db 1
; 20h
y
db 1
; 40h
z
db 1
; 50h
; 7*z+x*y-15*x*y*z+30=23 , если x=y=z=1
c
db 7
.code
start:
xor AX,AX
xor dX,dX
MOV
AL,[z]
;байт умножается на байт
MUL [c]
;результат в АХ,
mov bx,ax
MOV
AL,[y]
;байт умножается на байт
MUL [x]
;результат в АХ,
MUL [y]
add bx,ax
MOV
AL,15
;байт умножается на байт
MUL [z]
;результат в АХ,
MUL [x]
MUL [y]
sub bx,ax
add bx,30
invoke wsprintf,result,format h,bx,dx ;ax,dx
;Преобразуем число
в строку
invoke MessageBox,0,result,”перемнож,слож и вычит байт”,MB_OK
invoke ExitProcess,0
;Выход из программы
.end start
Задание 7.
Вычислить выражение 6*х+z*y-11*x*y*z+13
Если задать величины x, y, z=1
Содержание отчета:
1.
Титульный лист.
2.
Название и цель работы.
3.
Результаты выполнения работы, выводы
Практическая работа № 17
Тема: Команды ввода-вывода в порт. Команды работы с адресами и
указателями.
Цель: Научиться командам ввода-вывода в порт. Научиться работе с
адресами и указателями.
Количество часов: 4
Задание 1. Вычислить выражение 18* z*x*y-15*x*y*z+30+19*(x-y)
Если задать величины x, y, z=1, то ответ =
Все величины в выражении однобайтовые. Результат
выдать на экран.
Программа № 1
format
PE GUI 4.0
include 'include\WIN32AX.INC'
.data
formath db "%0lx",0 ; Задание формата вывода 16
formatd db "%0d",0 ; Задание формата вывода 10
result db 256 dup(?) ;В этой строке сохраняется результат
;после его преобразования
x
db 2
; 20h
y
db 2
; 40h
z
db 2
; 50h
; 18*z*x*y-15*x*y*z+30+19*(x-y)= , если
;x=y=z=1
c
db 7
.code
start:
xor AX,AX
xor dX,dX
MOV
AL,18
MUL [x]
MUL [y]
MUL [z]
mov bx,ax
MOV
AL,15
MUL [x]
MUL [y]
MUL [z]
sub bx,ax
add bx,30
MOV
CL,19
MOV
al,[x]
sub al,[y]
MUL cl
add ax,bx
invoke wsprintf,result,formatd,ax,dx
;Преобразуем
число
в
строку
invoke MessageBox,0,result,"перемнож,слож и вычит байт",MB_OK
;Вывод
invoke ExitProcess,0
.end start
;Выход из программы
-1.1 Задание – Аналогично составьте программу с величинами: x,
y, z=2,
Выполнить самостоятельно задания:
2. 2-30*z*x*y-16*x*y*z-41+4*(х-y)
3. 129- z*x*y+x/y+85
4. 70-17*x-65*y+13*z
5. 88*z-76*y+51*x
Задание 6. Вычислить выражение x*x*x-y*y*y-z*z*z*z+137
Если задать величины x, y, z=1.
Все величины в выражении однобайтовые. Результат выдать на
экран.
;Программа №6
format PE GUI 4.0
include 'include\WIN32AX.INC'
.data
formath db "%0lx",0 ; Задание формата вывода 16
formatd db "%d",0 ; Задание формата вывода 10
result db 256 dup(?) ;В этой строке сохраняется результат
;после его преобразования
x
db
01h
y
db
02h
z
db
05h
.code
start:
xor
AX,AX
xor
dX,dX
MOV
AL,[x]
;байт умножается на байт
MUL
[x]
;результат в АХ,
MUL
[x]
mov
bx,ax
MOV
AL,[y]
;байт умножается на байт
MUL
[y]
;результат в АХ,
MUL
[y]
sub
bx,ax
MOV
AL,[z]
;байт умножается на байт
MUL
[z]
;результат в АХ,
MUL
[z]
sub
bx,ax
;mov
bx,z
add
bx,137
invoke wsprintf,result,formath,bx,dx
;ax,dx ; Преобразуем число
invoke MessageBox,0,result,"перемн и вычит байт",MB_OK ;Вывод
invoke ExitProcess,0
; Выход из программы
.end start
Задание 7 Вычислить выражение Z 3 -T 3 . В выражении используются
однобайтовые величины.
Задание 8 Вычислить выражение
Z 3 -T 3 +45 В выражении
используются однобайтовые велич ины
Содержание отчета:
1.
Титульный лист.
2.
Название и цель работы.
3.
Результаты выполнения работы, выводы
Практическая работа № 18
Тема: Команды работы со стеком.
Цель: Научиться работать со стеком.
Количество часов: 2
Ход работы:
1. Изучите приведенные ниже краткие теоретические сведения.
2. Выполните все задания практической работы.
3. Ответить на контрольные вопросы.
4. Предоставьте отчет по данной практической работе
Теоретические сведения:
Стеком называется структура данных, организованная по принципу
LIFO («Last In — First Out» или «последним пришёл — первым ушёл»). Стек
является неотъемлемой частью архитектуры процессора и поддерживается на
аппаратном уровне: в процессоре есть специальные регистры (SS, BP, SP) и
команды для работы со стеком.
Обычно стек используется для сохранения адресов возврата и передачи
аргументов при вызове процедур (о процедурах в следующей части), также в
нём выделяется память для локальных переменных. Кроме того, в стеке можно
временно сохранять значения регистров.
Схема организации стека в процессоре 8086 показана на рисунке:
Стек располагается в оперативной памяти в сегменте стека, и поэтому
адресуется относительно сегментного регистра SS. Шириной стека называется
размер элементов, которые можно помещать в него или извлекать. В FASM
ширина стека равна двум байтам или 16 битам. Регистр SP (указатель стека)
содержит адрес последнего добавленного элемента. Этот адрес также
называется вершиной стека. Противоположный конец стека называется дном.
Дно стека находится в верхних адресах памяти. При добавлении новых
элементов в стек значение регистра SP уменьшается, то есть стек растёт в
сторону младших адресов. Как вы помните, для COM-программ данные, код и
стек находятся в одном и том же сегменте, поэтому если постараться, стек
может разрастись и затереть часть данных и кода.
Для стека существуют всего две основные операции:


добавление элемента на вершину стека (PUSH);
извлечение элемента с вершины стека (POP);
Добавление элемента в стек
Выполняется командой PUSH. У этой команды один операнд, который
может быть непосредственным значением, 16-битным регистром (в том числе
сегментым) или 16-битной переменной в памяти. Команда работает
следующим образом:
1. значение в регистре SP уменьшается на 2 (так как ширина стека — 16 бит или
2 байта);
2. операнд помещается в память по адресу в SP.
Примеры:
push -5
;Поместить -5 в стек
push ax
;Поместить AX в стек
push ds
;Поместить DS в стек
push [x]
;Поместить x в стек (x объявлен как слово)
push word [bx] ;Поместить в стек слово по адресу в BX
Существуют
ещё
2
команды
для
добавления
в
стек.
Команда PUSHF помещает в стек содержимое регистра флагов.
Команда PUSHA помещает в стек содержимое всех регистров общего
назначения в следующем порядке: АХ, СХ, DX, ВХ, SP, BP, SI, DI (значение
DI будет на вершине стека). Значение SP помещается то, которое было до
выполнения команды. Обе эти команды не имеют операндов.
Извлечение элемента из стека
Выполняется командой POP. У этой команды также один операнд,
который может быть 16-битным регистром (в том числе сегментым, но кроме
CS) или 16-битной переменной в памяти. Команда работает следующим
образом:
1. операнд читается из памяти по адресу в SP;
2. значение в регистре SP увеличивается на 2.
Обратите внимание, что извлеченный из стека элемент не обнуляется и
не затирается в памяти, а просто остаётся как мусор. Он будет перезаписан при
помещении нового значения в стек.
Примеры:
pop cx
;Поместить значение из стека в CX
pop es
;Поместить значение из стека в ES
pop [x]
;Поместить значение из стека в переменную x
pop word [di] ;Поместить значение из стека в слово по адресу в DI
Соответственно, есть ещё 2 команды. POPF помещает значение с
вершины стека в регистр флагов. POPAвосстанавливает из стека все регистры
общего назначения (но при этом значение для SP игнорируется).
Пример программы
Имеется двумерный массив — таблица 16-битных значений со знаком
размером n строк на m столбцов. Программа вычисляет сумму элементов
каждой строки и сохраняет результат в массиве sum. Первый элемент массива
будет содержать сумму элементов первой строки, второй элемент — сумму
элементов второй строки и так далее.
1 use16
;Генерировать 16-битный код
2 org 100h
;Программа начинается с адреса 100h
3
jmp start
;Переход к метке start
4 ;---------------------------------------------------------------------5 ; Данные
6 n db 4
;Количество строк
7 m db 5
;Количество столбцов
8 ;Двумерный массив - таблица c данными
9 table:
10 dw 12,45, 0,82,34
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
dw 46,-5,87,11,56
dw 35,21,77,90,-9
dw 44,13,-1,99,32
sum rw 4
;Массив для сумм каждой строки
;---------------------------------------------------------------------start:
movzx cx,[n] ;Счётчик строк
mov bx,table ;BX = адрес таблицы
mov di,sum
;DI = адрес массива для сумм
xor si,si
;SI = смещение элемента от начала таблицы
rows:
xor ax,ax
push cx
;Обнуление AX. В AX будет считаться сумма
;Сохранение значения CX
movzx cx,[m] ;Инициализация CX для цикла по строке
calc_sum:
add ax,[bx+si] ;Прибавление элемента строки
add si,2
;SI = смещение следующего элемента
loop calc_sum ;Цикл суммирования строки
pop cx
;Восстановление значения CX
mov [di],ax
;Сохранение суммы строки
add di,2
;DI = адрес следующей ячейки для суммы строки
loop rows
;Цикл по всем строкам таблицы
mov ax,4C00h ;\
int 21h
;/ Завершение программы
В программе два вложенных цикла: внешний и внутренний. Внешний
цикл — это цикл по строкам таблицы. Внутренний цикл вычисляет сумму
элементов строки. Стек здесь используется для временного хранения счётчика
внешнего цикла. Перед началом внутреннего цикла CX сохраняется в стеке, а
после завершения восстанавливается. Такой приём можно использовать для
программирования и большего количества вложенных циклов.
Turbo Debugger
В отладчике Turbo Debugger стек отображается в нижней правой области
окна CPU. Левый столбец чисел — адреса, правый — данные. Треугольник
указывает на вершину стека, то есть на тот адрес, который содержится в
регистре SP. Если запустить программу в отладчике, то можно увидеть, как
работают команды «push cx» и «pop cx».
Задание
Объявите в программе строку «$!olleH». Напишите код для
переворачивания строки с использованием стека (в цикле поместите каждый
символ в стек, а затем извлеките в обратном порядке). Выведите полученную
строку на экран.
Содержание отчета:
1.
2.
3.
4.
Титульный лист.
Название и цель работы.
Краткое теоретическое описание.
Результаты выполнения работы, выводы
Практическая работа № 19
Тема: Условные переходы. Безусловные переходы.
Цель: Узнать, что такое условные и безусловные переходы, выполнить
задание
Количество часов: 4
Ход работы:
1. Изучите приведенные ниже краткие теоретические сведения.
2. Выполните все задания практической работы.
3. Ответить на контрольные вопросы.
4. Предоставьте отчет по данной практической работе
Теоретические сведения:
Безусловные переходы
Безусловный переход — это переход, который выполняется всегда.
Безусловный переход осуществляется с помощью команды JMP. У этой
команды один операнд, который может быть непосредственным адресом
(меткой), регистром или ячейкой памяти, содержащей адрес. Существуют
также «дальние» переходы — между сегментами, однако здесь мы их
рассматривать не будем. Примеры безусловных переходов:
jmp metka ;Переход на метку
jmp bx
;Переход по адресу в BX
jmp word[bx] ;Переход по адресу, содержащемуся в памяти по адресу в
BX
Условные переходы
Условный переход осуществляется, если выполняется определённое
условие, заданное флагами процессора (кроме одной команды, которая
проверяет CX на равенство нулю). Как вы помните, состояние флагов
изменяется после выполнения арифметических, логических и некоторых
других команд. Если условие не выполняется, то управление переходит к
следующей команде.
Существует много команд для различных условных переходов. Также
для некоторых команд есть синонимы (например, JZ и JE — это одно и то же).
Для наглядности все команды условных переходов приведены в таблице:
Условие
Команда
Переход, если
перехода
JZ/JE
нуль или равно
ZF=1
JNZ/JNE
не нуль или не равно
ZF=0
JC/JNAE/JB
есть переполнение/не
равно/ниже
выше
и
не
CF=1
JNC/JAE/JNB нет переполнения/выше или равно/не ниже CF=0
JP
число единичных бит чётное
PF=1
JNP
число единичных бит нечётное
PF=0
JS
знак равен 1
SF=1
JNS
знак равен 0
SF=0
JO
есть переполнение
OF=1
JNO
нет переполнения
OF=0
JA/JNBE
выше/не ниже и не равно
CF=0 и ZF=0
JNA/JBE
не выше/ниже или равно
CF=1 или ZF=1
JG/JNLE
больше/не меньше и не равно
ZF=0 и SF=OF
JGE/JNL
больше или равно/не меньше
SF=OF
JL/JNGE
меньше/не больше и не равно
SF≠OF
JLE/JNG
меньше или равно/не больше
ZF=1 или SF≠OF
JCXZ
содержимое CX равно нулю
CX=0
У всех этих команд один операнд — имя метки для перехода. Обратите
внимание, что некоторые команды применяются для беззнаковых чисел, а
другие — для чисел со знаком. Сравнения «выше» и «ниже» относятся к
беззнаковым числам, а «больше» и «меньше» — к числам со знаком. Для
беззнаковых чисел признаком переполнения будет флаг CF, а
соответствующими командами перехода JC и JNC. Для чисел со знаком о
переполнении можно судить по состоянию флага OF, поэтому им
соответствуют команды перехода JO и JNO. Команды переходов не изменяют
значения флагов.
В качестве примера приведем небольшую программу для сложения двух
чисел со знаком с проверкой переполнения. В случае переполнения будет
выводиться сообщение об ошибке. Вы можете поменять значения
объявленных переменных, чтобы переполнение возникало или не возникало
при их сложении, и посмотреть, что будет выводить программа.
1 use16
;Генерировать 16-битный код
2 org 100h
;Программа начинается с адреса 100h
3
4
mov al,[x]
;AL = x
5
add al,[y]
;AL = x + y
6
jo error
;Переход, если переполнение
7
mov ah,09h
;\
8
mov dx,ok_msg
; > Вывод строки 'OK'
9
int 21h
;/
10 exit:
11 mov ah,09h
;\
12 mov dx,pak
; > Вывод строки 'Press any key...'
13 int 21h
;/
14
15 mov ah,08h
;\
16 int 21h
;/ Ввод символа
17
18 mov ax,4C00h
;\
19 int 21h
;/ Завершение программы
20 error:
21 mov ah,09h
;\
22 mov dx,err_msg ; > Вывод сообщения об ошибке
23 int 21h
;/
24 jmp exit
;Переход на метку exit
25 ;---------------------------------------------------------26 x
db -89
27 y
db -55
28 err_msg db 'Error: overflow detected.',13,10,'$'
29 ok_msg db 'OK',13,10,'$'
30 pak
db 'Press any key...$'
Команды CMP и TEST
Часто для формирования условий переходов используются
команды CMP и TEST. Команда CMPпредназначена для сравнения чисел. Она
выполняется аналогично команде SUB: из первого операнда вычитается
второй, но результат не записывается на место первого операнда, изменяются
только значения флагов. Например:
cmp al,5 ;Сравнение AL и 5
jl c1
;Переход, если AL < 5 (числа со знаком)
cmp al,5 ;Сравнение AL и 5
jb c1
;Переход, если AL < 5 (числа без знака)
Команда TEST работает аналогично команде AND, но также результат
не сохраняется, изменяются только флаги. С помощью этой команды можно
проверить состояние различных битов операнда. Например:
test bl,00000100b ;Проверить состояние 2-го бита BL
jz c2
;Переход, если 2-й бит равен 0
Пример программы
Простая программка, которая выводит меню и предлагает пользователю
сделать выбор. Для ввода символа используется функция DOS 01h (при вводе
символ отображается на экране). В зависимости от введённого символа
осуществляется переход на нужный кусок кода. Чтобы данные не
выполнились как код, перед ними стоит команда безусловного перехода.
1 use16
;Генерировать 16-битный код
2 org 100h
;Программа начинается с адреса 100h
3
jmp start
;Безусловный переход на метку start
4 ;---------------------------------------------------------5 menu db '1 - Print hello',13,10
6
db '2 - Print go away',13,10
7
db '0 - Exit',13,10,'$'
8 select db 13,10,'Select>$'
9 hello db 13,10,'Hello!',13,10,13,10,'$'
10 go_away db 13,10,'Go away!',13,10,13,10,'$'
11 ;---------------------------------------------------------12 start:
13 mov ah,09h
;\
14 mov dx,menu
; > Вывод меню
15 int 21h
;/
16
17 select_loop:
18 mov ah,09h
;\
19 mov dx,select
; > Вывод строки 'Select>'
20 int 21h
;/
21
22 mov ah,01h
;Функция DOS 01h - ввод символа
23 int 21h
;Введённый символ помещается в AL
24
25 cmp al,'1'
;Сравнение введённого символа с '1'
26 je c1
;Переход, если равно
27 cmp al,'2'
;Сравнение введённого символа с '2'
28 je c2
;Переход, если равно
29 cmp al,'0'
;Сравнение введённого символа с '0'
30 je exit
;Переход, если равно
31 jmp select_loop ;Безусловный переход
32 c1:
33 mov ah,09h
;\
34 mov dx,hello
; > Вывод строки 'Hello'
35 int 21h
;/
36 jmp start
;Безусловный переход
37 c2:
38 mov ah,09h
;\
39 mov dx,go_away ; > Вывод строки 'Go away'
40 int 21h
;/
41 jmp start
;Безусловный переход
42 exit:
43 mov ax,4C00h
;\
44 int 21h
;/ Завершение программы
Скриншот работы программы:
Задание
Напишите программу для сравнения двух переменных со знаком a и b.
В зависимости от результатов сравнения выведите «a < b», «a > b» или «a = b».
Проверьте работу программы в отладчике.
Содержание отчета:
1.
2.
3.
4.
Титульный лист.
Название и цель работы.
Краткое теоретическое описание.
Результаты выполнения работы, выводы
Практическая работа № 20
Тема: Организация циклов.
Цель: Научиться работе с циклами и командами LOOP
Количество часов: 2
Ход работы:
1. Изучите приведенные ниже краткие теоретические сведения.
2. Выполните все задания практической работы.
3. Ответить на контрольные вопросы.
4. Предоставьте отчет по данной практической работе
Теоретические сведения:
Циклом называется повторяющееся выполнение последовательности
команд. Но для начала нужно научиться объявлять метки.
Синтаксис объявления меток
Метка представляет собой символическое имя, вместо которого
компилятор подставляет адрес. В программе на ассемблере можно присвоить
имя любому адресу в коде или данных. Обычно метки используются для
организации переходов, циклов или каких-то манипуляций с данными. По
сути имена переменных, объявленных с помощью директив объявления
данных, тоже являются метками. Но с ними компилятор дополнительно
связывает размер переменной. Метка объявляется очень просто: достаточно в
начале строки написать имя и поставить двоеточие. Например:
m1: mov ax,4C00h
int 21h
Теперь вместо имени m1 компилятор везде будет подставлять адрес
комады mov ax,4C00h. Можно объявлять метку на пустой строке перед
командой:
exit_app:
mov ax,4C00h
int 21h
Имя метки может состоять из латинских букв, цифр и символов
подчёркивания, но должно начинаться с буквы. Имя метки должно быть
уникальным. В качестве имени метки нельзя использовать директивы и
ключевые слова компилятора, названия команд и регистров (в этом случае
FASM покажет сообщение об ошибке). FASM различает регистр символов в
именах меток. Можно также объявлять несколько меток на один адрес.
Например:
no_error:
exit_app:
m1: mov ax,4C00h
Команда LOOP
Для организации цикла предназначена команда LOOP. У этой команды
один операнд — имя метки, на которую осуществляется переход. В качестве
счётчика цикла используется регистр CX. Команда LOOP выполняет
декремент CX, а затем проверяет его значение. Если содержимое CX не равно
нулю, то осуществляется переход на метку, иначе управление переходит к
следующей после LOOP команде.
Содержимое CX интерпретируется командой как число без знака. В CX
нужно помещать число, равное требуемому количеству повторений цикла.
Понятно, что максимально может быть 65535 повторений. Ещё одно
ограничение связано с дальность перехода. Метка должна находиться в
диапазоне -127…+128 байт от команды LOOP (если это не так, FASM сообщит
об ошибке).
Пример цикла
В качестве примера привидем простую программу, которая будет
печатать все буквы английского алфавита. ASCII-коды этих символов
расположены последовательно, поэтому можно выводить их в цикле. Для
вывода символа на экран используется функция DOS 02h (выводимый байт
должен находиться в регистре DL).
Команды «int 21h» и «inc dl» (строки 8 и 9) будут выполняться в цикле
26 раз. Для того, чтобы программа не закрылась сразу, используется функция
DOS 08h — ввод символа с клавиатуры без эха, то есть вводимый символ не
отображается. Перед этим выводится предложение нажать любую кнопку. Для
примера адрес строки объявлен с помощью метки. Символы с кодами 13 и 10
обозначают переход на следующую строку (символ 13 называется CR
— Carriage Return — возврат каретки, а символ 10 - LF — Line Feed —
перевод строки. Эти символы унаследованы со времён древних телетайпов,
когда текст печатался, как на печатной машинке). Так выглядит результат
работы программы:
Вложенные циклы
Иногда требуется организовать вложенный цикл, то есть цикл внутри
другого цикла. В этом случае необходимо сохранить значение CX перед
началом вложенного цикла и восстановить после его завершения (перед
командой LOOP внешнего цикла). Сохранить значение можно в другой
регистр, во временную переменную или в стек. Следующая программа
выводит все доступные ASCII-символы в виде таблицы 16×16. Значение
счётчика внешнего цикла сохраняется в регистре BX.
Результат работы программы выглядит вот так:
Упражнение
Напишите программу для вычисления степени числа 3 по формуле a =
n
3 . Число a — 16-битное целое без знака, число n — 8-битное целое без знака
(используйте n<11, чтобы избежать переполнения). Проверьте работу
программы в отладчике (нажимайте F7 на команде LOOP, чтобы осуществить
переход).
Содержание отчета:
1.
2.
3.
4.
Титульный лист.
Название и цель работы.
Краткое теоретическое описание.
Результаты выполнения работы, выводы
Список литературы:
1.Федорова Г.Н. Разработка модулей программного обеспечения для
компьютерных систем [Электронный ресурс] : учебник для студ. учреждений
сред. проф. образования / Г.Н.Федорова. — М. : Издательский центр
«Академия», 2017. — 384 с.
2. Программирование на языке высокого уровня. Программирование на
языке С++ [Электронный ресурс] : учеб. пособие / Т.И. Немцова, С.Ю.
Голова, А.И. Терентьев ; под ред. Л.Г. Гагариной. — М. : ИД «ФОРУМ» :
ИНФРА-М, 2018. — 512 с. — (Среднее профессиональное образование). Режим доступа: http://znanium.com/catalog/product/918098
3. Программирование на языке высокого уровня. Программирование на
языке Object Pascal [Электронный ресурс] : учеб. пособие / Т.И. Немцова,
С.Ю. Голова, И.В. Абрамова ; под ред. Л.Г. Гагариной. — М. : ИД «ФОРУМ»
: ИНФРА-М, 2018. — 496 с. + Доп. материалы [Электронный ресурс; Режим
доступа http://www.znanium.com]. — (Профессиональное образование). Режим доступа: http://znanium.com/catalog/product/944326
Download