操作系统(2)实验六

合集下载

操作系统实验报告6

操作系统实验报告6

操作系统实验报告6一、实验目的本次操作系统实验的主要目的是深入了解和掌握操作系统中进程管理、内存管理、文件系统等核心概念和相关技术,通过实际操作和观察,增强对操作系统工作原理的理解,并提高解决实际问题的能力。

二、实验环境本次实验使用的操作系统为 Windows 10,实验工具包括 Visual Studio 2019 等。

三、实验内容(一)进程管理实验1、创建多个进程,并观察它们的运行状态和资源占用情况。

通过编写简单的C++程序,使用Windows API 函数创建多个进程。

在程序中,设置不同的进程优先级和执行时间,观察操作系统如何调度这些进程,以及它们对 CPU 使用率和内存的影响。

2、进程间通信实现了进程间的管道通信和消息传递。

通过创建管道,让两个进程能够相互交换数据。

同时,还使用了 Windows 的消息机制,使进程之间能够发送和接收特定的消息。

(二)内存管理实验1、内存分配与释放使用 C++的动态内存分配函数(如`malloc` 和`free`),在程序运行时动态申请和释放内存。

观察内存使用情况,了解内存碎片的产生和处理。

2、虚拟内存管理研究了 Windows 操作系统的虚拟内存机制,通过查看系统的性能监视器,观察虚拟内存的使用情况,包括页面文件的大小和读写次数。

(三)文件系统实验1、文件操作进行了文件的创建、读取、写入、删除等基本操作。

通过编写程序,对不同类型的文件(如文本文件、二进制文件)进行处理,了解文件系统的工作原理。

2、目录操作实现了目录的创建、删除、遍历等功能。

了解了目录结构在文件系统中的组织方式和管理方法。

四、实验步骤(一)进程管理实验步骤1、打开 Visual Studio 2019,创建一个新的 C++控制台项目。

2、在项目中编写代码,使用`CreateProcess` 函数创建多个进程,并设置它们的优先级和执行时间。

3、编译并运行程序,通过任务管理器观察进程的运行状态和资源占用情况。

操作系统实验系统调用

操作系统实验系统调用

操作系统实验系统调用 Document serial number【UU89WT-UU98YT-UU8CB-UUUT-UUT108】实验六系统调用学时:2学时1.实验内容:系统调用实验2.实验目的:通过调用PV操作解决生产者、消费者问题,了解系统中并发进程是怎样同步执行的。

3.实验题目:编写一段程序模拟PV操作实现进程同步,且用PV操作解决生产者、消费者问题。

4.实验提示:⑴PV操作由P操作原语和V操作原语组成。

P操作原语P(s)将信号量s减1,若s<0则执行原语的进程被置成等待状态。

V操作原语V(s)将信号量s加1,若s<=0则释放一个等待的进程。

⑵生产者、消费者问题主要解决的是进程并发执行时访问公共变量的问题。

假定有一个生产者和一个消费者。

生产者每次生产一个产品,并把产品存入共享缓冲区供消费者取走。

消费者每次从共享缓冲区取出一个产品去消费。

禁止生产者将产品放入已满的缓冲区,禁止消费者从空缓冲区内取产品。

⑶模拟程序中对应关系如下:实例代码:开始!当前的产品数[ 0] 加快生产速度呀,没有产品了。

当前的产品数[ 1] 生产了一个产品。

当前的产品数[ 2] 生产了一个产品。

当前的产品数[ 1] 消费了一个产品。

当前的产品数[ 2] 生产了一个产品。

当前的产品数[ 1] 消费了一个产品。

当前的产品数[ 2] 生产了一个产品。

当前的产品数[ 3] 生产了一个产品。

当前的产品数[ 2] 消费了一个产品。

当前的产品数[ 3] 生产了一个产品。

当前的产品数[ 2] 消费了一个产品。

当前的产品数[ 3] 生产了一个产品。

当前的产品数[ 4] 生产了一个产品。

当前的产品数[ 3] 消费了一个产品。

当前的产品数[ 4] 生产了一个产品。

操作系统实验心得(精选多篇)

