Giter Club home page Giter Club logo

rust-based-os-comp2023's Introduction

Open-Source OS Training Comp 2023

Welcome to Open-Source OS Training Comp 2023(欢迎加入2023 年开源操作系统训练营)

重要信息

以往信息

历史

开源社区负责人

  • 李明 微信id:limingth

助教

  • 朱 懿 微信id:ZhiyuanSue
  • 闭浩扬 微信id:scpointer

技术指导委员会

  • 陈向群
  • 吴庆波
  • 潘爱民
  • 张汉东
  • 赵霞
  • 曹东刚
  • 李栋
  • 向勇
  • 陈渝
  • 李国良
  • 任炬

支持与合作单位

  • rcore-os 开源社区
  • 木兰开源社区
  • CCF开源发展委员会
  • CCF系统软件专业技术委员会
  • 清华大学
  • 北京工商大学
  • 国防科技大学
  • CSDN
  • 阿图教育
  • 鹏城实验室
  • 启元实验室
  • 中关村实验室
  • 之江实验室
  • 阿里云
  • 华为
  • 智谱 ai
  • 101 计划操作系统课程虚拟教研室
  • 上海大学开源社区

rust-based-os-comp2023's People

Contributors

allenli178 avatar aucker avatar azathoth1729 avatar chasing1020 avatar chinggg avatar chuanshanjun avatar chyyuu avatar every365 avatar jiaxianhua avatar kxxt avatar liangyongrui avatar limingth avatar moonold avatar myrfy001 avatar qobilidop avatar ronething-bot avatar sktt1ryze avatar sunrisepeak avatar teckick avatar traversalnat avatar trojanking123 avatar weijun-h avatar xushanpu123 avatar xyongcn avatar yakkhini avatar ydrmaster avatar yuoo655 avatar zhaiqiming avatar zhiyuansue avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

rust-based-os-comp2023's Issues

autograding.json没有被创建

接受assignment邀请之后在仓库下执行make setupclassroom 会在.github/workflows中创建classroom.yml文件. 使用autograding功能还需要在.github/classroom文件夹下配置一个autograding.json.

ci出错截图
屏幕截图 2022-06-28 210931

lab0 关于 shutdown 和 panic 的实现中存在可能的循环调用的问题

lab0 在 sbi.rs 中实现了 shutdown 方法来停机,该方法的代码如下:

pub fn shutdown() -> ! {
    sbi_call(SBI_SHUTDOWN, 0, 0, 0);
    panic!("It should shutdown!");
}

我理解正常情况下在执行完 sbi_call 后,程序已经停机,所以 panic! 是用于处理停机失败的情况的。但根据 lang_items.rs 中实现的 panic 方法,代码如下:

#[panic_handler]
fn panic(info: &PanicInfo) -> ! {
    if let Some(location) = info.location() {
        println!(
            "Panicked at {}:{} {}",
            location.file(),
            location.line(),
            info.message().unwrap()
        );
    } else {
        println!("Panicked: {}", info.message().unwrap());
    }
    shutdown()
}

发现调用 panic! 宏时也调用了 shutdown,这会不会存在一个循环调用的问题,从而导致不能停机?或者说是这样的循环调用是特意设计的,直到 shutdown 函数能够正常停机?

rust的mem::swap的问题

在看practical intro to macros时看到了这个操作

let mut swap_tmp = next;
for i in (0..2).rev()
    swap(&mut swap_tmp, &mut self.mem[i]);

作者声称用swap的好处是使得上面的代码也可以作用于non-copyable的类型。swap基于unsafe的操作,想问下swap这种使用方式是通常做法么?想不出对 无法copy的类型进行swap操作会用在哪里?储存引用/指针,然后直接swap引用不是更好

第零章:实验环境配置步骤推荐

