写在前面 本随笔是非常菜的菜鸡写的。如有问题请及时提出。 可以联系:1160712160@qq.com GitHhub:https://github.com/WindDevil(目前啥也没有 引言 兜兜转转又是新的一章的开始,还是首先要看官方手册里的理论介绍和内容. 这里主要还是提纲挈领地摘抄里面的部分内容,在下面用更小的标题表现. 本章目的 本章展现了操作系统为实现“理想”而要扩展的一系列功能: 通过动态内存分配,提高了应用程序对内存的动态使用效率 通过页表的虚实内存映射机制,简化了编译器对应用的地址空间设置 通过页表的虚实内存映射机制,加强了应用之间,应用与内核之间的内存隔离,增强了系统...

  DmDCc4nle4a7   13小时前   7   0   0 嵌入式

写在前面 本随笔是非常菜的菜鸡写的。如有问题请及时提出。 可以联系:1160712160@qq.com GitHhub:https://github.com/WindDevil(目前啥也没有 编程题 第一题 扩展内核,能够显示操作系统切换任务的过程。 首先先回忆一下操作系统切换任务的过程. 因此只需要在这些关键节点加上println!即可. 首先是在Trap的时候输出,这里其余的都有了,只增加了Interrupt::SupervisorTimer的输出: //os/src/trap/mod.rs [no_mangle] ///handleaninterrupt,exception,orsys...

  DmDCc4nle4a7   5天前   21   0   0 嵌入式

写在前面 本随笔是非常菜的菜鸡写的。如有问题请及时提出。 可以联系:1160712160@qq.com GitHhub:https://github.com/WindDevil(目前啥也没有 本节重点 本章最开始的时候讲解了有类似于多道程序与协作式调度的区别. 回想上一节,我们提到的,如果我们仍然是不使用上一节实现的yeild,仍然和上上节(多道程序加载)的实现效果是一样的. 因为如果我们不主动释放CPU,任务仍然是顺序执行的. 那么并不是所有的程序员都会在写程序的时候考虑到别人.比如写单片机的代码,我使用IIC通信,我就嗯等ACK信号,我宁愿while()也不愿意放弃CPU给你. 这时候使用...

  DmDCc4nle4a7   29天前   51   0   0 嵌入式

写在前面 本随笔是非常菜的菜鸡写的。如有问题请及时提出。 可以联系:1160712160@qq.com GitHhub:https://github.com/WindDevil(目前啥也没有 下载它 随便找个地方下载,如果官网下载速度过慢: 官网 B站 微信公众号 知乎 各大软件站 这里附上我使用的版本链接VMware-workstation-full-17.5.2-23775571. 安装 以管理员身份运行 点击下一步. 接受用户协议 点击接受用户协议并且点击下一步. 选择安装位置 点击更改以修改安装位置,一般我都会安装在D盘里,并且文件目录是带有数字的命名地址. 我安装的地址是D...

  DmDCc4nle4a7   2024年08月15日   30   0   0 嵌入式

写在前面 本随笔是非常菜的菜鸡写的。如有问题请及时提出。 可以联系:1160712160@qq.com GitHhub:https://github.com/WindDevil(目前啥也没有 本节重点 主要是对 任务 的概念进行进一步扩展和延伸:形成 任务运行状态:任务从开始到结束执行过程中所处的不同运行状态:未初始化、准备执行、正在执行、已退出 任务控制块:管理程序的执行过程的任务上下文,控制程序的执行与暂停 任务相关系统调用:应用程序和操作系统之间的接口,用于程序主动暂停 sys_yield 和主动退出 sys_exit 这里主要看具体...

  DmDCc4nle4a7   2024年08月10日   46   0   0 嵌入式

导读 还是要先看官方手册. 学过DMA的同志可能比较好理解,一句话,释放CPU总线:如果把应用程序执行的整个过程进行进一步分析,可以看到,当程序访问I/O外设或睡眠时,其实是不需要占用处理器的,于是我们可以把应用程序在不同时间段的执行过程分为两类,占用处理器执行有效任务的计算阶段和不必占用处理器的等待阶段。这些阶段就形成了一个我们熟悉的“暂停-继续…”组合的控制流或执行历史。从应用程序开始执行到结束的整个控制流就是应用程序的整个执行过程。本节的重点是操作系统的核心机制—— 任务切换 ,在内核中这种机制是在 __switch 函数中实现的。任务切换支持的场...

  DmDCc4nle4a7   2024年08月08日   63   0   0 嵌入式

写在前面 本随笔是非常菜的菜鸡写的。如有问题请及时提出。 可以联系:1160712160@qq.com GitHhub:https://github.com/WindDevil(目前啥也没有 思考 上一节我们也提到了关于多道程序的放置和加载问题的事情.对比上一章的加载,我们需要把所有的APP全部都加载到内存中. 在这一节的描述中,官方文档提出了:但我们也会了解到,每个应用程序需要知道自己运行时在内存中的不同位置,这对应用程序的编写带来了一定的麻烦。而且操作系统也要知道每个应用程序运行时的位置,不能任意移动应用程序所在的内存空间,即不能在运行时根据内存空间的动态空闲情况,把应用程序调整到合适的空...

  DmDCc4nle4a7   2024年08月07日   66   0   0 嵌入式

写在前面 本随笔是非常菜的菜鸡写的。如有问题请及时提出。 可以联系:1160712160@qq.com GitHhub:https://github.com/WindDevil(目前啥也没有 导读 这里就是第三章的开头了,由于我的巨菜,导致天天半天理解不了关键点所在,唉,实在是太折磨人. 遵照上一章开头的时候的优良传统,我个人感觉每次手册给出feature都要想一想上一章对于这个功能我们是怎么实现的,现在的功能是有什么好处.这样可以加深印象. 提高系统的性能和效率是操作系统的核心目标之一,本章展现了操作系统在性能上的一系列功能改进: 通过提前加载应用程序到内存,减少应用程序切换开销 通过协作...

  DmDCc4nle4a7   2024年08月07日   49   0   0 嵌入式

