
RISC-V上的操作系统设计
文章平均质量分 95
Patarw_Li
在读小白一枚
展开
-
开发一个RISC-V上的操作系统(八)—— 抢占式多任务(Preemptive Multitasking)
在第五节的内容中,我们实现了协作式多任务,这一节我们要实现的是抢占式多任务。原创 2023-08-13 21:09:08 · 822 阅读 · 0 评论 -
开发一个RISC-V上的操作系统(七)—— 硬件定时器(Hardware Timer)
生活离不开对时间的管理,操作系统也是一样。时钟节拍(Tick)操作系统中最小的时间单位。Tick的单位(周期)由硬件定时器的周期决定(通常为1~100ms)。Tick周期越小,系统精度越高,但开销越大。原创 2023-08-13 18:34:33 · 925 阅读 · 0 评论 -
开发一个RISC-V上的操作系统(六)—— 中断(interrupt)和异常(exception)
一般来说,异常为当前执行的指令发生了“不正常的情况”,如除法指令的除数为0、缺页异常等等,异常发生后会跳转执行异常处理程序,视情况决定是否跳回发生异常的指令继续执行,如缺页异常在执行完缺页处理程序后会跳转到原指令继续执行,而非法指令引起的异常则不会跳回原指令继续执行。而中断则是在当前执行流中发生了某个外部事件,需要暂停当前执行流去处理这个外部事件,和异常一样,处理完后也要视情况决定是否返回原执行流继续执行,但是中断一般是跳回发生中断的下一条指令继续执行,除了某些多周期指令被中断后需要重新执行,如除法指令原创 2023-08-09 18:09:22 · 3330 阅读 · 0 评论 -
开发一个RISC-V上的操作系统(五)—— 协作式多任务
那么,什么是多任务呢?百度百科是这样解释的:当多任务操作系统使用某种任务调度策略允许两个或更多任务并发共享一个处理器时,事实上处理器在某一时刻只会给一件任务提供服务。因为任务调度机制保证不同任务之间的切换速度十分迅速,因此给人多个任务同时运行的错觉。因此,多任务可以看作多个任务函数的执行流,但光有多个任务还不够,还要实现任务的并发执行。原创 2023-07-30 10:48:58 · 1096 阅读 · 0 评论 -
开发一个RISC-V上的操作系统(四)—— 内存管理
操作系统将一整块内存划分了几个区域,每个区域用来做不同的事情:栈区(stack):存放函数形参和局部变量,由编译器自动分配和释放。堆区(heap):动态分配区域,由程序员申请后使用(如使用malloc函数),需要手动释放否则会造成内存泄漏。全局/静态存储区:存放全局变量和静态变量(包括静态全局变量和静态局部变量),初始化后的全局变量和静态局部变量放在.data区中,未初始化的放在.bss区中。常量区:存放常量,如一些const修饰的符号,字符串等等,并且常量区的内存是只读的原创 2023-07-29 15:10:22 · 1578 阅读 · 0 评论 -
开发一个RISC-V上的操作系统(三)—— 串口驱动程序(UART)
在写串口的驱动程序之前,我们首先要知道如何与开发板上的串口进行交互,所以我们要先看看我们riscv cpu项目是怎么实现串口模块的。原创 2023-07-23 23:13:55 · 2197 阅读 · 0 评论 -
开发一个RISC-V上的操作系统(二)—— 系统引导程序(Bootloader)
Bootloader是cpu在上电后执行的第一段代码,用于初始化各类资源,并且跳转到主程序上执行,比如初始化sp寄存器,将rom中的数据搬运到ram上,清零bss段等等。百度百科的词条中,这样解释Bootloader:“一般系统引导程序都是固化在flash中(因为ram断电即失),上电后先执行引导程序再跳转到主程序上执行:一般引导程序都是使用汇编语言编写(毕竟涉及到一些寄存器操作),下面我会写一个简单的启动程序来帮助我们初始化栈指针sp、并且跳转到主程序执行。原创 2023-07-23 11:46:46 · 2594 阅读 · 0 评论 -
开发一个RISC-V上的操作系统(一)—— 环境搭建
其中 gcc-riscv64-unknown-elf 就是我们的交叉编译工具,可以把程序编译成riscv上的可执行文件;gdb为debug工具;qemu是一个模拟器,可以模拟出riscv系统。经过处理,生成的二进制文件只含有机器指令。但此时的程序并不能直接运行。知道如何烧录程序到处理器上的话,之后操作系统的开发和验证都会方便很多。,它是一个 ELF 文件。部分的机器指令,所以用。编译后,我们可以得到。原创 2023-07-02 12:02:46 · 5739 阅读 · 7 评论