07.0 (Russian conspect)
Познакомимся с тем, что в операционной системе называется процессом. Процесс - абстрактное понятие.
С точки зрения операционной системы это такая программа запущенная в памяти;
у которой память изолирована от других процессов. Управление происходит за счет планировщика.
У Linux у каждого процесса есть индификатор процесса (в консоли первые 4 цифры) и у каждого процесса есть хозяин.
ps -ef выдаст список процессов и в первой колонке можно увидеть имя того кто его запустил.
Интерфейс командой строки подразумевает что первое слово (то есть ps в нашем случае) это ключи а оставшиеся это модификаторы её выполнения.
В Linux есть спец каталог, который называется /proc в котором в виде файлов представлена информация о системе.
(на самом деле это не файлы, о чем говорит их нулевая длина, которую можно узнать командой -s/proc)
Нас интересуют файл под названием maps – этот файл содержит в текстовом виде списки страниц памяти, которые данному процессу доступны.
Новая вещь для командной строки – если мы запустим программу как ./donothing & (с & в конце) то мы запустим её в фоновым режиме.
Добрый shell выдал индификатор процесса чтобы мы могли им как-то управлять.
Суперпользователю также предоставляется файл pagemap -это практически все страницы памяти склеенные в кучу.
Разберем программу. В ней встречаем новый тип данных uint64_t которое представляет собой беззнаковое целое размером ровно 64 бита.
Мы загружаем процесс в память, если память которая отведена процессу доступна ему на запись то это новая память.
cppreference.com содержит полезную информацию для си.
Для разных архитектур long и char варьируются – поэтому лучше использовать std int и std uint..
unsigned – беззнаковое. Напомним, что char – числовой тип.
В си есть указатели, (традиционно * перед переменной)
Как может выглядеть указатель на функцию: 1 int (*fpointer)(int, int) = function_name;
Еще один типом составных типов данных является struct.
С точки зрения языка си это просто кусок памяти, в котором лежат данные.