6.S081|Lab3-Page tables
Speed up system calls (easy) 目标是在用户空间和内核间共享一块只读的区域,这样内核执行SYSCALL的时候就不需要来回跑。当每个进程被创立的时候,都会在USYSCALL区域映射一块只读的分页,这里面存了一个结构体usyscall用来存储当前进程的pid。 提示让我们先看kernel/proc里的proc_pagetable()函数,那么先去看看。 proc_...
Speed up system calls (easy) 目标是在用户空间和内核间共享一块只读的区域,这样内核执行SYSCALL的时候就不需要来回跑。当每个进程被创立的时候,都会在USYSCALL区域映射一块只读的分页,这里面存了一个结构体usyscall用来存储当前进程的pid。 提示让我们先看kernel/proc里的proc_pagetable()函数,那么先去看看。 proc_...
页式硬件 RISCV里执行的指令中的地址都是使用的虚拟地址(Q:为什么要用虚拟地址?A:为了隔离性和保护性),但是机器的物理内存是由物理地址索引的,所以我们需要一种映射机制来完成由虚拟地址到物理地址的转换。 在开始下面内容之前,我们需要知道xv6的内存管理机制是Sv39 RISC-V,这意味着我们只使用底部的39位,尽管虚拟地址是64位的(因为这是64位机器,寄存器也是64位的)。 一...
环境介绍,本人使用M1Pro芯片的Macbook,采用orbstack运行x86的Ubuntu22.04容器。 工具链 根据官网介绍(一般在顶部导航栏的Labs下面的tools里面),选择Ubuntu的安装命令,一键安装。要注意一下,这门课有两版不同的工具链,2020年的工具链体积很大,但是可以step in进ecall,2021年以后的好像就是体积比较小的工具链,想进入ecall必须先...
System call tracing(moderate) 没有特别卡住,可以参考网上别人的实现 Sysinfo(moderate) memory part 阅读题目可知,我们需要知道空闲内存和进程数量,并且提示我们前往kernel/kalloc.c添加一个获取空闲内存量的函数,于是推断关于内存分配的代码在kalloc.c中,于是去查看。 //kerlnel/kalloc.c /...
关于clangd 系统官方的介绍可以看网上别的博客,按我个人理解,clangd就是给你提供代码补全,函数跳转之类的功能。 开始配置 我是MacOS,所以先直接brew install llvm,如果你是Debian系Linux,用apt install clang clangd clangd-tidy llvm即可 macOS brew的时候会出现 CLANG_CONFIG_FIL...
CPU与外界交互的方式是通过I/O接口 如何实现I/O接口呢 方法一: 使用特殊的输入输出指令和对应的硬件设计 方法二: 内存映射I/O(Memory-Mapped I/O) 定义:将I/O设备的寄存器映射到处理器的地址空间中,形成一个特定的地址范围用于I/O操作。 操作方式: 使用普通的加载(lo...
虚拟内存的主要功能: 大内存的幻觉:虚拟内存使得程序看起来可以访问一个非常大的主存。程序的工作集(即正在活跃使用的内存页面)保存在物理内存中,而不常用的页面则保存在磁盘上。 请求分页(Demand Paging):虚拟内存通过请求分页技术,让程序运行的内存可以超过物理内存的大小。当程序需要访问某个不在主存中的页面时,会触发页面调度,将所需页面从磁盘加载到...
操作系统的基本功能 操作系统是计算机启动时运行的第一个程序。 查找并控制所有设备 操作系统会发现并控制计算机中的所有硬件设备,例如硬盘、网络接口、显示器、键盘、鼠标等。因为每个设备的操作方式不同,操作系统依赖设备驱动程序(device drivers)来与不同的硬件进行通信。设备驱动程序是硬件制造商提供的特定程序,用于帮助操作系统与硬件正确交互。 启动服务(100多个): ...
二进制前缀 常用前缀(SI和非SI) Kilo, Mega, Giga, Tera, Peta, Exa, Zetta, Yotta:这些是常用的存储和数据传输前缀,表示不同的数量级。 SI值 vs. 常见用法:在计算机领域,有时这些前缀的用法和国际单位制(SI)有区别。例如: “kilobyte”在常用中指的是1024字节...
前面介绍了一下关于如何衡量处理器性能,还有一些关于功耗的问题,感觉不太重要就随便听了一下,所以也没记笔记。 Pipelining 用流水线来提高吞吐量 流水线的作用: 流水线不会减少单个任务的延迟,但它可以提高整个工作负载的吞吐量。 流水线允许多个任务同时使用不同的资源。 ...