diff --git a/docs/FinalPresentation.pdf b/docs/FinalPresentation.pdf new file mode 100644 index 0000000..cbff7d5 Binary files /dev/null and b/docs/FinalPresentation.pdf differ diff --git a/docs/FinalReport.md b/docs/FinalReport.md index 5b1dcd1..40e45ed 100644 --- a/docs/FinalReport.md +++ b/docs/FinalReport.md @@ -16,6 +16,10 @@ 我们期望这个项目在短期内实现uCore的全部功能,未来能够比肩甚至取代C语言版本的uCore成为新一代的教学操作系统,使之更加简洁、安全、模块化。 +## 目录 + +[TOC] + ## 实验概述 ### 实验目标和完成情况 @@ -107,7 +111,7 @@ blog_os的内核位于低地址区,它在进入Rust前的汇编中设置了一 * 链接时由于段名称错误导致属性不正确,最终导致了PageFault * 32位跳转到64位写法不正确,链接时报错:relocation truncated to fit: R_X86_64_PC32 -###2. 设备和多核的初始化 +### 2. 设备和多核的初始化 blog_os只实现了中断处理,还没有实现对设备的操作。 @@ -292,7 +296,7 @@ Rust将C++中的RAII和移动语义发扬光大,形成了所有权机制,并 所有权机制导致的另一个结果就是Rust中的对象有严格的层级关系,上层拥有下层的所有权。这使得结构更加清晰,但丧失了一定的灵活性,而且经常出现深层嵌套。 -例如锁`Mutex`,它就“拥有”里面的具体类型T,你想访问里面的内容,就必须先从外部开锁`mutex.lock()`,如果此时没有其它人使用,就会返回一个`MutexGuard`,这个对象拥有T的“访问权”,你可以通过它操作T。当MutexGuard离开作用域销毁时,会自动调用析构函数重新给mutex上锁。 +例如锁`Mutex`,它就“拥有”里面的具体类型T,你想访问里面的内容,就必须先从外部开锁`mutex.lock()`,如果此时没有其它人使用,就会返回一个`MutexGuard`,这个对象拥有T的“访问权”,你可以通过它操作T。当MutexGuard离开作用域销毁时,会自动调用析构函数给mutex解锁。 反观C,给人的感觉是所有的对象都是平行地散落在内存各处,它们之间只是互相引用,而要说谁控制谁,那只有开发者才知道。假如开发者也糊涂,就会出现内存泄漏或是重复释放。C中的锁和被锁对象往往是平级关系,上锁这件事需要文档来说明,这导致我们经常忘了上锁。 @@ -313,6 +317,7 @@ Rust提供了完善的包管理系统和模块系统,可以很方便地实现 3. 完成xv6所有功能的移植,主要是多核运行程序 4. 学习借鉴sv6搞SMP优化 5. 把进程管理和内存管理模块化 +6. 尝试和ARM组合并 ## 日志 diff --git a/src/arch/x86_64/driver/ide.rs b/src/arch/x86_64/driver/ide.rs index 0ef0da7..603a0fe 100644 --- a/src/arch/x86_64/driver/ide.rs +++ b/src/arch/x86_64/driver/ide.rs @@ -107,7 +107,7 @@ impl DmaController } //println!("insl"); for i in 0..4 { - println!("init:{}", buffer[i]); + info!("ide init: {}", buffer[i]); } } /* device is ok */