推荐的步骤:

  1. Github Classroom方式进行在线OS 环境配置中的:1->2->3->4
  2. Rust 开发环境配置
    • 通过rustc --version你会发现rust应该处于nightly版本,请不要切换为stable版本,否则无法中试运行 rCore-Tutorial中执行LOG=DEBUG make run
    • 若切换为 stable 版本,请使用 rustup override set nightlyrustup default nightly切换回nightly版本
  3. Qemu 模拟器安装
  4. 此时,你的控制台显示的位置应该在/workspaces/lab0-0-setup-env-run-os1-你的github名
    • 如果你是使用github的 codespace,请不要执行试运行 rCore-Tutorial中的git clone https://github.com/LearningOS/rust-based-os-comp2022.git,因为你已经clone到codeplace环境
    • 可以直接执行 make setupclassroom_testX (该命令仅执行一次,X的范围为 1-8)配置githubclassroom 自动评分功能。
  5. 继续执行 cd os1LOG=DEBUG make run,试运行 rCore-Tutorial

第0章完成

生命周期HRTB相关的问题

生命周期中的HRTB,概括地说,应该用于哪些场景呢?
我知道在如下的场景中:

fn foo<'a,T>(f: T)
where
     T: Fn(&'a i32) -> &'a i32,
{
    let x = 0;
    f(&x);   //error: `x` does not live long enough
}

应该使用HRTB:

fn foo<T>(f: T)
where
    for<'a> T: Fn(&'a i32) -> &'a i32,
{
    let x = 0;
    f(&x);
}

但似乎省略该生命周期标注,也能有相同的效果:

fn foo<T>(f: T)
where
    T: Fn(&i32) -> &i32,
{
    let x = 0;
    f(&x);
}

所以使用HRTB的意义是什么呢?还是说,当省略闭包的生命周期参数时,隐式使用了HRTB来推导?求解惑

07.11-07.12

学习了流程控制和复合类型。
流程控制和java相比 少了括号 其他并无差别
字符串的切片没有搞懂。
元组和数组十分类似容易搞混,
结构体的失效没有搞懂

About Dockerfile

官方给的Dockerfile,其实已经比较完善了。但是,对于Ubuntu,个人觉得_Ubuntu官方的源_还是比较慢(如果不挂代理),如果网络不稳定,就很难完成环境部署,我在项目的根目录下创建了一个docker/registryList,用来存放自定义(就近)的镜像列表,然后在update前加入

ADD docker/registryList /etc/apt/
RUN sed -i.bak "1r /etc/apt/registryList" /etc/apt/sources.list

这样,在make build_docker的时候,就可以在系统update前,加入比较快和稳定的源。

os调试问题

有没有一个较好的方法或者解决方案可以对os进行调试,目前我的一个解决方案就是print.

有关于Rust圣经-Arc章节的一个问题

想问的就是这个图片所指的代码,根据 https://course.rs/advance/smart-pointer/box.html 这个章节的描述,我想问下我能否理解成为这个部分就是相当于创建了一个Box指针,这个指针指向了s所对应的stack中的内存位置【1】
然而同时,这个box指针也存在于heap中,其所有权在开始时被a所有,因此不能再将其所有权赋值给另外一个对象,只能通过**let b = a**对于对象的所有权进行传递

那么我能不能通过这里的报错,简单的认为,box指针所指向的地址,必须是全局唯一的?
就是说不能通过多个box指针映射到同一个地址中

附上两段对应的图片:
image
image

注:
[1].(s是String类型变量,存储于heap中,仅在stack中保存三个位置的数据,(pointer, capacity, length))
[2]. heap中的每一个元素都被堆中的元素持有所有权?
[3].https://course.rs/advance/smart-pointer/rc-arc.html

自动设置lab仓库为public权限

Github Classroom创建的 lab 仓库默认为 private , 导致 Github Actions 的一些功能无法正常使用.

目前依赖管理员手动设置 lab 仓库权限为 public, 消耗管理员比较多的精力, 且响应延迟也比较高. (共5个lab, 按100人算, 需要设置 500 次).

能否通过 Github Actions 自动为新初始化的 lab 仓库设置 public 权限?

一个有关于move semantics的问题

想问下大家是如何理解这个所有权移动的,我在做题的时候发现了如下问题