操作系统实验心得(精选多篇)

操作系统实验心得(精选多篇)第一篇:操作系统实验心得每一次课程设计度让我学到了在平时课堂不可能学到的东西。

所以我对每一次课程设计的机会都非常珍惜。

不一定我的课程设计能够完成得有多么完美,但是我总是很投入的去研究去学习。

所以在这两周的课设中,熬了2个通宵,生物钟也严重错乱了。

但是每完成一个任务我都兴奋不已。

一开始任务是任务,到后面任务就成了自己的作品了。

总体而言我的课设算是达到了老师的基本要求。

总结一下有以下体会。

1、网络真的很强大,用在学习上将是一个非常高效的助手。

几乎所有的资料都能够在网上找到。

从linu某虚拟机的安装,到linu某的各种基本命令操作,再到gtk的图形函数,最后到文件系统的详细解析。

这些都能在网上找到。

也因为这样,整个课程设计下来,我浏览的相关网页已经超过了100个(不完全统计)。

当然网上的东西很乱很杂,自己要能够学会筛选。

不能决定对或错的,有个很简单的方法就是去尝试。

就拿第二个实验来说,编译内核有很多项小操作,这些小操作错了一项就可能会导致编译的失败,而这又是非常要花时间的,我用的虚拟机,编译一次接近3小时。

所以要非常的谨慎,尽量少出差错,节省时间。

多找个几个参照资料,相互比较,慢慢研究,最后才能事半功倍。

2、同学间的讨论,这是很重要的。

老师毕竟比较忙。

对于课程设计最大的讨论伴侣应该是同学了。

能和学长学姐讨论当然再好不过了,没有这个机会的话,和自己班上同学讨论也是能够受益匪浅的。

大家都在研究同样的问题,讨论起来,更能够把思路理清楚,相互帮助,可以大大提高效率。

3、敢于攻坚,越是难的问题,越是要有挑战的心理。

这样就能够达到废寝忘食的境界。

当然这也是不提倡熬夜的,毕竟有了精力才能够打持久战。

但是做课设一定要有状态,能够在吃饭,睡觉,上厕所都想着要解决的问题,这样你不成功都难。

4、最好在做课设的过程中能够有记录的习惯,这样在写实验报告时能够比较完整的回忆起中间遇到的各种问题。

比如当时我遇到我以前从未遇到的段错误的问题,让我都不知道从何下手。

计算机操作系统试验lab6

计算机操作系统试验lab6

实验六消息通信1.目的要求更进一步领会消息通信的进行过程,基本掌握消息通信函数的使用2、实验内容1)查询Linux帮助文档,解释下述各个函数的作用①msgget( )②msgsnd( )③msgrcv( );④msgctl( );2)用vi编辑器编辑下面C程序,并在Linux平台下编译运行,记录下程序的运行结果,并对程序的功能作一个简要说明# include <stdio.h># include <sys/types.h># include <sys/msg.h># include <sys/ipc.h># define MSGKEY 75struct msgform{long mtype;char mtrex[1030];}msg;int msgqid, i;void CLIENT()int i;msgqid=msgget(MSGKEY,0777);printf("%d",msgqid);for(i=3;i>=1;i--){ msg.mtype=i;printf("clien)sent\n");scanf("%s",msg.mtrex);msgsnd(msgqid, &msg,1024,0);}exit(0);}void SERVER(){msgqid=msgget(MSGKEY,077|IPC_CREAT);do{msgrcv(msgqid,&msg,1030,0,0);printf("(server)received\n %s\n",msg.mtrex); } while(msg.mtype!=1);msgctl(msgqid,IPC_RMID,0);exit(0);}void main(){while((i=fork())==-1);if(!i) SERVER();while((i=fork())==-1);if(!i) CLIENT();wait(0);wait(0);运行结果程序功能3、准备工作1)Linux平台的计算机,能够熟练使用vi编辑器和cc或者gcc编译器。

操作系统实验六

操作系统实验六

实验六时间片轮转调度一、实验目的·调试EOS 的线程调度程序,熟悉基于优先级的抢先式调度。

