北大操作系统实验指导书nachos
北大操作系统高级课程-陈向群作业-线程调度实习报告
线程调度实习报告目录内容一:总体概述 (3)内容二:任务完成情况 (3)任务完成列表(Y/N) (3)具体Exercise的完成情况 (3)内容三:遇到的困难以及解决方法 (8)内容四:收获及感想 (9)内容五:对课程的意见和建议 (9)内容六:参考文献 (9)内容一:总体概述本次lab主要是对线程调度的学习和理解。
当计算机系统是多道程序设计系统时,通常就会有多个进程或或线程同时竞争CPU。
只要有两个或更多的进程处于就绪态,这种情况就会发生,那么就必须选择下一个要运行的进程。
在操作系统中,完成选择工作的这一部分称为调度程序,该程序使用的算法称为调度算法。
进程调度策略的选择对整个系统性能有至关重要的影响,一个好的调度算法应该考虑很多方面:公平、有效、响应时间、周转时间、系统吞吐量等等。
但这些因素之间又是相互矛盾的,最终的取舍根据系统要达到的目标而定,同时我们也可以看出多进程的管理是~种非常复杂的并发程序设计.每个进程的状态不仅由其自身决定,而且还要受诸多外在因素的影响.而在此基础上的进程调度,为了保证操作系统的稳定性、提高效率和增加灵活性,还必须采用很多方法,这些都是值得我们去研究和探讨的。
本次实验针对Nachos系统的代码的阅读和修改,了解Nachos系统中线程调度在代码中如何实现,以及在其上扩展线程调度算法,实现基于优先级的抢占式调度算法。
内容二:任务完成情况任务完成列表(Y/N)Exercise1 Exercise2 Exercise3完成情况Y Y Y具体Exercise的完成情况Exercise1调研了解Linux或Windows中采用的进程/线程调度算法。
解答:Linux 的调度算法演化伴随着其内核版本的更迭,具有代表性的版本以此为:2.4,2.6,以及最近几年频繁更替的版本:3.5,3.6,3.7,3.8,其中3.8 是最新的稳定版本。
下面就其调度机制的演化进行论述。
在 2.4 版本的内核之前,当很多任务都处于活动状态时,调度器有很明显的限制。
操作系统实验指导书
操作系统实验指导书实验概述本次操作系统实验是为了让学生通过实践了解操作系统的基本概念,原理和使用。
通过完成实验,学生将了解操作系统内核,进程调度,文件系统和输入输出等关键组成部分。
实验环境实验要求使用 Linux 操作系统,可以选择任意一种 Linux 发行版。
可以在物理机上安装 Linux,也可以使用虚拟机软件(如 VirtualBox)来运行 Linux 虚拟机。
实验准备在进行实验之前,需要完成以下准备工作:1.安装 Linux 操作系统(如 Ubuntu、Fedora 等)或虚拟机软件(如VirtualBox)。
2.熟悉 Linux 基本命令和操作,包括文件操作、进程管理等。
实验内容本次操作系统实验分为以下几个部分:1. 实验一:进程管理本部分实验要求学生了解进程管理的基本概念和原理,掌握进程创建、终止和状态转换等操作。
学生需要完成以下任务:•编写一个简单的 C 程序,实现进程的创建、终止和状态转换功能。
•使用 Linux 命令行工具编译、运行和调试 C 程序。
•观察和分析进程的状态转换过程。
2. 实验二:进程调度本部分实验要求学生了解进程调度算法的原理和实现方法,掌握优先级调度、轮转调度和最短作业优先调度等算法。
学生需要完成以下任务:•编写一个简单的 C 程序,模拟进程调度算法的执行过程。
•使用 Linux 命令行工具编译、运行和调试 C 程序。
•观察和分析不同调度算法对进程执行顺序的影响。
3. 实验三:文件系统本部分实验要求学生了解文件系统的基本概念和实现原理,掌握文件的创建、读写和删除等操作。
学生需要完成以下任务:•编写一个简单的 C 程序,实现文件的创建、读写和删除功能。
•使用 Linux 命令行工具编译、运行和调试 C 程序。
•观察和分析文件系统的存储结构和操作过程。
4. 实验四:输入输出本部分实验要求学生了解操作系统的输入输出机制和设备驱动程序的原理和实现方法,掌握文件读写、设备驱动和错误处理等操作。
nachos实验报告
nachos实验报告nachos实验报告一、引言操作系统是计算机系统中的核心软件之一,它负责管理计算机的硬件资源和提供各种服务。
为了更好地理解操作系统的原理和设计,我们在课程中进行了一系列的实验,其中之一就是使用nachos操作系统进行实验。
本报告将对我们在nachos实验中的学习和体验进行总结和分享。
二、nachos简介nachos是一个教学用的操作系统,它是为了帮助学生更好地理解操作系统的原理和设计而开发的。
nachos的设计简单、模块化,易于理解和扩展。
通过使用nachos,我们可以深入了解操作系统的各个组成部分,如进程管理、内存管理、文件系统等,并通过实验来加深对这些概念的理解。
三、实验一:进程管理在第一个实验中,我们学习了进程管理的基本原理和实现。
通过使用nachos,我们可以创建和管理多个进程,并学习它们之间的通信和同步机制。
我们了解了进程的状态转换、进程调度算法以及进程间通信的方法,如共享内存和消息传递等。
通过实验,我们更深入地理解了进程管理的重要性和挑战。
四、实验二:内存管理在第二个实验中,我们学习了内存管理的原理和实现。
nachos提供了虚拟内存的支持,我们可以通过设置页表和实现页面置换算法来管理内存。
我们了解了内存分页和分段的概念,以及常见的页面置换算法,如FIFO、LRU等。
通过实验,我们深入了解了内存管理的工作原理和性能优化方法。
五、实验三:文件系统在第三个实验中,我们学习了文件系统的原理和实现。
nachos提供了一个简单的文件系统接口,我们可以通过创建、读取和写入文件来学习文件系统的操作。
我们了解了文件系统的组织结构,如目录、文件和索引节点等,并学习了文件系统的一致性和恢复机制。
通过实验,我们更好地理解了文件系统的工作原理和性能优化方法。
六、实验四:网络通信在第四个实验中,我们学习了网络通信的原理和实现。
nachos提供了一个简单的网络模拟器,我们可以创建和管理多个网络节点,并通过网络进行通信。
操作系统实验指导书
操作系统实验指导书一、实验说明1、实验目的实验是操作系统原理课程中不可缺少的重要教学环节,实验目的是使学生理论联系实际,使学生在实践探索中去发现问题、去解决问题,提高了学生获取知识和应用技术的能力,培养了学生分析和解决问题的能力。
《操作系统原理》要求理论与实践相结合,本门实验课程是对《操作系统原理》课堂教学的一个重要补充,与理论学习起着相辅相成的作用,是实施《操作系统原理》教学的一个重要组成部分。
通过本实验课的实践学习,可以增强本专业的学生对系统实现的认识。
对加深理解和掌握操作系统相关原理有重要帮助。
2、实验要求进一步了解和掌握操作系统原理,提高系统设计的能力。
对每一实验题目,应独立完成,并要求:·上机前,学生必须做好充分的实验准备工作,掌握与实验相关的背景知识,用任一种高级语言编写程序。
·上机时,认真调试,并观察、记录程序运行过程中出现的现象和问题。
·上机后,分析实验结果并写出实验报告。
3、实验报告要求每个实验(包括选做的)均应编写实验报告,学生实验后要写出严谨的、实事求是的、文字通顺的、字迹公整的实验报告。
实验报告应包括以下内容:(1)实验题目(2)实验目的(3)实验内容●程序中使用的数据结构及符号说明●流程图●源程序清单并附上注释(4)实验结果及分析●运行结果(必须是上面程序清单所对应输出的结果)●对运行情况所作的分析以及本次调试程序所取得的经验。
如果程序未能通过,应分析其原因。
二、实验内容实验一熟悉使用计算机系统一、实验名称:熟悉使用计算机系统二、实验目的与要求通过对Windows操作系统的使用,熟悉Windows操作系统中的基本概念,如单用户、多任务、进程和文件等,熟悉Windows中命令行方式下常用命令的使用方法;进一步熟悉TC语言与开发环境,为以后的实验打好基础。
三、实验内容1.开机后,熟悉Windows的界面(桌面、任务栏、开始按钮<点击后出现“开始”菜单>、我的电脑图标、回收站、我的文档)。
北大操作系统高级课程-陈向群作业-通信和死锁实习说明
通信和死锁实习报告目录内容一:总体概述 (3)内容二:任务完成情况 (3)任务完成列表(Y/N) (3)具体Exercise的完成情况 (3)内容三:遇到的困难以及解决方法 (11)内容四:收获及感想 (11)内容五:对课程的意见和建议 (11)内容六:参考文献 (11)内容一:总体概述通过这次实习,更加深入地了解了Nachos 死锁的概念。
死锁就是指两个或两个以上的进程在执行过程中,因争夺资源而造成的一种互相等待的现象,若无外力作用,它们都将无法推进下去。
此时称系统处于死锁状态或系统产生了死锁,这些永远在互相等待的进程称为死锁进程。
由于资源占用是互斥的,当某个进程提出申请资源后,使得有关进程在无外力协助下,永远分配不到必需的资源而无法继续运行,这就产生了一种特殊现象:死锁。
内容二:任务完成情况任务完成列表(Y/N)Exercise1 Exercise2 Exercise3 Exercise4完成情况Y Y Y Y具体Exercise的完成情况一、通信机制Exercise 1调研Linux中进程通信机制的实现解答:原子操作原子操作是不可分割的,在执行完毕不会被任何其它任务或事件中断。
在单处理器系统(UniProcessor)中,能够在单条指令中完成的操作都可以认为是"原子操作",因为中断只能发生于指令之间。
这也是某些CPU指令系统中引入了 test_and_set、test_and_clear等指令用于临界资源互斥的原因。
但是,在对称多处理器(Symetric Multi-Processor)结构中就不同了,由于系统中有多个处理器在独立地运行,即使能在单条指令中完成的操作也有可能受到干扰。
我们以 decl(递减指令)为例,这是一个典型的"读-改-写"过程,涉及两次内存访问。
自旋锁自旋锁:单处理器非抢占式内核和对称多处理器或抢占式内核Linux 2.4.x及以前的版本都是非抢占式内核方式,如果编译成单处理器系统,在同一时间只有一个进程在执行,除非它自己放弃,不然只有通过"中断"才能中断其执行。
操作系统原理上机实践指南_Nachos
单位:南开大学机器智能研究所Institute of Machine Intelligence日期:二零零七年十月修订记录目录第一章试验环境介绍 (4)1.1引言 (4)1.2Nachos平台的功能特点简介 (4)1.2.1 什么是Nachos (4)1.2.2 Nachos的特点功能介绍 (4)1.3Nachos平台的搭建与配置 (5)1.3.1Nachos试验环境文件列表 (5)1.3.2Nachos试验环境搭建步骤 (6)1.3.3Nachos的功能模块组成结构 (22)1.3.4Nachos的编译运行开发环境 (22)第二章Nachos平台技术实现说明 (24)2.1Nachos的机器模拟机制概述 (24)2.1.1Sysdep模块实现机制分析 (24)2.1.2中断处理模块实现机制分析 (27)2.1.3时钟中断模块实现机制分析 (28)2.1.4终端设备模块实现机制分析 (29)2.1.5磁盘设备模块实现机制分析 (29)2.1.6系统运行情况统计 (30)2.2Nachos中的进程/线程管理 (30)2.2.1相关知识点回顾 (30)2.2.2功能概述 (30)2.2.3具体模块实现介绍 (31)2.3Nachos中的文件系统管理 (33)2.3.1相关知识点回顾 (33)2.3.2功能概述 (34)2.3.3具体模块实现介绍 (34)2.4Nachos中的存储系统管理 (36)2.4.1相关知识点回顾 (36)2.4.2功能概述 (36)2.4.3具体模块实现介绍 (37)2.5Nachos中的网络系统管理 (37)2.5.1相关知识点回顾 (37)2.5.2现有功能分析 (37)2.5.3具体模块实现介绍 (38)第三章Nachos平台上机实践项目设置 (40)3.1实践项目1:Nachos的线程管理模块升级 (40)3.1.1上机实践具体要求 (40)3.1.2实践的过程和步骤 (40)3.1.3实践结果验证方式 (41)3.2实践项目2:Nachos的文件管理模块升级......................... 错误!未定义书签。
nachos01
实验一体验Nachos下的并发程序设计实验简述1、在安装nachos2、实现双向链表3、线程切换的一些错误分析实验内容:1、安装nachos:首先是把nachos程序的文件code-linux.tar.gz拷贝到自己的UNIX账户下,然后将其解压,命令是tar -xzvf code-linux.tar.gz然后是测试安装有没有成功:编译,进入工作路径/nachos-3.4/code/threads执行make depend命令,这样就生成了一个名为nachos的可执行程序,运行输入命令./nachos便开始执行默认的功能(两条线程交互打印)2、实现双向链表:dllist.h 双向链表的头文件,以及里面的两个函数的声明 双向链表的具体方法的实现 调用的方法实现双向链表的有序插入和从头开始的删除里面的方法主要有两个:sortedinsert( ):实现双向链表的有序sortedremove( ):删除链表的头一个节点(first),在里面用一个for循环实现删除整个链表具体代码如下:---------------------------------------------------------------------------------------------------------------------- voiddllist::sortedinsert(void *item,int sortkey){dllelement *element=new dllelement(item,sortkey);dllelement *ptr;if(isempty()){ first=element;last=element;}else if(sortkey<first->key){element->next=first;first->prev=element;if(yield_type == 3)//线程切换点3//在first要指向新插入节点element是切换线程,导致程序错误,无法运行{ printf("switch yield_type = 3 \n");currentThread->Yield();}first=element;}else{if(yield_type == 4)//线程切换点4线程切换点4:在寻找插入点的时候(不是头节点)切换程序,导致排序错乱{printf("switch yield_type = 4 \n");currentThread->Yield();}for(ptr=first;ptr->next !=NULL;ptr=ptr->next){if(ptr->next->key>sortkey){element->prev=ptr;element->next=ptr->next;ptr->next->prev=element;ptr->next=element;return;}}last->next=element;element->prev=last;if(yield_type == 1)//线程切换点1//在last要指向新插入节点element是切换线程,导致节点丢失,{printf("switch yield_type = 1 \n");currentThread->Yield();}last=element;}}---------------------------------------------------------------------void *dllist::sortedremove(int *keyptr){ dllelement *element = first;void *thing;if (isempty())return NULL;if(keyptr != NULL)*keyptr = first->key;if(yield_type == 2)//线程切换点2//在准备删除的时候,切换程序,导致重复删除,节点删除不完全{printf("switch thread yield_type = 2 \n");currentThread->Yield();}thing = first->item;if (first == last){ // list had one item, now has nonefirst = NULL;last = NULL;}else{ element->prev=NULL;first = element->next;}delete element;return thing;}都是最基本的数据结构的知识,只是添加了一些参数进行参数线程切换里面是对上面两个函数的调用:dllist dl;char *item="abd";void dllbuild(int n,int which)//创建双向链表{//srand((unsigned)time(NULL));int i;for(int j=0;j<n;j++){i=rand()%100;dl.sortedinsert(item,i);printf("thread %d save key %d\n",which,i);}//dl.output();//printf("\n");}--------------------------------------------------------------------- void dlldeleteall(int n,int which)//删除双向链表(从头开始删){int k;for(int i=0;i<n;i++){dl.sortedremove(&k);printf("dllist thread %d delete element %dkey= %d\n",which,i,k);}}3、修改相关文件,实现多线程运行:的修改:仿造threadTest1的结构,代码如下://------------------------------------------------------------------ // set up dllist and sort\delete//----------------------------------------------------------------- voidSortAndDel(int which){ dllbuild(elenum,which);dlldeleteall(elenum,which);}//------------------------------------------------------------------ // ThreadTest2//------------------------------------------------------------------- voidThreadTest2(){ int i;DEBUG('t',"Entering ThreadTeat2");for(i=1;i<threadnum;i++){ Thread *t =new Thread("forkd dllist thread");t->Fork(SortAndDel,i);}SortAndDel(0);}voidThreadTest(){ switch (testnum) {case 1:ThreadTest1();break;case 2://双向链表ThreadTest2();break;default:printf("No test specified.\n");break;}}的修改:变量声明:extern int testnum;extern int threadnum;//线程数量extern int elenum;//双向链表节点的个数extern int yield_type;//线程切换点参数的输入:for (argc--, argv++; argc > 0; argc -= argCount, argv += argCount) { argCount = 1;switch (argv[0][1]) {case'q':testnum = atoi(argv[1]);argCount++;break;case't':threadnum = atoi(argv[1]);argCount++;break;case'n': elenum = atoi(argv[1]);argCount++;break;//双向链表节点个数case'y':yield_type= atoi(argv[1]);argCount++;break;default:testnum = 1;break;}}ThreadTest();实验结果及分析:1、修改nachos-3.4/code/mon中的THREAD_H、THREAD_C、THREAD_O:2、在nachos-3.4/code/threads/中依次执行make depend和make:4、程序执行的操作如下;-q 2 :表示运行threadTeat2( ),也就是双向链表的相关操作-t n:表示N个线程在运行-n n:表示双向链表有n个节点-y n:表示第n个线程切换点,试验中只有1、2、3、4 四个位置执行:./nachos –q 2 –t 2 –n 3 结果如下:两个线程按照顺序依次执行,结果没有错误执行:./nachos –q 2 –t 2 –n 3 –y 1 结果为:线程切换点1:在last要指向新插入节点element是切换线程,导致节点丢失,截图中可以看到,key=86的节点被覆盖掉了丢失了。
北大操作系统高级课程-陈向群作业-系统调用实习报告
系统调用实习报告目录内容一:总体概述 (3)内容二:任务完成情况 (3)任务完成列表(Y/N) (3)具体Exercise的完成情况 (3)内容三:遇到的困难以及解决方法 (6)内容四:收获及感想 (6)内容五:对课程的意见和建议 (7)内容六:参考文献 (7)内容一:总体概述通过这次实习,更加深入地了解了Nachos 系统调用的实现。
巩固了原理课上学习的关于Linux 系统调用的实现细节。
这次试验也主要是系统调用的相关实现涉及了syscall.h,,start.s 的原理部分和相关调用部分的再实现。
内容二:任务完成情况任务完成列表(Y/N)Exercise1 Exercise2 Exercise3 Exercise4 Exercise5 完成情况Y Y Y Y Y具体Exercise的完成情况一、理解Nachos系统调用Exercise 1 源代码阅读阅读与系统调用相关的源代码,理解系统调用的实现原理。
code/userprog/syscall.h解答:该文件是nachos 系统调用的头文件,里面声明了一些nachos 的内核操作,可以被用户程序通过syscall 调用,在用户程序和内核文件中都需包含本文件,其中包含了Halt,Exit,Exec,Join,Create,Open,Read,Write,Close,Fork,Yield 调用方法的声明。
code/userprog/解答:Exception.h 和 是专门用来检测和处理异常信息的类,原始的nachos给出了syscall 异常的处理方式,并通过ExceptionHandler对各种异常进行处理。
code/test/start.s解答:start.s 文件中用汇编语言协助用户程序在nachos 中运行,以避免使用完整的c 库,我们定义了用户程序所需要的东西以便进行系统调用。
二、文件系统相关的系统调用Exercise 2系统调用实现类比Halt的实现,完成与文件系统相关的系统调用:Create, Open,Close,Write,Read。
(完整word版)Nachos中文教程
第一章绪论 (1)第一节N ACHOS概述 (1)一、引言 (1)二、Nachos教学用操作系统 (1)第二节N ACHOS的实验环境 (4)一、Nachos的安装 (4)二、Nachos的目录结构 (4)三、各个部分的编译运行 (4)四、应用程序的编译 (5)第二章机器模拟 (6)第一节概述 (6)第二节机器模拟的实现 (10)1. Sysdep模块分析(文件 sysdep.h) (10)1.1 PoolFile 函数 (10)1.2 OpenForWrite 函数 (10)1.3 OpenForReadWrite 函数 (10)1.4 Read 函数 (10)1.5 ReadPartial 函数 (11)1.6 WriteFile 函数 (11)1.7 Lseek 函数 (11)1.8 Tell 函数 (11)1.9 Close 函数 (11)1.10 Unlink 函数 (12)1.11 OpenSocket 函数 (12)1.12 CloseSocket 函数 (12)1.13 AssignNameToSocket 函数 (12)1.14 DeAssignNameToSocket 函数 (12)1.15 PoolSocket 函数 (12)1.16 ReadFromSocket 函数 (13)1.17 SendToSocket 函数 (13)1.18 CallOnUserAbort 函数 (13)1.19 Delay 函数 (13)1.20 Abort 函数 (13)1.21 Exit 函数 (14)1.22 RandomInit 函数 (14)1.23 Random 函数 (14)1.24 AllocBoundedArray 函数 (14)1.25 DeallocBoundedArray 函数 (14)2. 中断模块分析(文件 interrupt.h) (14)2.1 PendingInterrupt类 (16)2.2 Interrupt类 (17)2.2.1 内部使用方法 (17)2.2.2 内部使用函数 (18)2.2.3 对外接口 (18)3. 时钟中断模块分析(文件 timer.h) (20)4. 终端设备模块分析(文件 console.h) (22)5. 磁盘设备模块分析(文件 disk.h) (23)6. Nachos运行情况统计(文件 stats.h) (24)第三章线程管理系统 (25)第一节进程与线程 (25)一、进程 (25)1. 进程概念 (25)2. 进程的状态及状态变化 (25)3. 进程调度 (26)4. 进程之间的同步和互斥 (27)5. 进程的实施 (28)6. 进程的创建 (28)二、线程 (28)1. 线程概念 (28)2. 进程和线程的关系 (30)第二节N ACHOS的线程管理 (31)一、Nachos的线程管理 (31)二、Nachos线程管理同实际进程管理的不同 (33)第三节N ACHOS线程管理系统的初步实现 (34)1. 工具模块分析(文件 list.h utility.h) (34)2. 线程启动和调度模块分析(文件switch.s switch.h) (34)2.1 ThreadRoot函数 (34)2.2 SWITCH函数 (35)3. 线程模块分析(文件 thread.h) (35)3.1 Fork 方法 (37)3.2 StackAllocate 方法 (37)3.3 Yield 方法 (38)3.4 Sleep 方法 (39)4. 线程调度算法模块分析(文件 scheduler.h) (39)4.1 Run方法 (40)5. Nachos主控模块分析(文件 system.h) (40)6. 同步机制模块分析(文件 synch.h) (41)6.1 信号量( Semaphore ) (41)6.2 锁机制 (41)6.3 条件变量 (42)第四节线程管理系统作业 (44)第五节实现实例 (46)4.1 对线程的改进 (46)4.2 对线程调度的改进 (47)第四章文件管理系统 (50)第一节文件管理系统概述 (50)一、文件 (50)1. 文件结构 (50)2. 文件访问 (51)3. 文件类型 (51)4. 文件属性 (52)5. 文件操作 (52)二、目录 (53)1. 目录结构 (53)2. 多级目录结构 (54)3. 文件路径名 (54)4. 工作目录 (54)5. 目录结构的勾连 (54)6. 目录项 (55)三、UNIX文件系统的实现 (55)1. UNIX文件系统中的主要结构 (55)2. UNIX文件系统存储资源的分配和回收 (57)第二节N ACHOS文件管理系统 (60)第三节N ACHOS文件系统的实现 (62)1. 同步磁盘分析(文件 、synchdisk.h) (62)2. 位图模块分析(文件、bitmap.h) (63)3. 文件系统模块分析(文件、filesys.h) (63)3.1 生成方法 (64)3.2 Create方法 (64)3.3 Open方法 (65)3.4 Remove方法 (65)4. 文件头模块分析(文件、filehdr.h) (65)5. 打开文件结构分析(文件、openfile.h) (66)5.1 ReadAt方法 (66)5.2 WriteAt方法 (66)6. 目录模块分析(文件 directory.h) (67)第四节文件管理系统作业 (69)第五章用户程序和虚拟内存 (70)第一节N ACHOS 对内存、寄存器以及CPU的模拟 (70)1 RaiseException 方法 (73)2 ReadMem 方法 (73)3 WriteMem 方法 (73)4 Translate方法 (73)5 Run 方法 (74)第二节N ACHOS用户进程运行机制 (75)一、用户程序空间(文件, address.h) (75)1.1 生成方法 (75)1.2 InitRegisters方法 (76)1.3 SaveState方法 (76)1.4 RestoreState方法 (76)二、系统调用(文件, syscall.h, start.s) (76)第三节虚存管理的设计和实现 (78)一、Nachos存储管理的改进要求 (78)二、一个虚拟存储管理实现的实例 (78)2.1 虚拟存储系统的总体设计 (78)2.2 缺页中断陷入及其调度算法 (81)2.3 虚存的存储分配 (83)2.4 存储保护 (83)2.5 实现中的一些细节 (83)第四节用户程序和虚拟存储作业 (85)第六章NACHOS的网络系统 (86)第一节N ACHOS对物理网络的模拟 (86)第二节N ACHOS的邮局协议 (89)2.1 PostalDelivery方法 (90)2.2 Send方法 (91)第三节网络部分作业 (92)第一章绪论第一节Nachos概述一、引言计算机操作系统是一门实践性很强的课程。
《操作系统》实验指导书
操作系统实验指导书专业:计算机科学与技术;软件工程课程名称:操作系统课程类别:专业必修课计算机与通信工程学院2009目录第1篇Linux操作系统使用 (1)实验1Linux系统的安装及基本操作 (1)实验2Linux 的常用命令与基本管理 (38)第2篇操作系统算法模拟 (53)实验1 银行家算法 (53)实验2 进程调度 (55)实验3 动态分区分配 (56)实验4 页式存储管理 (57)实验5 虚拟存储管理器的页面调度 (59)实验6 文件管理 (62)实验7 磁盘存储空间的分配与回收 (64)实验8 磁盘调度 (66)附录 (67)实验1报告写法 (67)实验2报告的写法 (67)算法模拟部分 (68)第1篇Linux操作系统使用实验1Linux系统的安装及基本操作一、实验目的1.掌握Red Hat Enterprise Linux 5的安装方法。
2.了解Linux操作系统的启动与登录方法。
3.掌握Red Hat Linux图形用户界面下的基本操作。
二、实验工具与设备1.实验工具:Red Hat Enterprise Linux 5光盘或镜像文件。
2.实验设备:计算机(带CD-ROM)一台。
三、实验预备知识虚拟机简介虚拟机,顾名思义就是虚拟出来的电脑,这个虚拟出来的电脑和真实的电脑几乎完全一样,所不同的是他的硬盘是在一个文件中虚拟出来的,所以你可以随意修改虚拟机的设置,而不用担心对自己的电脑造成损失。
虚拟机中有自己的CPU、主板、内存、BIOS、显卡、硬盘、光驱、软驱、网卡、声卡、串口、并口和US B等设备。
Vmware介绍Vmware是一个“虚拟PC”软件。
它使你可以在一台机器上同时运行二个或更多Windows、DOS、LINUX系统。
与“多启动”系统相比,VMWare采用了完全不同的概念。
多启动系统在一个时刻只能运行一个系统,在系统切换时需要重新启动机器。
VMWare是真正“同时”运行,多个操作系统在主系统的平台上,就象标准Wi ndows应用程序那样切换。
Nachos操作系统部分实验说明
………
新的设计的实验内容和步骤:
重新执行../lab2中的make 重新执行./nachos –rs 10
可以看到新内核的输出按规定的静态优先数次序在并发执行:
Name:Main Num:0 looped:0 Name:T1 Num:1 looped:0 Name:T2 Num:2 looped:0 Name:T1 Num:1 looped:1 Name:T2 Num:2 looped:1 Name:T1 Num:1 looped:2 ……
以上设计实验输出结果的分析:
主线程首先执行后放弃CPU,T1优先级最高排在队首先被选中。主线程由于优 先级最低被排在队列尾。
T1 线程放弃 CPU,当前 T2 在队首先被选中。T1 优先级最高又被排在队首。 T2线程放弃CPU,当前T1在队首先被选中。T2被排在队首。 如此重复5次,T1和T2线程执行结束,队列中仅有主线程了。主线程连续执行 4次后结束工作。
………… private:
………….. int Priority;//线程的优先数 } 4、在构造线程类时为线程设置一个静态优先数: 在 中的 Thread::Thread(char * debugName,int priority)
{ ……. Priority = priority;
一、内核线程调度策略设计
设计目标:
在 Nachos 系统中实现按优先数调度线程, 研究各种调度策略算法的实现, 分析各种调度算法的性能。 …..
设计背景:
从 Nachos 系统的基本内核./threads/ 文件中可以看出 Nachos 系统的基本内核实现了先进先出的调度策略。
调度类 Scheduler 管理着一个就绪队列 list。它的成员函数 ReadyToRun(currentThread)将当前线程挂入该队列的队尾: Scheduler::ReadyToRun (Thread *thread) {
操作系统nachos课程设计实验报告
一题目project1:实现nachos操作系统的project1中的join()方法,condition2类,Alarm类,Communicator类,PriorityScheduler类和Boat类project2:实现nachos操作系统的project2中的creat open read write close unlink 文件系统调用,修改UserProcess.readVirtualMemory 和UserProcess.writeVirtualMemory使操作系统能够运行多用户程序,实现exec join exit系统调用,实现LotteryScheduler类二实验目的熟悉nachos操作系统,深入理解操作系统内核了解用户程序的加载过程以及多用户进程的内存分配机制三实验要求完成nachos,提交设计文档和你的代码四实验说明,程序代码及测试结果Project1:1 join()要求实现join()方法,注意,其他线程没必要调用join函数,但是如果它被调用的话,也只能被调用一次。
join()方法第二次调用的结果是不被定义的,即使第二次调用的线程和第一次调用的线程是不同的。
无论有没有被join,一个进程都能够正常结束(a)设计思想当线程B执行A.join()时,将B放入A的等待队列,直到A完成时,唤醒在等待队列中的所有线程,因此需要实现join()方法和修改finish方法(b)源代码public void join() {Lib.debug(dbgThread, "Joining to thread: " + toString());Lib.assertTrue(this != currentThread);Lib.assertTrue(join_counter == 0);join_counter++;boolean status = Machine.interrupt().disable();if (this.status != statusFinished) {waitQueue.waitForAccess(KThread.currentThread());currentThread.sleep();}Machine.interrupt().restore(status);}public static void finish() {Lib.debug(dbgThread, "Finishing thread: " +currentThread.toString());Machine.interrupt().disable();Machine.autoGrader().finishingCurrentThread();Lib.assertTrue(toBeDestroyed == null);toBeDestroyed = currentThread;currentThread.status = statusFinished;KThread thread = currentThread().waitQueue.nextThread();if (thread != null){thread.ready();}sleep();}(c)程序截图线程1每次执行打出执行的次数,每次执行过后放弃cpu,线程2打出successful,线程2执行thread1.join().通过截图可以看出代码正确2 Condition2通过使用开关中断提供原子性来直接实现条件变量,我们利用信号量提供了一个简单的实现方式,你的工作就是不直接使用信号量提供相同的实现(你或许使用锁,即使它们也间接的使用了信号量)。
NachOS实验报告(4个全)
NachOS实验报告(4个全)四川大学操作系统课程设计报告学院:软件学院专业:软件工程专业年级:08级组编号:组成员:提交时间:2010年6月24日指导教师评阅意见:.. . . .指导教师评阅成绩:::实验项目一项目名称:开发Shell程序试验背景知识Shell此处的shell是指命令行式的shell。
文字操作系统与外部最主要的接口就叫做shell。
shell是操作系统最外面的一层。
shell管理你与操作系统之间的交互:等待你输入,向操作系统解释你的输入,并且处理各种各样的操作系统的输出结果。
shell提供了你与操作系统之间通讯的方式。
这种通讯可以以交互方式(从键盘输入,并且可以立即得到响应),或者以shell script(非交互)方式执行。
shell script是放在文件中的一串shell和操作系统命令,它们可以被重复使用。
本质上,shell script是命令行命令简单的组合到一个文件里面。
Shell基本上是一个命令解释器,类似于DOS下的。
它接收用户命令(如ls等),然后调用相应的应用程序。
较为通用的shell有标准的Bourne shell (sh)和C shell (csh)。
交互式shell和非交互式shell交互式模式就是shell等待你的输入,并且执行你提交的命令。
这种模式被称作交互式是因为shell与用户进行交互。
这种模式也是大多数用户非常熟悉的:登录、执行一些命令、签退。
当你签退后,shell 也终止了。
shell也可以运行在另外一种模式:非交互式模式。
在这种模式下,shell不与你进行交互,而是读取存放在文件中的命令,并且执行它们。
当它读到文件的结尾,shell也就终止了。
实验目的:Shell是一个命令处理器(command processor)——是一个读入并解释你输入的命令的程序,它是介于使用者和操作系统之核心程序(kernel)间的一个接口。
它是一个交互性命令解释器。
操作系统实验指导书
操作系统实验指导书
计算机科学与技术教研室操作系统课题组 2007. 09
前 言
《操作系统》实验指导书是为高等院校计算机及相关专业“操作系 统原理”课程而编写的实验辅助教材。目的是通过一系列使用Windows 2000、Linux内核的动手实验练习,把操作系统的概念和理论知识融入 到实践当中,从而加深对现代操作系统的认识和理解。 本书中的实验练习覆盖了操作系统原理的各个方面,内容涉及操作 系统安装和环境、进程描述与控制、调度、存储管理、输入/输出管 理、文件系统、操作系统安全等。每个实验包含2~3个实验练习,全书 共18个实验练习。每个实验练习中部包含背景知识介绍、所需的工具及 准备工作和实验指导等,实验练习的难易程度不同,以帮助读者加深对 教材中概念的理解。另外,可根据具体实验学时选作部分实验。
存储,填入表1-2中。 表1-2 实验记录 类型
名称
描述
服务和应用程序,填入表1-3中。 表1-3 实验记录 名称 类型 描述
(2)事件查看器 事件查看器不但可以记录各种应用程序错误、损坏的文件、丢失的 数据以及其他问题,而且还可以把系统和网络的问题作为事件记录下 来。管理员通过查看在事件查看器中显示的系统信息,可以迅速诊断和 纠正可能发生的错误和问题。 步骤1:在“管理工具”窗口中,双击“事件查看器”图标。 在windows 2000事件查看器中,管理员可以查看到三种类型的本地 事件日志,请填入表1-4中。 表1-4 实验记录 名称 类型 描述 当前大小
北大 nachos 考试 虚拟内存实验讲解
0x…
UserStack uninit data Init data
…… 0x8: 0x4: 0x14: 0x10: 0x0 0x0:
…… JAL 8 SLL r0,r0,0 SYSCALL ADDIU r2,r0,0 JAL 52
0x0
Thread类中关于用户程序的属性 #ifdef USER_PROGRAM int userRegisters[NumTotalRegs]; AddrSpace *space; #endif
1. 创建user address space并初始化 2. 用machine->Run来运行user address space中的指令
用户线程
StartProcess: 1. 创建user address space并初始化 2. 用machine->Run来运行user address space中的指令
agenda
• Nachos 用户程序 生成过程 • Nachos 用户程序 可执行文件格式 • Nachos使用MIPS模拟器执行用户程序过程
• 装载用户程序到MIPS模拟器 • 使用MIPS模拟器执行用户程序
用户线程
用户线程
如何让Nachos支持用户程序?
#ifdef USER_PROGRAM … #endif
data用户程序生成过程用户可执行程序示例更改后的haltcincludesyscallhintintmain最终的halt可执行文件内容0x456789abvirtualaddr0x0infileaddr0x28size2720x1100x138160x1200x80490a032code内容initdata内容uninitdata内容noffheader用户可执行程序示例更改后的haltcincludesyscallhintintmain最终的halt可执行文件内容0x456789abvirtualaddr0x0infileaddr0x28size2720x1100x138160x1200x80490a032code内容initdata内容uninitdata内容noffheader0x0
操作系统原理课程设计实施方案实验手册
操作系统原理课程设计实验手册2007年4月目录第一章试验环境介绍51.1引言51.2Nachos平台地功能特点简介51.2.1 什么是Nachos51.2.2 Nachos地特点功能介绍51.3Nachos平台地搭建与配置61.3.1Nachos试验环境文件列表61.3.2Nachos试验环境搭建步骤71.3.3Nachos地功能模块组成结构191.3.4Nachos地编译运行开发环境20第二章Nachos平台技术实现说明212.1Nachos地机器模拟机制概述212.1.1Sysdep模块实现机制分析212.1.2中断处理模块实现机制分析242.1.3时钟中断模块实现机制分析252.1.4终端设备模块实现机制分析262.1.5磁盘设备模块实现机制分析262.1.6系统运行情况统计272.2Nachos中地进程/线程管理272.2.1相关知识点回顾272.2.2功能概述272.2.3具体模块实现介绍282.3Nachos中地文件系统管理302.3.1相关知识点回顾302.3.2功能概述312.3.3具体模块实现介绍312.4Nachos中地存储系统管理332.4.1相关知识点回顾332.4.2功能概述332.4.3具体模块实现介绍342.5Nachos中地网络系统管理342.5.1相关知识点回顾342.5.2现有功能分析342.5.3具体模块实现介绍35第三章Nachos平台上机实践项目设置373.1实践项目1:Nachos地线程管理模块升级373.1.1上机实践具体要求373.1.2实践地过程和步骤383.1.3实践结果验证方式383.2实践项目2:Nachos地文件管理模块升级383.2.1上机实践具体要求383.2.2实践地过程和步骤393.2.3实践结果验证说明403.3实践项目3:Nachos地内存管理模块升级403.3.1上机实践具体要求403.3.2实践地过程和步骤413.3.3实践结果验证说明42第四章Windows平台上机实践项目设置错误!未定义书签。
(完整word版)Nachos中文教程
第一章绪论 (1)第一节N ACHOS概述 (1)一、引言 (1)二、Nachos教学用操作系统 (1)第二节N ACHOS的实验环境 (4)一、Nachos的安装 (4)二、Nachos的目录结构 (4)三、各个部分的编译运行 (4)四、应用程序的编译 (5)第二章机器模拟 (6)第一节概述 (6)第二节机器模拟的实现 (10)1. Sysdep模块分析(文件 sysdep.h) (10)1.1 PoolFile 函数 (10)1.2 OpenForWrite 函数 (10)1.3 OpenForReadWrite 函数 (10)1.4 Read 函数 (10)1.5 ReadPartial 函数 (11)1.6 WriteFile 函数 (11)1.7 Lseek 函数 (11)1.8 Tell 函数 (11)1.9 Close 函数 (11)1.10 Unlink 函数 (12)1.11 OpenSocket 函数 (12)1.12 CloseSocket 函数 (12)1.13 AssignNameToSocket 函数 (12)1.14 DeAssignNameToSocket 函数 (12)1.15 PoolSocket 函数 (12)1.16 ReadFromSocket 函数 (13)1.17 SendToSocket 函数 (13)1.18 CallOnUserAbort 函数 (13)1.19 Delay 函数 (13)1.20 Abort 函数 (13)1.21 Exit 函数 (14)1.22 RandomInit 函数 (14)1.23 Random 函数 (14)1.24 AllocBoundedArray 函数 (14)1.25 DeallocBoundedArray 函数 (14)2. 中断模块分析(文件 interrupt.h) (14)2.1 PendingInterrupt类 (16)2.2 Interrupt类 (17)2.2.1 内部使用方法 (17)2.2.2 内部使用函数 (18)2.2.3 对外接口 (18)3. 时钟中断模块分析(文件 timer.h) (20)4. 终端设备模块分析(文件 console.h) (22)5. 磁盘设备模块分析(文件 disk.h) (23)6. Nachos运行情况统计(文件 stats.h) (24)第三章线程管理系统 (25)第一节进程与线程 (25)一、进程 (25)1. 进程概念 (25)2. 进程的状态及状态变化 (25)3. 进程调度 (26)4. 进程之间的同步和互斥 (27)5. 进程的实施 (28)6. 进程的创建 (28)二、线程 (28)1. 线程概念 (28)2. 进程和线程的关系 (30)第二节N ACHOS的线程管理 (31)一、Nachos的线程管理 (31)二、Nachos线程管理同实际进程管理的不同 (33)第三节N ACHOS线程管理系统的初步实现 (34)1. 工具模块分析(文件 list.h utility.h) (34)2. 线程启动和调度模块分析(文件switch.s switch.h) (34)2.1 ThreadRoot函数 (34)2.2 SWITCH函数 (35)3. 线程模块分析(文件 thread.h) (35)3.1 Fork 方法 (37)3.2 StackAllocate 方法 (37)3.3 Yield 方法 (38)3.4 Sleep 方法 (39)4. 线程调度算法模块分析(文件 scheduler.h) (39)4.1 Run方法 (40)5. Nachos主控模块分析(文件 system.h) (40)6. 同步机制模块分析(文件 synch.h) (41)6.1 信号量( Semaphore ) (41)6.2 锁机制 (41)6.3 条件变量 (42)第四节线程管理系统作业 (44)第五节实现实例 (46)4.1 对线程的改进 (46)4.2 对线程调度的改进 (47)第四章文件管理系统 (50)第一节文件管理系统概述 (50)一、文件 (50)1. 文件结构 (50)2. 文件访问 (51)3. 文件类型 (51)4. 文件属性 (52)5. 文件操作 (52)二、目录 (53)1. 目录结构 (53)2. 多级目录结构 (54)3. 文件路径名 (54)4. 工作目录 (54)5. 目录结构的勾连 (54)6. 目录项 (55)三、UNIX文件系统的实现 (55)1. UNIX文件系统中的主要结构 (55)2. UNIX文件系统存储资源的分配和回收 (57)第二节N ACHOS文件管理系统 (60)第三节N ACHOS文件系统的实现 (62)1. 同步磁盘分析(文件 、synchdisk.h) (62)2. 位图模块分析(文件、bitmap.h) (63)3. 文件系统模块分析(文件、filesys.h) (63)3.1 生成方法 (64)3.2 Create方法 (64)3.3 Open方法 (65)3.4 Remove方法 (65)4. 文件头模块分析(文件、filehdr.h) (65)5. 打开文件结构分析(文件、openfile.h) (66)5.1 ReadAt方法 (66)5.2 WriteAt方法 (66)6. 目录模块分析(文件 directory.h) (67)第四节文件管理系统作业 (69)第五章用户程序和虚拟内存 (70)第一节N ACHOS 对内存、寄存器以及CPU的模拟 (70)1 RaiseException 方法 (73)2 ReadMem 方法 (73)3 WriteMem 方法 (73)4 Translate方法 (73)5 Run 方法 (74)第二节N ACHOS用户进程运行机制 (75)一、用户程序空间(文件, address.h) (75)1.1 生成方法 (75)1.2 InitRegisters方法 (76)1.3 SaveState方法 (76)1.4 RestoreState方法 (76)二、系统调用(文件, syscall.h, start.s) (76)第三节虚存管理的设计和实现 (78)一、Nachos存储管理的改进要求 (78)二、一个虚拟存储管理实现的实例 (78)2.1 虚拟存储系统的总体设计 (78)2.2 缺页中断陷入及其调度算法 (81)2.3 虚存的存储分配 (83)2.4 存储保护 (83)2.5 实现中的一些细节 (83)第四节用户程序和虚拟存储作业 (85)第六章NACHOS的网络系统 (86)第一节N ACHOS对物理网络的模拟 (86)第二节N ACHOS的邮局协议 (89)2.1 PostalDelivery方法 (90)2.2 Send方法 (91)第三节网络部分作业 (92)第一章绪论第一节Nachos概述一、引言计算机操作系统是一门实践性很强的课程。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
第一章绪论 (1)第一节N ACHOS概述 (1)一、引言 (1)二、Nachos教学用操作系统 (1)第二节N ACHOS的实验环境 (4)一、Nachos的安装 (4)二、Nachos的目录结构 (4)三、各个部分的编译运行 (4)四、应用程序的编译 (5)第二章机器模拟 (6)第一节概述 (6)第二节机器模拟的实现 (10)1. Sysdep模块分析(文件 sysdep.h) (10)1.1 PoolFile 函数 (10)1.2 OpenForWrite 函数 (10)1.3 OpenForReadWrite 函数 (10)1.4 Read 函数 (10)1.5 ReadPartial 函数 (11)1.6 WriteFile 函数 (11)1.7 Lseek 函数 (11)1.8 Tell 函数 (11)1.9 Close 函数 (11)1.10 Unlink 函数 (12)1.11 OpenSocket 函数 (12)1.12 CloseSocket 函数 (12)1.13 AssignNameToSocket 函数 (12)1.14 DeAssignNameToSocket 函数 (12)1.15 PoolSocket 函数 (12)1.16 ReadFromSocket 函数 (13)1.17 SendToSocket 函数 (13)1.18 CallOnUserAbort 函数 (13)1.19 Delay 函数 (13)1.20 Abort 函数 (13)1.21 Exit 函数 (14)1.22 RandomInit 函数 (14)1.23 Random 函数 (14)1.24 AllocBoundedArray 函数 (14)1.25 DeallocBoundedArray 函数 (14)2. 中断模块分析(文件 interrupt.h) (14)2.1 PendingInterrupt类 (16)2.2 Interrupt类 (17)2.2.1 内部使用方法 (17)2.2.2 内部使用函数 (18)2.2.3 对外接口 (18)3. 时钟中断模块分析(文件 timer.h) (20)4. 终端设备模块分析(文件 console.h) (22)5. 磁盘设备模块分析(文件 disk.h) (23)6. Nachos运行情况统计(文件 stats.h) (24)第三章线程管理系统 (26)第一节进程与线程 (26)一、进程 (26)1. 进程概念 (26)2. 进程的状态及状态变化 (26)3. 进程调度 (27)4. 进程之间的同步和互斥 (28)5. 进程的实施 (29)6. 进程的创建 (29)二、线程 (29)1. 线程概念 (29)2. 进程和线程的关系 (31)第二节N ACHOS的线程管理 (32)一、Nachos的线程管理 (32)二、Nachos线程管理同实际进程管理的不同 (34)第三节N ACHOS线程管理系统的初步实现 (35)1. 工具模块分析(文件 list.h utility.h) (35)2. 线程启动和调度模块分析(文件switch.s switch.h) (35)2.1 ThreadRoot函数 (35)2.2 SWITCH函数 (36)3. 线程模块分析(文件 thread.h) (36)3.1 Fork 方法 (38)3.2 StackAllocate 方法 (38)3.3 Yield 方法 (39)3.4 Sleep 方法 (40)4. 线程调度算法模块分析(文件 scheduler.h) (40)4.1 Run方法 (41)5. Nachos主控模块分析(文件 system.h) (41)6. 同步机制模块分析(文件 synch.h) (42)6.1 信号量( Semaphore ) (42)6.2 锁机制 (42)6.3 条件变量 (43)第四节线程管理系统作业 (45)第五节实现实例 (47)4.1 对线程的改进 (47)4.2 对线程调度的改进 (48)第四章文件管理系统 (51)第一节文件管理系统概述 (51)一、文件 (51)1. 文件结构 (51)2. 文件访问 (52)3. 文件类型 (52)4. 文件属性 (53)5. 文件操作 (53)二、目录 (54)1. 目录结构 (54)2. 多级目录结构 (55)3. 文件路径名 (55)4. 工作目录 (55)5. 目录结构的勾连 (55)6. 目录项 (56)三、UNIX文件系统的实现 (56)1. UNIX文件系统中的主要结构 (56)2. UNIX文件系统存储资源的分配和回收 (58)第二节N ACHOS文件管理系统 (61)第三节N ACHOS文件系统的实现 (63)1. 同步磁盘分析(文件 、synchdisk.h) (63)2. 位图模块分析(文件、bitmap.h) (64)3. 文件系统模块分析(文件、filesys.h) (64)3.1 生成方法 (65)3.2 Create方法 (65)3.3 Open方法 (66)3.4 Remove方法 (66)4. 文件头模块分析(文件、filehdr.h) (66)5. 打开文件结构分析(文件、openfile.h) (67)5.1 ReadAt方法 (67)5.2 WriteAt方法 (68)6. 目录模块分析(文件 directory.h) (68)第四节文件管理系统作业 (70)第五章用户程序和虚拟内存 (71)第一节N ACHOS 对内存、寄存器以及CPU的模拟 (71)1 RaiseException 方法 (74)2 ReadMem 方法 (74)3 WriteMem 方法 (74)4 Translate方法 (74)5 Run 方法 (75)第二节N ACHOS用户进程运行机制 (77)一、用户程序空间(文件, address.h) (77)1.1 生成方法 (77)1.2 InitRegisters方法 (78)1.3 SaveState方法 (78)1.4 RestoreState方法 (78)二、系统调用(文件, syscall.h, start.s) (78)第三节虚存管理的设计和实现 (80)一、Nachos存储管理的改进要求 (80)二、一个虚拟存储管理实现的实例 (80)2.1 虚拟存储系统的总体设计 (80)2.2 缺页中断陷入及其调度算法 (83)2.3 虚存的存储分配 (85)2.4 存储保护 (85)2.5 实现中的一些细节 (85)第四节用户程序和虚拟存储作业 (87)第六章NACHOS的网络系统 (88)第一节N ACHOS对物理网络的模拟 (88)第二节N ACHOS的邮局协议 (91)2.1 PostalDelivery方法 (92)2.2 Send方法 (93)第三节网络部分作业 (94)第一章绪论第一节Nachos概述一、引言计算机操作系统是一门实践性很强的课程。
一般地阐述其工作原理,很可能使本来具体生动的内容变得十分抽象、枯燥并难以理解。
解决好理论与实践相结合的问题是提高操作系统教学质量的关键。
一门好的操作系统实践课将使读者更加形象和深刻地理解课堂中讲述的概念、原理和它们的应用。
国内外许多著名的大学都在操作系统教学实践方面作了大量研究,比较突出的有著名计算机专家A.S.Tanenbaum设计和实现的MINIX。
MINIX是一个比较完整的操作系统,它的用户界面类似于UNIX。
说它比较完整,是因为它包括了进程管理、文件系统管理、存储管理、设备管理以及I/O管理等操作系统的所有重要内容,而且还包含了系统启动和Shell等实际操作系统不可缺少的部分。
由于MINIX较UNIX的出现晚十年,所以在程序风格上较原来的UNIX要好得多,更加结构化和模块化。
包含有3000行注释的12000行源代码使整个系统较为容易阅读和理解。
但是MINIX作为教学用操作系统有它的不足之处,就是由于它的目标是一个完整的操作系统,必然要和具体的设备打交道;而且不同的机器指令集需要有不同的编译器,所以MINIX的移植性并不令人满意。
一个MINIX操作系统需要占据一台独立的主机,所以在网络的配置和实现上比较复杂,读者需要有一定的实践经验才能完成。
上海交通大学开发的MOS操作系统是另一个较成功的教学用操作系统。
它是一个小型而功能较齐全的多道程序的操作系统,主要包括作业调度管理和文件系统管理,建立在一个只包含十几条指令的指令集虚拟机基础之上。
由于MOS比较简单,读者可以非常容易地理解操作系统课程中讲述的进程调度和文件系统等部分原理。
MOS的不足是过于简单,不能涵盖操作系统的大部分功能。
MOS的虚拟机指令集是自定义的,没有现成的编译器,所以读者必须直接编写汇编程序才能在MOS虚拟机上运行。
这样就缺乏开发大型应用程序的能力。
但是MOS毕竟给了读者一个自由发挥的空间,在MOS的基础上衍生出TOS等学生自己定义和实现的相对完整的操作系统。
二、Nachos教学用操作系统作为教学用操作系统,需要实现简单并且尽量缩小与实际操作系统之间的差距,所以我们采用Nachos作为操作系统课程的教学实践平台。
Nachos是美国加州大学伯克莱分校在操作系统课程中已多次使用的操作系统课程设计平台,在美国很多大学中得到了应用,它在操作系统教学方面具有一下几个突出的优点:采用通用虚拟机Nachos是建立在一个软件模拟的虚拟机之上的,模拟了MIPS R2/3000的指令集、主存、中断系统、网络以及磁盘系统等操作系统所必须的硬件系统。
许多现代操作系统大多是先在用软件模拟的硬件上建立并调试,最后才在真正的硬件上运行。
用软件模拟硬件的可靠性比真实硬件高得多,不会因为硬件故障而导致系统出错,便于调试。
虚拟机可以在运行时报告详尽的出错信息,更重要的是采用虚拟机使Nachos的移植变得非常容易,在不同机器上移植Nachos,只需对虚拟机部分作移植即可。
采用R2/3000指令集的原因是该指令集为RISC指令集,其指令数目比较少。
Nachos 虚拟机模拟了其中的63条指令。
由于R2/3000指令集是一个比较常用的指令集,许多现有的编译器如gc++能够直接将C或C++源程序编译成该指令集的目标代码,于是就不必编写编译器,读者就可以直接用C/C++语言编写应用程序,使得在Nachos上开发大型的应用程序也成为可能。
●使用并实现了操作系统中的一些新的概念随着计算机技术和操作系统技术的不断发展,产生了很多新的概念。
Nachos将这些新概念融入操作系统教学中,包括网络、线程和分布式应用。
而且Nachos以线程作为一个基本概念讲述,取代了进程在以前操作系统教学中的地位。