Задать вопрос
Ответы пользователя по тегу Процессоры
  • Сегментация в long mode?

    jcmvbkbc
    @jcmvbkbc
    "I'm here to consult you" © Dogbert
    Русским и английским языком написано. Сегментные регистры в x64 кроме GS и FS не используются и принудительно устанавливаются в 0.

    Это какая-то неоднозначная и неточная цитата. Вот что пишет Intel Software Developer Manual 3.7.4.1 "Segmentat...:
    In 64-bit mode, segmentation is generally (but not completely) disabled, creating a flat 64-bit linear-address space. The processor treats the segment base of CS, DS, ES, SS as zero, creating a linear address that is equal to the effective address. The exceptions are the FS and GS segments, whose segment registers (which hold the segment base) can be used as additional base registers in some linear address calculations.

    Т.е. базовый адрес сегментов к которым осуществляется доступ через cs/ds/es/ss нулевой, но не сами значения селекторов. Базовый адрес, напомню, это поле в записях GDT/LDT. Селектор же (значение в сегментном регистре) выбирает запрашиваемые привилегии (младшие два бита), тип таблицы (GDT/LDT, третий с конца бит) и номер записи в таблице (все остальные биты).

    Согласись же, это совсем не то, что ты ожидал?

    Глядя на твою картинку можно сказать, что выполняется код из сегментв в шестой записи в GDT с привилегиями третьего кольца защиты, а доступ к данным через ds/es/ss/gs осуществляется через сегмент в пятой записи в GDT с привилегиями третьего кольца.
    Ответ написан
    Комментировать
  • Как работает страничная организация память?

    jcmvbkbc
    @jcmvbkbc
    "I'm here to consult you" © Dogbert
    1) Первая страница памяти отвечает за обращение к первой странице памяти вторая ко второй и так далее?

    Вопрос непонятен.

    2) Связка виртуального и физического адреса позволяет создать что-то по типу перенаправления?

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

    3) Работает ли обратная связь когда если пишу в виртуальную страницу идет перенаправление на физическую?

    Да.

    4) Для работоспособности в данном режиме надо создаться страницы в диапазоне которых лежии код программы?

    Как минимум исполняющийся в настоящий момент код.

    5) Страничная организация памяти работает паралельно с адресацией по дискриптору или это замена?

    Работает параллельно. Т.е. адрес вида сегмент:смещение сначала преобразуется в линейный адрес, который потом транслируется в физический адрес.
    Ответ написан
    3 комментария
  • Для чего в защищенном режиме добавлена страничная организацмя памяти?

    jcmvbkbc
    @jcmvbkbc
    "I'm here to consult you" © Dogbert
    зачем страничная организация памяти вобше

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

    jcmvbkbc
    @jcmvbkbc
    "I'm here to consult you" © Dogbert
    Как я понял, ядра имеют доступ только к своему L1 кэшу, а если поток будет исполняться на другом ядре, то он не увидит свои объекты, которые находятся в кэше другого ядра
    Я правильно мыслю?

    Нет. Все системы поддерживающие SMP имеют когерентный кеш. Т.е. если ядро обращается к данным, находящимся в L1 кеше другого ядра, то данные перемещаются в кеш запрашивающего ядра. См.
    Ответ написан
    Комментировать
  • Команды COSMAC ELF 1802?

    jcmvbkbc
    @jcmvbkbc
    "I'm here to consult you" © Dogbert
    Сначала идёт команда 7A - погасить лампочку. Команда загружает в регистр R0 число 2. Почему?

    Поскольку у тебя P = 0, то R(0) используется как program counter. Инструкция 7А должна его увеличить на 1, т.е. после неё в R(0) должно быть 1.

    Далее идёт команда F8 Описание этой команды M(R(P)) → D; R(P) + 1 → R(P)
    Команда F8 загружает в регистр F8 число 3, хотя команда, судя по описанию, должна прибавлять к регистру R0 число 1 и сохранять результат в R0, значит в R0 должно оказаться число 1.

    Нет, не так. Сначала команда загружается в регистры I и N, а R(0) увеличивается на 1. После этого достаётся байт из памяти по адресу R(0) и помещается в D, а R(0) увеличивается ещё на 1.

    Дизассемблированная программа:
    0: 7A -- reset Q (Q = 0)
    1: F8 -- ldi 10 (D = 10)
    2: 10
    3: B1 -- phi 1 (R(1).1 = D, т.е. R(1) = 1000)
    4: 21 -- dec 1 (R(1) = R(1) - 1, т.е. R(1) = fff)
    5: 91 -- ghi 1 (D = R(1).1, т.е. D = f)
    6: 3A -- bnz 4 (переход к адресу 4, пока D != 0)
    7: 04
    8: 31 -- bq 0 (переход к адресу 0 если Q == 1)
    9: 00
    a: 7B -- set Q (Q = 1)
    b: 30 -- br 1 (переход к адресу 1)
    с: 01
    d: 00 -- idle (никогда не попадаем сюда).


    В середине просто цикл задержки на счётчике.
    Ответ написан
    Комментировать
  • В каких процессорах есть связки инструкций?

    jcmvbkbc
    @jcmvbkbc
    "I'm here to consult you" © Dogbert
    В каких процессорах, помимо Itanium, есть связки инструкций?

    Tile (ISA), Xtensa (не ISA, но всё равно неплохое обзорное описание, искать слово FLIX).

    Все ли такие процессоры имеют в связке поле шаблона и разделители-стопы?

    Не совсем понятен вопрос. "поле шаблона" -- если имеется в виду, что в коде команды есть поле, определяющее формат команды, т.е. в том числе количество и расположение связанных опкодов -- есть в обеих этих архитектурах. Что такое "разделители-стопы"?
    Ответ написан
    Комментировать
  • Какие существуют аналоги механизма RSE процессора Itanium?

    jcmvbkbc
    @jcmvbkbc
    "I'm here to consult you" © Dogbert
    SPARC, Xtensa
    Ответ написан
    Комментировать
  • Как запустить Linux на Forth-процессоре?

    jcmvbkbc
    @jcmvbkbc
    "I'm here to consult you" © Dogbert
    Какой Debian Wheezy, там же даже MMU нет?
    Ответ написан
  • Как запустить машинный код?

    jcmvbkbc
    @jcmvbkbc
    "I'm here to consult you" © Dogbert
    $ cat > hello.S <<'EOF'
            .data
    .Lhello:
            .ascii "Hello, world\n"
    
            .text
            .global _start
    _start:
            movl    $1, %ebx
            leal    .Lhello, %ecx
            movl    $13, %edx
            movl    $4, %eax
            int     $0x80
            movl    $1, %eax
            xorl    %ebx, %ebx
            int     $0x80
    EOF
    $ gcc -m32 hello.S -nostdlib -o hello
    $ ./hello
    Hello, world
    $


    С голым машинным кодом будет сложнее, т.к. нужно будет согласовать адреса закодированные в нём с тем, что будет прописано в заголовках ELF. Можно сделать примерно такой исходник:
    .text
            .global _start
    _start:
    .incbin "code"

    в файл code поместить голый машинный код. Компилировать как в первом случае.
    Как вариант можно дамп вставить прямо в ассемблер:
    .text
            .global _start
    _start:
            .byte 0xbb, 0x01, 0x00, 0x00, 0x00, 0x8d, 0x0d, 0xb8, 
            .byte 0x80, 0x04, 0x08, 0xba, 0x0d, 0x00, 0x00, 0x00, 
            .byte 0xb8, 0x04, 0x00, 0x00, 0x00, 0xcd, 0x80, 0xb8, 
            .byte 0x01, 0x00, 0x00, 0x00, 0x31, 0xdb, 0xcd, 0x80, 
            .byte 0x48, 0x65, 0x6c, 0x6c, 0x6f, 0x2c, 0x20, 0x77, 
            .byte 0x6f, 0x72, 0x6c, 0x64, 0x0a


    Можно зайти с другой стороны и научить линукс выполнять голые бинарники. См. https://www.kernel.org/doc/Documentation/binfmt_mi...
    Ответ написан
    3 комментария
  • Верен ли такой метод измерения длинны аппаратной предвыборки данных в кэш?

    jcmvbkbc
    @jcmvbkbc
    "I'm here to consult you" © Dogbert
    к сожалению в выходном файле никаких закономерностей не обнаруживается

    А что вы ожидали там увидеть? Я бы понял, если бы вы собирались сравнить время второго доступа со временем третьего.
    Для уверенности в том, что доступ к памяти происходит где написано, не мешало бы указатели по которым вы ходите сделать volatile int *, а asm сделать asm volatile.
    Ответ написан
    5 комментариев
  • Поддерживает ли linux HIGHMEM на архитектурах с aliasing VIPT кешем?

    jcmvbkbc
    @jcmvbkbc
    "I'm here to consult you" © Dogbert
    > Из перечисленных все четыре явно не поддерживают комбинацию HIGHMEM + aliasing VIPT кеш
    MIPS вроде пофиксили:
    www.linux-mips.org/archives/linux-mips/2012-04/msg...
    хотя на их вики по-прежнему написано, что не поддерживается.
    Ответ написан