·为EOS 添加时间片轮转调度,了解其它常用的调度算法。

二、实验内容1、执行了实验指导书3.2的步骤,学习了“rr”命令是如何测试时间片轮转调度的。

算法实现原理是,按进程到达顺序(FCFS 原则)将进程依次加入就绪队列当中,然后将CPU 分配给位于队首的进程,确定一个时间片,让该进程执行一个时间片。

当该进程执行时间到时,该进程可能已经执行完毕(可能在时间片未到时就以及执行完毕),或者未执行完毕,如果是前者只需将进程弹出队列即可,如果是后者则将该进程加入队尾,并将CPU 分配给新的队首进程,如此循环。

在没有时间片轮转调度时的执行结果如下图所示。

2、执行了实验指导书3.3的步骤,对EOS 的线程调度程序PspSelectNextThread 函数进行调试,学习了就绪队列、就绪位图以及线程的优先级是如何在线程调度程序中协同工作的。

调试当前线程不被抢先的情况:基于优先级的抢先式调度算法,新建的第0 个线程会一直运行,而不会被其它同优先级的新建线程或者低优先级的线程抢先。

通过调试可以观察到“rr”命令新建的第0 个线程始终处于运行状态,而不会被其它具有相同优先级的线程抢先。

对在EOS 内核中实现这种调度算法进行调试,刷新“就绪线程队列”窗口,观察到如下图结果。

在“监视”窗口中添加表达式“/t PspReadyBitmap”,以二进制格式查看就绪位图变量的值,此时就绪位图的值为100000001,表示优先级为8 和0 的两个就绪队列中存在就绪线程。

在“快速监视”对话框的“表达式”中输入表达式“*PspCurrentThread”,查看当前正在运行的线程(即被中断的线程)的线程控制块中各个域的值。

通过以上调试线程调度函数PspSelectNextThread 的执行过程,“rr”命令新建的第0个线程在执行线程调度时没有被抢先的原因可以归纳为两点:(1) 第0个线程仍然处于“运行”状态;(2) 没有比其优先级更高的处于就绪状态的线程。

操作系统实验六-虚拟存储器实验报告

操作系统实验六-虚拟存储器实验报告

实验六虚拟存储器一、实验内容模拟分页式虚拟存储管理中硬件的地址转换和缺页中断,以及选择页面调度算法处理缺页中断。

二、实验目的在计算机系统中,为了提高主存利用率,往往把辅助存储器(如磁盘)作为主存储器的扩充,使多道运行的作业的全部逻辑地址空间总和可以超出主存的绝对地址空间。

用这种办法扩充的主存储器称为虚拟存储器。

通过本实验帮助同学理解在分页式存储管理中怎样实现虚拟存储器。

三、实验题目本实验有三道题目,其中第一题必做,第二,三题中可任选一个。

第一题:模拟分页式存储管理中硬件的地址转换和产生缺页中断。

[提示](1)分页式虚拟存储系统是把作业信息的副本存放在磁盘上,当作业被选中时,可把作业的开始几页先装入主存且启动执行。

为此,在为作业建立页表时,应说明哪些页已在主存,哪些页尚未装入主存,页表的格式为:其中,标志----用来表示对应页是否已经装入主存,标志位=1,则表示该页已经在主存,标志位=0,则表示该页尚未装入主存。

主存块号----用来表示已经装入主存的页所占的块号。

在磁盘上的位置----用来指出作业副本的每一页被存放在磁盘上的位置。

(2)作业执行时,指令中的逻辑地址指出了参加运算的操作存放的页号和单元号,硬件的地址转换机构按页号查页表,若该页对应标志为“1”,则表示该页已在主存,这时根据关系式:绝对地址=块号×块长+单元号计算出欲访问的主存单元地址。

如果块长为2的幂次,则可把块号作为高地址部分,把单元号作为低地址部分,两者拼接而成绝对地址。

若访问的页对应标志为“0”,则表示该页不在主存,这时硬件发“缺页中断”信号,有操作系统按该页在磁盘上的位置,把该页信息从磁盘读出装入主存后再重新执行这条指令。

