Задать вопрос
  • Модуль ядра для OpenWRT. PowerPC

    jcmvbkbc
    @jcmvbkbc
    В качестве альтернативного варианта можно разработать драйвер отдельно, а потом соответствующие патч(и) положить в каталог target/linux/mpc83xx/patches
  • Алгоритм нахождения чисел без пар из большого потока данных?

    jcmvbkbc
    @jcmvbkbc
    Непарные числа различаются по меньшей мере одним битом. Значит если мы посчитаем xor от всех чисел, в которых этот бит установлен, то результатом будет одно из непарных чисел (поскольку парные числа друг друга компенсируют, а второе непарное число не будет посчитано, т.к. этот бит в нем не установлен). Поскольку мы заранее не знаем, в каком бите будут отличаться непарные числа, будем отдельно подсчитывать результат xor для всех чисел в которых установлен 0й бит, 1й бит,… 31й бит (хотя, для чисел до 1 000 000 000 достаточно будет и 30 бит). Для этого потребуется 4 * 32 = 128 байт памяти (: Кроме того будем тащить xor вообще для всех чисел. В конце концов парные числа в нём так же друг друга компенсируют, а результатом будет число, единичные биты которого соответствуют различающимся битам непарных чисел.
    Полная рабочая программка выглядит так:
    #include <stdio.h>
    
    unsigned xor_all = 0;
    unsigned xor_bit[32] = {0};
    
    int main(void)
    {
            int i, j;
            int n, in, out1, out2;
    
            scanf("%i", &n);
    
            for (i = 0; i < n; ++i) {
                    scanf("%i", &in);
                    xor_all ^= in;
                    for (j = 0; j < 32; ++j) {
                            if (in & (1 << j))
                                    xor_bit[j] ^= in;
                    }
            }
    
            for (j = 0; j < 32; ++j) {
                    if (xor_all & (1 << j)) {
                            out1 = xor_bit[j];
                            out2 = xor_all ^ xor_bit[j];
                            printf("%d %d\n", out1, out2);
                            break;
                    }
            }
            return 0;
    }
    
  • AHCI: Проблема распознавания SATA-накопителей?

    jcmvbkbc
    @jcmvbkbc
    биты адреса начинаются с 13-го, т.е. выравнивание по границе страницы

    c 13 — это как раз по границе двух страниц.
    Как я понял комментарий со стр.9, more bits are allowed to be RW как раз относится к битам 12..4.
    Я бы получал адрес как

    uint64_t bar5 = read_pci_field(device, PCI_FIELD_BAR5) & ~0xF;

    либо перезаписывал бы его прямо в BAR с нужным выравниванием.
  • AHCI: Проблема распознавания SATA-накопителей?

    jcmvbkbc
    @jcmvbkbc
    И, кстати, из спецификации следует что выравнивание может быть и менше 4Кб:

    Base Address (BA): Base address of register memory space. This represents a
    memory space for support of 32 ports. For HBAs that support fewer than 32-ports,
    more bits are allowed to be RW, and therefore less memory space is consumed. For
    HBAs that have vendor specific space at the end of the port specific memory space,
    more bits are allowed to be RO such that more memory space is consumed.
  • AHCI: Проблема распознавания SATA-накопителей?

    jcmvbkbc
    @jcmvbkbc
    У вас лишняя единица в маске:

    uint64_t bar5 = read_pci_field(device, PCI_FIELD_BAR5) & ~0x1FFF;

    без неё работает.
  • Простая математическая задачка?

    jcmvbkbc
    @jcmvbkbc
    у двоичной записи любого простого числа в любой степени больше 1 есть 0. При умножении такого числа на само себя никогда не избавит нас от этого 0

    Это место вовсе не очевидно. Например умножение 110011 (есть нули) на 101 (есть нули) даёт 11111111 (нет нулей).
  • Оси в gnuplot,

    jcmvbkbc
    @jcmvbkbc
    border убирает подпорки по углам только при set border 0, в остальных случаях подпорки видны.
  • Какую виртуализацию выбрать?

    jcmvbkbc
    @jcmvbkbc
    KQEMU — модуль акселерации для QEMU(да, проприетарный

    GPL2 — проприетарный? Нет, я точно ничего не понимаю.
  • Какую виртуализацию выбрать?

    jcmvbkbc
    @jcmvbkbc
    для возможности, например, тестово запустить прогу на виртуальной Cisc'е, когда гость — обычная x86-ая машина

    Простите, что вы имели в виду?
    То, что с Qemu можно исполнить код специфичный для процессора, который физически отсутствует на хостовой машине.

    Т.е. когда хост — обычная x86 машина. Это опечатка или вы их реально путаете?

    Я всегда считал, что KQEMU — быстрая эмуляция(проприетарная технология)

    http://repo.or.cz/w/kqemu.git/blob/HEAD:/LICENSE

    На сайте проекта QEMU до сих указано именно «обеспечение возможности запуска», а не ускорение работы эмулятора

    У вас какая-то забавная путаница. QEMU — это и есть эмулятор. Он может работать сам по себе, ему не нужен ни KQEMU ни KVM, ни XEN; в таком режиме он программно поблочно дизассемблирует код гостевой системы и транслирует его в промежуточное представление, а дальше — в код хостовой системы, который и выполняет на хостовом процессоре. При наличии KQEMU или KVM этапы трансляции отсутствуют, код гостевой системы выполняется непосредственно хостовым процессором.
  • Какую виртуализацию выбрать?

    jcmvbkbc
    @jcmvbkbc
    для возможности, например, тестово запустить прогу на виртуальной Cisc'е, когда гость — обычная x86-ая машина

    Простите, что вы имели в виду?

    не для того QEMU интегрировали в KVM чтобы летало

    Вообще-то именно для этого. А до KVM для этого использовали KQEMU.
    Вот с XEN QEMU был интегрирован в первую очередь для поддержки полной виртуализации для гостевых систем, которые нельзя модифицировать. QEMU при этом предоставляет гостевой системе стандартные модели периферийных устройств.
  • Какую виртуализацию выбрать?

    jcmvbkbc
    @jcmvbkbc
    проект KVM модифицирует/допиливает QEMU

    Только во время выполнения гостевой системы KVM ни при чём, если архитектура гостевой системы отличается от архитектуры хостовой. С практической точки зрения — будет тормозить.
  • Какую виртуализацию выбрать?

    jcmvbkbc
    @jcmvbkbc
    KVM люблю за интеграцию с qemu(можно реализовать виртуальный ARM на SPARC'е и без модификации дистрибутива ОСи запустить на госте)

    … только это делается через TCG, а KVM тут ни при чём. KVM способен давать гостю только такой же CPU, что и на хосте.
  • Найти максимум в целых числах для n,m: n/(n+m) + (N-n)/(N-n + M-m)

    jcmvbkbc
    @jcmvbkbc
    От N и M ничего не зависит, т.к. оба слагаемых стремятся к максимуму (1) при неограниченном возрастании m и n, при условии неограниченного убывания m/n. Асимптотически максимум — 2.
    Если областью определения было бы 0 < m < M и 0 < n < N, то решение было бы при m = [M/2], n = [N/2].
  • Есть ли portable аналог __attribute__((noinline))?

    jcmvbkbc
    @jcmvbkbc
    инлайнинг функции совместно с instruction reordering-ом вызывает краши

    Если это не очень низкоуровневый аппаратно-зависимый код, то скорее всего где-то в другом месте ошибка.
    Можете продемонстрировать проблемный кусок?
  • Управление питанием в ubuntu

    jcmvbkbc
    @jcmvbkbc
    Верно, не тот каталог, переместите его в /etc/pm/config.d
    Проверьте что он запускается, поставив в качестве действия, например, touch /tmp/ac-off. Убедитесь что файлик создаётся.

    С оповещением окошком x11 или звуком тоже есть проблемы, из-за того, что скрипт запускается вне оконной сессии. Для x11 это можно победить явно задав DISPLAY, например

    DISPLAY=:0.0 xmessage '.....'

    Со звуком сильно зависит от звуковой подсистемы и того, как вы собираетесь извлекать звук.
  • OSdev, Task State Segment и стеки?

    jcmvbkbc
    @jcmvbkbc
    TSS же для этого и используют?

    Насколько мне известно, мало где его используют по прямому назначению, т.е. для переключения задач.
    Там еще есть ссылка на iomap, только она 16-битная, неужели эта карта должна быть в первых 64Кб

    В первых 64Кб TSS. Это смещение внутри TSS.
  • О чем говорят эти параметры top?

    jcmvbkbc
    @jcmvbkbc
    А ещё у них странный приоритет: 96 — слишком высокий. Откуда и зачем?
    И самое странное — размер виртуальной памяти: откуда там 4T у каждого?
  • О чем говорят эти параметры top?

    jcmvbkbc
    @jcmvbkbc
    ибо load average как бы намекает на это

    мне кажется, load average намекает на то, что сейчас 24 процесса находятся в состоянии runnable, за 5 минут до того их было вдвое меньше, а за 10 — ещё вдвое меньше.
  • Шаблоны в cpp, что и как?

    jcmvbkbc
    @jcmvbkbc
    Реализацию шаблонных методов / функций нельзя выносить в отдельный translation unit

    Тут вы неправы. При наличии явного инстанцирования из этого:
    template <typename T>
    class Q
    {
            T t;
            void f(T);
    };
    

    #include "q.h"
    
    template <typename T> void Q<T>::f(T v)
    {
            t += v;
    }
    
    template class Q<int>;
    


    получится, например, вот что:
    $ g++ q.cpp -g -c -o q.o
    $ objdump --demangle -d q.o
    
    q.o:     file format elf64-x86-64
    
    
    Disassembly of section .text._ZN1QIiE1fEi:
    
    0000000000000000 <Q<int>::f(int)>:
       0:   55                      push   %rbp
       1:   48 89 e5                mov    %rsp,%rbp
       4:   48 89 7d f8             mov    %rdi,-0x8(%rbp)
       8:   89 75 f4                mov    %esi,-0xc(%rbp)
       b:   48 8b 45 f8             mov    -0x8(%rbp),%rax
       f:   8b 00                   mov    (%rax),%eax
      11:   89 c2                   mov    %eax,%edx
      13:   03 55 f4                add    -0xc(%rbp),%edx
      16:   48 8b 45 f8             mov    -0x8(%rbp),%rax
      1a:   89 10                   mov    %edx,(%rax)
      1c:   5d                      pop    %rbp
      1d:   c3                      retq   
    


    Другое дело, что незачем это делать без веских на то причин.
  • Как подменить UID владельца файлов при монтировании NFS шары?

    jcmvbkbc
    @jcmvbkbc
    192.168.56.1:/Volumes/share1 /srv/nfs nfs -o uid=1000 0 0

    Это ведь строчка для fstab? "-o" в ней лишний.