Задать вопрос
  • Как управлять кэшем процессора?

    jcmvbkbc
    @jcmvbkbc
    "I'm here to consult you" © Dogbert
    Есть программа - она выполняет математические операции. ОЗУ занимает очень много. Больше 25 Гб. Но есть запас ОЗУ.
    Когда в кэш процессора данные подгрузились - операции выполняются быстро.

    Я тоже хочу кэш процессора больше 25ГБ, но в твоём случае кэш процессора точно ни при чём.

    Вопрос - что делать с кэшем?

    Для начала понять, что такое "кэш процессора", сколько его и как он работает. Потом понять, как выделяется физическая память приложению, откуда она берётся и куда она уходит, если ею не пользоваться.

    Если хочется застолбить массив в физической памяти -- смотреть на VirtualLock.
    Ответ написан
    5 комментариев
  • Как вывести символ через канал?

    jcmvbkbc
    @jcmvbkbc
    "I'm here to consult you" © Dogbert
    В каком месте может быть ошибка?

    man pipe: писать можно только в fd[1], читать -- только из fd[0].
    Канал однонаправленный, т.е. для двунаправленной коммуникации нужно открывать два канала.
    Должно быть так:
    #include <stdio.h>
    #include <unistd.h>
    #include <stdlib.h>
    #include <sys/wait.h> 
    
    int main(int argc, char **argv) {
    
            int fd0[2], fd1[2], n;
            char c;
            pipe(fd0);
            pipe(fd1);
    
            if (!fork()) {
                    close(fd0[0]);
                    close(fd1[1]);
    
                    write(fd0[1], "c", 1);
    
                    sleep(1);
    
                    if ((n = read(fd1[0], &c, 1)) != 1) {
                            printf("Дочерний процесс. Результат чтения: %d\n", n);
                            exit(0);
                    }
    
                    printf("Дочерний процесс прочитал: %c\n", c);
                    exit(0);
            }
            close(fd1[0]);
            close(fd0[1]);
                                                                                                                                                                                                                                                                              
            write(fd1[1], "p", 1);
            if ((n = read(fd0[0], &c, 1)) != 1) {
                    printf("Родительский процесс. Результат чтения: %d\n", n);
                    exit(0);
            }
    
            printf("Родительский процесс прочитал: %c\n", c);
            exit(0);
    
            return 0;
    }
    Ответ написан
    3 комментария
  • Максимальное кол-во папок в одной папке (ext4)?

    jcmvbkbc
    @jcmvbkbc
    "I'm here to consult you" © Dogbert
    Максимальное кол-во папок в одной папке (ext4)?

    Нет ограничения.
    Есть ограничение на общее количество файлов в одной файловой системе -- 2^32, их все можно свалить в один каталог.
    Ответ написан
    4 комментария
  • Как восстановить ветку из слияния?

    jcmvbkbc
    @jcmvbkbc
    "I'm here to consult you" © Dogbert
    есть 2 ветки dev и feature-3. я слил ветку dev с feature-3 и запушил dev ветку на remote.
    Можно ли ветку feature-3?

    Если первая половина выглядела так:
    $ git checkout dev
    $ git merge --no-ff feature-3
    $ git push remote HEAD

    либо git merge feature-3 на втором шаге, и мёрж при этом не был фаст-форвардом, то вторую половину можно сделать так:
    $ git checkout dev
    $ git pull remote dev
    $ git checkout HEAD^2 -b feature-3

    Идея в том, что <id-мёржа>^<N> -- это голова ветки № N участвовавшей в этом мёрже.

    Если мёрж был фаст-форвардом, то dev и feature-3 -- это одно и то же.
    Ответ написан
    1 комментарий
  • Почему компиляция кода заканчивается с ошибкой?

    jcmvbkbc
    @jcmvbkbc
    "I'm here to consult you" © Dogbert
    Хотя большинство этих пакетов установлено, они почему-то не определяются.

    Чтобы они определялись должны быть установлены соответствующие -dev пакеты (т.е., например, чтобы определялся libpcsclite должен быть установлен libpcsclite-dev).
    Ответ написан
  • Как можно запретить merge ветки staging в ветку master?

    jcmvbkbc
    @jcmvbkbc
    "I'm here to consult you" © Dogbert
    Так-же если допустим нечаянно смержили ветку staging в master, как этот косяк откатить.

    git revert -m 1 <id-of-merge-commit>
    -m 1 означает, что при мёрже мастер был первой смёрженной веткой.

    По сути в master появилась куча разбросанных по времени коммитов, а как откатить я не знаю.

    Это только выглядит так, потому что по умолчанию git log сортирует коммиты по времени. Но содержимое смёрженных веток на самом деле нигде не перемешивается, git reset или git revert коммита соответствующего мёржу отменяет все коммиты из смёрженной ветки.
    Ответ написан
    Комментировать
  • Как поставить драйвера на сетевую карту Intel i219V?

    jcmvbkbc
    @jcmvbkbc
    "I'm here to consult you" © Dogbert
    поставил Debian

    Какую версию?

    Сетевой контроллер: Intel i219V
    При установке ОС сетевую карту не нашел

    Эта сетевуха давно поддерживается в linux mainline.
    Что в dmesg после загрузки?
    Ответ написан
  • Зачем нужен fakeroot, при сборке deb-пакета?

    jcmvbkbc
    @jcmvbkbc
    "I'm here to consult you" © Dogbert
    fakeroot делает так, что приложение, которое не имеет прав рута, но ожидающее, что оно имеет эти права, не завершается с ошибкой из-за недостатка прав, при выполнении некоторых функций, а продолжает работать. Т.е. он "проглатывает" ошибки вызванные недостатком привилегий.

    Например, обычный пользователь не может сделать chowh root:root для файла, которым он владеет:
    $ chown root:root test ; echo $?
    chown: changing ownership of 'test': Operation not permitted
    1

    fakeroot даёт приложению видимость того, что ошибки не происходит. Владелец файла при этом, конечно, не меняется:
    $ fakeroot chown root:root test ; echo $?
    0
    $ ls -la test
    -rw-rw-r--. 1 jcmvbkbc jcmvbkbc 1709 Jun  1  2011 test

    Всё.

    Это нужно для того, чтобы make install и подобные скрипты, меняющие права файлов, которые они устанавливают в систему, не завершались после первой ошибки при запуске под непривилегированным пользователем, а отрабатывали до конца. Правильность владельцев и разрешений устанавливаемых на файлы при этом должна обеспечиваться другими средствами.

    Почему в мануалах пишут так:
    fakeroot dpkg-deb --build ./path
    а вот так тоже работает:
    dpkg-deb --build ./path

    Потому что во время сборки пакета не выполнялись команды, которым нужны привилегии, либо ошибки их выполнения были проигнорированы.

    Андрей Буров, pfg21 всякие "песочницы", "не пускает во внешний мир", "скрипт может раскидать бинарники по системе, песочница его не выпустит" применительно к fakeroot -- это фантазия. Сборка пакетов может и должна производиться под обычным пользователем. Штатная система привилегий заботится о том, что приложение, запускаемое под непривилегированным пользователем ничего не сломало.
    Ответ написан
    8 комментариев
  • Как увидеть входные параметры ассемблер?

    jcmvbkbc
    @jcmvbkbc
    "I'm here to consult you" © Dogbert
    Есть исходный код на Си, который вызывает функцию на ассемблере, но передаваемые аргументы как получить,

    Гуглить словосочетание "имя целевой процессорной архитектуры" + ABI.
    Например: x86_64 abi, x86 abi, arm64 abi...
    В найденном документе искать раздел "parameter passing", "function calling" или с похожим по смыслу названием.
    Ответ написан
    2 комментария
  • Пеhенос скомпилированного модуля ядра Linux на другую машину?

    jcmvbkbc
    @jcmvbkbc
    "I'm here to consult you" © Dogbert
    могу ли я скомпилировать модуль на одной машине и просто скопировать его на остальные?

    Можешь. Но загрузить такой модуль без проблем ты сможешь только если совпадают версии ядра и основные опции в .config ядра. Ну либо если отключишь проверку версии модулей в конфиге. Иначе -- только modprobe --force.
    Ответ написан
    2 комментария
  • Ассемблер что не так с кодом?

    jcmvbkbc
    @jcmvbkbc
    "I'm here to consult you" © Dogbert
    что не так?

    В видеорежиме 100h нет гарантии, что вся видеопамять доступна одним непрерывным куском. И если вызвать функцию 0x4f01 прерывания 0x10, то она вернёт структуру, в которой указан размер окна. Мне она возвращает 64К (0x40), что существенно меньше 640 * 400 = 256000:
    0x7c00:      mov    $0x4f01,%ax
       0x7c03:      mov    $0x100,%cx
       0x7c06:      mov    $0x7c77,%di
       0x7c09:      int    $0x10
    (gdb) x/6hx $di
    0x7c77: 0x00bb  0x0007  0x0040  0x0040  0xa000  0x0000

    Чтобы обратиться к остальной видеопамяти, нужно либо переключать банки видеопамяти функцией 0x4f05, либо как-то включать линейный доступ к видеопамяти.
    Ответ написан
    Комментировать
  • Почему программа вылетает при попытке выделить память с помощью new?

    jcmvbkbc
    @jcmvbkbc
    "I'm here to consult you" © Dogbert
    Используй valgrind, он тебе покажет, где ты обращаешься мимо выделенной памяти или используешь неинициализированные переменные.
    Ответ написан
    1 комментарий
  • Как разобрать унарный оператор в обратной польской нотации?

    jcmvbkbc
    @jcmvbkbc
    "I'm here to consult you" © Dogbert
    Все хорошо, но алгоритм не верно работает с унарным отрицанием.

    Он и не рассчитан на работу с унарным отрицанием.
    Как исправить?

    Проще всего -- введя для унарного отрицания специальный символ, отличный от остальных операторов.
    Иначе придётся вводить дополнительное состояние -- был ли предыдущий символ и был ли он оператором, и если так, то трактовать непосредственно следующий за ним оператор '-' как унарный.
    Ответ написан
    2 комментария
  • Assembler как работать с видеопамятью в защищенном режиме?

    jcmvbkbc
    @jcmvbkbc
    "I'm here to consult you" © Dogbert
    почему-то закрашивается лишь меньшая часть екрана.

    По многим причинам:
    - ты забыл загрузить ds и es после перехода в защищённый режим
    - тебе нечем их загрузить, поскольку в gdt нет сегментов доступных для записи
    - адрес видеопамяти -- 0xa0000, а на 0xa000 как у тебя
    Ответ написан
    4 комментария
  • Ассемблер как работает адресация в защищенном режиме?

    jcmvbkbc
    @jcmvbkbc
    "I'm here to consult you" © Dogbert
    Вся проблема в том что не понимаю я структуры дескриптора..

    https://en.wikipedia.org/wiki/Global_Descriptor_Table в чём сложность?

    db 0xFF, 0xFF, 0x00, 0x00, 0x00, 10011010b, 11001111b, 0x00

    Segment limit: 0xfffff
    Base address: 0x00000000
    Type: 0xa
    S: 1
    DPL: 0
    P: 1
    A: 0
    DB: 1
    G: 1
    Т.е. этот сегмент действительный (P = 1), не системный (S = 1), начинается с адреса 0, покрывает 4Г, исполняемый и доступный для чтения (Type = 0xa), доступен из кольца защиты 0 (DPL = 0), не читанный (A = 0), со страничной гранулярностью (G = 1).

    Я не могу понять именно как происходит этот прыжок
    jmp 00001000b:pm_entry
    use32
    pm_entry:

    В cs попадает 0x8, т.е. CPL = 0, использовать 1ю запись в GDT, в pc -- pm_entry.
    Ответ написан
    Комментировать
  • Как вывести фрагмент из текстового файла в BASH?

    jcmvbkbc
    @jcmvbkbc
    "I'm here to consult you" © Dogbert
    #! /bin/sh
    
    TOP=$(($1 + 1))
    BOT=$(($3 + 1))
    
    LEFT=$2
    WIDTH=$(($4 - $2 + 1))
    
    sed -n "$TOP,$BOT s/.\{0,$LEFT\}\(.\{0,$WIDTH\}\).*$/\1/p"

    $ ./win.sh 1 3 3 7
    У попа была собака,
    Он её любил.
    Она съела кусок мяса.
    Он её убил.
    её лю
     съел
    её уб
    $
    Ответ написан
    Комментировать
  • Проблема тактирования карты?

    jcmvbkbc
    @jcmvbkbc
    "I'm here to consult you" © Dogbert
    НО ничего в таком случае не работает

    А с оригинальной формулой -- работает? Каковы значения sys_clk, F, D и baudrate?
    Ответ написан
    1 комментарий
  • Массивы char в c++?

    jcmvbkbc
    @jcmvbkbc
    "I'm here to consult you" © Dogbert
    Почему выходит ошибка (error C2131) при использование в rev_list[n]?

    Потому что n -- не константа.
    Попробуй так, что ли:
    #include <iostream>
    #include <cstdlib>
    #include <cmath>
    
    using namespace std;
    
    int main() {
        char list[] = "asdf";
        const int n = sizeof(list);
        char rev_list[n];
        
        cout << rev_list;
    
        return 0;
    }
    Ответ написан
    Комментировать
  • Где посмотреть номера системных вызовов ядра Linux?

    jcmvbkbc
    @jcmvbkbc
    "I'm here to consult you" © Dogbert
    - старое архитектурно-специфичное представление (определения в arch/*/include/uapi/asm/unistd.h, на примере MIPS)
    - старое архитектурно-независимое представление (определения в include/uapi/asm-generic/unistd.h, ими пользуется, например, ARM64)
    - новое представление (отдельный файл определений из которого генерируются заголовочные файлы),
    Ответ написан
    Комментировать
  • Как изменить вектор внутри map c++?

    jcmvbkbc
    @jcmvbkbc
    "I'm here to consult you" © Dogbert
    мне нужно обратиться к вектору по его ключу и изменить размер. Как мне это сделать?
    map<string, vector<string>> SOURCE;

    SOURCE["key"].resize(new_size);
    Ответ написан