- •1 Понятие операционной Системы. Иерархическая структура. Привилегированный режим.
- •2 Многослойная структура ос
- •3 Характеристики современных ос. Многопоточность. Распределенные ос. Концепция ос на основе микроядра. Функции микроядра.
- •4.Принципы построения ос. Переносимость операционной системы.
- •1.Принцип модульности
- •2.Принцип виртуализации
- •3.Принцип особого режима работы
- •4.Принцип мобильности
- •5 Виды процессов
- •6 Многопоточная модель процесса. Создание потоков. Преимущества много поточности. Уровни потоков
- •7 Цели и необходимость синхронизации процессов и потоков. Критическая секция. Блокирующие переменные. Семафоры Дейкстры.
- •8 Тупики. Восстановление после тупиков. Предотвращение тупиков за счет нарушения условий возникновения.
- •9. Синхронизирующие объекты ос разных процессов. Мьютекс. Сигналы. Почтовый ящик.
- •10) Функции ос по управлению памятью. Физический и виртуальный адрес. Способы преобразования виртуального адреса в физический.
- •11) Соотношение объемов виртуального адресного пространства и физической памяти. Части виртуальных адресных пространств.
- •12 Распределение памяти фиксированными разделами. Распределение памяти динамическими разделами.
- •13 Перемещаемые разделы памяти. Свопинг. Виртуальная память. Разделяемые сегменты памяти.
- •14. Страничное распределение. Сегментное распределение. Сегментно-страничное распределение.
- •Сегментное распределение
- •15 Иерархия запоминающих устройств. Кэш-память. Способы отображения основной памяти на кэш. Схемы выполнения запросов в системах с кэш-памятью.
- •16 Задачи ос по управлению файлами и устройствами. Организация параллельной работы устройств ввода-вывода и процессора.
- •17 Согласование скоростей обмена и кэширование данных. Разделение устройств и данных между процессами. Обеспечение удобного логического интерфейса между устройствами и остальной частью системы.
- •18 Поддержка синхронных и асинхронных операций ввода-вывода в ос. Многослойная модель подсистемы ввода - вывода.
- •19. Логическая организация файловой системы. Типы файлов. Иерархическая структура файловой системы. Имена файлов. Монтирование. Атрибуты файлов. Логическая организация файла.
- •Иерархическая файловая система
- •Логическая организация файла
- •20 Физическая организация файловой системы. Диски, разделы, секторы, кластеры. Адресация файла.
- •21 Физическая организация fat.
- •22 Физическая организация ntfs.
- •23 Регистры процессора. Привилегированные команды. Средства поддержки сегментации памяти.
- •24. Аппаратно-программные особенности процессоров. Виртуальное адресное пространство. Защита данных при сегментной организации памяти. Сегментно-страничный механизм.
- •25 Особенности 64-ох разрядной архитектуры процессоров.
- •26) Модель osi. Стек протоколов tcp/ip.
- •27 Пакеты и инкапсуляция. Ethernet-заголовок. IPv4-заголовок. IPv6-заголовок.
- •28 Пакеты и инкапсуляция. Arp-заголовок. Icmp-заголовок.
- •29. Пакеты и инкапсуляция. Udp-заголовок. Tcp-заголовок.
- •30 Сетевые файловые системы. Принципы построения. Интерфейс сетевой файловой службы. Файловые серверы типа stateful и stateless.
- •31 Определение unix. Архитектурные особенности ос unix. Стандарты. Лицензии.
- •32 Различия дистрибутивов Linux.
- •33 Ядро Linux.
- •35) Bash. Команды управления каталогами. Команды управления файлами. Команды chown и chgrp
- •4.6.2. Команда mkdir
- •4.6.3. Команда cat
- •4.6.4. Команда cp
- •36 Bash. Сценарии. Маски
- •37 Компилятор gcc.
- •38 Работа с файлами и директориями в Unix. Функции open, write, read, opendir, scandir.
- •39. Posix. Работа с потоками. Синхронизация потоков при помощи мьютексов и условных переменных.
- •40 Создание и использование статических библиотек.
- •41 Создание и использование динамических библиотек. Раннее и позднее связывание.
- •42 Socket api. Атрибуты сокета. Адреса. Функции для работы с dns. Функции socket, bind, listen, connect, close.
- •43 Socket api. Реализация tcp- сервера и клиента.
- •44 Socket api. Реализация udp- сервера и клиента.
- •45 Socket api. Использование низкоуровневых сокетов Понятие сокета
- •Атрибуты сокета
- •Установка соединения (сервер)
- •Установка соединения (клиент)
- •Обмен данными
- •Закрытие сокета
- •46) Socket api. Неблокирующие сокеты. Пример реализации tcp- сервера.
- •47 OpenSsl. Генерация псевдослучайной последовательности.
- •48 OpenSsl. Шифрование и дешифрование ассиметричных алгоритмов.
- •49.Программирование драйверов в Linux. Виды драйверов. Методы включения драйвера в ядро. Отличие драйверов от обычных приложений. Файлы устройств. Функции драйвера устройства.
- •52 Программирование интерфейсов. Библиотека qt. Структура программы на qt.
40 Создание и использование статических библиотек.
Мы знаем что существует два вида библиотек статические .lib и динамические .dll, от как раз в этом посту попытаюсь рассказать за статическую lib они обычно имеют большой размер и функции из этой библиотеки вроде как переноситься в сам exe файл, ее вроде раз к проекту подключаешь, а дальше уже с самим exe файлом ее портировать не нужно. Ну что ж начнем, для начала разберемся как создавать статическую библиотеку. Открываем visual studio у меня visual studio 2013 premium, у вас может быть любая другая, выбираем: “Создать новый проект”, в открывшемся окне выбираем “консольное приложение виндовс 32”, также вводим название проекта я ввел MyNewLib и указываем путь где мы сохраним проект.Жмем кнопку далее и мы попадаем в следующее окошко, где выбираем “Статическая библиотека” и убираем галочку “предварительно откомпилированные заголовок”Все дальше жмем готово и у нас создается новый проект в котором будут создаваться не программы exe а статические библиотеки lib.
Дальше в этот проект MyNewLib добавляем два файла один заголовочный я его назвал function.h от его код:
#ifndef FUNCTION_H #define FUNCTION_H void func_hellow(); void func_privet(); #endif
и файл function.cpp:
#include <iostream> using std::cout; using std::endl; #include "function.h"; void func_hellow() { cout <<"Hellow world gacpada"<<endl; } void func_privet() { cout <<"privet "<<endl; }
Включаем из в проект, а дальше компилируем нажимаем клавиши ctrl+alt+F7 и у нас создается в папке Debug или Release смотря какой режим выбрать, конкретно я выбрал режим Debug и у меня в папке Debug создался файл библиотеки MyNewLib.lib ну и все на этом можно сказать все мы научились создавать статические библиотеки, я еще сразу скажу что для того что бы создавать качественные библиотеки нам нужно б было каждую функцию записать в отдельный файл, это для того нужно делать что б в MyNewLib.lib было создано несколько объектных файлов .obj в данном случае мы могли бы файл function.сpp разбить на два файла допустим файл f1.cpp в котором записать определение функции func_hellow() и на файл f2.cpp в нем записать определение второй функции func_privet(), тогда у нас будет правильная библиотека и если мы в проекте будем использовать одну функцию, допустим func_hellow(), а func_privet() нет, то объектный код .obj с функцией func_privet() не добавиться , а только .obj func_hellow() будет добавляться, я так думаю это фажный момент, возможно ниже попробуем смоделировать два разных варианта создания библиотек. Просто при использовании библиотеки в которой каждой функции пренадлежит отдельный объектный код, только включаются те функции которые используются, а если все функции в одном .obj то естественно включатся все функции и даже те которые мы не используем.
И так идем дальше и попытаемся сейчас мы подключить библиотеку к нашему проекту, что для этого нужно? создаем новый проект пустой, проект будет пусть консольный вин 32 и создаем в нем файл main.cpp со следующим кодом:
#include <iostream> using std::cout; using std::endl; #include "function.h" int main() { func_hellow(); func_privet(); return 0; }
Что мы сделали мы включили в проект заголовочный файл function.h в котором находятся определения функций и вызываем функции, конечно если мы сейчас это все скомпилируем, то у нас вылезет ошибка так как мы реально не добавили файл function.h ну и не добавили саму библиотеку в проект, что для этого нужно, а все очень просто копируем файлы MyNewLib.lib и файл function.h в папку с файлами нашего проекта – это та папка где находится наш файл main.cpp, просто полазте по каталогам проекта поищите. И так вы их скопировали в папку с файлами проекта и что дальше? А дальше нужно их уже включить в проект, я сам например не знал как включать файлы копировал их в папку и ничего не происходило, они не добавлялись просто нужно как оказывается их включить, есть горячие клавиши Shift+Alt+A или смотрите рисунок куда нужно заходить, просто для новичков это бывает проблема добавить либу в проект, кругом пишут скопируй либу в проект и все, но забывают добавить что ее нужно еще и включить в проект.
