程序、运行时环境与 AbstractMachine:从 RTE 到 AM 运行时环境一个事实是, 应用程序的运行都需要运行时环境的支持, 包括加载, 销毁程序, 以及提供程序运行时的各种动态链接库(你经常使用的库函数就是运行时环境提供的)等. 为了让客户程序在NEMU中运行, 现在轮到你来提供相应的运行时环境的支持了。 程序的运行时环境(Runtime Environment)是指在程序执行时提供的软件和硬件环境,它支持程序的运行并提供必要的服务和资源。运行时环境通常包 2024-08-22 Computer Architecture #ysyx #AbstractMachine #runtime environment
NEMU 指令扩展实践:添加更多 RISC-V 指令 前言上一篇博客中介绍了如何添加指令,这篇将会熟悉这个过程,学习以及添加更多的指令。 所有程序在am-kernels/tests/cpu-tests/tests 目录下有很多测试: 12345678910111213141516171819202122232425262728293031323334353637ls -ltotal 140-rw-rw-r-- 1 l 2024-08-21 Computer Architecture #NEMU #RISC-V #instruction set
NEMU 指令扩展入门:INSTPAT 与执行逻辑 前言前面讨论了 nemu 执行一条指令的过程,在源码中,可以看到它目前可以解析的指令有限: 1234567891011121314151617181920212223242526272829static int decode_exec(Decode* s) { int rd = 0; word_t src1 = 0, src2 = 0, imm = 0; s-> 2024-08-14 Computer Architecture #NEMU #RISC-V #instruction set
NEMU 指令执行流程:取指、译码与执行主线 NEMU 架构NEMU 是一个CPU模拟器,它使用 C语言 完成了模拟取指令、指令解析、指令执行、寄存器、初始化等,可以执行很多平台的任何二进制指令。 初始化nemu main 中进行了一些初始化,这里只研究关键的初始化: 12345678910111213init_mem();/* Initialize devices. */IFDEF(CONFIG_DEVICE, init_device( 2024-08-13 Computer Architecture #NEMU #emulator #instruction execution
NEMU 代码导读:项目构建、调试入口与核心模块 项目构建首先得了解一些 make 的行为,重要的就是查看make 的行为以及make 的子进程如何与系统进行交互,比如 : strace -f make make -nB # 只打印命令不执行 B强制构建 make -d make -debug=v 具体RTFM。 nemu/Makefile SRCS: 和YEMU差不多, 是需要编译的源文件 CFLAGS: 2024-08-12 Computer Architecture #ysyx #NEMU #emulator
程序执行与模拟器:freestanding 环境下的运行机制 freestanding 运行时环境示例程序: 1234567#include <stdint.h>void _start() { volatile uint8_t* p = (uint8_t*)(uintptr_t)0x10000000; *p = 'A'; while (1) ;} 编译:rv32gcc 2024-08-09 Computer Architecture #runtime #emulator #freestanding
从 C 语言到二进制程序:预处理、编译、汇编与链接 预处理123456789101112#include <stdio.h>#define MSG \ "Hello \World!\n"int main() { printf(MSG /* "hi!\n" */);#ifdef __riscv printf("Hello RISC-V!\n");# 2024-08-08 Systems Programming #C #compiler #ELF
Linux 101:适合入门的学习资料与实践路径 前言本文是对 Linux101 这本及其优秀的 Linux 入门的一些心得体会,链接:Linux101 软件安装和文件操作apt建议用 apt 安装,apt 作为前端,它会自动处理软件包之间的依赖关系、升级软件包以至升级发行版,自动处理升级发行版所需的依赖关系等等。但是需要明白,真正执行安装软件的是 dpkg。 另外,dpkg -i 也可以安装软件,但是它不会处理依赖,如果安装报错,应该使用 2024-08-07 Tooling #learning roadmap #Linux #shell
PA1 复盘:监视器、表达式求值与调试体验 一、单步执行单步执行就是传入 1,让它执行一个指令就好。 12345678static int cmd_si(char* args) { if (args == NULL) cpu_exec(1); else cpu_exec((uint64_t)(atoi(args))); return 0;} 其中源码这里接受的是一个 ui 2024-08-05 Computer Architecture #ysyx #NEMU #PA1
表达式求值实现:词法分析、中缀转后缀与测试 一、构建 tokens所有的代码基本上都在 sdb.c中实现,没有轮子自己造。 构建 tokens 这步,基本上就是实现一个简单的词法分析器,从 args[0]开始,一个一个模式进行识别。比如对于表达式: 0x80100000+ ($a0 +5)*4 - ( $ t1 + 8) + 32 首先就要能识别出 0x开头的 16进制数、$开头的寄存器,识别出来以后,我们首先就是把这些能计算的 2024-07-22 Systems Programming #ysyx #expression evaluator #parser