- •Ос в общей структуре компьютера.
- •История операционных систем.
- •Классификация современных ос. Задачи современных ос.
- •6. Понятие процесса – ключевое понятие ос.
- •8. Трансляторы: компиляторы и интерпретаторы.
- •9. Иерархия зу (запоминающих устройств).
- •10. Управление оперативной памятью (оп). Менеджер памяти; swapping; виртуальная память.
- •11. Модели организации виртуальной памяти.
- •12. История ос unix.
- •13. Общая архитектура unix. Основные подсистемы ядра.
- •14. Пользовательская среда unix.
- •Командный интерпретатор shell.
- •16. Система каталогов в oс unix. Управление с помощью команд языка Bourn shell.
- •17. Управление файлами с помощью команд языка Bourn shell. Перенаправление ввода/вывода.
- •19. Обработка аргументов командной строки. Переменные окружения.
- •20. Пользователь и группа. Права доступа к файлу.
- •21. Системные вызовы и функции стандартных библиотек. Обработка ошибок.
- •22.Структура программы на языке с. Параметры главной функции (пример).
- •23. Файловая система ос unix: монтирование, индексные дескрипторы, жесткие и символические ссылки, файлы устройств.
- •24.Системные вызовы для работы с файлами
- •25. Понятие «процесс» в ос unix. Контекст процесса; свойства процесса; состояние процесса.
- •26.Создание процессов и упр-е ими.
- •27. Запуск внешней программы
- •29.Общая классификация средств взаимодействия процессов в ос unix.
- •30.Иерархия процессов в ос unix. Понятие сеанса. Фоновые процессы.
- •31.Каналы – средства взаимодействия процессов. Неименованные каналы. Организация конвейера (пример программы).
- •33.Сигналы как средство взаимодействия процессов в ос unix. Диспозиция сигналов.
- •34.Ограничения для процесса в ос unix (по ресурсам). Связь со свойствами процесса.
- •36.Отображение файлов в виртуальное адресное пространство. Разделяемая память.
- •37. Взаимодействие процессов через псевдотерминал.
- •38. Недостатки потокового взаимодействия процессов. Средства System vipc. Пространство имен. Общие принципы работы со средствами System vipc.
- •39. Организация очереди сообщений в ос unix. Структура сообщения. Отправка и принятие сообщений.
- •40.Семафоры, как средство взаимодействия процессов System vipc. Понятие атомарной операции. Массив семафоров.
- •41.Разделяемая память, как средство взаимодействия процессов System vipc.
- •42.Взаимодействие по сети. Понятие протокола. Семейства адресации и типы взаимодействия. Создание сокета в ос unix.
- •45. Потоковые сокеты. Клиент – серверная модель.
- •46. Проблема очередности действий и ее решение.
- •47. Процессы-демоны. Система журнализации.
- •48. Загрузка и жизненный цикл в ос unix.
- •49. Взаимоисключения. Понятие критической секции. Устаревшие подходы к организации взаимного исключения.
- •50.Поддержка взаимоисключения на уровне ос. Мьютексы и семафоры (Дейкстры). Команда ассемблера tsl.
- •51.Проблема тупиков. Граф ожидания
- •52. Нити исполнения (pthreads) в ос unix. Мьютексы pthreads.
- •53.Графический интерфейс в ос unix. Базовые принципы построения x_window.
- •54.Файловая подсистема. Общая структура. Методы выделения дискового пространства. Управление дисковым пространством.
- •55.Файловая подсистема. Структура файловой системы на диске. Реализация директорий. Поиск в директории (хеширование).
- •56.Подсистема ввода/вывода. Схема взаимодействия подсистем ос. Понятие драйвера. Типы драйверов.
21. Системные вызовы и функции стандартных библиотек. Обработка ошибок.
Все версии Unix представляют строго определенный ограниченный набор входа в ядро ОС. С помощью набора прикладные задачи могут воспользоваться услугами Unix. Эти точки входа называются системными вызовами. Т.о. системный вызов определяет функцию, выполняемую ядром ОС. Запрос от имени процесса, выполнившего вызов, и является интерфейсом самого низкого уровня.
FreeBSD4.4 предполагает порядка 160 системных вызовов. В Unix используется набор, при котором каждый системный вызов имеет соответствующую функцию с тем же именем, хранящуюся в стандартной библиотеке С. Функция библиотеки выполняет необходимое преобразование аргументов, а потом вызывает процедуру ядра. Получается, библиотечный код выполняет роль оболочки. Кроме системных вызовов программисту предоставляются библиотечные функции общего назначения, они не являются точками входа в ядро ОС. Хотя некоторые из них в процессе выполнения выполняют системные вызовы.
Основные различия между подпрограммой и системным вызовом состоит в том, что код подпрограммы при вызове – часть объектного кода, а при системном вызове исполняемый код является частью ядра. Переключение между ядром и пользовательским процессом с помощью механизма прерываний.
Системные вызовы осуществляют операции либо над файлами, либо над процессами и несколько вызовов позволяют управлять системой в целом или запрашивают информацию о ней.
Если говорить о подпрограммах Standard i/o Library, то они обеспечивают средство преобразования форматов данных и автоматическую буферизацию, что отсутствует в системных вызовах доступа к файлам.
Обработка ошибок. Обычно в случае возникновения ошибки системные вызовы возвращают -1 и устанавливают значение переменной errno. Это значение указывает причину возникновения ошибки. Заголовочный файл <errno.h> содержит коды ошибок. Значение этих кодов принимает errno. Библиотечные функции в отличии от системных вызовов имеют различный код возврата и не формируют errno.
errno объявлена как экспортируемая внешняя переменная external int errno;
В С объявлена функция:
#include <errno.h>
#include <stdio.h>
void perror(const char *S);
Функция выводит в стандартный поток об ошибках информацию об ошибочной ситуации, основываясь на значении errno. Строка S, передаваемая функции, предваряет это сообщение.
22.Структура программы на языке с. Параметры главной функции (пример).
Функция является первой функцией, определенной пользователем
(т. е. явно описанной в исходном тексте программы), которой будет передано управление после создания соответствующего окружения запускаемой на выполнение программы. Традиционно функция Main() определяется следующим образом:
Main(int argc, char*argv[],char*enp[]);
Первый аргумент (argc) определяет число параметров, переданных программе, включая ее имя.
Указатели на каждый из параметров передаются в массиве argv [ ], таким образом, через argv[0] адресуется строка, содержащая имя программы,argv[1] указывает на первый параметр и т. д. до argv[argc-1]. Массив envp [] содержит указатели на переменные окружения, передаваемые программе. Стандарт ANSI С определяет только два первых аргумента функции Main()— argc и argv. Стандарт POSIX.1 определяет также аргумент envp, хотя рекомендует передачу окружения программы производить через гло-
бальную переменную environ. Объявление: extern char* environ. Environ указывает на массив ссылок, при этом каждая ссылка на конкретную строку окружения.NULL в UNIX- список в никуда.
Пример: выводит значения всех аргументов, переданных функции Main():числопереданных параметров, сами параметры и значения первых 10 переменных окружения:
include <stddef.h>
include <stdIO.h>
extern char**environ; main(int argc, char*argv[]);
{ int i;
Printf(“число передан аргументов %s равно %d\n”,argv[0],argc-1);
for (i=1,i<argc,i++)
{printf(“argv[%d] = %s/n”,i,argc[i];}
for (i=0,i<10,i++)
{if (environ[i]!=NULL) printf(“environ[%d] =%s\n,i,environ[i]);}}
>./a.out first second th
Число переданных пар-ров программе:
a.out=3
argv[1]= first
argv[2]=second
argv[3]=th
environ[0]=logNAME=student……