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. 一、linux概述

    1. 学习Linux之前先了解Unix Unix是一个强大的多用户.多任务操作系统.于1969年在AT&T的贝尔实验室开发.UNIX的商标权由国际开放标准组织(The Open Group) ...

  2. 基于服务器AAA的实验

    1.实验拓扑 2.地址分配   Device   Interface   IP Address   Subnet Mask   R0 Fa0/0 192.168.1.2 255.255.255.0 S ...

  3. python 进程池Pool的apply_async方法以及一些需要注意的地方

    在写多进程的时候我发现一个问题,用Pool的apply_async(异步非阻塞)的时候传入实例函数会出错,或者说是子进程被跳过似的感觉(python2.7). 但是用python3.7的话没有任何问题 ...

  4. python操作samba

    最近在部署完xxl-job后,陆续将一些日常性执行的python脚本迁移到上面去:其中部分脚本涉及到对samaba的操作,先后尝试了pysmb.fs.smbfs.pysmbclient pysmb 安 ...

  5. shell脚本中给字符串添加颜色

    shell脚本中echo显示内容带颜色显示,echo显示带颜色,需要使用参数-e 格式如下: echo -e "\033[字背景颜色:文字颜色m字符串\033[0m" 例如: ec ...

  6. EFCore Lazy Loading + Inheritance = 干净的数据表 (一) 【献给处女座的DB First程序猿】

    前言 α角 与 β角 关于α角 与 β角的介绍,请见上文 如何用EFCore Lazy Loading实现Entity Split. 本篇会继续有关于β角的彩蛋在等着大家去发掘./斜眼笑 其他 本篇的 ...

  7. jquery.validate.js使用实例

    一.常用方式: $('form').validate({  rules: {},        messages: { },        submitHandler: function () {}) ...

  8. 后台管理系统之“图片上传” --vue

    图片上传(基于vue) 相信上传图片是所有系统必备的功能吧,工作中的第一个管理系统就在上传图片的功能上卡顿了一整天. 当时用的elementUI组件,但是由于样式和设计图样式差别较大再加上原生相较好理 ...

  9. 页面通过Jquery取值然后传值到后台显示underfined是怎么回事?

    页面通过Jquery取值然后传值到后台显示underfined是怎么回事? 一般情况下第一个如果用jQuery取值的,末尾要用val(),如果用$符号取值的,末尾要加上val. eg: busines ...

  10. 18-09-15 潘一刘老师 讲课replace 控件输入函数检测的包

    控件输入 指的是 一般金融机构 输入密码时候需要文本 键盘不能输入时候 用到的