• Как на самом деле работает параллелизм?

    leahch
    @leahch
    3D специалист. Dолго, Dорого, Dерьмово.
    Ну, книги Вам уже посоветовал @firedragon
    Я же хочу вкратце ответить на этот замечательный вопрос.
    Давайте разберемся с одним CPU без потоков...
    Когда процессоры были большими, а люди... В общем, на заре компухтеров был только один поток, и чтобы получить многозадачность, придумали ОС с вытеснением задач.
    Смысл в том, что когда завершается "программа", то запускается следующая в очереди (очередь с приоритетом). Задача работает до тех пор, пока не завершится.

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

    Но прерывания на ввод-вывод иногда можно ждать долго, и не дождаться. Но умные дяди придумали геренировать прерывания сами себе, от таймера. Да, в молодости это просто кварц и конденсатор, на ножку процессора. И вот, появились ОС с реальной многозадачностью, где система получает управление через сторого определенные промежутки времени - тики или клоки.

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

    Ах, да, молодость процессоров - одно прерывание на все сразу :) И крутись, как хочешь :)
    Ответ написан
    1 комментарий
  • Почему не работает автоматическая настройка времени SNTP Yealink SIP-T30?

    @Disel0k
    - сервер времени не доступен с телефона (не прописан шлюз, запрещен выход в интернет)
    - на телефоне не правильно указан часовой пояс
    - указан SNTP сервер но выбран другой способ синхронизации времени
    Ответ написан
    Комментировать
  • В чем может быть проблема маршрутизации?

    @Disel0k
    например в порядке правил фаерволла - 12 правило делает бесполезным 13... а уж что там внутри этих правил так и вообще хз.
    А в целом вопрос из серии у меня машина не едет и фото багажника, движка и запаски...
    Ответ написан
    2 комментария
  • Организация сети на 2-х роутерах с OpenWRT, как объединить подсети?

    ArteMoon
    @ArteMoon
    Развиваюсь
    Прописать на обоих роутерах маршруты в сегменты друг друга, но т.к. у вас соединение этих устройств происходит только по wi-fi и это соединение для роутера 2 является wan подключением, вероятно для него активны правила файрвола, в которые необходимо добавить исключения для сегмента роутера 1, а может быть вообще отключить.
    Ответ написан
    1 комментарий
  • Что можно делать с помощью Docker?

    karabanov
    @karabanov Куратор тега Docker
    Системный администратор
    Docker это набор сервисов и утилит созданных для удобного управления встроенными в ядро Linux технологиями Namespace (для изоляции процессов) и CGroups (для управления ресурсами).

    По мимо Docker существует ряд инструментов призванных делать тоже самое Systemd-Nspawn, LXC, Podman, etc - все они работают похожим образом и точно так же изолируют Linux-овые процессы. Docker самый распространённый и популярный из-за стандартизации процесса сборки образа и удобных утилит для управления жизненным циклом контейнера, Docker это как libc - только в разрезе контейнеров.

    Контейнер можно запустить не имея ни одного из этих инструментов с помощью утилиты unshare - она позволяет точно также управлять Namespac-ами (управлять ресурсами придётся вручную добавив процесс в CGroups).

    Контейнер это изолированный Linux процесс - соответственно запустить получиться только Linux-овый софт и больше ничего. Контейнер это не маленькая виртуальная машина, контейнер это не Java для всего. Конетейнер это только средство запустить Linux-овый процесс в изолированной среде (и, возможно, ограничить его по ресурсам), например запустить приложение требующее наличия в системе конкретных зависимостей, но отсутствующих по факту. Или запустить в целях разработки конкретную версию PHP, Python, Ruby, etc при этом избежав конфликта зависимостей и Dependency hell из-за несовместимых библиотек на хостовой машине.

    Представь себе ситуацию, когда ядро Linux загрузилось и запустило только один (какой угодно) процесс, присвоив ему PID 1 - вот так контейнер выглядит изнутри.

    PS
    Есть конетйнеры на Windows Core они запустятся только на Windows и служат для изоляции только Windows софта и для них есть набор утилит, которые распространяются в виде набора бинарных файлов тоже, почему-то, под именемем Docker (не путать с Docker-Desktop, так как Docker-Desktop - это набор сервисов позволяющих виртуализировать ядро Linux и тем самым получить возможность запустить Linux процессы на Windows или MacOS).
    Ответ написан
    Комментировать
  • Как расширить файловую систему в raid массиве?

    leahch
    @leahch Куратор тега Linux
    3D специалист. Dолго, Dорого, Dерьмово.
    Вы добавили в зеркальный RAID1 еще дисков - в результате получили кучу копий данных, вместо увеличения объема.
    Вам нужно делать массив RAID10. Другими словами: конвертировать в RAID0 и уже существующий превратить в RAID10- https://www.berthon.eu/2017/converting-raid1-to-ra...
    Бекапы настоятельно приветствуются!
    Ответ написан
    Комментировать
  • Как сделать чтобы на сенсорный экран не реагировала мышка?

    Никак. Либо написать свой драйвер сенсорного экрана.
    Ответ написан
    Комментировать
  • Как посчитать стрит флеш без одной карты на флопе?

    vabka
    @vabka
    Токсичный шарпист
    1. В колоде 52 карты.
    2. При этом две карты у тебя на руках.
    3. Стрит флеш - это когда карты идут по порядку и все одной масти.
    4. Тк у нас девятки, то мы ждём, что будут такие наборы:
    - 6, 7, 8
    - 7, 8, 10
    - 8, 10, J
    - 10, J, Q
    Всего 8 благоприятных исходов

    Сколько всего возможно исходов?
    Нам нужно посчитать, сколько всего уникальных наборов по 3 карты можно получить из колоды в 50 карт.
    Операция, которая даст нам это количество название "сочетание из 50 по 3"
    И равняется оно C(50,3) = 50! / (3! * (50 -3)!)

    Делим 8 на С(50,3) и получаем примерно 0.0408%
    Ну и шанс, что последняя карта соберёт нам стрит флеш равен 4.25% (2/47)
    Ну и если самая самая последняя карта, если предыдущая не дала нам благоприятный исход - 2/46 ~ 4.3%

    Надеюсь, что нигде не ошибся.
    Ответ написан
  • Где я мог увидеть задачу про то как объект идёт по шагам вперёд и впереди строится стена?

    Ocelot
    @Ocelot
    Задача про ангела и дьявола? https://en.wikipedia.org/wiki/Angel_problem
    Ответ написан
    Комментировать
  • Почему pn переход транзистора не уходит в короткое замыкание, ведь пластины прижаты друг к другу?

    Ocelot
    @Ocelot
    Оксид кремния тут ни при чём.
    Для начала давайте разберёмся, почему диод не проводит ток в обратном направлении, хотя p- и n- области соприкасаются. Потому что носители заряда (электроны и дырки) двигаются в разные стороны от pn-перехода, и там образуется область без носителей заряда, по сути изолятор.
    С транзистором та же картина: один из pn-переходов смещён в обратном направлении, вокруг него создаётся обеднённая область, ток не идёт. Если через базу пропускать управляющий ток, в эту область поступают электроны, проводимость восстанавливается, транзистор открывается. Это если очень упрощённо.
    Ответ написан
    4 комментария
  • Как узнать IP-адрес DNS-сервера, который использует сам провайдер?

    @AUser0
    Чем больше знаю, тем лучше понимаю, как мало знаю.
    Какие DNS-сервера ответственны за зону RU вы можете увидеть сами:
    nslookup -type=ns ru
    И будет вывод, что за зону RU ответственны a.dns.ripn.net, b.dns.ripn.net, d.dns.ripn.net, e.dns.ripn.net и f.dns.ripn.net. Именно эти сервера хранят (и отдают) информацию, какой DNS сервер ответственен за например домен второго уровня YANDEX.RU, находящийся очевидно в зоне RU.
    Спрашиваем их об этом:
    nslookup -type=ns yandex.ru a.dns.ripn.net
    Ответом будет список DNS серверов, ответственных уже за сами догадываетесь какой домен... И так далее по цепочке.
    Так можно и вашего провайдера DNS-ы узнать.
    Ответ написан
    Комментировать
  • Как виртуальные машины исполняют код и как правильно это реализовать?

    WNeZRoS
    @WNeZRoS
    Если вопрос при виртуальные машины по типу тех что используется для исполнения Java или C# кода, то инструкции в них гораздо проще. В CIL например, у большинства инструкций нет параметров, они просто берут нужные данные с конца стека. А когда параметры есть - он один: значение или токен переменной/функции.

    Можно посмотреть как C# преобразуется в инструкции виртуальной машины на sharplab.io, сопоставить и понять как оно выполняется.

    Например
    IL_0000: ldarg 1 // кладёт в стек первый аргумент
    IL_0001: ldarg 2 // кладёт в стек второй аргумент
    IL_0002: sub     // достаёт из стека два последних значения и отнимает последний от пред последнего (т.е. будет arg.2 - arg.1), результат складывается в стек
    IL_0003: brtrue.s IL_0011 // достаёт из стека значение, если оно не 0, переходит к инструкции IL_0011, если 0 исполнения идёт дальше на I_0005
    
    IL_0005: ldstr "zero" // загружает в стек строку "zero"
    IL_000a: call void System.Console::WriteLine(string) // вызывает вывод в консоль, из стека достаются N нужных значений для параметров (в данном случае 1), void функция ничего в стек не добавляет
    IL_000f: br.s IL_001b // переход (jump) к IL_001b
    
    IL_0011: ldstr "not zero" // загружает в стек строку "not zero"
    IL_0016: call void System.Console::WriteLine(string) // вызывает вывод в консоль, из стека достаётся 1 значения для параметра 
    
    IL_001b: ldstr "done" // загружает в стек строку ...
    IL_0020: call void System.Console::WriteLine(string) // ...


    Пример реализации простой виртуальной машины на основе примера выше

    (Код написан так чтобы работал, правильнее писать более безопасно и читабельнее)

    #include <stdio.h>
    
    enum Opcode {
        OP_LOAD_ARGUMENT,
        OP_LOAD_STRING,
        OP_SUBTRACT,
        OP_GOTO,
        OP_GOTO_IF_TRUE,
        OP_CALL,
        OP_RETURN
    };
    
    union Argument {
        int value;
        const void* pointer;
    };
    
    struct Instruction { 
        Opcode opcode; 
        Argument arg; 
    };
    
    void run_vm(const Instruction* instructions, const Argument* args) {
        Argument stack[16];
        
        Argument* stack_pointer = &stack[0];
        int address = 0;
    
        while(true) {
            const Instruction instruction = instructions[address];
            address++;
    
            switch(instruction.opcode) {
                case OP_RETURN:
                    return;
                
                case OP_LOAD_ARGUMENT:
                    *stack_pointer = args[instruction.arg.value];
                    stack_pointer++;
                    break;
    
                case OP_LOAD_STRING:
                    *stack_pointer = instruction.arg;
                    stack_pointer++;
                    break;
    
                case OP_SUBTRACT:
                {
                    stack_pointer--;
                    int b = stack_pointer->value;
                    
                    stack_pointer--;
                    int a = stack_pointer->value;
    
                    stack_pointer->value = a - b;
                    stack_pointer++;
                    break;
                }
    
                case OP_GOTO:
                    address = instruction.arg.value;
                    break;
    
                case OP_GOTO_IF_TRUE:
                    stack_pointer--;
                    if(stack_pointer->value != 0)
                        address = instruction.arg.value;
                    break;
    
                case OP_CALL:
                    void (* fn)(const void*) = (void (*)(const void*))instruction.arg.pointer;
                    stack_pointer--;
                    fn(stack_pointer->pointer);
                    break;
            }
        }
    }
    
    void print(const char* text) { printf("%s\n", text); }
    
    int main(int argc, char** argv) {
        const Instruction instructions[] = {
            /* 0 */ { OP_LOAD_ARGUMENT, { 0 } },
            /* 1 */ { OP_LOAD_ARGUMENT, { 1 } },
            /* 2 */ { OP_SUBTRACT, {} },
            /* 3 */ { OP_GOTO_IF_TRUE, { 0x7 } },
            /* 4 */ { OP_LOAD_STRING, { .pointer = "zero" } },
            /* 5 */ { OP_CALL, { .pointer = (void*)&print } }, // функции надо где-то регистрировать, чтобы знать сколько у них параметров и какого они типа
            /* 6 */ { OP_GOTO, { 0x9 } },
            /* 7 */ { OP_LOAD_STRING, { .pointer = "not zero" } },
            /* 8 */ { OP_CALL, { .pointer = (void*)&print } },
            /* 9 */ { OP_LOAD_STRING, { .pointer = "done" } },
            /* A */ { OP_CALL, { .pointer = (void*)&print } },
            /* B */ { OP_RETURN, {} }
        };
    
        const Argument args[] = { 
            { 100500 },
            { 777 }
         };
    
        run_vm(instructions, args);
        return 0;
    }



    Виртуальные машины для процессоров можно делать по такому же принципу, но они будут медленные и структура инструкций ограничена архитектурой процессора.
    Ответ написан
    Комментировать
  • Как сделать оповещение по почте о забитом диске на windows server?

    flapflapjack
    @flapflapjack
    на треть я прав
    программа только для мониторинга места на диске?

    Ну не знаю, скрипт на PowerShell написать и всё, тут программа то не нужна.

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

    А так для таких целей придуманы Zabbix, NagiOS. Он для вашей задачи будет слишком громоздок, но обычно на серверах мониторят не только место на диске. Заббиксом можно всю инфраструктуру сети мониторить, это комплексное средство.
    Ответ написан
    Комментировать
  • Тестер пропускной способности сетей (меди) по приемлемой цене. Есть в природе?

    @mordo445
    тестер пропускной способности сети недорого это iperf3.exe, а если вам нужен квалифаер/сертифаер для СКС, то готовьте деньги. Например,или вот, но эти без отчетов. За отчеты придется накинуть пару тысяч как за вот этот, но его я не использовал, внимательнее перед заказом.
    Ответ написан
    1 комментарий
  • Как-то можно сохранить таблицу excel в максимально упрощенном интерфейсе?

    @CBET_TbMbI
    Это вопрос не сохранения таблицы, а выбор/настройка программы для её просмотра. В экселе, если зайти в параметры, можно настроить вид ленты. Если там отключить всё, то может что-то подобное получиться. Название строк и столбцов тоже можно скрыть. Как и строку формул. Можно ли убрать остальное - не знаю. Но "файл" я точно не хочу убирать даже для теста))
    6490193945737379243158.jpeg
    Ответ написан
    2 комментария
  • Домен покупают или арендуют?

    ValdikSS
    @ValdikSS
    Разница между этими терминами юридическая, области права, а не техническая. Под арендой домена подразумевается потенциальное отсутствие имущественного права на домен.

    https://www.kolosov.info/kommentarii/priroda-prav-...
    Ответ написан
    Комментировать
  • Lenovo. Как диагностировать проблему с ноутом?

    liaFcipE
    @liaFcipE
    Какой смысл диагностировать самостоятельно, почти с 100 вероятностью проблемы железа? Даже если в теории сможете - что это даст? Вы умете в компонентный ремонт и имеете весь нужный инструмент + склад с донорскими железками? Как правило, в сервисе диагностика бесплатная.
    Ответ написан
    1 комментарий
  • В чëм сейчас пишут документацию?

    vabka
    @vabka
    Токсичный шарпист
    Я бы посмотрел в сторону latex, если формул прям много и нужна на выходе адекватная пдфка.

    Схемы - уже зависит от характера схем. Если это какие-то архитектурные диаграммы и блок-схемы с описанием алгоритмов, то я бы взял plantuml и mermaid.

    А про wysiwig бы забыл как страшный сон.
    Ответ написан
    9 комментариев
  • Как запустить OpenVPN Без шифрования и прочего?

    SignFinder
    @SignFinder
    Wintel\Unix Engineer\DevOps
    Шифрование не грузит соединение, а грузит процессор. если его хватает - никакого замедления не будет.
    Настройте Openvpn на использование udp и использование самого простого набора шифров, и поиграйтесь с включением и отключением сжатия.
    Ответ написан
    1 комментарий
  • Можно ли припаять флешку к флешке?

    Rsa97
    @Rsa97
    Для правильного вопроса надо знать половину ответа
    Можно. Но цена такой "пайки" будет на порядок-другой выше, чем цена новой флешки двойного объёма.
    Ответ написан
    Комментировать