首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

rust写操作系统 rCore tutorial 学习笔记:实验指导四 进程与线程

这是 os summer of code 2020 项目每日记录的一部分: 每日记录github地址(包含根据实验指导实现的每个阶段的代码):https://github.com/yunwei37/os-summer-of-code-daily...(例如 argc 和 argv等 ) 思考:为什么线程即便与操作系统无关,也需要在内存中映射操作系统的内存空间呢?...我们会为每个进程的页表映射全部操作系统的内存,这些页表都标记为内核权限(即 U 位为 0)。...("thread {}", message); } } } 尝试运行: 线程的结束 如果我们按照实验指导中的实现,应该会观察到:内核线程在运行完成后触发了 Exception::...此时操作系统观察到线程的标记,便将其终止。

43920
  • 您找到你想要的搜索结果了吗?
    是的
    没有找到

    rust写操作系统 rCore tutorial 学习笔记:实验指导二 内存分配与管理

    这是 os summer of code 2020 项目每日记录的一部分: 每日记录github地址(包含根据实验指导实现的每个阶段的代码):https://github.com/yunwei37/os-summer-of-code-daily...rCore tutorial的第三版:https://github.com/rcore-os/rCore-Tutorial lab2 学习报告 这部分的代码从上一章 lab1 的代码开始完成: 这一章的实验指导中...支持动态内存分配的方法 连续内存分配算法: 使用 Buddy System 来实现: 这里可以试着调用 Buddy System Allocator 的轮子: 操作系统动态分配内存所用的堆大小(8M)...这一部分是内核的堆分配,参考 memory/heap.rs: #[global_allocator] static HEAP: LockedHeap = LockedHeap::empty(); /// 初始化操作系统运行时堆空间...缺省 128MB,大小可配置 首先建立一个 PhysicalAddress 的类,然后对其实现一系列的 usize 的加、减和输出等等操作; 直接将 DRAM 物理内存结束地址硬编码到内核中:记录下操作系统用到的地址结尾

    69030

    rust写操作系统 rCore tutorial 学习笔记:实验指导零 创建项目与启动

    这是 os summer of code 2020 项目每日记录的一部分: 每日记录github地址(包含根据实验指导实现的每个阶段的代码):https://github.com/yunwei37/os-summer-of-code-daily...): Linux ubuntu 5.4.0-26-generic #30-Ubuntu SMP Mon Apr 20 16:58:30 UTC 2020 x86_64 x86_64 x86_64 GNU.../Linux 已换源至阿里云,但版本过低; 安装 QEMU 先 sudo apt-get install build-essential 安装编译工具链; 下载源码编译: wget https://...fn console_getchar() -> usize { sbi_call(SBI_CONSOLE_GETCHAR, 0, 0, 0) } /// 调用 SBI_SHUTDOWN 来关闭操作系统...任何没有注释的地方都会产生警告:这个属性用来压榨写实验指导的学长,同学可以删掉了 #![warn(missing_docs)] //!

    1.6K90

    rust写操作系统 rCore tutorial 学习笔记:实验指导六 用户程序与系统调用

    这是 os summer of code 2020 项目每日记录的一部分: 每日记录github地址(包含根据实验指导实现的每个阶段的代码):https://github.com/yunwei37/os-summer-of-code-daily...这里参考的是rCore tutorial的第三版:https://github.com/rcore-os/rCore-Tutorial lab6 学习报告 这一章的实验指导包含: 单独生成 ELF...基础框架搭建 和操作系统一样,我们需要为用户程序移除 std 依赖,并且补充一些必要的功能: 在 lib.rs 中添加: 声明 堆栈相关 panic 处理 入口函数 #![no_std] #!...// 添加线程 PROCESSOR.lock().add_thread(thread); 实现系统调用 为练习做准备: sys_read sys_write sys_exit 用户程序中调用系统调用 实验指导提供了这样一种系统调用格式...因此,我们来看看外部中断的实现: 每一个键盘按键对于操作系统而言都是一次短暂的中断: OpenSBI 默认会关闭各种外部中断,需要将其打开,来接受按键信息。

    1.1K40

    rust写操作系统 rCore tutorial 学习笔记:实验指导三 虚拟地址与页表

    这是 os summer of code 2020 项目每日记录的一部分: 每日记录github地址(包含根据实验指导实现的每个阶段的代码):https://github.com/yunwei37/os-summer-of-code-daily...lab2 中涉及通过页的方式对物理内存进行管理: 在 lab3 中主要涉及: 虚拟地址和物理地址的概念和关系 利用页表完成虚拟地址到物理地址的映射 实现内核的重映射 这一部分的代码将会在 lab2 的实验结果上面继续添加...; 从虚拟内存到物理内存 原理 在现代的操作系统中,为了让其他的程序能方便的运行在操作系统上,需要完成的一个很重要的抽象是「每个程序有自己的地址空间,且地址空间范围是一样的」,这将会减少了上层程序的大量麻烦...这样的设计会导致上层的应用程序可能会访问同一个值相等的虚拟地址,所以操作系统需要做的就是替这些程序维护这个虚拟地址到物理地址的映射。甚者,为了统一和连贯,内核自己本身访问内存也将会通过虚拟地址。...此时操作系统会介入,交换一部分物理内存和磁盘中的数据,使得需要访问的内存数据被放入物理内存之中。操作系统还必须更新页表,并刷新缓存。

    72250

    操作系统实验报告

    [TOC] 实验一 OS启动过程、进程的概念及cmd.exe中的命令等 1、 实验目的 了解计算机启动过程的原理。...创建进程、撤销进程原语程序fork()、exec()和exit()CreateProcess()和ExitProcess() 2、实验时间:2学时,分两次 3、实验任务: 百度fork()、exec()...4、实验过程: 实验一:百度fork()、exec()和exit()源程序,写出它们的功能 Fork():一个进程,包括代码、数据和分配给进程的资源。...实验二:通过启动任务管理器运行和撤销资源管理器 实验三:了解cmd.exe所拥有的内部和外部命令 内部命令:我们可以直接在cmd下就可以执行的命令,例如:telnet、ftp、cd、等等,你可以在CMD...四、 读者和写者算法 (1) 写者优先 (2) 读者优先 五、哲学家就餐算法 六、验证参考程序 七、 编写自己的程序 2、实验时间:4学时(2次) 3、实验任务: (1)验证参考程序Java,观察程序运行的结果

    17710

    Linux内核分析》之操作系统是如何工作的 实验总结

    前言 实验阶段,由于学校网速等条件限制,未能在真机上搭建出实验环境。在实验楼中,将代码粘贴进去出现严重的缩进错位,最终未能完成编译新的。本文以分析关键代码为主。...环境搭建简易过程 1、创建(mkdir)工作区SG13225146 2、将linux-3.9.4文件夹剪切到刚创建工作区SG13225146 3、将mykernel_for_linux3.9.4sc.patch...linux原内核工作状态 实验及总结  主要代码及分析 各文档所包含的头文件不在列出 mypcb.h 这个头文件主要定义了进程控制结构PCB mypcb.h #define MAX_TASK_NUM 4...This is process %d + n",my_current_task->pid); } } } 代码解析 my_start_kernel可以看做操作系统的入口...即操作系统通过CUP执行进程的同时判断分配到的时间片是否用完,当用完时保存当前中断现场的相关信息并进行进程调度,开始另一个进程,当另一个进程的时间片用完时,再回到之前中断的地方恢复并继续执行后面的内容,

    1.8K31

    实验一 Anaconda安装和使用(上机Python程序设计实验指导书)

    三、实验仪器、设备 PC一台 + Windows 操作系统 + Anaconda Distribution(Python 3.X)安装文件,要求能够上网。...目前Python支持的操作系统包括主流的Windows、Linux、Mac OS等。...编者采用的操作系统为Windows,故下载Windows对应的安装器,如图1-3所示。...pip install PackageFilename.whl (八)修改Jupyter默认工作空间 在Windows上使用jupyter notebook不像LinuxLinux是在哪个目录下启动,...七、实验报告要求 实验报告以书面/电子形式提交,严禁抄袭,一旦发现,即为零分。 实验报告主要内容包括实验名称、实验类型、实验地点、学时、实验环境、实验原理、实验步骤、实验结果、总结与思考等。

    36110

    操作系统实验三 进程调度

    实验三 进程调度 一、实验目的 1、 理解有关进程控制块、进程队列的概念。 2、 掌握进程优先权调度算法和时间片轮转调度算法的处理逻辑。...二、实验内容与基本要求 1、 设计进程控制块PCB的结构,分别适用于优先权调度算法和时间片轮转调度算法。 2、 建立进程就绪队列。 3、 编制两种进程调度算法:优先权调度算法和时间片轮转调度算法。...三、实验报告要求 1、 优先权调度算法和时间片轮转调度算法原理。 2、 程序流程图。 3、 程序及注释。 4、 运行结果以及结论。...四、实验报告 1.时间片轮转调度算法(round robin) a.该算法采取了非常公平的方式,即让就绪队列上的每个进程每次仅运行一个时间片。

    1.7K40
    领券