DNK_C_C++_Go_Rust
45 subscribers
14 photos
45 links
DNK - дневник кодера С и С++
Download Telegram
Мультиплексирование с частотным разделением каналовFDM использует преимущества передачи в полосе пропускания. Спектр делится на диапазоны частот, и каждый пользователь получает эксклюзивный доступ к определенной полосе для отправки сигналов.
Мультиплексирование с ортогональным частотным разделением каналов — при OFDM полоса делится на множество вспомогательных несущих частот с независимой передачей данных.
Time Division Multiplexing (мультиплексирование по времени) — пользователям по очереди (циклически) предоставляется полная полоса пропускания на определенный интервал времени.
#13_NTWK

Мультиплексирование с кодовым разделением сигналов (Code Division Multiplexing, CDM) — разновидность связи с расширением спектра, при которой узкополосный сигнал "размывается" по более широкой полосе частот.
Несколько сигналов от разных пользователей могут использовать одну полосу частот.


CDM также называют CDMA (Code Division Multiple Access) - множественным доступом с кодовым разделением каналов.
#14_NTWK

Рассмотрим аналогию, которая наглядно показывает разницу между различными видами мультиплексирования.

Представим зал ожидания в аэропорту и множество беседующих между собой пар людей. При этом:

- TDM соответствует тому, что пары разговаривают по очереди;
- FDM — это пары разговаривающие в разных тональностях (некоторые высоким голосом, некоторые низким);
- CDMA соответствует тому, что все пары общаются на разных языках.
WDM (Wavelength Division Multiplexing — мультиплексирование по длинам волн)разновидность FDM, при которой несколько сигналов мультиплексируется в одном оптоволокне при помощи различных длин волн света.
#15_TOS

МЕНЕДЖЕРОМ или ДИСПЕТЧЕРОМ ПАМЯТИ называется часть ОС, которая управляет иерархией памяти или ее частью.

Менеджер памяти предназначен для управления памятью и должен следить за тем, какие части памяти используются, выделять память процессам, которые в ней нуждаются, и освобождать память, когда процессы завершают свою работу.
#16_TOS

АДРЕСНОЕ ПРОСТРАНСТВО — набор адресов, который может быть использован процессом для обращения к памяти.
#17_TOS

СВОПИНГ — размещение в памяти всего процесса целиком, запуск этого процесса на некоторое время, а затем сброс на диск (ПЗУ).
#18_SYSCL_TOS

Отличительной чертой модели ввода-вывода в UNIX системах является понятие УНИВЕРСАЛЬНОСТИ ВВОДА-ВЫВОДА.
Это означает, что одни и те же системные вызовы (open(), read(), write(), close() и т.д.) используются для выполнения ввода-вывода во всех типах файлов, включая устройства (учитывая, что в UNIX системах все - в том числе и устройства представляются в виде файла).

По сути, ядро выдает один тип файлапоследовательный поток байтов, к которому, в случае файлов на дисках, дисков и ленточных накопителей, можно получить произвольный доступ с помощью системного вызова
lseek()

.
#19_TP_BASH

ФИЛЬТР — часто обозначает программу, считывающую вводимые в нее данные из stdin, выполняет преобразования этого ввода и записывает преобразованные данные в stdout.

Примеры программ-фильтров:
cat,
grep,
tr,
sort,
wc,
sed,
awk.
#20_TOS

ПРОЦЕСС в LINUX — экземпляр выполняемой программы.

Когда программа выполняется, ядро загружает ее код в виртуальную память, выделяет память под переменные программы и определяет учетные структуры данных ядра для записи различной информации о процессе (имеются в виду идентификатор процесса, код завершения, пользовательские и групповые идентификаторы).

С точки зрения ядра процессы — объекты, между которыми ядро должно делить различные ресурсы компьютера.

В случае с ограниченными ресурсами, например памятью, ядро изначально выделяет некоторый их объем процессу и регулирует это выделение в ходе жизненного цикла процесса, реагируя на потребности процесса и общие потребности системы в этом ресурсе.
Когда процесс завершается, все такие ресурсы высвобождаются для повторного использования другими процессами.
Другие ресурсы, такие как время центрального процессора и сетевой трафик, являются возобновляемыми, но должны быть поровну поделены между всеми процессами.
#21_TP_TOS

МОДЕЛЬ ПАМЯТИ ПРОЦЕССА в LINUX.
Процесс логически делится на следующие части, известные как сегменты:
- ТЕКСТ — инструкции программы;
- ДАННЫЕ — статические переменные, используемые программой;
- ДИНАМИЧЕСКАЯ ПАМЯТЬ (куча) — область, из которой программа может динамически выделять дополнительную память;
- СТЕК — часть памяти, которая может расширяться и сжиматься по мере вызова
функций и возвращения из них и которая используется для выделения хранилища
под локальные переменные и информацию о взаимосвязанности вызовов функций.
#22_TOS_SYSCL

СОЗДАНИЕ ПРОЦЕССА И ВЫПОЛНЕНИЕ ПРОГРАММЫ в LINUX.

