OS Lab4 踩坑记

  Lab4在之前Lab3的基础上,增加了系统调用,难度增加了很多。而且加上注释不详细,开玩笑的指导书,自己做起来困难较大。也遇到了大大小小的bug,调试了一整天。

  本文记录笔者在实现Lab4中遇到了一些bug,出现的问题可能不具有普遍性,但是可能有参考价值。

  

  1. 在调用syscall_*函数的时候,可能会出现缺页的情况。

  

  注意缺页的地址,通过地址我发现错误出现在栈,栈顶不停下降。最后发现是mysyscall汇编函数忘记 jr ra 返回了。。。zz。这个bug是通过修改fktest.c代码,删除其中所有系统调用有关的函数后发现可以正常运行。

  2. 之后在系统调用的时候,发现总是出错返回,并没有完全执行。通过输出调试后,发现是envid2env()中当envid为0的时候,应当直接返回curenv,不进行后续操作。在后续操作里因为envid=0,判断过不了。

  3. fork时,父进程给子进程开异常处理栈空间的时候,地址应当是UXSTACKTOP - BY2PG。

  4. 在 sys_set_env_status 中,判断status的值的时候,与或写错了。。zz

  

  5. 这个bug卡了一个晚上,第二天用汇编调试才发现了问题。

  

  当父进程对用户栈那一页进行duppage时,duppage无法返回直接报错。通过一步步汇编调试,发现问题出在sp寄存器在发生缺页中断返回后,值变了。最后发现是traps.c中page_fault_handler中的错误。

  // TODO: 找出来为什么要这样写。

  

  6. 在运行pingpang.b时,发现有时候会出现俩个进程都在waiting,都是ENV_NOT_RUNNABLE的情况。最后发现是,在sys_ipc_can_send中忘记修改env_ipc_recving为0了。。。zz

  7. 在提交上去,第一部分结果为5/7,看水群里大佬说,是调度的问题。在调度时,如果该进程时间片没有用完,但是该进程的状态变为了ENV_NOT_RUNNABLE了,就应当让该进程停下来。提交上去后,可能有改变当前进程状态的情况发生。

【bug记录】OS Lab4 踩坑记的更多相关文章

  1. 【bug记录】OS Lab3 踩坑记

    OS Lab3 踩坑记 Lab3在之前Lab2的基础上,增加了进程建立.调度和中断异常处理.其中测试包括进程建立以及进程调度部分. 由于是第一次做bug记录,而且是调试完bug后再做的记录,所以导致记 ...

  2. centos 7( linux )下搭建elasticsearch踩坑记

    原文:https://blog.csdn.net/an88411980/article/details/83150380 概述    公司最近在做全文检索的项目,发现elasticsearch踩了不少 ...

  3. [技术博客] 敏捷软工——JavaScript踩坑记

    [技术博客] 敏捷软工--JavaScript踩坑记 一.一个令人影响深刻的坑 1.脚本语言的面向对象 面向对象特性是现代编程语言的基本特性,JavaScript中当然集成了面向对象特性.但是Java ...

  4. Spark踩坑记——数据库(Hbase+Mysql)

    [TOC] 前言 在使用Spark Streaming的过程中对于计算产生结果的进行持久化时,我们往往需要操作数据库,去统计或者改变一些值.最近一个实时消费者处理任务,在使用spark streami ...

  5. [转]Spark 踩坑记:数据库(Hbase+Mysql)

    https://cloud.tencent.com/developer/article/1004820 Spark 踩坑记:数据库(Hbase+Mysql) 前言 在使用Spark Streaming ...

  6. Spark踩坑记——数据库(Hbase+Mysql)转

    转自:http://www.cnblogs.com/xlturing/p/spark.html 前言 在使用Spark Streaming的过程中对于计算产生结果的进行持久化时,我们往往需要操作数据库 ...

  7. Vue + TypeScript + Element 搭建简洁时尚的博客网站及踩坑记

    前言 本文讲解如何在 Vue 项目中使用 TypeScript 来搭建并开发项目,并在此过程中踩过的坑 . TypeScript 具有类型系统,且是 JavaScript 的超集,TypeScript ...

  8. 十年老苹果(A1286)强升Catalina及Win10踩坑记(续)

    背景 自上次发布十年老苹果(A1286)强升Catalina及Win10踩坑记以来,因为后半部分-----系统安装上的细节描述过于简略,一些朋友在安装过程中总是又遇到坑,由此特意详述这一过程,让园友少 ...

  9. Spark踩坑记——Spark Streaming+Kafka

    [TOC] 前言 在WeTest舆情项目中,需要对每天千万级的游戏评论信息进行词频统计,在生产者一端,我们将数据按照每天的拉取时间存入了Kafka当中,而在消费者一端,我们利用了spark strea ...

随机推荐

  1. python全栈开发笔记---------函数

    一 数学定义的函数与python中的函数 初中数学函数定义:一般的,在一个变化过程中,如果有两个变量x和y,并且对于x的每一个确定的值,y都有唯一确定的值与其对应,那么我们就把x称为自变量,把y称为因 ...

  2. 1.2 JAVA多线程实现

    线程和进程 进程:是执行中一段程序, 进程是系统进行资源分配和调度的一个独立单位. 线程:比进程更小的能独立运行的基本单位,单个进程中执行中每个任务就是一个线程.线程是进程中执行运算的最小单位. Th ...

  3. 小学生四则运算JAVA

    点我,github地址 组员:黄浩格,何坤 一.项目说明 1题目:实现一个自动生成小学四则运算题目的命令行程序. 2说明: 自然数:0, 1, 2, -. • 真分数:1/2, 1/3, 2/3, 1 ...

  4. HDFS(二) 底层通信原理——RPC 及 动态代理

    一.RPC(Remote Procedure Call  ) :远程过程调用 1.RPC是远程过程调用协议,实现调用者和被调用者二地之间的连接和通信.其基本通信模型是基于client/server进程 ...

  5. Mybatis第一天

    Mybatis第一天   框架课程 1.   课程计划 第一天: 1.Mybatis的介绍 2.Mybatis的入门 a)       使用jdbc操作数据库存在的问题 b)      Mybatis ...

  6. tomcat中配置ssl的http协议

    问题: IDEA配置tomcat后运行时报如下错误: Error running wis-client-web: SSL HTTP Connector node not found: set up o ...

  7. ESP32搭建4.esp32官方程序下载与串口读取

    上一篇写到esp-idf的整体环境搭建,本文主要讲讲如何将examples中的例子烧写到ESP32的flash中,以及如何通过linux串口进行调试. 一. Esp32程序下载 1.Ctrl+Alt+ ...

  8. python 全栈开发笔记 2

    函数 函数式:将某功能代码封装到函数中,日后便无需重复编写,仅调用函数即可 面向对象:对函数进行分类和封装,让开发“更快更好更强...” 函数式编程最重要的是增强代码的重用性和可读性 def xx() ...

  9. angularjs i18n

    <!doctype html><html ng-app="myApp"><head>    <meta charset="utf ...

  10. 以太坊Bootstrap和Kademlia算法实现逻辑简介(基于cpp-ethereum)