LAB4】的更多相关文章

实验概况 在开始实验之前,先对实验整体有个大概的了解,这样能让我们更好地进行实验. 我们本次实验需要补充的内容包括一整套以sys开头的系统调用函数,其中包括了进程间通信需要的一些系统调用如sys_ipc_can_recv等,以及补充完成fork.c函数,当然也不能少填写syscall_wrap.S. 系统调用 关于系统调用,我们主要是以以下流程来进行的: 用户调用syscall特权指令触发异常 异常触发,pc值自动被硬件置为0x80000080,转向异常分发代码 trap_init识别是系统调用…
1.下载mit jos lab4时遇到问题(关于git操作,使用,还需进一步理解) 遇到的问题 出现未合并(merge)完全的问题,操作:git add kern/init.c 之后在确认提交 方法二(未实现) 删除该本地分支 但由于有问题(merge 冲突)无法删除或者更换分支 关于git待补充 ----------------------------------------------------------------------------------------------------…
OS Lab4 踩坑记 Lab4在之前Lab3的基础上,增加了系统调用,难度增加了很多.而且加上注释不详细,开玩笑的指导书,自己做起来困难较大.也遇到了大大小小的bug,调试了一整天. 本文记录笔者在实现Lab4中遇到了一些bug,出现的问题可能不具有普遍性,但是可能有参考价值. 1. 在调用syscall_*函数的时候,可能会出现缺页的情况.…
forward 与 ! (tell) 的差异,举个例子: Main(当前actor): topNode ! Insert(requester, id=1, ele = 2) topNode: root ! Insert(requester, id=1, ele = 2) 对于root而言,Insert消息的来源是topNode 假如第二行替换为 topNode: root forward Insert(requester, id=1, ele = 2) 此时,对于root而言,Insert消息的…
1. ucore lab4介绍 什么是进程? 现代操作系统为了满足人们对于多道编程的需求,希望在计算机系统上能并发的同时运行多个程序,且彼此间互相不干扰.当一个程序受制于等待I/O完成等事件时,可以让出CPU给其它程序使用,令宝贵的CPU资源得到更充分的利用. 操作系统作为大总管需要协调管理各个程序对CPU资源的使用,为此抽象出了进程(Process)的概念.进程顾名思义就是进行中.执行中的程序. 物理层面上,一个CPU核心同一时间只能运行一个程序,或者说一个CPU核心某一时刻只能归属于一个特定…
BUAA_OS lab4 难点梳理 lab4体会到了OS难度的飞升.实验需要掌握的重点有以下: 系统调用流程 进程通信机制 fork 本lab理解难度较高,接下来将以以上三部分分别梳理. 系统调用 概念 一般情况下,进程不能存取内核数据.但有的场景必须通过内核执行,因此操作系统设计了陷入异常后调用特定内核函数的过程. 系统调用流程 系统调用的具体层次结构为: 按照这个流程,首先来看syscall_lib.c中的函数们. 1 void syscall_putchar(char ch) 2 { 3…
Lab4 Preemptive Multitasking(下) lab4的第二部分要求我们实现fork的cow.在整个lab的第一部分我们实现了对多cpu的支持和再多系统环境中的切换,但是最后分析的时候没有分析环境创建的系统调用,这里先补一下对环境创建的系统调用的分析 recall A续 这里的分析要从user/dumpfork.c开始 umain(int argc, char **argv) { envid_t who; int i; // fork a child process who =…
本文为上海交大 ipads 研究所陈海波老师等人所著的<现代操作系统:原理与实现>的课程实验(LAB)的学习笔记的第四篇:多核处理.所有章节的笔记可在此处查看:chcore | 康宇PL's Blog 踩坑总结 本着早看见少踩坑的原则,我先说一些在实践中总结的一点玄学经验,如果你能搞清楚这种现象的真实原因请务必在博客底端评论区赐教一下. 薛定谔的评测结果 你可能会遇到手动 make run-xxx 样例时可以正确运行,但 make grade 有时候莫名其妙就过不了的情况.或者干脆手动 mak…
越学越简单,真是越学越简单啊 看视频的时候着实被那复杂的函数调用图吓到了.看代码的时候发现条理还是很清晰的,远没有没想象的那么复杂. 这节创建了俩内核线程,然后运行第一个线程,再由第一个切换到第二个. kern_init: 在vmm_init后加了一个proc_init 在最末位加了个cpu_idel proc.c&.h 枚举类proc_state定义了进程生命周期里的各种状态 // process's state in his life cycle enum proc_state { PROC…
这个实验主要是将高速缓存命中的一点东西,意在告诉我们平常多注意这方面的东西. 不懂java的,所以只管C的部分. You will do this several times, making small modifications to see what differences they make—how the choice of language affects performance and how effective the compiler can be at optimizing y…