А если принять к факту, что по умолчанию в регистрах хранится значение 0x00
я попробовал ничего не записывать в регистр AH и вызвать прерывание 0x16, значит по умолчанию в регистре 0x00.
в подпрограмме read_keyboard почему то не сохраняют регистр AX
почему сохранили регистр BX - я не понял
выводится ошибка dlopen failed library libc.so.6 not found. Как исправить данную ошибку?
Возможно ли это сделать на практике?
Однако я не могу получить доступ к любой из инициированных скриптом переменных в текущем процессе. Как я понимаю, это происходит потому, что скрипт выполняется отдельным процессом, а возможности экспортировать переменную на уровень выше нет.
- кол-во обращений к кэшу, если кэш прямого отображения,
- кол-во обращений к кэшу, если кэш полностью ассоциативный.
Подскажите пожалуйста, как такое считается.
int test[512];
занимает 2048 байт памяти (sizeof(int) == 4
), тогда он полностью умещается в заданный кэш и разницы между кэшем прямого отображения и полностью ассоциативным не будет. Внутренний цикл обращается к элементам массива, лежащим в разных кэш-линиях (поскольку 16(шаг цикла) * sizeof(int) > 16(размер кэш-линии)
). т.е. каждое обращение внутреннего цикла пойдёт в память на первой итерации внешнего цикла. На второй и последующих итерациях внешнего цикла все обращения из внутреннего цикла пойдут в кэш. Т.е. всего обращений в кэш будет 9 * (512 / 16)
. Что нужно изменить в системе что-бы добиться такого поведения?
Или процесс создания linux headers настолько специфичен?
как процессор может отличить длину команды (1, 2, и 3 байт), чтобы выполнить следующую команду ?
Почему кроме команды Остановить все команды занимают 3 байта?
Как происходить выборка команды? Как найти логическую схему выборки команды?
Как реализовать на с или assembler асинхронную выборку из RAM?
memcpy
для MIPS. Этот код не выглядит асинхронным, но написан именно так (сначала групповая загрузка в разные регистры, потом изменение базового адреса загрузки, потом групповое сохранение, потом изменение базового адреса сохранения) с рассчётом на то, что процессор сможет, в том числе, перекрыть во времени операции загрузки, арифметики и сохранения данных. 00000234: xori r16,r16,32768 00000238: addi r16,r16,-32768
Подскажите пожалуйста смысл таких преобразований?
short right = acum & 65535;
. Оно нужно для того, чтобы работать с загруженными в регистры значениями не задумываясь об исходной ширине их типа данных. Т.е. (short)-1
в 64-битном регистре будет представлен как 0xffffffffffffffff, а не как 0xffff. Зачем нужны header guards если в заголовочных файлах мы пишем только объявление функции?
--with-pcre=/usr/lib64/
…
cd /usr/lib64/ \ && if [ -f Makefile ]; then make distclean; fi \ && CC="cc" CFLAGS="-O2 -fomit-frame-pointer -pipe " \ ./configure --disable-shared
--with-pcre
ожидается путь к исходникам PCRE, а не к установленным либам. И судя по этому, так оно и есть. static struct file_operations process_sched_add_module_fops = { … proc_create(PROC_CONFIG_FILE_NAME,0777,NULL,&process_sched_add_module_fops);
proc_ops
, а не на file_operations
. Компилятор должен был бы что-нибудь сказать в этом месте, ты не читаешь его предупреждения?static ssize_t process_sched_add_module_write(struct file *file, const char *buf, size_t count, loff_t *ppos)
__user
у параметра buf
. Этот буфер приходит из юзерспейса, по этой причине ты не можешь лезть в него напрямую функцией kstrtol
.