随笔分类 -  操作系统

摘要:PYNQ开发板上使用USB声卡+OSS兼容层播放音频需要经过联网装库,编译驱动模块,运行三个步骤。 联网装库 首先需要将PYNQ开发板连上网,才能安装所需的库。方法是在电脑上设置共享网络,但要注意大部分操作系统在共享网络的时候无法自己指定本机IP,所以需要修改PYNQ开发板的IP来适应电脑自动设置的 阅读全文
posted @ 2021-10-22 10:48 YuanZiming 阅读(508) 评论(0) 推荐(0)
摘要:概述 本文介绍前六个部分在移植K210开发板遇到的问题,第七章比较麻烦,就放弃了。这里选用K210开发板的原因是rCore教程提供了K210的使用教程,同时RustSBI也提供了相应的适配,使得我能够在几乎不改变内核代码的情况下进行移植,所以还是感谢rCore教程的作者、RustSBI的作者洛佳大佬 阅读全文
posted @ 2021-06-17 23:25 YuanZiming 阅读(798) 评论(0) 推荐(0)
摘要:概述 上一节介绍了文件系统格式的解析,主要涵盖文件系统的文件节点层和块缓存层;本节主要介绍块设备的处理,以及附带的命令行参数、重定向等实现。 内容 先介绍上一节跳过的文件描述符层。基本都是调用文件节点层的各类函数,这里仅给出close和创建函数: void fnode_close(File *sel 阅读全文
posted @ 2021-05-17 22:28 YuanZiming 阅读(440) 评论(0) 推荐(0)
摘要:概述 文件系统果然是内核设计中boss级别的存在,花了我大量时间。主要是对文件系统格式的解析非常繁琐,以及之前没有在sbi环境下考虑过设备中断问题,网上也没有资料,走了不少弯路。因此这一块分为两节,本节主要介绍文件系统格式的解析,本身可以独立出来作为外部程序,相当于内核文件系统的预备部分,所以是“降 阅读全文
posted @ 2021-05-07 19:47 YuanZiming 阅读(430) 评论(0) 推荐(0)
摘要:概述 第六部分是实现基本的文件数据结构、标准输入输出文件和管道文件。相对来讲比较简单,不过因为每个进程的文件描述符表需要用一个既能动态扩增又能直接索引的数据结构,所以我顺便自己实现了一个简单的vector,并利用相同的思想实现了一个队列,使用非常简单,所以又把queue.h换掉了。 内容 首先是ve 阅读全文
posted @ 2021-04-10 11:04 YuanZiming 阅读(385) 评论(2) 推荐(0)
摘要:概述 第五个部分是实现进程相关的函数,相比前面几次任务难度高了不少。同时为了适应前面的内存函数,进程函数的实现基本也得靠自己了。由于用户程序增加了不少,所以我还增改了一下Makefile,并写了一个Python脚本用来生成link_app.S。 内容 首先是Makefile,之前一直是把Makefi 阅读全文
posted @ 2021-04-03 12:02 YuanZiming 阅读(334) 评论(0) 推荐(0)
摘要:概述 第四个部分是实现系统的内存管理,核心当然就是虚拟地址和物理地址空间的管理了。xv6实验三让我有了心理阴影,所以在实验前我先整理了一下源代码,把项目的结构弄清晰,后面有错的时候方便查找。然后这一章节主要分成四个部分,第一部分是给内核代码添加动态内存分配支持,使得内核可以用上链表、可变数组等数据结 阅读全文
posted @ 2021-03-20 18:17 YuanZiming 阅读(510) 评论(0) 推荐(0)
摘要:概述 第三个部分是实现一个分时多任务的系统,也就是能够在多个任务运行期间进行切换,让一个程序在等待IO时其他程序能执行而不是傻等。虽然和并行有点类似,但目前使用到的都只有一个CPU,任何时候都只有一个程序在执行。分时多任务有两种:一种是程序自己主动让出控制权,有点类似于编程语言中协程的概念;一种是由 阅读全文
posted @ 2021-02-26 22:15 YuanZiming 阅读(441) 评论(0) 推荐(0)
摘要:概述 第二部分是实现一个批处理系统。批处理系统顾名思义就是能输入好几个程序,然后对这些程序依次执行的操作系统。重点不是在批处理,而是在输入用户程序,这就要求用户程序和我们的系统有一种隔离,所以需要在这一部分的系统实现用户态和内核态的切换。 内容 这一部分的代码文件比上一部分多了好几个,大致说明一下功 阅读全文
posted @ 2021-02-24 15:22 YuanZiming 阅读(737) 评论(0) 推荐(0)
摘要:概述 最近看到清华的一个操作系统教程rCore-Tutorial-Book,和其他实验不同的是,这个教程介绍的是完全从零开始实现一个Riscv操作系统。教程所用的编程语言是Rust,但是我的Rust水平只到勉强能看懂代码的地步,所以打算用C语言照着实现一遍。虽然说是照着实现,但不同的语言还是会带来不 阅读全文
posted @ 2021-02-24 15:21 YuanZiming 阅读(2756) 评论(4) 推荐(0)
摘要:实验文档 概述 这次实验主要实现网卡驱动的一部分,文档内容非常长,实际实验不算难,跟着hint就行,但还是需要对整体框架有一定的了解。 内容 发送函数: int e1000_transmit(struct mbuf *m) { acquire(&e1000_lock); uint32 index = 阅读全文
posted @ 2021-01-13 13:33 YuanZiming 阅读(1416) 评论(3) 推荐(1)
摘要:实验文档 概述 这次实验要求实现Linux中的mmap函数的一个子集,相当于在第五次实验Lazy Allocation中加上了文件的操作。难度比较难定义,因为这个“子集”还是比较模糊的,如果仅仅只针对测试程序,做出一些简化性的假设,难度就不会太大,但如果不做这些假设,难度就会非常高。 内容 为了简化 阅读全文
posted @ 2021-01-13 10:07 YuanZiming 阅读(1400) 评论(0) 推荐(0)
摘要:实验文档 概述 这次实验涉及文件系统,重点是对inode节点的操作。 内容 Large files 这个任务主要目的是支持更大的文件。和内存映射类似,文件系统中也有一个类似“页表”的结构,每个文件(inode)都有自己的一个“页表”,维护自己文件占用的文件块。和内存不同的是,这个“页表”的级别是自定 阅读全文
posted @ 2021-01-11 22:08 YuanZiming 阅读(871) 评论(0) 推荐(0)
摘要:实验文档 概述 这次实验主要涉及锁在内核的应用,没有用到什么特别的理论知识,但是编程的时候陷阱重重,要么资源竞争,要么死锁,和实验三差不多,非常考验耐心和细心。 内容 Memory allocator 这个任务要求给物理内存分配程序重新设计锁,使得等待锁时的阻塞尽量少。可以按CPU的数量将空闲内存分 阅读全文
posted @ 2021-01-08 14:19 YuanZiming 阅读(2056) 评论(0) 推荐(2)
摘要:实验文档 概述 这次实验主要涉及多线程编程,和之前的实验不太一样,比较偏向于应用层面,除了任务一外都是在宿主机上编写多线程程序,应该是xv6不支持系统级的多线程。 内容 Uthread: switching between threads 这个任务要求对一个程序填空,这个程序在用户层面实现了多线程的 阅读全文
posted @ 2021-01-06 23:34 YuanZiming 阅读(1120) 评论(0) 推荐(0)
摘要:实验文档 概述 这次实验实现copy on write功能,和上次实验一样也是缺页中断的应用,但不同的是,这次实验涉及的物理内存和虚拟地址的操作要比上个实验多不少,因此难度也更大一些。 内容 首先是uvmcopy的部分,原来的操作是从老页表中获得虚拟地址对应的物理地址,创建一个新物理页,然后将老物理 阅读全文
posted @ 2021-01-06 17:54 YuanZiming 阅读(1299) 评论(0) 推荐(0)
摘要:实验文档 概述 这次实验主要实现Lazy allocation的功能,即进程在动态分配内存的时候先不分配,等到要用到发生缺页中断的时候再实际分配,核心是实现缺页中断的处理。xv6的文档介绍了三种缺页中断的应用,第一为Copy on write,即fork的时候先不复制内存,等到要用到发生缺页中断的时 阅读全文
posted @ 2021-01-02 16:33 YuanZiming 阅读(1223) 评论(0) 推荐(0)
摘要:实验文档 概述 这次实验内容比较分散,总体来说难度不是太高。 内容 Backtrace 要求在内核中对程序的调用栈进行遍历,输出每一级调用的返回地址。首先我们分析Riscv的栈帧结构,查看call.asm中main函数的汇编代码: void main(void) { 1c: 1141 addi sp 阅读全文
posted @ 2021-01-01 20:21 YuanZiming 阅读(1258) 评论(0) 推荐(0)
摘要:实验文档 概述 这次实验主要涉及虚拟内存的管理,重点是和页表相关的操作。个人觉得难点主要还是在调试方面,因为一旦写到什么非法内存或者哪里内存泄漏了,基本只能抓瞎。我也是参考了github上别人的代码才最终完成了实验。 内容 Print a page table 这个任务比较简单,只要仿照freewa 阅读全文
posted @ 2020-12-31 23:16 YuanZiming 阅读(4399) 评论(7) 推荐(2)
摘要:实验文档 概述 实验二主要涉及对系统函数调用过程的理解以及尝试自己手动添加系统调用。首先需要大致了解一下xv6系统调用的过程,这里以fork为例: 根据这个过程,就很容易完成本次实验了。 内容 trace 该实验需要打印其他系统调用的信息。根据上面的分析和文档说明,首先需要给user.h、usys. 阅读全文
posted @ 2020-12-31 23:14 YuanZiming 阅读(4541) 评论(0) 推荐(4)