fn main() {
    let vec0 = Vec::new();

    let vec1 = fill_vec(vec0);

    println!("{} has length {} content `{:?}`", "vec1", vec1.len(), vec1);

    vec1.push(88);

    println!("{} has length {} content `{:?}`", "vec1", vec1.len(), vec1);
}

fn fill_vec(vec: Vec<i32>) -> Vec<i32> {
    let mut vec = vec;

    vec.push(22);
    vec.push(44);
    vec.push(66);

    vec
}

这个是一道rustlings中move_semantics的题目,我尝试理解他的意思,但是很明显我失败了
我的想法如下:如果按照当前的操作而言的话,fill_vec会获取vec0的所有权,并且在其内部cover vec,然后传回vec给vec1,
在这个操作流程中vec0会被drop,也就没有办法满足题目的要求。
因此我认为我的修正应该为在fill_vec的时候传入一个可变引用,如修改成为

fn main() {
    let vec0 = Vec::new();

    let vec1 = fill_vec(&mut vec0);

    println!("{} has length {} content `{:?}`", "vec1", vec1.len(), vec1);

    vec1.push(88);

    println!("{} has length {} content `{:?}`", "vec1", vec1.len(), vec1);
}

fn fill_vec(vec: &mut Vec<i32>) -> Vec<i32> {
    //let mut vec = vec;

    vec.push(22);
    vec.push(44);
    vec.push(66);

    *vec
}

但是似乎就会报别的错误了。。。想问下大家有什么好的解决办法呢

《第一章:应用程序与基本执行环境》章《构建用户态执行环境》节勘误

实现输出字符串的相关函数小节中

  1. os/src/console.rs文件内容说明时,console.rs文件代码使用到core::fmt模块中的ResultWriteArguments,在文件开关应该声明use core::fmt::{Result, Write, Arguments};,后面fmt::Argumentsfmt::Result部分应替换为ArgumentResult
  2. os/src/console.rs文件的代码中使用到了根模块main.rs文件中的sys_write方法,应说明在文件头部声明use crate::sys_write;

以下是我修改后的console.rs文件

//  os/src/console.rs
use core::fmt::{Write, Arguments, Result};
use crate::sys_write;

struct Stdout;

impl Write for Stdout {
    fn write_str(&mut self, s: &str) -> Result {
        sys_write(1, s.as_bytes());
        Ok(())
    }
}

pub fn print(args: Arguments) {
    Stdout.write_fmt(args).unwrap();
}

macro_rules! print {
    ($fmt: literal $(, $($arg: tt)+)?) => {
        $crate::console::print(format_args!($fmt $(, $($arg)+)?));
    }
}

macro_rules! println {
    ($fmt: literal $(, $($arg: tt)+)?) => {
        $crate::console::print(format_args!(concat!($fmt, "\n") $(, $($arg)+)?));
    }
}

Rust语法疑问记录(日常问题合集)

1.replace_rangede的范围问题

代码:
fn main() {
let mut string_replace_range = String::from("I like rust!");
string_replace_range.replace_range(7..8, "R");
dbg!(string_replace_range);
}

(7..8,“R”)的范围是指(7,8)吗?,替换掉的字符为第8个字符,也就是说7..8只替换了第7位置的字符?

2.千万不能在自己的setting里leave掉点击classroom的链接生成的repositories,目前没有任何办法补救

问题记录:
1.点击github classroom在线邀请链接,点击update仍未更新,显示之前的链接

2.进入后出现404页面,无法访问之前的repo

3.在setting的repositories中LearningOS目录下已经没有了lab0-0的目录

问题具体链接:community/community#13423

07-09:安装ruut和配置vscode环境

通过rust-init进行安装,一切顺利
在第二步vscode环境配置上:rust-anlalyser一直安装不上:通过https://www.jianshu.com/p/567efc9fd871提示离线安装成功;安装失败的原因是rust-analyser版本与现在的vscode不一致。从githuba下载了低版本。
然后是编译失败报 linker link.exe not found。但明明已经安装了visual studio 2009.后来通过https://blog.csdn.net/jimo_lonely/article/details/122013975换了一种才编译成功原因不明

