884 2 分钟

笔者愚钝,在页表自映射这地方花了很长时间,幸得大佬指点迷津才得以理解。 # 目的 在普通的分页机制中,页目录和页表只在物理内存中出现,而程序只能通过虚拟地址对内存进行操作。这就导致了操作系统难以访问和修改它们。 于是产生了页表自映射机制来解决这一问题。自映射通过 将页目录和页表映射到固定的虚拟地址,使得: 内核可直接通过虚拟地址修改页表,无需临时映射或关闭分页,像访问普通内存一样操作页表即可。 # 实现 共有 1024 个二级页表(以下简称页表),每个页表记录了 1024 条映射关系,大小为 4KB 。这些页表物理上不连续,但映射到虚拟空间是连续的,共占 4MB 的空间(并且 4MB...
17k 30 分钟

# 实验目的 创建一个进程并成功运行 实现时钟中断,通过时钟中断内核可以再次获得执行权 实现进程调度,创建两个进程,并且通过时钟中断切换进程执行 在 Lab3 中将运行一个用户模式的进程。 本实验需要使用数据结构进程控制块 Env 来跟踪用户进程,并建立一个简单的用户进程,加载一个程序镜像到指定的内存空间,然后让它运行起来。 同时,实验实现的 MIPS 内核具有处理异常的能力。 # 进程控制块 # 进程控制块 PCB 进程控制块 (PCB) 是系统专门设置用来管理进程的数据结构,它可以记录进程的外部特征,描述进程的变化过程。系统利用 PCB 来控制和管理进程,所以 PCB...
5.9k 11 分钟

# 回顾 随着最后一次 Bug 修复的完成,我的第二单元 “含恨九泉” 了。三次作业的强测都不理想,第二次大胆尝试了影子电梯的策略,性能确实可观,但却给我增添了许多 bug,一直延续到第三次迭代,可谓是赔了时间又折分。 我也深刻反思了一下自己,因为忙其他的事情,这个单元分配给 OO 的时间确实少了许多。尤其是写完通过中测后,没有再构造数据进行测试,只在第二次迭代互测时写了个弱弱的评测机。 虽然这单元的分数很差,但是仍旧学到了很多,比如对于锁、同步块的理解和应用。下个单元继续努力,争取金身 #...
4.4k 8 分钟

近日在装修站点时发现了好玩的 “看板娘 “,尽管我不混迹二次元世界,但看板娘的动效实在让我眼馋,遂决定将它带回家。 # 传统插件:hexo-helper-live2d 使用 npm 安装: npm install hexo-helper-live2d 安装后博客会使用库中自带的看板娘模型,并且只有最简单的效果 若想使用更高级的动效、换装等功能,则需要替换为自定义的模型 但是 hexo-helper-live2d 几年前便停止维护,使用自定义的看板娘时只能使用 .moc 版本的模型,不兼容 .moc3 版本,因此笔者尝试后发现页面无法加载,遂放弃。 #...
8.2k 15 分钟

又寄了(悲)。这次体验非常不好,exam 虽然不难,但我花了将近 40min;然后 extra 信息量很大,写起来一堆 bug,最后折腾半天是 0 分 # exam # 题目要求 在 ./kern/pmap.c 实现以下函数 u_int page_conditional_remove(Pde *pgdir, u_int asid, u_int perm_mask, u_long begin_va, u_long end_va);其功能是取消所有符合条件的地址映射,并返回取消的页表项数量。具体来说如下: pgdir 页目录的每一个 有效的 二级页表项,若其满足以下两个条件: 其虚拟地址在 [...
6k 11 分钟

# 整体框架 评测机由三部分构成: 数据生成器:dataMaker 输出评判器:checker 图形用户界面 其中前两个是核心,我的思路可以简括为 “块式生成,状态检测”。而最后的图形用户界面非必须,但是好的交互设计能带来舒适的评测体验。 评测机的运作模式有两种,一种是单测一份代码,适于自己 debug ;另一种是群测多份代码,主要是应对互测。评测时将会开辟多个线程以节省时间。 评测机的数据来源也有两种,dataMaker 生成的随机数据 和 本地保存的数据。前者是人海战术,后者是靶向施策。 效果图如下: #...
8.9k 16 分钟

# 进程与线程 # 进程概念的引入 # 并发与并行 并发:设有两个活动 a1 和 a2,如果在某一指定的时间 t,无论 a1 和 a2 是在同一处理机上还是在不同的处理机上执行,只要 a1 和 a2 都处在各自的起点和终点之间的某一处,则称 a1 和 a2 是并发执行的。 并行:如果考虑两个程序,它们在同一时间度量下同时运行在不同的处理机上,则称这两个程序是并行执行的。 并发可能是伪并行,也可能是真并行 并发的特征:间断性、非封闭性、不可再现性 #...
12k 22 分钟

# 一、 实验目的 了解 MIPS 4Kc 的访存流程与内存映射布局 掌握与实现物理内存的管理方法(链表法) 掌握与实现虚拟内存的管理方法(两级页表) 掌握 TLB 清除与重填的流程 # 二、 访存流程 # 虚拟地址到物理地址的映射 # Exercise 2.1 补全 mips_detect_memory 函数 void mips_detect_memory(u_int _memsize){ /* Step 1: Initialize memsize. */ memsize = _memsize; /* Step 2: Calculate the...
210 1 分钟

# tab 标签卡 这里是卡片 1 的内容 success CircleCoder CircleCoder 的博客主页 这里是卡片 2 的内容 Dangerous! 我仰望星空, 它是那样寥廓而深邃; 那无穷的真理, 让我苦苦地求索追随。 我仰望星空, 它是那样庄严而圣洁; 那凛然的正义, 让我充满热爱、感到敬畏。 我仰望星空, 它是那样自由而宁静; 那博大的胸怀, 让我的心灵栖息依偎。 我仰望星空, 它是那样壮丽而光辉; 那永恒的炽热, 让我心中燃起希望的烈焰、响起春雷。
1.3k 2 分钟

# links 链接块 本功能参考 NexT,基于 Hexo Tag 功能,用来建立友链或其他网址链接功能。 CircleCoder CircleCoder 的博客主页 CircleCoder OS-Lab2-内存管理 # Code 代码块 基本格式 : [language] [title] [url] [link text] [mark] [command] 行高亮参考链接import java.util.Scanner;...Scanner in = new Scanner (System.in);// 输入 Scan 之后,按下键盘 Alt + “/” 键,Eclipse...