操作系统实验心得

1-1:通过这次小实验,是我更加了解Linux一些常用指令的操作以及其作用,对于一个刚开始接触lniux操作系统的初学者来说非常有用,助于以后能够更进一步学习Linux操作系统。

1-2:在实验过程中,使用VI编辑器虽然不能像window操作系统那样对文本进行熟练度编辑,但是,VI编辑器使用命令来操作,将可以锻炼我的记忆力、对键盘的熟练读,还能帮助我们尽快适应linux操作系统的操作。

1-3:原本对liunx下的编译和调试环境不是很熟悉,但通过这次的实验,让我熟悉了linux下的编译器和调试器的使用。

实验中使用了gcc命令,gcc首先调用cpp进行预处理,在预处理过程中,对源代码文件中的文件包含(#include)、预编译语句(如宏定义#define等)进行分析。

当所有的目标文件都生成之后,gcc就调用ld来完成最后的关键性工作,这个阶段就是链接。在链接阶段,所有的目标文件被安排在可执行程序中的恰当的位置,同时,该程序所调用到的库函数也从各自所在的库中链接到合适的地方。

1-4:API 接口属于一种操作系统或。通过实验,我了解了Windows的这种机制,加深了对API函数的理解。

2-1:通过本次实验了解了一些常用进程管理命令的使用,例如ps、kill命令,了解到换个kill与killall的不同,对于linux操作系统下的进程的学习打下基础,更好的学习进程。

2-2:本次实验是熟悉掌握Linux 系统常用进程创建与管理的系统调用,linux下使用fork()创建子进程,与windows下CreateProcess()创建子进程完全不同,通过比较小组更好的理解和掌握了进程的创建,对于进程的管理的理解也有了清晰地认识。

实验中遇到fork函数返回2次结果,经过分析结果如下:

由于在复制时复制了父进程的堆栈段,所以两个进程都停留在fork函数中,等待返回。因为fork函数会返回两次,一次是在父进程中返回,另一次是在子进程中返回,这两次的返回值是不一样的。

调用fork之后,数据、堆栈有两份,代码仍然为一份但是这个代码段成为两个进程的共享代码段都从fork函数中返回,箭头表示各自的执行处。当父子进程有一个想要修改数据或者堆栈时,两个进程真正分裂。

2-3:通过这次实验对熟悉掌握和了解windows平台常用进线程控制API,有了更深刻的认识,认识到API函数对windows编程的重要性,了解进程线程在内存中的执行,特别认识互斥体Mutex对象,API函数一定要多用,才能记得。

3-1:该程序的输入变量具有限制,若输入除0和1的数据,则将视为0处理.改进的方法为修改if语句中的条件为:1,即只要输入为非零,则有效。即逻辑表达式的值为真。(在逻辑数学里非零则表示为真!)

为了能较好的实现进程的同步,可以另外设一个标志量,标志临界资源是否正被访问,当a,b,c

中的其一访问临界资源时,其余2个将进行自我阻塞,当该进程执行完毕后,须将被阻塞的进程唤醒。

3-2:通过这次实验,让我学习到了简单进程间的通信。通过自己动手做实验,然后再电脑上运行得出结果,我发现比课堂上更容易掌握进程通信的实现机制,以及系统调用的命令

4-1:通过此次实验我进一步的了解了程序的局部性原理,在这个实验中我们利用老师提供的代码(关于矩阵清零)来更深入的认识到数组在存储器中是按行存储的,如果对数组按行进行清零处理的比按列清零的缺页中断次数少很多,故按列清零的运行时间更长。

通过实现数组“清零”这个模拟程序的编写和实现,体会到了访问数据的局部性,并且运用局部性原理这个特点,并且和虚拟存储技术联系到一起,虚拟存储技术就用到局部性原理,因为CPU访问局部程序数据,所以只需要将程序部分存入内存。这次实验使我对虚拟存储技术有了进一步了解和学习。

4-2:通过此次实验,我进一步理解了三种页面置换算法。最佳置换算法是一种理想化的算法,它具有最好的性能,但实际上却很难与实现。先进先出的算法总是淘汰最先进入内存的页面,即选择在内存中驻留时间最久的页面予以淘汰,该算法实现简单。最近最久未使用(LRU)的页面置换算法,是根据页面调入内存后的使用情况进行决策的,LRU置换算法虽然是一种比较好的算法,但要求系统有较多的支持硬件,如:寄存器或栈。

4-3:通过此次实验我进一步的了解了实际系统内存分配原则,当系统为进程分配的物理块数少于此值时,进程将无法运行。

通过本次实验,我认识到了Windows操作系统下的内存结构和虚拟内存管理方式,以及各种系统API函数的功能;同时我也认识到了虚拟内存在整个操作系统中的重要地位,通过虚拟存储解决了计算机存储量的问题。

5-1:通过对载入和卸载文件系统的操作,可以使我对文件的操作更方便。加深了对Linux下的文件系统的了解及相应的操作的命令,可以直接用口令来控制文件和目录,对于管理员来讲,也有利于对文件系统和分区的管理。

从实验中我了解了Linux系统分区工具fdisk的使用,对硬盘分区的基本概念进行一些初步的了解,硬盘的分区主要分为基本分区(Primary Partion)和扩充分区(Extension Partion)两种,基本分区和扩充分区的数目之和不能大于四个。且基本分区可以马上被使用但不能再分区。扩充分区必须再进行分区后才能使用,也就是说它必须还要进行二次分区。

5-2:这次试验是创建进程及进程通信,利用MFC编写程序。通过这次试验,我了解了进程的创建、销毁、子进程创建以及获取进程信息和进程间通信,熟悉并巩固了课堂上所学的进程相关的知识。这次试验中遇到过很多的问题,主要是Windows API函数运用不熟练,太多太杂,我想最主要的原因还是自己平时训练少了,好久没有看MFC了,今后我会在这方面多花点时间,好好学习一下利用MFC体会进程,来更好的学习操作系统。

5-3:1、掌握了windows下磁盘分区的基本方法,加深了对于磁盘管理的原理的认识。

2、学习使用五种管理工具,了解了各种工具的目的和基本操作。

5-4:从实验中我了解了Linux系统分区工具fdisk的使用,对硬盘分区的基本概念进行一些初步的了解,硬盘的分区主要分为基本分区(Primary Partion)和扩充分区(Extension Partion)两种,基本分区和扩充分区的数目之和不能大于四个。且基本分区可以马上被使用但不能再分区。扩充分区必须再进行分区后才能使用,也就是说它必须还要进行二次分区。

5-5:通过本次实验,掌握了怎么在一台PC上安装不同的多个系统。

 

第二篇:操作系统实验总结

学号:

姓名:

班级:

在本学期的计算机操作系统这门课学习当中,为了更好的了解操作系统相关知识,我们通过OS Lab平台做了几个实验。在实验室的过程中,我对课堂上学到的操作系统的一些知识有了新的认识,同时还接触到了操作系统的相关源代码,而且通过实验的运行效果了解了平时我们看不到的操作系统的一些状况,收获还是很大的。下面先简要归纳在实验课上我做的几个实验的主要实验内容和实验步骤:

实验一:实验环境的使用

实验步骤:

1.1启动OS Lab

OS Lab每次启动后都会首先弹出一个用于注册用户信息的对话框(可以选择对话框标题栏上的“帮助”按钮获得关于此对话框的帮助信息)。在此对话框中填入学号和姓名后,点击“确定”按钮完成本次注册。观察OS Lab主窗口的布局。OS Lab主要由下面的若干元素组成:菜单栏、工具栏以及停靠在左侧和底部的各种工具窗口,余下的区域用来放置编辑器窗口。

1.2 学习OS Lab的基本使用方法

练习使用OS Lab编写一个Windows控制台应用程序,熟悉OS Lab的基本使用方法(主要包括新建项目、生成项目、调试项目等)。

实验二:操作系统的启动

实验步骤:

2.1 准备实验

启动OS Lab,新建一个EOS Kernel项目,在“项目管理器”窗口中打开boot文件夹中的boot.asm和loader.asm两个汇编文件,按F7生成项目,生成完成后,使用Windows资源管理器打开项目文件夹中的Debug文件夹。找到由boot.asm生成的软盘引导扇区程序boot.bin文件,找到由loader.asm生成的loader程序loader.bin文件,记录下此文件的大小1566字节。

2.2 调试EOS操作系统的启动过程

2.2.1 使用Bochs做为远程目标机

将调试时使用的远程目标机修改为Bochs

2.2.2 调试BIOS程序

按F5启动调试, Bochs在CPU要执行的第一条指令(即BIOS的第一条指令)处中断,从Console窗口显示的内容中,我们可以获得关于BIOS第一条指令的相关信息,然后查看CPU在没有执行任何指令之前主要寄存器中的数据,以及内存中的数据。

2.2.3 调试软盘引导扇区程序

练习从0x7c00处调试软盘引导扇区程序;查看boot.lst文件;调试过程——软盘引导扇区程序的主要任务就是将软盘中的loader.bin文件加载到物理内存的0x1000处,然后跳转到loader程序的第一条指令(物理地址0x1000处的指令)继续执行loader程序;

2.2.4 调试加载程序

调试过程——Loader程序的主要任务是将操作系统内核(kernel.dll文件)加载到内存中,然后让CPU进入保护模式并且启用分页机制,最后进入操作系统内核开始执行(跳转到kernel.dll的入口点执行);

2.2.5 调试内核

2.2.6 EOS启动后的状态和行为

查看EOS的版本号;查看EOS启动后的进程和线程的信息;查看有应用程序运行时进程和线程的信息

实验三:进程的创建

实验步骤:

3.1 准备实验

启动OS Lab;新建一个EOS Kernel项目;分别使用Debug配置和Release配置生成此项目,从而在该项目文件夹中生成完全版本的EOS SDK文件夹;新建一个EOS应用程序项目;使用在第3步生成的SDK文件夹覆盖EOS应用程序项目文件夹中的SDK文件夹

3.2 练习使用控制台命令创建EOS应用程序的进程

3.3 练习通过编程的方式让应用程序创建另一个应用程序的进程

使用OS Lab打开本实验文件夹中的NewProc.c文件;查看应用程序创建另一个应用程序的进程的执行结果。

3.4 调试CreateProcess函数

调试CreateProcess函数创建进程的过程;分别验证应用程序和操作系统内核在进程的4G虚拟地址空间中所处的位置;

3.5 调试PsCreateProcess函数

调试PspCreateProcessEnvironment函数;调试进程控制块的创建过程;调试初始化进程控制块中各个成员变量的过程。

3.6 练习通过编程的方式创建应用程序的多个进程

使用OS Lab打开本实验文件夹中的参考源代码文件NewTwoProc.c,仔细阅读此文件中的源代码。使用NewTwoProc.c文件中的源代码替换EOS应用程序项目中EOSApp.c文件内的源代码,生成后启动调试,查看多个进程并发执行的结果。

实验四:线程的状态和转换

实验步骤:

4.1 准备实验

启动OS Lab,新建一个EOS Kernel项目

4.2 调试线程状态的转换过程

查看一下loop命令执行的效果;调试线程状态转换的过程;对断点进行一些调整。

4.2.1 线程由阻塞状态进入就绪状态:

将线程从等待队列中移除;将线程的状态由Waiting修改为Zero;将线程插入其优先级对应的就绪队列的队尾;将线程的状态由Zero修改为Ready。

4.2.2 线程由运行状态进入就绪状态:

线程中断运行,将线程中断运行时的上下文保存到线程控制块中;如果处于运行状态的线程被更高优先级的线程抢先,就需要将该线程插入其优先级对应的就绪队列的队首。(注意,如果处于运行状态的线程主动让出处理器,例如时间片用完,就需要将程插入其优先级对应的就绪队列的队尾);将线程的状态由Running修改为Ready

4.2.3 线程由就绪状态进入运行状态:

将线程从其优先级对应的就绪队列中移除;将线程的状态由Ready修改为Zero;将线程的状态由Zero修改为Running;将线程的上下文从线程控制块(TCB)复制到处理器的各个寄存器中,让线程从上次停止运行的位置继续运行。

4.2.4 线程由运行状态进入阻塞状态:

将线程插入等待队列的队尾;将线程的状态由Running修改为Waiting;将线程中断执行,并将处理器上下文保存到该线程的线程控制块中。

4.3 为线程增加挂起状态

观察loop线程被挂起的情况:删除之前添加的所有断点;按F5启动调试;待EOS启动完

毕,在EOS控制台中输入命令“loop”后按回车。此时可以看到loop线程的执行计数在不停增长,说明loop线程正在执行,记录下loop线程的ID;按Ctrl+F2切换到控制台2,输入命令“suspend 31”(如果loop线程的ID是31)后按回车;按Ctrl+1切换回控制台1,可以看到由于loop线程已经成功被挂起,其执行计数已经停止增长了。

在PsResumThread函数第119行需要添加的代码的流程可以是:首先调用List Remove Entry函数将线程从挂起线程队列中移除, 然后调用PspReadyThread函数将线程恢复为就绪状态,最后调用PspThreadSchedule宏函数执行线程调度,让刚刚恢复的线程有机会执行。

实验过程:

做实验时,最开始并不是很了解OS Lab平台的使用,即使对着老师给的实验教程做还是不怎么会,于是请教会做的同学,通过同学的讲解我知道了怎样在OS Lab平台上建立项目,怎样更改路径并找到项目的源文件等等基本操作。

掌握对平台的简单应用后,做后面的实验我是按照实验教程上的步骤一步步的实施,并且每次都认真观察相应的运行结果,每个实验都会建议我们学习实验教程前面的理论部分,我想如果对他的理论不熟悉,就算试验成功了我也不知道为什么,所以我一般在做实验前会对前面的理论部分进行简要的学习和熟悉。做实验的过程中,有时候按照实验教程上的步骤做平台还是会出现一些错误,比如做实验三到调试CreateProcess函数时,出现的调试异常对话框中,本来是要点击“是”的,但做到这里电脑总是会出现像死机一样的状况,关掉平台重做到这里老是出现同样的问题,最后换电脑也是这样,然后我尝试不按照实验步骤点击“是”也不行,最后还是又还了电脑才做成功,问其他同学也有出现同样的问题,我想可能是平台和电脑上有什么地方有冲突吧。

之后做试验是遇到问题我还是选择多问同学,毕竟每个人擅长的是不同的,有些问题这个同学会解决,有些问题则是那个同学才懂解决,通过互相交流和学习,我们通过实验不仅巩固了课堂上学到的相关知识,也对操作系统有了更深的了解。

体会:

其实做完实验我还是不能保证我对OS Lab这个平台有很好的全面的了解,但是对一些基本操作及其快捷键我算是大致掌握了,通过这个平台我也是认识到了“没有做不到的,只有想不到的”,我觉得创建这个平台的人们真的是很了不起,这个平台让我们便动手便了解了平时我们看不到的操作系统的相关知识。要做好实验,得按照实验教程上面的内容一步步落实,要边做变领悟相关原理及运行结果的出现的原因,这样我们才能在试验中学到更多、掌握更多。其次,也遇到问题我们自然是要先自己思考,通过不同的尝试来解决,之后不能解决的我们要多向老师同学请教,通过互相交流得来的知识也是会让我们难忘的。

相关推荐