一个关于lab提交的疑问

想问下lab0-0-setup-env-run-os1以及lab0-1-setup-env-run-os1这两个仓库的最主要目的值在于让我们配置完成环境是么?

还有想问下lab0-0的这个仓库的具体提交要求是怎么样的呢?
这个仓库的配置过程如下

  1. 事先已经完成rust环境,qemu环境配置
  2. git clone lab0-0之后使用make setupclassroom_test1配置完成提交
  3. 配置完成之后(理论上不是应该可以直接通过么)但是并没有通过,报错信息为

Annotations
deploy-doc
The job was not started because recent account payments have failed or your spending limit needs to be increased. Please check the 'Billing & plans' section in your settings.
Autograding
The job was not started because recent account payments have failed or your spending limit needs to be increased. Please check the 'Billing & plans' section in your settings.

但是这个地方似乎是仓库的问题?

执行Makefile文件 missing separator. stop.

按照实验要求执行 make setupclassroom_test1 时候,会报Makefile:74: *** missing separator. Stop.,推测原因是 mkdir -p .github/workflows/ 这行会有Tab键,用空格键入就好

应用与进程与pid相关知识

第九节课视频中,再讲POS的原理和实现的时候,PID是进程标志符,一个TCB就代表一个应用,当我们在fork()时候会生成一个pid,一个进程对应一个pid,但一个应用可以对应有多进程吧,所以一个应用可以有多个pid么?所以这里讲的程序或者app,是否可以理解为对应的应该是OS中执行程序一次过程。

07-10:初步阅读rust语言圣经

阅读到2.3章节:对于语句和表达式的用法还是不太甚解。只能后面多敲代码来体会。
if的引用和Java很不一样。

Rustlings advanced_errs2测试是否不够严谨

#[test]
fn test_empty() {
let res = "".parse::();
assert_eq!(res, Err(ParseClimateError::Empty));
assert_eq!(res.unwrap_err().to_string(), "empty input");
}

#[test]
fn test_short() {
let res = "Boston,1991".parse::();
assert_eq!(res, Err(ParseClimateError::BadLen));
assert_eq!(res.unwrap_err().to_string(), "incorrect number of fields");
}
应该在加一个测试,测试的res为 "Boston",原因如下:

如果写的模式匹配是这样的:

fn from_str(s: &str) -> Result<Self, Self::Err> {
let v: Vec<_> = s.split(',').collect();
let (city, year, temp) = match &v[..] {
[some_str] => return Err(ParseClimateError::Empty), //some_str 可能是"" 或 "Boston"
……
};
……
}
考虑以上匹配,如果按照原来的测试,给定的字符串是"",应该返回Empty 错误,但是如果给定的字符串是"Boston",那么也会匹配成功,但是应该返回的是BadLen错误

另外的技能问题

快速做好实验,深刻掌握实验还需要的其他技能?git全家桶(shell等等)请各位佬留下学习资源

《第一章:应用程序与基本执行环境》章《移除标准库依赖》节勘误

移除标准库依赖小节,配置os/.cargo/config时应说明后续构建需要通过rustup在本地添加riscv64gc-unknown-none-elftarget才能在构建时自动应用此target

$ rustup target add riscv64gc-unknown-none-elf

提供语义项 panic_handler小节,panic_handler配置在单独的文件os/src/lang_items.rs后,应说明在os/src/main.rs文件中添加以下内容才能正常建构

// os/src/main.rs
#![no_std]
mod lang_items;
// ... other code

移除 main 函数小节最后给出的完整main.rs文件内容中包含了panic_handler内容,与上一小节独立文件编写panic_handler内容存在矛盾。


分析被移除标准库的程序小节中应说明cargo-binutils 工具集需要使用以下命令安装llvm-tools-preview才能正常使用

$ rustup component add llvm-tools-preview

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.