Nachos 操作系统
文章平均质量分 79
ymyss4
这个作者很懒,什么都没留下…
展开
-
nachos 进程管理,跟踪main.cc 过程分析
1.从main.cc的注释中可以看出,main.cc该函数做的主要工作是:Bootstrap code to initialize the operating system kernel.Allows direct calls into internal operating system functions,to simplify debugging and testing. In原创 2012-03-01 20:38:32 · 3839 阅读 · 0 评论 -
nachos 内存管理和多进程实现
1.首先利用位图来管理内存mBitmap = new BitMap(NumPhysPages); 2.创建用户空间时,首先从位图中找到一个空闲页,如果没有空间为,置为0,并标识valid = FALSE pageTable = new TranslationEntry[numPages]; for (i = 0; i < numPages; i++) {pageT原创 2012-05-18 19:31:23 · 2203 阅读 · 0 评论 -
nachos Lab3 TLB替换算法
Lab3 最近才开始做,过今天又要交了,本来还想凑合凑合混一下。结果昨天得知一个噩耗,看来还是要认真做啊。首先介绍一下nachos 的存储管理机制。当我们运行./nachos -x ../test/halt时,运行了一个用户程序。基本过程是: OpenFile *executable = fileSystem->Open(filename); 首先打开该执行文件。 Add原创 2012-05-16 15:03:01 · 4115 阅读 · 2 评论 -
nachos文件系统-实现多级目录
我在实现多级目录的时候是用递归来做的,在创建文件的时候文件名中可能包含有目录比如创建一个文件 abc/efg ,首先从该字符串中找到第一个目录abc,剩余字符串为 efg。首先入读根目录,从根目录的目录项中查找abc对应的头结点号。然后根据该sector num 读取abc文件的内容,由于该文件是一个目录文件,它也保存了一个目录项,再往abc目录文件的目录项中插入该efg文件。原创 2012-05-16 14:39:46 · 2571 阅读 · 0 评论 -
nachos 扩展文件长度
前段时间又忙着投各种简历,面试,结果纷纷悲剧。只能当时锻炼胆量和总结经验了,结果也发现了自己很多不足,决定闭关一阵子好好巩固巩固再说。Lab2 实在是没怎么认真做,基本都是参考上一些学长学姐做过的东西。也留下了很多BUG没有解决,所以也不敢放上来都。Lab3 过几天又要交了,这今天又有的忙活了,这两天会写一些实验中的过程方出来,仅供参考,当然我也都是参考别人的做的。攒人品,求过~原创 2012-05-16 14:31:17 · 1488 阅读 · 0 评论 -
nachos线程优先级控制
1.在thread.h中添加priority属性和set,get方法private: int priority; //priority of threadpubclic: int getPriority(){return priority;} void setPriority(int p) { if(p > PRIOR原创 2012-03-07 21:13:34 · 2376 阅读 · 2 评论 -
用条件变量和信号量解决生产者和消费者问题
用条件变量解决生产者和消费者问题(只有一个缓冲区):#define MAX 100 //最大操作次数 int buffer = 0; //用来记录缓冲区中是否为空,只有一个缓冲区Lock* mutex;Condition* condc;Condition* condp;//生产者void Producer(原创 2012-03-06 23:57:19 · 2832 阅读 · 2 评论 -
实现锁和条件变量
实现锁和条件变量,这个基本都是在参考别人的代码,然后自己慢慢理解.突然觉得自己好弱阿,不但写不出代码,看别人写的都要看半天才明白....打击颇大,要继续加油了.不然以后只好去中关村卖电脑了.1.实现锁锁和信号量的区别在于锁只有两个状态,0或者1,同一时间只能有1个线程进入临界区,所以也叫互斥量,还有一个区别时,为锁添加了占用锁的当前线程属性。修改synch.h文件,为Lock添加两原创 2012-03-06 21:23:58 · 2215 阅读 · 0 评论 -
nachos 线程同步机制
在nachos的sysnch文件中定义了解决同步线程的三种方式:信号semaphores,锁locks,环境变量condition variables。semaphores的实现nachos已经给出://sysnch.h// value的值是非负整数. P和V操作都是原子的,不可中断class Semaphore { public: Semaphore(char*原创 2012-03-06 21:23:18 · 2731 阅读 · 0 评论 -
nachos 增加全局线程管理机制,控制线程数
这个问题看起来很简单,却还是花了我很多时间来解决。开始时候不能在.cc文件中实现.h文件中的私有方法,后来不知道怎么又不报错了,很困惑。开始老想在调用构造函数的时候判断threadnum最后在小新的指导下,在thread中创建一个静态方法 getInstance,然后在其中判断师傅符合条件,如果符合则返回一个new thread,否则返回NULL。然后将构造方法声明为private,禁止外部调原创 2012-03-04 13:08:23 · 3199 阅读 · 0 评论 -
为thread 添加tid.
太苦逼了。从昨天晚上到今天下午才写好这么一个功能。OS的学问真实博大精深,只是一个ID的存储过程就复杂到看的我想哭了。这还只是其中最简单的一部分。好在,虽然还是有一些小问题,不过基本还是都解决了,终于可以稍微放送以下了,一会进行下一个作业。已经是满面油光了阿。。。~其中遇到了一个小问题,由于原来参考别人写代码中将page初始化为char []的格式,又将其中的每个字符初始值设为‘0原创 2012-03-03 16:31:51 · 3370 阅读 · 3 评论 -
nachos 缺页置换
Lab3 只是草草的做了一下,今天上课发现确实有很多问题。还是得用虚存来实现,不过实在是懒得弄了。。1 修改exception.cc中的方法,当发生TLB MISS时,如果该页不在内存中,从磁盘中加载该页。else if(which == PageFaultException) { //如果发生了缺页中断 DEBUG('p',"page fault\n"); /原创 2012-05-18 19:35:43 · 2158 阅读 · 0 评论