- 博客(17)
- 收藏
- 关注
原创 编译原理——SysY编译器实践报告
Jason Compiler编译器概述基本功能实现将C语言自己SysY分别转换成两种中间表示Eeyore和Tigger,以及最终的Risc-V指令。使用如下命令生成Eeyore中间表示:./main -S -e test.sy -o test.S使用如下命令生成Tigger中间表示:./main -S -t tigger.sy -o test.S使用如下命令生成Risc-V指令./main -S test.sy -o test.SJason Compiler 的特点使用了通用工具
2021-06-10 17:39:31 7082
原创 使用nvprof时的权限问题: ERR_NVGPUCTRPERM
问题描述:在准备ASC20-21,运行QuEST的时候,希望使用nvprof进行性能分析,但是遇到了如下错误:==20812== Warning: ERR_NVGPUCTRPERM - The user does not have permission to profile on the target device. See the following link for instructions to enable permissions and get more information: https:
2020-12-30 18:44:17 1924
原创 JOS Lab5 File system, Spawn and Shell
实验环境Hardware:Memory: 16GProcessor: Intel(R) Core(TM) i7-9750H CPU @ 2.60GHz × 6OS Type: 64 bitDisk: 512GBSoftwareOS: Ubuntu 18.04 LTS(x86_64)GCC: gcc 7.5.0 #gcc -vMake: GNU Make 4.1 #make
2020-12-17 17:43:21 531
原创 JOS lab4 Preemptive Multitasking Part C
Part C: Preemptive Multitasking and Inter-Process communication (IPC)这最后一个部分需要修改内核来抢占那些不配合的环境,并且允许进程之间显式地传递消息。时钟中断和抢占user/spin测试程序fork出一个子进程,子进程获得CPU控制之后执行一个死循环。父进程和kernel都不能重新获得CPU了。这从保护操作系统免受用户态环境的bug和恶意代码来看明显不是一个理想情况,因为任何的用户态环境都可以轻松地让系统停滞。为了让kernel可以
2020-12-04 16:48:28 329
原创 JOS lab4 Preemptive Multitasking Part B
Part B: Copy-on-Write Fork在dummyfork中,fork把父进程页上的所有数据拷贝到子进程上。这是fork()中代价最高的部分。然而很多情况下,子进程中的fork()后面都跟随了exec()。这会把之前复制过来的内存用一个新的程序代替,这样复制过来的内存只有很少一部分会被用到,于是复制的时间实际上就被浪费掉了。因此后来的Unix利用了虚拟内存硬件,允许父进程和子进程共享映射到他们各自地址空间的物理内存,直到某个进程修改了它。这个技术叫做写时复制。为了实现它,kernel会把
2020-12-04 12:04:57 244
原创 JOS lab4 Preemptive Multitasking Part A
实验环境Hardware:Memory: 16GProcessor: Intel(R) Core(TM) i7-9750H CPU @ 2.60GHz × 6OS Type: 64 bitDisk: 512GBSoftwareOS: Ubuntu 18.04 LTS(x86_64)GCC: gcc 7.5.0 #gcc -vMake: GNU Make 4.1 #make
2020-12-03 15:02:57 269
原创 JOS Lab3 User Environment Part B
Part B: Page Faults, Breakpoints Exceptions, and System Calls现在kernel已经有了基本的异常处理能力,我们将继续完善它的功能.处理Page FaultExercise 5 要求修改trap_dispatch()函数,把page fault错误派发给page_fault_handler()处理,这个处理函数现在还没有完成,只是一个入口。这个Exercise比较简单:static voidtrap_dispatch(struct Tra
2020-11-26 22:19:20 276
原创 JOS Lab3 User Environment Part A
忙完了前一段时间的超算比赛和网络lab,总算有时间在lab3 ddl前一周不到一点的时候开始写lab3了。尽量还是和之前一样,写一个关于lab3解答的详细文档。其中除了解答之外,还有相关知识的说明。实验环境Hardware:Memory: 16GProcessor: Intel(R) Core(TM) i7-9750H CPU @ 2.60GHz × 6OS Type: 64 bitDisk: 512GBSoftwareOS:
2020-11-26 13:39:21 328
原创 如何给powershell配置代理
原因在参加SC20比赛之前,需要先熟悉CycleCloud的相关概念和配置方法。相关概念已经在前一篇博文中大致翻译过了,具体不清楚的还可以去看Azure CycleCloud的文档。现在重点关注如何配置。由于CycleCloud的web GUI提供的功能是有限的,更多功能的实现需要通过命令行工具CycleCloud CLI完成。然而比赛提供的CycleCloud URL需要代理才能访问,在使用CLI之前又必须完成CycleCloud账户的配置,因此这使我需要为powershell配置代理。方法用管理员
2020-10-30 14:38:18 7326
原创 Cyclecloud介绍以及使用指南
Azure CycleCloudCycleCloud简介CycleCLoud是在Azure平台上管理高性能计算环境的一套企业级友好的工具。它面向的对象是希望在高性能计算的环境中使用某一个特定调度器的管理员和用户。CycleCloud抽象出了基本的Azure组件,包括VM,scaleset,网络接口和磁盘。这使得高性能计算的管理员可以关注熟悉的情况:一个由节点和可配置的调度器组成的高性能计算集群。CycleCloud在它支持的调度器之上部署了自动规模控制插件,这让用户无需实现复杂的自动规模控制函数和例程
2020-10-30 00:05:29 3023
原创 JOS Lab2 Memory Management Part 3 & challenge
Part 3: Kernel Address Space
2020-10-26 01:26:12 288
原创 JOS Lab2 Memory Management Part 1 & 2
这个lab主要包括两部分:为kernel写一个物理内存分配器写一个虚拟内存准备工作:
2020-10-23 00:59:34 434
原创 HPL & HPCG benchmark test
本文章将记录多机和单机运行HPL和HPCG时碰到的问题,以及关于Linux使用的一些命令。首先我想看一下这个文件是什么时候更新的,可以使用stat命令:stat:文件/文件系统的详细信息显示;使用格式:stat 文件名stat命令主要用于显示文件或文件系统的详细信息,该命令的语法格式如下:-f 不显示文件本身的信息,显示文件所在文件系统的信息-L 显示符号链接-t 简洁模式,只显示摘要信息touch命令可以手动更新stat命令展示的Access和Modify。touch -d 200
2020-10-17 00:14:58 1983 1
原创 JOS lab1 booting a PC part 3
Part 3: Kernel这部分自然是读kernel并写一些代码。Using virtual memory to work around position dependence一般来说操作系统内核都会被链接并运行在最高的虚地址空间,将较低的虚地址空间留给用户程序使用。就像在之前的例子中VMA=0xf0100000,而LMA=0x00100000. 显然不存在0xf0100000对应的物理地址,因此实际上是将该虚拟地址映射到0x00100000对应的物理地址,即BIOS上方的物理地址。下一个lab将把
2020-10-06 17:33:31 260
原创 JOS lab1 booting a PC part 1 & 2
实验环境Hardware:Memory: 16GProcessor: Intel(R) Core(TM) i7-9750H CPU @ 2.60GHz × 6OS Type: 64 bitDisk: 512GBSoftwareOS: Ubuntu 18.04 LTS(x86_64)GCC: gcc 7.5.0 #Run gcc -vMake: GNU Make 4.1 #
2020-10-05 23:17:54 417
原创 JOS lab前置工具安装和解释
首先为了验证我的工具链,测试我的分发,需要运行以下命令:objdump -iobjdump命令是用来显示关于目标文件的各种信息或者目标可执行文件构成的gcc工具。其中单纯使用-i选项可以可用的架构和目标结构列表。输出结果中需要包含elf32-i386ELF(Executable and Linkable Format)意思是可执行可链接文件。我们需要对32位i386平台的支持。然后运行以下命令:gcc -m32 -print-libgcc-file-name如果输出/usr/lib/
2020-10-04 22:04:48 252
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人