前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >【Rust日报】2022-1-7 在 Rust 中为 RISC-V OS 实现自旋锁

【Rust日报】2022-1-7 在 Rust 中为 RISC-V OS 实现自旋锁

作者头像
MikeLoveRust
发布2022-01-21 18:31:32
4640
发布2022-01-21 18:31:32
举报
在 Rust 中为 RISC-V OS 实现自旋锁

自旋锁是最基本的同步实现之一,也是实现操作系统时首先要考虑的组件之一。文章将简要回顾自旋锁的基础知识,如何在 Rust 中为自制操作系统实现它,以及它相对于 C 语言的优势。

  • https://vmm.dev/en/rust/spinlock.md
SNAFU 0.7 发布

SNAFU 是一个库,可以在添加上下文的同时轻松地将底层错误分配到特定于域的错误中。可以类似这样处理错误:

代码语言:javascript
复制
// We support struct errors ...
#[derive(Debug, Snafu)]
#[snafu(display("An error occurred for {username}"))]
struct OneKindOfError { username: String }

// ... enum errors ...
#[derive(Debug, Snafu)]
enum AnotherKindOfError {
    #[snafu(display("Unable to finish situation one"))]
    SituationOne { source: OneKindOfError },

    #[snafu(display("Unable to finish situation two for {user_id}"))]
    SituationTwo { source: OneKindOfError, user_id: u32 },
}

// ... and opaque errors, great for exposing as part of a public API.
#[derive(Debug, Snafu)]
pub struct Error(AnotherKindOfError);

1 月 4 日 SNAFU 0.7 发布,更新了包括:使用结构和枚举的自定义错误类型,上下文选择器可以放在一个模块中等。

  • https://users.rust-lang.org/t/snafu-0-7-released/69766
将 Rust 的 std 移植到 rustix

Rustix 是一个具有多个后端的系统调用包装库。它有一个原始的 Linux 系统调用后端,以及一个 libc 后端,其他后端正在开发中。Rustix 专为内存安全、I/O 安全和性能而设计。rustix 简化了与 C 整数类型大小相关的系统调用 API 中的一些小缺陷。举个例子:

代码语言:javascript
复制
let len = cmp::min(buf.len(), <wrlen_t>::MAX as usize) as wrlen_t;
   let ret = cvt(unsafe {
       c::send(self.inner.as_raw(), buf.as_ptr() as *const c_void, len, MSG_NOSIGNAL)
   })?;

将会变成

代码语言:javascript
复制
   let ret = rustix::net::send(&self.inner, buf, SendFlags::NOSIGNAL)?;

这将重点放在send操作上,而没有unsafe、原始指针、wrlen_t类型和cvt错误处理的干扰。Rustix 还能够从 Rust 代码直接进行 Linux 系统调用。比如 origin 是一个 Rust 库,它能够启动和关闭进程和线程(类似于 crt1.o 和 libpthread)。有了这些,我们就有了在 Linux 上运行 Rust 程序所需的所有东西。

  • https://blog.sunfishcode.online/port-std-to-rustix/
本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2022-01-07,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 Rust语言学习交流 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 在 Rust 中为 RISC-V OS 实现自旋锁
  • SNAFU 0.7 发布
  • 将 Rust 的 std 移植到 rustix
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档