(3)设计一个“地址转换”程序来模拟硬件的地址转换工作。

当访问的页在主存时,则形成绝对地址,但不去模拟指令的执行,而用输出转换后的地址来代替一条指令的执行。

当访问的页不在主存时,则输出“* 该页页号”,表示产生了一次缺页中断。

操作系统课程实验报告-实验六文件系统

操作系统课程实验报告-实验六文件系统
if __name__ == '__main__': if len(sys.argv) != 3: Usage() exit(1)
hierarchy, filesCompareOutput = diffDir(sys.argv[1], sys.argv[2])
print('{0}\n 比较文件结构:\n{0}'.format(' '*10)) PrintHierarchy(hierarchy) print() if len(filesCompareOutput) != 0:
subname[1])
# 合并结果
filesCompareOutput += subCompareOutput
sameFileHierarchy.append(('{0}'.format(name),
subFileHierarchy))
elif ( os.path.isfile(subname[0])
华南理工大学 操作系统课程实验报告
实验概述
【实验目的及要求】
加深对 linux 文件系统的理解。 实现一个“difftree”命令,其功能是比较两个目录下的文件结构和文件信 息。当在命令行方式下执行“difftree <dir1> <dir2>”命令时,能够比较目录 dir1 和 目录 dir2 是否具有相同的结构,对相同的部分,进一步比较相同文件名的 文件内容。列出比较的文件系统结构图。 本实验是对单个文件比较的扩展,设计中需要考虑目录操作。
for item in hierarchy: if isinstance(item, tuple): print(' '*level*3 + ' ' + item[0] + '/') PrintHierarchy(item[1], level+1) else: print(' '*level*3 + ' ' + item)

华北电力大学操作系统实验报告

华北电力大学操作系统实验报告

华北电力大学
实验报告
|
|
实验名称操作系统综合实验
课程名称操作系统
|
|
专业班级:网络学生姓名:
学号:成绩:
指导教师:王德文/姜丽梅实验日期:2015年11月4日
2. 当loop线程在控制台1中执行,并且在控制台2中执行suspend命令时,为什么控制台1中的loop线程处于就绪状态而不是运行状态?
答:当在控制台2 中执行suspend命令时,实质上是优先级为24的控制台2线程抢占了处理器,也就是控制台2线程处于运行状态,所以此时loop线程处于就绪状态了。

图 1 调试EOS信号量的工作过程。

华北电力大学实验报告
第页共页。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

SHANGHAI UNIVERSITY
<操作系统>实验报告
学院计算机工程与科学学院学号10122050
姓名王杰
指导老师张建
日期2014.03.07
实验六FAT文件系统实验
一、实验目的:
1、从系统分析的角度出发,了解FAT文件系统的组织结构和文件的存储方式。

2、进一步理解操作系统文件管理的基本思想。

二、实验内容:
1..进入DEBUG环境,装入FAT文件系统结构。

执行命令:L 0 0 0 21
2.观察1.44M软盘中FAT12文件系统结构。

执行命令:D 0000
软盘有两面,每面80个磁道,每个磁道18个扇区,每个扇区512个字节,所以软盘的容量是2*80*18*512 = 1474560, 1474560/1024/1024大约为1.44M。

3.分析文件分配表结构,了解用簇链映射的文件的链式存储结构。

执行命令:D 200
◆思考:上面屏幕显示首簇号为003的文件共包括几个扇区?它分布在哪几个物理扇区上?
答:首簇号为003的文件共包括2个扇区,它分布在0道0面2、3扇。

4.观察1.44M软盘中文件目录表FDT以及文件目录结构
执行命令:L 0 0 0 21
说明:将逻辑扇区0H开始的共21H个物理扇区装入DS:0000H起始的内存。

执行命令:D 2600
说明:显示从2600H地址开始的FDT文件表。

思考:①计算1.44M的软盘根目录最多可以容纳多少文件?
答:1.44MB软盘的文件目录表FDT共14个扇区,每个文件的目录登记项占用32个字
节,用作目录的一个扇区(512字节)最多只能装入512/32=16个文件。

因此,1.44MB软盘的根目录下最多可建文件或子目录224个。

②上图屏幕显示的文件BAK.txt的目录项中标示该文件的首簇号在何处?该文件是什么属性?
答:首簇号在第2行的1A~1B字节处,首簇号为002,该文件属于归档文件。

书上显示的文件office.txt首簇号在第6行的1A~1B字节处,首簇号为091,属归档文件。

③书上面的屏幕显示第1~2行目录项表示的是什么项目?
答:第1~2目录项表示卷标。

5.观察1.44M软盘中文件目录表的长文件名目录结构
思考:①书上面屏幕显示的2~3行是什么目录项?
答:长名的第一项,也是最后一项。

②若有一个文件名共长34个字符,要占多少目录项?
答:四个目录项,三个长目录项和一个短目录项。

6.自己动手做:
①观察测试软盘的FDT区,找到名为BAK的文件目录。

该文件是什么类型的文件?文件放在磁盘的哪个位置?占用几个存储单位?调出其内容看看。

该文件为BAK.txt,属于归档文件。

察看其首簇号为002,对应了数据区21H逻辑扇区。

执行:L 0 0 0 21
D 2600
察看内容执行:L 8000 0 21 8
②找到文件123.TXT的存储位置。

调出文件的第二快将文件的第512字节开始的128个字节,改写成“Happy New Year!”。

再写回原文件。

并用常规方式打开文件察看效果。

操作步骤:
L 0 0 0 21
D 2600
L 8000 0 22 8
D 8000
D 8200
F 8200 “Happy new Year!”
W 8000 0 22 8
三、总结:
①FAT文件系统的结构是如何组织的?
答:经过格式化操作之后,系统将在软磁盘上建立以下的数据结构:
(1)引导记录(DBR):位于0面0道1扇区,说明磁盘结构信息。

(2)文件分配表(FAT):用于记录磁盘空间的分配情况,指示硬盘数据信息存放的柱面及扇区的信息指针。

其表项可以是以下四种表示方式之一:
A.一个数字,代表指向另一个簇的指针。

B.数字0,表示一个未使用的簇
C.一个坏扇区标记
D.文件结束标记符EOF
(3)文件根目录表FDT:一个指示以存入数据信息的索引。

记录磁盘上存储文
件的大小,位置,日期和时间等数据。

(4)数据区:存放数据信息。

②系统怎样实现文件的逻辑块到物理块的映射?
答:文件分配表(FAT)是在链表结构的基础上,把每一个物理块当中的链表指针抽取出来,单独组成一个表格,也就是,并把它存放在内存当中,然后,如果要随机地区访问文件的第n个逻辑块,可以先从FAT表中查到相应的物理块地址,之后根据这个地址直接去访问磁盘,这样速度就比较快。

文件分配表的具体实现是,在整个文件系统中设置一个一维的线性表格,它的表项个数就等于磁盘上物理块的个数,并按照物理块编号的顺序来建立索引。

对于系统中的每一个文件,在它的文件控制块中记录了这个文件的第一个物理块的编号X1,然后在FAT表的第X1项中,记录了该文件的第二个物理块编号X2.就这样一直下去,从而形成了一个链表。

在链表的最后一个节点中,存放了一个特殊的文件结束的标识。

下图所示是文件分配表的一个例子。

通过文件1的目录项可以知道,它的第一个逻辑块存放在第一个物理块中。

然后去查询FAT表,可以知道,它的第二、第三个逻辑块分别存放在第二、第三个物理块中。

FAT表的第三项是一个特殊的值0xFFFF,表明文件的结束,所以该文件总共有三个块。

类似的,文件2也有三个数据块,分别存放在第四、第五和第七个物理块中。

四、体会:
这个实验很好的结合了书上对于FAT文件系统结构的阐述。

对FAT的组织结构和文件的存储方式,有了更实际的认识。

这个实验是在同学帮助下完成的,对于1.44M软盘不是很熟悉,不过硬盘的道理应该差不多,对于操作系统这门课有很实际的意义。

相关文档
最新文档