Процесс может создать новый процесс с помощью системного вызова:
fork()

Процесс, вызывающий fork(), известен как родительский процесс, а новый процесс называется дочерним процессом.
Ядро создает дочерний процесс путем изготовления дубликата родительского процесса.
Дочерний процесс наследует копии родительских сегментов данных, стека и кучи, которые затем могут изменяться независимо от своих родительских копий. (Текст программы размещается в области памяти с пометкой «только для чтения» и совместно используется двумя процессами.)
Дочерний процесс запускается либо для выполнения другого набора функций в том
же самом коде, что и у родительского процесса, либо зачастую для использования системного вызова

execve();


с целью загрузки и выполнения совершенно новой программы.
Вызов execve( ) удаляет существующие сегменты текста, данных, стека и кучи, заменяя их новыми сегментами, основываясь на коде новой программы.
У вызова
execve( ) есть ряд надстроек в виде родственных функций библиотеки языка C с несколько отличающимся интерфейсом, но сходной функциональностью.
#23_TOS

PID — уникальный целочисленный идентификатор процесса.

PPID — у каждого процесса также есть атрибут идентификатора родительского процесса, идентифицирующий процесс, запросивший у ядра создание данного процесса.
#24_TOS

ЗАВЕРШЕНИЕ ПРОЦЕССА и КОД ЗАВЕРШЕНИЯ в LINUX.
Процесс может быть завершен двумя способами:
— запросом своего собственного завершения с использованием системного вызова
_exit();

(или родственной ему библиотечной функции exit( ));
— путем его уничтожения извне с помощью сигнала.

В любом случае процесс выдает код завершения, небольшое неотрицательное целое число, которое может быть проверено родительским процессом с использованием системного вызова
wait();


В случае вызова _exit( ) процесс явным образом указывает свой собственный код завершения.
Если процесс уничтожается сигналом, код завершения устанавливается по типу сигнала, уничтожившего процесс.


По соглашению, код завершения 0 служит признаком успешного завершения процесса, а ненулевое значение служит признаком возникновения какой-то ошибки.
Большинство оболочек позволяют получить код завершения последней выполненной программы с помощью переменной оболочки по имени $?.
#25_TOS

ПРОЦЕСС INIT в LINUX.

При загрузке системы ядро создает особый процесс, который называется

init — «родитель всех процессов».

Он ведет свое происхождение от программного файла
/sbin/init.


Все процессы в системе создаются (используя fork()) либо процессом init, либо одним из его потомков.
Процесс init всегда имеет идентификатор процесса 1 и запускается с правами доступа суперпользователя.
Процесс init не может быть уничтожен (даже привилегированным пользователем) и завершается только при завершении работы системы.
Основной задачей init является создание и слежение за процессами, требующимися работающей системе.
#26_TOS

ПРОЦЕССЫ-ДЕМОНЫ в LINUX.

Демон — процесс специального назначения, создаваемый и управляемый системой точно так же, как и другие процессы, но отличающийся от них следующими характеристиками:

— процесс-демон долгоживущий, зачастую запускается при загрузке системы и продолжает свое существование до тех пор, пока работа системы не будет завершена;

— запускается в фоновом режиме, и у него нет управляющего терминала, с которого он мог бы считывать ввод или на который он мог бы записывать вывод.

К примерам процессов-демонов относятся syslogd, который записывает сообщения
в системный журнал, и
httpd, который обслуживает веб-страницы посредством протокола передачи гипертекста — Hypertext Transfer Protocol (HTTP).
#27_Cpp

ПЕРЕГРУЗКА ОПЕРАТОРОВ в С++.
Важно помнить:
  operator=( ) — оператор присваивания; 
operator[ ]( ) — индекса;
operator()( ) — вызова функции;
operator->( ) — выбора члена;

перегружаются через методы класса — это требования языка С++.

Унарные операторы:
  operator+( ); — унарный плюс;
operator-( ); — унарный минус;
bool operator!( ); — оператор логического НЕ.

так же лучше перегружать через методы класса.

Перегрузку бинарных операторов (операторов с двумя операндами), которые изменяют левый операнд:
  operator+=( );
operator-=( );
operator*=( );
operator/=( );
operator%=( );

лучше выполнять через методы класса.

Перегрузку бинарных операторов (операторов с двумя операндами), которые не изменяют левый операнд:
  operator+( );
operator-( );
operator*( );
operator/( );
operator%( );

лучше выполнять через обычные или дружественные функции.


Операторы ввода (>>) и вывода (<<)
  std::istream& operator» (std::istream &in, T& t);
std::ostream& operator« (std::ostream &out, const T& t);

нельзя перегружать через методы класса потому что они должны возвращать объекты класса std::istream и std::ostream соответственно.
Их перегрузку лучше реализовывать через обычные или дружественные функции.
#28_CMPL_DBG_TOS_TP

ELF64 — Executable and Linkable Format 64-bit (выполняемый и связываемый формат для 64 битной системы).