写在前面 本随笔是非常菜的菜鸡写的。如有问题请及时提出。 可以联系:1160712160@qq.com GitHhub:https://github.com/WindDevil(目前啥也没有 编程题 实现一个裸机应用程序A,能打印调用栈 首先在这里卡了我很久的是调用栈保存在哪里,回想到上一部分画的图,其实就在.bss段后边. 这里注意sp寄存器是栈指针寄存器,fp寄存器是帧指针寄存器,是不一样的. 这里重提一下os/.cargo/config的内容,"-Cforce-frame-pointers=yes"代表保存栈指针: os/.cargo/config [build] target="ris...

  DmDCc4nle4a7   2024年08月07日   56   0   0 嵌入式

写在前面 本随笔是非常菜的菜鸡写的。如有问题请及时提出。 可以联系:1160712160@qq.com GitHhub:https://github.com/WindDevil(目前啥也没有 批处理操作系统的启动和运行流程 要想把本章实现的那些模块全部都串联在一起以实现运行一个批处理操作系统,回顾本章内容,思考批处理操作系统的运行流程. 可以看到本章完成的内容大概如图所示: 可以看到在内核层,最重要的就是实现了batch来加载程序和切换程序,以及trap用来处理用户层的请求. 因此,我们只需要在main.rs中添加这两个模块的初始化即可. 编写main.rs 主要是三部分: 引入上述编写模块...

  DmDCc4nle4a7   2024年08月07日   68   0   0 嵌入式

本节内容 因为risc-v存在硬件特权级机制,我们又要实现一个可以使得应用程序工作在用户级,使得操作系统工作在特权级.原因是要保证用户态的应用程序不能随意使用内核态的指令,要使用内核态的指令就必须通过操作系统来执行,这样有了操作系统的控制和检查,程序不会因为应用程序的问题导致整个操作系统都运行错误. RISC-V特权级切换 为什么要实现特权级切换 回到我们之前提到的那张图: 可以看到,对应地SEE即SupervisorExecutionEnviroment,顾名思义是在Machine机器层构建的特权级应用运行环境. 我们通过Rust-SBI建立了一个SBISupervisorBinaryInt...

  DmDCc4nle4a7   2024年08月07日   70   0   0 嵌入式

写在前面 本随笔是非常菜的菜鸡写的。如有问题请及时提出。 可以联系:1160712160@qq.com GitHhub:https://github.com/WindDevil(目前啥也没有 动机 由于WPS的提取图片需要收费,作为穷鬼的我直接在bing,键入opensourcesoftwaregetpictureformpdf. 找到这个项目:VR51/Batch-PDF-Image-Extractor:ExtractimagesfromPDFdocuments.WorksonmultipleandsinglePDFfiles(github.com) 看到这个项目的Requirements:...

  DmDCc4nle4a7   2024年08月07日   75   0   0 开源研究

写在前面 本随笔是非常菜的菜鸡写的。如有问题请及时提出。 可以联系:1160712160@qq.com GitHhub:https://github.com/WindDevil(目前啥也没有 官方文档 仍然是一上来就丢出来的官方文档. 只摘抄了我觉得有意思的部分:实现特权级机制的根本原因是应用程序运行的安全性不可充分信任。由于二者通过编译器形成一个单一执行程序来执行,导致即使是应用程序本身的问题,也会让操作系统受到连累,从而可能导致整个计算机系统都不可用了。 包括之前做MCU开发的时候,实际上都是这样的,也很难理解为什么可以做到应用是应用,操作系统是操作系统,之前使用RT-Thread做MCU...

  DmDCc4nle4a7   2024年08月07日   71   0   0 嵌入式

写在前面 本随笔是非常菜的菜鸡写的。如有问题请及时提出。 可以联系:1160712160@qq.com GitHhub:https://github.com/WindDevil(目前啥也没有 设计方法 了解了特权级机制,实际上如果要设计一个应用程序就需要保证它符合U模式的要求,不要去访问S模式下的功能,那么其实现要点是: 应用程序的内存布局 应用程序发出的系统调用 具体设计 需要添加的功能 具体实现的时候也要按照设计方法中提供的要点来进行设计: 应用程序的内存布局 设置用户库的入口位置 配置linker.ld文件,设置好用户苦在ROM中的地址 应用程序发出的系统调用 实现可以调用e...

  DmDCc4nle4a7   2024年08月07日   38   0   0 嵌入式

写在前面 本随笔是非常菜的菜鸡写的。如有问题请及时提出。 可以联系:1160712160@qq.com GitHhub:https://github.com/WindDevil(目前啥也没有 本章目的 实现批处理操作系统,每当一个应用程序执行完毕,都需要将下一个要执行的应用的代码和数据加载到内存. 应用加载机制 在操作系统和应用程序需要被放置到同一个可执行文件的前提下,设计一种尽量简洁的应用放置和加载方式,使得操作系统容易找到应用被放置到的位置,从而在批处理操作系统和应用程序之间建立起联系的纽带。 具体而言,应用放置采用“静态绑定”的方式,而操作系统加载应用则采用“动态加载”的方式 静态...

  DmDCc4nle4a7   2024年08月07日   34   0   0 嵌入式
关注 更多

空空如也 ~ ~

粉丝 更多

空空如也 ~ ~