【bug记录】OS Lab3 踩坑记
OS Lab3 踩坑记
Lab3在之前Lab2的基础上,增加了进程建立、调度和中断异常处理。其中测试包括进程建立以及进程调度部分。
由于是第一次做bug记录,而且是调试完bug后再做的记录,所以导致记录不完全。但是为之后bug记录的习惯打下基础。
进程建立测试(env_check)
注意 env_setup_vm() 中的pgdir地址赋值。
在 envid2env() 中当有 checkperm 时,检查失败也要给 *penv 赋值 0 (容易忘记)。

这里最好检查一下 curenv 是否存在,负责会造成访问 NULL 导致的循环。判断的时候可以直接比较 env_id 。
进程调度检测

当调用 env_run() 时,如果没有改变 curenv 的 pc 值为 epc,会导致进程再次被调度的时候pc值出错。因此需要显式更改 pc 。

注意 load_icode_mapper() 函数中的 i 为 u_long 类型,没法用负值。在我的做法中,我先将 i = -offset , 所以这里出了问题,导致错误。
注意在 sched_yield() 中,在一个进程被调度的时候要清空 counter 值(非常蠢的错误)。还有一个比较重要的地方:注意,如果一个进程还要继续执行的话,要再对他调用 env_run(curenv) 函数,继续执行。
【bug记录】OS Lab3 踩坑记的更多相关文章
- 【bug记录】OS Lab4 踩坑记
OS Lab4 踩坑记 Lab4在之前Lab3的基础上,增加了系统调用,难度增加了很多.而且加上注释不详细,开玩笑的指导书,自己做起来困难较大.也遇到了大大小小的bug,调试了一整天. 本文记录笔者在 ...
- centos 7( linux )下搭建elasticsearch踩坑记
原文:https://blog.csdn.net/an88411980/article/details/83150380 概述 公司最近在做全文检索的项目,发现elasticsearch踩了不少 ...
- [技术博客] 敏捷软工——JavaScript踩坑记
[技术博客] 敏捷软工--JavaScript踩坑记 一.一个令人影响深刻的坑 1.脚本语言的面向对象 面向对象特性是现代编程语言的基本特性,JavaScript中当然集成了面向对象特性.但是Java ...
- Spark踩坑记——数据库(Hbase+Mysql)
[TOC] 前言 在使用Spark Streaming的过程中对于计算产生结果的进行持久化时,我们往往需要操作数据库,去统计或者改变一些值.最近一个实时消费者处理任务,在使用spark streami ...
- [转]Spark 踩坑记:数据库(Hbase+Mysql)
https://cloud.tencent.com/developer/article/1004820 Spark 踩坑记:数据库(Hbase+Mysql) 前言 在使用Spark Streaming ...
- Spark踩坑记——数据库(Hbase+Mysql)转
转自:http://www.cnblogs.com/xlturing/p/spark.html 前言 在使用Spark Streaming的过程中对于计算产生结果的进行持久化时,我们往往需要操作数据库 ...
- Vue + TypeScript + Element 搭建简洁时尚的博客网站及踩坑记
前言 本文讲解如何在 Vue 项目中使用 TypeScript 来搭建并开发项目,并在此过程中踩过的坑 . TypeScript 具有类型系统,且是 JavaScript 的超集,TypeScript ...
- 十年老苹果(A1286)强升Catalina及Win10踩坑记(续)
背景 自上次发布十年老苹果(A1286)强升Catalina及Win10踩坑记以来,因为后半部分-----系统安装上的细节描述过于简略,一些朋友在安装过程中总是又遇到坑,由此特意详述这一过程,让园友少 ...
- Spark踩坑记——Spark Streaming+Kafka
[TOC] 前言 在WeTest舆情项目中,需要对每天千万级的游戏评论信息进行词频统计,在生产者一端,我们将数据按照每天的拉取时间存入了Kafka当中,而在消费者一端,我们利用了spark strea ...
随机推荐
- MySQL的一些指令操作[简版]
sudo apt-get install mysql-server pa aux | grep mysql sudo service mysql start sudo service mysql st ...
- Unity3d KeyCode 键盘各种键值详情
KeyCode :KeyCode是由Event.keyCode返回的.这些直接映射到键盘上的物理键. 值 对应键 Backspace 退格键 Delete Delete ...
- ubuntu系统 不能访问非系统磁盘即挂载的数据盘 Unable to access "DATA"
问题描述: ubuntu14.04 有两个硬盘,一个固态硬盘作为系统盘,一个机械硬盘作为数据盘. 打开 数据盘“DATA”时出现下面的错误: Unable to access "DATA&q ...
- 开源代码chat_master分析
- Docker容器的管理
创建容器的工作原理: 当利用docker run来创建容器时,Docker在后台运行的标准操作包括:检查本地是否存在指定的镜像,不存在就从公有仓库下载,利用镜像创建并启动一个容器分配一个文件系统,并在 ...
- 了解box-sizing 盒子模型
最近看到别人代码有用到box-sizing属性,自己没用过,记录一下 box-sizing:border-box 指定宽度和高度(最小/最大属性)确定元素边框box 理解:假设宽高为100px,设置了 ...
- spyder常用功能
最近和同学讨论到spyder的使用技巧,所以就结合之前在网上看到网友的总结( https://blog.csdn.net/peiwang245/article/details/78528098)和自己 ...
- stand up
#version_s#1.7#version_e# #update_s#https://files.cnblogs.com/files/dyh221/update.zip#update_e#
- Java学习NO.4
学习内容如下: 数组的概述与特征 概述: 它是具有相同数据类型的一组数据的集合 存储在数组中的数据我们称之为数组元素,可通过“数组名[下标]”的方式进行访问,下标也就是索引,从0开始,且负数索引是无效 ...
- sql server存储过程,常用的格式
BEGINSET NOCOUNT ON;if @_MODE NOT IN ('A','M','D') begin raiserror('参数错误!',16,3); return; end; decla ...