xv6-lab4-traps
什么是trap?trap:CPU暂时搁置普通指令的执行,强制将控制权转移到处理该事件的特殊代码上,以下三种情况都会出现trap:
系统调用:用户程序执行ecall(用户程序不直接使用设备)
异常:用户或内核执行非法的事情(杀死违规例程)
设备中断:磁盘读写完成中断、时钟中断(用户程序不直接使用设备)
trap的一些说明
trap发生时正在执行的代码随后需要恢复
trap对于正在执行的代码是透明的
trap是怎么执行的?trap的逻辑流程
trap将控制权转移到内核
内核保存寄存器和其他状态
内核执行适当的处理程序代码
内核恢复保存的状态并从trap中返回
原始代码从它停止的地方恢复
trap的实际流程
RISC-V CPU采取的硬件操作
为内核C代码执行而准备的汇编程序集“向量”
决定如何处理陷阱的C陷阱处理程序
系统调用或设备驱动程序服务例程
trap的举例说明初始 xv6 启动后,运行第一个程序 shell , shell 运行在用户态,想要输出一些字符串到命令行时,执行系统调用 wirte 切换到内核,输出字符串之后再切换回用户态
trap的具体过程(gdb调试说明) ...
xv6-lab2:系统调用
https://xv6.dgs.zone/labs/requirements/lab2.html
阅读在你开始写代码之前,请阅读xv6手册《book-riscv-rev1》的第2章、第4章的第4.3节和第4.4节以及相关源代码文件:
系统调用的用户空间代码在 user/user.h 和 user/usys.pl 中。
内核空间代码是 kernel/syscall.h 、 kernel/syscall.c 。
与进程相关的代码是 kernel/proc.h 和 kernel/proc.c 。
xv6手册阅读 理论篇
操作系统应该需要满足的要求
多路复用:可以支持多个进程,让进程分时复用计算机的资源
隔离:进程出错时,不能影响不依赖于它的进程,不影响操作系统
交互:不同进程之间可以进行合理可控的交互
为什么需要操作系统?而不是直接将系统调用设计成一个库?什么时候可以设计成一个库?
直接用上面的操作系统需要满足的要求来回答即可:库函数实现无法满足多路复用、隔离
不满足多路复用:不能保证进程定期放弃 CPU
不满足 ...
常用软件
日常软件snipaste截图软件
F1:截图
F3:将粘贴板上的任何东西编程贴图(如下图)
笔记软件Typora这款软件是我最开始接触 markdown 语法时
现在用于写博客,主要是方便传图片
Obsidian这个主要用于做笔记
如果有必要写成博客,再转移到 Typora 上,顺便复习一遍
编程软件VSCode用习惯了,学长以及实验室大家都用这个,方便连服务器
看论文Zotero大家都推荐,也就用了,也懒得换了
电机控制
为什么要写这个笔记?本人基础很菜,看书痛苦不堪,但更不喜欢听课,网上资料难得,所以想要记录下自己学习本课程时,从一个菜狗逐步摸索的过程
本笔记的思路借鉴于OSTEP,希望呈现出一个渐进的过程,而不是直说结论;致敬OSTEP,如果每本教材都能有如此质量,你会觉得知识很简单
为什么只有两章?因为后面的我还没学
声明:
我不能完全保证正确,因为我是菜狗
我的符号可能和教材不一样,因为我感觉教材的符号标的不好
简单的图片我希望自己画,但是太耗时间,只能拍书上的照片
考试出分:期末考了 60+ ,说实话超出我的预期,我的目标是不挂科的,毕竟只是考试前突击了下(需要一个好老师,不那么在乎课堂表现;需要一个 hxd 教你怎么做实验、写报告)
第二章电机负载系统基础电机负载系统的动力学方程
先推导单轴系统,再推导多轴系统到单轴系统的等效
以下图为例, $T_e$ 为电机给传动轴的电磁转矩, $T_L$ 为负载给传动轴的负载转矩, $n$ 为转速,则转动角速度 $\Omega = \frac{2\pi n}{60}$
由转动定律可得 $T_e - T_L = J\frac ...
OSTEP虚拟化内存
内存虚拟化
代码随想录-刷题总结
代码随想录刷题总结
设计模式
设计模式学习
STL常用命令自查
STL常用命令自查
C++Primer笔记
C++Primer看书笔记
缓存系统
缓存就像电脑的“小抄”,把常用的东西放在手边,用起来更快!
项目背景介绍1 什么是缓存?用更小更快的存储设备作为更大更慢的存储设备的缓冲区,让上层访问数据时速度更快
2 为什么要实现缓存系统?现在假设一个简单的框架,即
CPU
缓存
磁盘CPU访问数据时,优先访问缓存,这个速度比直接访问磁盘快很多当缓存中不存在时,才通过缓存去磁盘中访问缓存系统旨在提高CPU访问数据的效率,从而提高整个计算机的效率
3 在什么地方加缓存在需要高速访问数据的设备和读写数据慢的设备之间
缓存系统的调度策略LRU 最近最少使用 Least recently used
假设:如果数据最近被访问过,那么将来被访问的几率也更高策略:尽可能将最近访问的数据保存在缓存中
LRU 的直接实现mermaid 图graph TD
A[请求数据] -->|缓存命中| B[返回数据]
A -->|缓存未命中| C[检查缓存是否满]
C -->|未满| D[插入数据]
C -->|已满| E[淘汰最久未使用的数据]
E --> F[插入数据]
...