- •3. Язык Си-средство разработки ос. Базовые конструкции. Массивы и указатели.
- •4. Язык Си-средство разработки ос. Структура программы. Препроцессор.
- •5. Язык Си-средство разработки ос. Организация ввода-вывода в Си, форматированный ввод-вывод.
- •7. Язык Си-средство разработки ос. Динамическое выделение памяти. Структуры и объединения.
- •Динамические структуры данных
- •Архитектура ос
- •Контекст процесса
- •Некоторые типы процессов.
- •Жизненный цикл процесса
- •Классификация алгоритмов:
- •Контекст процесса
- •17. Аппарат системных вызовов в ос unix. Порождение новых процессов.
- •21. Управление процессами. Жизненный цикл процесса в oс unix.
- •26. Взаимодействие процессов в ос unix. System V ipc.
Ответы к экзамену Операционные Системы 2012
1. Операционные системы, основные понятия и определения. История развития операционных систем.
2. Операционные системы, определение и функции. Классификация операционных систем.
Операционная система (ОС) – комплекс программ, основной функцией которых является контроль за использованием и разделением ресурсов.
ОС – комплекс взаимосвязанных программ, предназначенный для повышения эффективности аппаратуры компьютера, путем эффективного управления его ресурсами, а так же для обеспечения взаимодействия с пользователем.
ОС – комплекс программных средств, обеспечивающих интерфейс пользователя; программный и аппаратно-программный интерфейсы.
|
Оболочка – часть ОС, обеспечивающая интерфейс пользователя; Ядро – часть ОС, обеспечивающая аппаратный и программно-аппаратный интерфейсы. В современных ОС интерфейс пользователя – графический. |
Операционная система как виртуальная машина
Интерфейс между пользователем и компьютером.
Скрывает особенности устройств внешней памяти
Скрываются детали обработки прерываний, управления памятью и т.д.
Создается иллюзия неограниченного размера оперативной памяти и числа процессоров
Операционная система как менеджер ресурсов
Буферизация на диске данных, предназначенных для печати, и организации очереди на печать.
Управление ресурсами и их защита для многопользовательских компьютеров
Упорядоченное и контролируемое распределение процессоров, памяти и других ресурсов между различными программами.
Операционная система как защитник пользователей и программ
Проблема обеспечения безопасной совместной работы нескольких пользователей
Никто не должен удалять или повреждать чужие файлы
Программы одних пользователей не должны произвольно вмешиваться в работу программ других пользователей
Должны пересекаться попытки несанкционированного использования вычислительной системы
Операционная система как постоянно функционирующее ядро
ОС – это программа, постоянно работающая на компьютере и взаимодействующая со всеми прикладными программами
Во многих операционных системах постоянно работает на компьютере лишь ее часть – ядро ОС
3. Язык Си-средство разработки ос. Базовые конструкции. Массивы и указатели.
Основная программа всегда называется именем main (Си различает большие и маленькие буквы).
Целочисленные переменные int x = 0; С десятичной точкой float x = 0.0; символ char x = ‘c’;
Массив – конечная, именованная совокупность данных одного типа, расположенных в смежных ячейках памяти.
Описание одномерного массива: <тип> <имя> [<кол-во>] [инициализатор]
Примеры: char a[15] /*15 символов*/ int MAS[3][2]={{1,2},{3,4},{5,6}};
Строка символов в Си – массив символов, заканчивающийся нулевым байтом «\0».
Указателем является переменная, значение которой есть адрес некоторой области памяти. Объявление указателя: <тип>*<имя>
Например: char *q, c, *p; - где с – переменная символьного типа, а q и p – указатели на символ.
Унарная операция & - это операция взятия адреса, а унарная операция * - это операция косвенной адресации (раскрытие ссылки).
В языке Си можно также определить указатель на неопределенный тип: void *vp;
Такому указателю может быть присвоен адрес объекта любого типа или значение любого указателя. Обратное неверно.
Указатели используются чаще всего при работе с массивами. Имя массива есть константный указатель, содержащий адрес нулевого элемента: double m[10], *dp;
Присвоить указателю dp адрес начала массива m, можно следующим образом: dp=m; или dp=&m[0];
4. Язык Си-средство разработки ос. Структура программы. Препроцессор.
Программа состоит из функций, описаний и директив препроцессора.
Пример структуры программного файла:
Директивы препроцессора Описания Функция main { операторы } Функция1 { операторы } … ФункцияN {операторы} |
Препроцессор. Стандартная схема трансляции Си-программы, состоит из двух этапов: препроцессирование и собственно компиляция. Препроцессор выполняет макроподстановку, условную компиляцию, подключение файлов, и тем самым формирует текст программы, поступающий на вход компилятору. Программный файл может содержать директивы препроцессору, обозначаются #. |
Включение файлов: На место директивы #include файл препроцессор подставляет содержимое указанного в ней файла.
Макроподстановка: #define имя подставляемый_текст . От места появляения #define и до конца файла, вместо имени подставляется заданный текст.
Примеры: #include <stdio.h> /*подключение файла*/ #define n 100 /*макроподстановка */
5. Язык Си-средство разработки ос. Организация ввода-вывода в Си, форматированный ввод-вывод.
Ввод-вывод в Си реализован с помощью библиотечных функций.
Функции ввода-вывода делятся на два класса:
Функции системного ввода-вывода,
Функции стандартного (файлового) ввода-вывода.
Функции системного ввода-вывода: fopen, fclose, fread, fwrite.
Функции стандартного ввода-вывода:
Посимвольный (getchar, putchar, getc, putc, ungetc, fgetc, fputc);
Построчный ( gets, puts, fgets, fputs);
Форматированный (printf, scanf, frpintf, fscanf, sscanf).
Функции ввода-вывода объявлены в файле stdio.h
Ввод-вывод из стандартных файлов: При запуске Си-программы ОС всегда открывает 3 стандартных файла:
Входной (stdin) – связан с клавиатурой
Выходной (stdout) – связан с монитором
Файл ошибок (stderr) – связан с монитором
EOF – End Of File (конец файла).
Спецификации функций ввода-вывода:
1) Чтение символа: а) из stdin int getchar(void) б) из потока f: int getc (FILE *f); int fgetc (FILE *f) – возращают прочитанный символ в форме int. Если невозможно – знач. EOF.
2) Чтение строки: а) из stdin char *gets(char *s); - читает символы из stdin до \n (не включается)
Б) из потока f char *fgets(char *s, int n, FILE *f) – читает не более n-1 из f в строку s. Чтение прекращается при появлении \n или EOF.
3) Вывод символа: а) на stdout int putchar (int ch); б) в поток f int putc(int ch, FILE *f); int fputc (int ch, FILE *f); - выводят символ ch, возвращают выеденный символ, при ошибке – EOF.
4) Вывод строки: а) на stdout: int puts(char *s); б) в поток f: int fputs (char *s, FILE *f).
Форматированный ввод-вывод:
1) Чтение: a) из stdin: int scanf(const char *format, p1,p2,…); б) из потока f: int fscanf(FILE *f, const char *format, p1,p2,….); - функции читают текстовые данные из потока, преобразуют их в соответствии со спецификациями, содержащимися в строке format, и присваивают по порядку аргументам, каждый из которых должен быть указателем.
2) Вывод: а) в stdout: int printf(const char *format, p1,p2,…); б) в поток f: int fprintf(FILE *f, const char *format, p1,p2,…) – Функции преобразуют аргументы p1,p2,… в текстовый вид в соответствии с форматом и выводят в поток.
Основные преобразования printf:
Литера |
Тип аргумента; вид печати |
d,i |
int; десятичное целое |
o |
int; беззнаковое восьмеричное целое |
X,x |
int; беззнаковое шестнадцатиричное целое |
u |
int; беззнаковое десятичное целое |
c |
int; символ |
s |
char *; печатает строку символов |
f |
double; число в форме с фикс. Точкой |
E,e |
double; число в форме с плавающей точкой |
G,g |
double; использует %e (%E) или %f. |
p |
void *; указатель (представление зависит от реализации) |
% |
аргумент не преобразуется; печатается знак % |
Основные преобразования scanf аналогичны преобразованиям printf
3) ввод-вывод из внешних файлов
Любой файл предварительно нужно открыть: FILE* fopen(char* name, char* mode);
Закрыть файл int fclose (FILE*);
6. Язык Си-средство разработки ОС. Функции. Передача параметров. Аргументы командной строки.
Два способа описания и определения функций, «новая» и «старая» нотации:
Новая:
[<тип результата>]<имя функции>([список параметров])
{[декларации]
[операторы]
}
Старая:
[<тип результата>]<имя функции>([список имен парам.])
[описание параметров]
{ [декларации]
[операторы]
}
Функция может возвращать одно значение, тип которого указывается в заголовке, а само значение задается выражением в операторе возврата return <выражение>;
Функция может не возвращать значение, тогда тип результата void.
В начале программного файла, для всех функций, кроме main, задаются прототипы. Синтаксически прототип повторяет заголовок функции.
В программах переменные обладают следующими качествами:
Видимость переменной (область видимости);
Существование переменной (область существования).
Область видимости переменной – определяет текстовое пространство программы, из любой точки которого доступна данная переменная ( с данным именем).
Область существования переменной – это множество всех операторов программы, при передаче управления на которые переменная существует, т.е. для нее выделена память.
С точки зрения видимости выделим следующие группы переменных:
Видимые в пределах блоков
Видимые в пределах файла
Видимые в пределах программы
Указание static, примененное к переменной или функции, ограничивает область их видимости концом файла.
Если переменная определена в другом программном файле, она должны быть описана со спецификатором extern.
С точки зрения существования выделим две группы переменных:
Статические переменные;
Автоматические переменные
Статические переменные существуют на всем протяжении работы программы, по умолчанию инициализируются нулем. Все переменные, определенные вне функций, являются статическими.
Автоматическими переменными являются все переменные определенные внутри блока и не являющиеся статическими. Автоматические переменные существуют на протяжении работы блока, в котором они определены.
Аргументы командной строки
Запускаемой программе, можно передать аргументы: main(int argc, char *argv[])
Где, argc – кол-во аргументов командной строки, argv – адрес массива указателей на строки-аргументы.
