哈工大《操作系统》实验6
在哈工大纯C论坛论坛有找到一篇写操作系统基础知识的文章
操作系统是计算机的核心,没有操作系统,一切计算机应用都免谈,但现在操作系统基本上被老外垄断,Windows就不说了,就算是Linux 那也是泊来品,什么时候我们才能写出有中国特色的操作系统啊?在工大,我们每个人都学过操作系统,我也一样,但老师教的那真的只是理论,一个实际的系统原比老师教的要复杂上一千万倍!然而,我们基本上没有可能实践的机会,就算是有一些实验,那也是停留在一个非常高的表层。
我非常之笨,学完之后,还是不知系统是怎样从无到有,开始工作的。
系统是怎样启动的?曾经把一段汇编代码写进了磁盘,但无论如何没将机器启动起来(原因现在已经清楚,稍后再谈)。
想看看Linux的源码,但犹如天书!即使是Minix也非常之庞大,晦涉难懂!郁闷啊~~~,今天在网上无意间看见了一个老外写的E文,讲到此事,霍然开朗,在网上狂找了一堆E文后,最终将机器起启来了。
(本人E文差得没底,基本上是用金山词霸配合联通国际在线翻译系统一句一句翻译的,痛苦啊!看来要想学好计算机E文不好还真不行:(,很多资料中文的就是没有,只有E文的,你咋办?)。
现特将全过程描述一下,一来留个纪念,二来希望工大能有更多的人能对此感兴趣,超级大牛们早日写出我们自己的操作系统。
Linux也是芬兰的一个大学生写的。
阅读本文最好有那么一丁点的汇编基础。
另外,本人水平极其有限,对操作系统也不是很熟,对于论述中不计其数的错误,望大家原谅,千万不要来砍我~~~首先,我要先说明一下计算机在你按下电源按钮后,计算机都做了什么当你按下电源键的时候,同这个键相联的电线就会送出一个电信号给主板,主板将此电信号传给供电系统,供电系统开始工作,为整个系统供电,并送出一个电信号给BIOS,通知BIOS供电系统已经准备完毕。
随后BIOS启动一个程序,进行主机自检,主机自检主要工作是确保系统的每一个部分都得到了电源支持,内存储器,主板上的其它芯片,键盘,鼠标,磁盘控制器及一些I/O端口正常可用,此后,自检程序将控制权还给BIOS。
哈工大《操作系统》实验3
向kernel/printk.c中添加日志打印功能,将以下代码添加到原文件中:
在kernel/fork.c、kernel/sched.c和kernel/exit.c中,找到正确的状态转换点,并添加合适的状态信息,把它输出到log文件之中。
fork.c的修改如下:
exit.c的修改如下:
sched.c的修改如下:
在虚拟机上运行ls -l /var”或“ll /var”查看process.log是否建立,及它的属性和长度;
修改时间片
include/linux/sched.h宏INIT_TASK中定义的:
0,15,15, 分别对应state、counter和priority,将priority值修改,即可实现对时间片大小的调整。
0,15,15, 分别对应state、counter和priority,
priority值修改,即可实现对时间片大小的调整。
在修改时间片将priority由15改为150后,Process 9~20 中Turnaround, Waiting, CPU Burst, I/O Burst变化不大,原因可能是程序中I/O操作占用的时间对于总时间影响的权重过大,导致处理时间体现的并不明显。
或者变化不大的原因是,子进程连续占用cpu的时间要比时间片大很多。
哈工大《操作系统》实验2
问题回答:Linux 0.11的系统调用最多能传递几个参数?你能想出办法来扩大这个限制吗?
Linux 0.11内核中用户程序能够向内核最多直接传递三个参数,当然也可以不带参数。
为了方便执行,内核源代码在include/unistd文件中定义了宏函数_syscalln(),其中n代表携带的参数个数,可以分别。
因此最多可以直接传递3个参数。
如果需要传递多个参数,大块数据给内核,则可以传递这块数据的指针值。
例如系统调用int read(int fd,char buf,int n)在其宏形式_syscall3(int, read, int, fd, char, buf, int, n),对于include/unistd中给出的每个系统调用宏,都有2+2*n个参数。
其中第一个参数对应系统调用返回值的类型;第2个参数是系统调用的名称;随后是系统调用所携带参数的类型和名称。
哈工大威海计算机操作系统原理实验报告1
计算机操作系统原理实验报告专业: 110420x学号: 1104202xx姓名: xxx哈尔滨工业大学(威海)实验一进程同步和互斥一、实验目的1.掌握临界资源、临界区概念及并发进程互斥、同步访问原理。
2.学会使用高级语言进行多线程编程的方法。
3.掌握利用VC++或Java语言线程库实现线程的互斥、条件竞争,并编码实现P、V操作,利用P、V操作实现两个并发线程对有界临界区的同步访问。
4.通过该实验,学生可在源代码级完成进程同步互斥方案的分析、功能设计、编程实现,控制进程间的同步、互斥关系。
二、实验要求1.知识基础:学生应在完成进程和线程及调度等章节的学习后进行。
2.开发环境与工具:硬件平台——个人计算机。
软件平台-Windows操作系统,VC++语言或Java语言开发环境。
3.运用高级语言VC++或Java语言线程库及多线程编程技术进行设计实现。
三、实验内容1.实现临界资源、临界区、进程或线程的定义与创建。
2.利用两个并发运行的进程,实现互斥算法和有界缓冲区同步算法。
四、程序流程图1.2.生产者消费者问题生产者:消费者:五、实验结果1.互斥问题2.生产者消费者问题六、结果分析有上述程序运行结果可知,此次试验已经基本达到了实验要求,在互斥问题中,由于采用了“模拟一个竞争条件——全局变量”来建立互斥,所以不会明显的条件来判断2个线程是否正确、独立的运行,所以,在运行时间上加以限制,让2个线程在有序运行时只能持续15秒。
在生产者消费者问题中,生产者与消费者的最大上限为10,并且生产者只能生产“同一种物品”,而消费者也只能购买“同一种物品”。
哈工程操作系统第二个
哈工程操作系统第二个作者: 日期:操作系统实验报告课程名称操作系统实验课程编号实验项目名称操作系统的启动学号年级三计算机科学姓名专业与技术计算机科学与技学生所在学院指导教师初妍术实验实验室名称地点哈尔滨工程大学计算机科学与技术学院第二讲操作系统的启动一、实验概述1. 实验名称操作系统的启动2. 实验目的(1)跟踪调试E0在P(机上从加电复位到成功启动的全过程,了解操作系统的启动过程。
(2)查看E0启动后的状态和行为,理解操作系统启动后的工作方式。
3. 实验类型(验证、设计)验证4. 实验内容(1)准备实验(2)调试EOS操作系统的启动过程二、实验环境EOS操作系统、Bochs模拟器、Virtual PC虚拟机软件、NASM汇编、BIO (Basic In put/Output System)三、实验过程1•准备实验(1)启动OS Lab(2)新建一个EOS Kernel项目(3)在项目管理器”窗口中打开boot文件夹中的boot.asm和loader.asm两个汇编文件。
(4)生成项目(5)生成完成后,使用Windows资源管理器打开项目文件夹中的Debug文件夹。
找到boot.asm生成的软盘引导扇区程序boot.bin文件,该文件的大小是512 字节。
找到由loader.asm生成的loader.bin文件,记录下此文件的大小1566字节,在下面的实验中会用到。
找到由其它源文件生成的操作系统内核文件kernel.dll 2调试EOS操作系统的启动过程(1)使用Bochs做为远程目标机(2)调试BIOS程序在Con sole窗口中输入调试命令sreg后按回车,CS寄存器的值为OxfOOO。
输入调试命令r后按回车,显示当前CPU中各个通用寄存器的值J. + “・W 叭k ■ lit Cn -ft Bit■斛叶dM'hC! 4 <> Pit A-lr^ I. "pflidmr A T CS 4 # VF4I ^)<WW-EiLv-a: M 2- ■ II l^aF:*B.H -1貫電I■才F LW E.占帖那出汀刊■+ • ■ I 帕独值E! i1!1-对二■M.J9M童牛F IjT.h&M^ 益:力■ (H i 拆千HtRJt毎UOT K I Ulp ' f V I ' hlTNi.liW-JS 一二输入调试命令xp/1024b 0x0000,查看开始的1024个字节的物理内存输入xp/512b0x7c00,查看软盘引导扇区应该被加载到的内村位置,输出的内存之都是0(3)调试软盘引导扇区程序软盘引导扇区程序的主要任务就是将软盘中的loader.bin文件加载到物理内存的>'La«jMhHd ii4 «【fid "・iK拗朮・4|1*占悅![・・*虧tttlffDX 11 >1 .uniEir*JUtlk・Afifedr ■權■ mf顾.<kii r»«cH«Li■输仙■内也旨礼・ti宿内勺■■N A胡号鼻i止屯n・・・u鸞I l i| [ • JV3CF li *1 O <B 一Jr 比■HN£:1IE?>_=■IT0x1000处,然后跳转到loader程序的第一条指令(物理地址0x1000处的指令)继续执行loader 程序。
操作系统实验报告哈工大
计算机操作系统课程实验报告专业信息管理与信息系统班级 1203601学号 120360117姓名乐云指导教师周学权计算机操作系统课程实验报告专业信息管理与信息系统班级 1203601学号 120360114姓名郭鑫指导教师周学权操作系统实验实验1 使用虚拟机安装系统 4学时【实验目的】1.了解虚拟机软件的使用。
2.了解使用虚拟机安装Windows及Ubuntu操作系统。
【实验内容】1. 安装虚拟机软件VirtualBox。
2. 配置VirtualBox环境安装WindowsXP,并在虚拟机中启动windowsXP。
3. 配置VirtualBox环境安装Ubuntu 10.10,并在虚拟机中启动Ubuntu。
【实验环境】VirtualBox4.0Windows XPUbuntu 8.04【实验过程】一、创建虚拟机首先运行VirtualBox,单击左上角的“新建”。
单击下一步。
出现如下图的界面,在名称后输入自己起的名字,如test选择自己想要安装的系统类型和版本,本次试验是安装windows xp系统设置完成后,单击下一步。
接下来是设置虚拟机的内存大小,本次实验操作的计算机内存为4GB,所以我选择分配给我的虚拟机的内存为512MB,然后单击下一步。
接着创建虚拟硬盘,选择创建新的虚拟硬盘,单击下一步。
选择虚拟硬盘的类型,默认选择了VDI类型,单击下一步。
接下来选择为动态扩展类型,因为计算机的存储空间不大。
单击下一步。
动态扩展:如果你为你的虚拟磁盘分配的是10G空间,虚拟磁盘占用真实磁盘空间的范围就为0~10G。
固定大小:如果你为你的虚拟磁盘分配的是10G空间,虚拟磁盘占用真实磁盘空间永远不是10G,不管虚拟磁盘空间是否被全部使用。
选择虚拟机在本地磁盘中的位置和大小,单击下一步。
确认虚拟机的详细情况,点击下一步。
这时我们已经成功的创建了一个虚拟机了,接下来我们要开始配置这个虚拟机安装操作系统选择刚才创建的虚拟机,然后单击上方的“开始”弹出了首次运行向导,单击下一步。
哈尔滨工业大学(威海)操作系统实验报告及答案
哈尔滨工业大学(威海)操作系统实验报告说明:本实验报告实验答案,是本人在上实验时的测试数据,由于操作系统实验中后面实验与当时所做实验的计算机的配置有关,因此本实验报的数据仅供参考。
实验1进程的描述与控制Windows 2000编程(实验估计时间:100分钟)1.1 背景知识Windows 2000 可以识别的应用程序包括控制台应用程序、GUI应用程序和服务应用程序。
控制台应用程序可以创建GUI,GUI应用程序可以作为服务来运行,服务也可以向标准的输出流写入数据。
不同类型应用程序间的惟一重要区别是其启动方法。
Windows 2000是以NT技术构建的,它提供了创建控制台应用程序的能力,使用户可以利用标准的C++工具,如iostream库中的cout和cin对象,来创建小型应用程序。
当系统运行时,Windows 2000的服务通常要向系统用户提供所需功能。
服务应用程序类型需要ServiceMail()函数,由服务控制管理器(SCM)加以调用。
SCM是操作系统的集成部分,负责响应系统启动以开始服务、指导用户控制或从另一个服务中来的请求。
其本身负责使应用程序的行为像一个服务,通常,服务登录到特殊的LocalSystem账号下,此账号具有与开发人员创建的服务不同的权限。
当C++编译器创建可执行程序时,编译器将源代码编译成OBJ文件,然后将其与标准库相链接。
产生的EXE文件是装载器指令、机器指令和应用程序的数据的集合。
装载器指令告诉系统从哪里装载机器代码。
另一个装载器指令告诉系统从哪里开始执行进程的主线程。
在进行某些设置后,进入开发者提供的main()、Servicemain()或WinMain()函数的低级入口点。
机器代码中包括控制逻辑,它所做的事包括跳转到Windows API函数,进行计算或向磁盘写入数据等。
Windows允许开发人员将大型应用程序分为较小的、互相有关系的服务模块,即动态链接库(DLL)代码块,在其中包含应用程序所使用的机器代码和应用程序的数据。
哈工大操作系统实验一
哈尔滨工业大学远程教育课程操作系统实验一(选做)主讲人:张英涛背景知识n计算机执行的任何程序都必须首先读入内存,CPU 通过内存来访问程序,而安装操作系统实际上是把存放在光盘上的操作系统执行代码存入硬盘的过程•从硬盘上加载程序到内存很方便•操作系统中的文件系统主要是靠硬盘提供物理支持n安装操作系统到硬盘,实际上有两方面的作用•在硬盘上建立文件系统•把操作系统的全部内容事先存放在硬盘上以备使用•当使用计算机时,从硬盘上加载操作系统到内存,然后将机器控制权转给操作系统内核来执行背景知识n在本实验中,通过Windows 2000 Professional 的安装,来了解Windows操作系统的安装及配置,包括安装前的准备工作、驱动程序的配置以及系统的设定等内容n Windows 2000一共有四个版本,即Professional、Server、Advanced Server和Datacenter Server,它们的差别在于功能以及支持CPU、RAM数量上的不同背景知识n由于用户计算机环境的不同,需要的安装方式和内容也会有所不同。
•升级安装:保存计算机的现有文件及设置,并将原Windows系统升级为Windows 2000 Professional•全新安装:有助于提升系统性能。
但不保存计算机中原有的文件及设置,机器中的所有应用程序都要重新安装•多重开机安装:使计算机拥有多种操作系统,每次开机时,可以选择所要启动的系统背景知识n多重开机安装•Windows 2000 Professional的多重开机安装支持下列操作系统:Windows NT 3.51/4.0、Windows 9x、Windows 3.x和MS-DOS•采用多重开机安装方式,首先需要进行硬盘分区,因为每个操作系统都要求安装在不同的分区•此外,还提高了对硬件的需求,因为安装多个操作系统的硬盘空间用量非常大•各个操作系统的安装次序也要注意,原则上次序是MS-DOS、Windows 3.x、Windows 9x优先安装,然后是Windows NT,再安装Windows 2000实验目的n通过对Windows 2000 Professional的安装操作,了解操作系统应用环境建立的初步过程n掌握对Windows操作系统的基本系统设置n了解Windows多操作系统安装的方法工具/准备工作n Windows 2000对系统的要求比较高•CPU:Pentium 166MHz以上•内存:32MB,建议64MB以上•磁盘空间(可用空间/总空间) :650MB/2GB,建议1.5GB/4GB•CD-ROM或DVD-ROM光驱•网卡和调制解调器•VGA显卡及显示器、键盘、鼠标实验内容与步骤n本实验以光盘启动为例n可以利用Windows 2000 Professional光盘来直接开机启动,开机后自动执行安装程序n安装过程可分为两个阶段•文字模式阶段:选择用来安装Windows 2000的硬盘。
东北大学操作系统实验报告WORD
课程编号:B080000070《操作系统》实验报告姓名班级指导教师石凯实验名称《操作系统》实验开设学期2016-2017第二学期开设时间第11周——第18周报告日期2017年7月3日评定成绩评定人石凯评定日期2017年7月5日东北大学软件学院实验一进程的同步与互斥实验题目:通过学习和分析基础例子程序,使用windows进程和线程编程(也可以采用Java 或Unix/Linux的POSIX线程编程)实现一个简单的生产者/消费者问题的程序。
关键代码:import java.util.ArrayList;public class Produce {public Object object;public ArrayList<Integer> list;//用list存放生产之后的数据,最大容量为1public Produce(Object object,ArrayList<Integer> list ){this.object = object;this.list = list;}public void produce() {synchronized (object) {/*只有list为空时才会去进行生产操作*/try {while(!list.isEmpty()){System.out.println("生产者"+Thread.currentThread().getName()+" waiting");object.wait();}int value = 9999;list.add(value);System.out.println("生产者"+Thread.currentThread().getName()+" Runnable");object.notifyAll();//然后去唤醒因object调用wait方法处于阻塞状态的线程}catch (InterruptedException e) {e.printStackTrace();}}}}import java.util.ArrayList;public class Consumer {public Object object;public ArrayList<Integer> list;//用list存放生产之后的数据,最大容量为1public Consumer(Object object,ArrayList<Integer> list ){this.object = object;this.list = list;}public void consmer() {synchronized (object) {try {/*只有list不为空时才会去进行消费操作*/while(list.isEmpty()){System.out.println("消费者"+Thread.currentThread().getName()+" waiting");object.wait();}list.clear();System.out.println("消费者"+Thread.currentThread().getName()+" Runnable");object.notifyAll();//然后去唤醒因object调用wait方法处于阻塞状态的线程}catch (InterruptedException e) {e.printStackTrace();}}}}实验结果:思考题:(1)如何控制进程间的相互通信?答:主要有:管道,信号,共享内存,消息队列(2)什么是进程的同步?什么是进程的互斥?分别有哪些实现方式?答:进程互斥是进程之间的间接制约关系。
哈工大《操作系统》实验1
(5)重新编写一个setup.s,然后将其中的显示的信息改为:“Now we are in SETUP”。
再次编译,重新用make命令生成BootImage,结合提示信息和makefile文修改build.c,具体将setup.s改动如下:mov cx,#27mov bx,#0x0007 ! page 0, attribute 7 (normal)mov bp,#msg1mov ax,#0x1301 ! write string, move cursorint 0x10dieLoop:j dieLoopmsg1:.byte 13,10,13,10.ascii "Now we are in SETUP".byte 13,10,13,10将build.c改动如下:if(strcmp("none",argv[3]) == 0)//添加判断return 0;if ((id=open(argv[3],O_RDONLY,0))<0)die("Unable to open 'system'");// if (read(id,buf,GCC_HEADER) != GCC_HEADER)// die("Unable to read header of 'system'");// if (((long *) buf)[5] != 0)// die("Non-GCC header of 'system'");for (i=0 ; (c=read(id,buf,sizeof buf))>0 ; i+=c )if (write(1,buf,c)!=c)die("Write call failed");close(id);fprintf(stderr,"System is %d bytes.\n",i);if (i > SYS_SIZE*16)die("System is too big");return(0);(6)验证:用make是否能成功生成BootImage,运行run命令验证运行结果。
哈工大威海计算机操作系统原理实验报告4.
计算机操作系统原理实验报告
班级:1104202 学号:110420212 姓名:李敖哈尔滨工业大学(威海实验四页面置换算法
、实验目的
1•掌握内存管理基本功能和请求分页式管理的基本原理以及页面置换算法。
2.学会在Linux操作系统下使用C函数和系统调用的编程方法。
3.掌握利用C语言设计实现不同置换策略的页面置换算法。
4.验证虚存存储管理机制及其性能。
对于生成的引用串,计算、比对不同页面
置
换算法的缺页率。
、实验要求
1.学生应完成如下章节的学习:进程和线程、调度、存储管理。
2.安装Linux操作系统,使用C语言编程,利用相关系统调用实现设计。
三、实验内容
1•创建空闲存储管理表、模拟内存、页表等。
2.提供一个用户界面,用户利用它可输入不同的页面置换策略和其他附加参
数。
3.运行置换程序,输出缺页率结果。
四、程序流程图
1.最佳页面置换算法流程图
开始
1
2.先进先出页面置换算法流程图
开蛤
初始化进种块
3.最近最久未使用页面置换算法流程图
初縮化进出块
五、实验结果
最佳页面置换算法分区
先进先出页面置换算法
最近最久未使用页面置换算法六、结果分析本程序已基本实现了页面的置换
算法,包括最佳页面置换算法、先进先出页面置换算法和最近最久未使用页面置换算法。
页表最大空间为5,随机进程最大
序列为50。
哈工大操作系统实验
2021级本科《操作系统》实验报告(实验3)学生姓名曾帅学号12院系软件学院任课教师范国祥实验TA XXX实验地点软件学院三楼实验室实验时间2016年05月26日星期四实验题目进程管理实验学时3学时实验目的:●掌握Linux下的多进程编程技术;●通过对进程运行轨迹的跟踪来形象化进程的概念;●在进程运行轨迹跟踪的基础上进行相应的数据统计,从而能对进程调度算法进行实际的量化评价,更进一步加深对调度和调度算法的理解,获得能在实际操作系统上对调度算法进行实验数据对比的直接经验。
实验内容及要求:(1)基于模板“”编写多进程的样本程序,实现如下功能:●所有子进程都并行运行,每个子进程的实际运行时间一般不超过30秒;●父进程向标准输出打印所有子进程的id,并在所有子进程都退出后才退出。
(2)在Linux 上实现进程运行轨迹的跟踪。
基本任务是在内核中维护一个日志文件/var/,把从操作系统启动到系统关机过程中所有进程的运行轨迹都记录在这一log文件中。
(3)在修改过的上运行样本程序,通过分析log文件,统计该程序建立的所有进程的等待时间、完成时间(周转时间)和运行时间,然后计算平均等待时间,平均完成时间和吞吐量。
可以自己编写统计程序,也可以使用python脚本程序“”进行统计。
(4)修改进程调度的时间片,然后再运行同样的样本程序,统计同样的时间数据,和原有的情况对比,体会不同时间片带来的差异。
实验过程描述、结果及思考:简要描述实验过程(含操作步骤及看到的结果)。
(1)在ubuntu下,利用系统提供的进程控制函数fork、wait系统调用编写多进程程序,编译运行,分析运行结果,之后开始修改内核。
(2)在init/中的main()中添加创建日志文件/var/的语句。
需要在把log文件关联到文件描述符3,0 1 2分别是stdin stdout和stderr,按照如下方式修改:(3)向kernel/中添加日志打印功能,将以下代码添加到原文件中:(4)在kernel/、kernel/和kernel/中,找到正确的状态转换点,并添加合适的状态信息,把它输出到log 文件之中。
哈工大操作系统实验linux-0.11_实验一-启动系统
实验一总结——启动系统zhangliang73@此次实验的基本内容是:1.阅读《Linux内核完全注释》的第6章,对计算机和Linux 0.11的引导过程进行初步的了解;2.按照下面的要求改写0.11的引导程序bootsect.s3.有兴趣同学可以做做进入保护模式前的设置程序setup.s。
改写bootsect.s主要完成如下功能:1.bootsect.s能在屏幕上打印一段提示信息“XXX is booting...”,其中XXX是你给自己的操作系统起的名字,例如LZJos、Sunix等(可以上论坛上秀秀谁的OS名字最帅,也可以显示一个特色logo,以表示自己操作系统的与众不同。
)改写setup.s主要完成如下功能:1.bootsect.s能完成setup.s的载入,并跳转到setup.s开始地址执行。
而setup.s向屏幕输出一行"Now we are in SETUP"。
2.setup.s能获取至少一个基本的硬件参数(如内存参数、显卡参数、硬盘参数等),将其存放在内存的特定地址,并输出到屏幕上。
3.setup.s不再加载Linux内核,保持上述信息显示在屏幕上即可。
bootsect.s代码解读SYS_SIZE表示系统模块的大小,此处设置有冗余。
bootsect.s被BIOS启动程序装载到0x7c00处,然后把自己移开,复制到0x90000处,然后跳转到那里。
之后,它使用BIOS中断,将setup模块直接装载在紧邻它之后的0x90200处,又把system 装载到0x10000处。
注意!当前的系统最大是8*65536字节。
这没问题,未来也是。
我想让它保持简单。
这512KB 的kernel大小是足够的,尤其是它像minix一样不包含缓存。
装载器被实现得尽量简单,持续的读取错误将导致死循环。
请手动重启。
在可能的情况下,它一次得到整个扇区,这样可使装载十分迅速。
setup扇区的长度= 4boot扇区的原地址= 0x07c0 ;由于20位地址寻址时,段地址左移四位,表现为16进制1位initseg = 0x9000 ;bootsect将移至的地址setupseg = 0x9020 ;setup装载的位置sysseg = 0x1000 ;system装载的地址endseg = sysseg + syssize ;sys的结尾地址总之是定义了根文件系统的物理位置。
操作系统实验报告
操作系统实验报告一、实验目的本次操作系统实验的主要目的是通过实际操作和观察,深入理解操作系统的工作原理和关键机制,包括进程管理、内存管理、文件系统以及设备管理等方面。
同时,培养我们解决实际问题的能力,提高对操作系统相关知识的综合运用水平。
二、实验环境本次实验使用的操作系统为 Windows 10 和 Linux(Ubuntu 2004 LTS),实验所使用的编程工具包括 Visual Studio Code、gcc 编译器等。
三、实验内容及步骤(一)进程管理实验1、进程创建与终止在 Windows 系统中,使用 C++语言编写程序,通过调用系统 API函数创建新的进程,并观察进程的创建和终止过程。
在 Linux 系统中,使用 C 语言编写程序,通过 fork()系统调用创建子进程,并通过 wait()函数等待子进程的终止。
2、进程调度观察Windows 和Linux 系统中进程的调度策略,包括时间片轮转、优先级调度等。
通过编写程序模拟进程的执行,设置不同的优先级和执行时间,观察系统的调度效果。
(二)内存管理实验1、内存分配与释放在 Windows 系统中,使用 C++语言的 new 和 delete 操作符进行内存的动态分配和释放,并观察内存使用情况。
在 Linux 系统中,使用 C 语言的 malloc()和 free()函数进行内存的分配和释放,通过查看系统的内存使用信息来验证内存管理的效果。
2、虚拟内存管理研究 Windows 和 Linux 系统中的虚拟内存机制,包括页表、地址转换等。
通过编写程序访问虚拟内存地址,观察系统的处理方式和内存映射情况。
(三)文件系统实验1、文件操作在 Windows 和 Linux 系统中,使用编程语言对文件进行创建、读取、写入、删除等操作。
观察文件的属性、权限设置以及文件在磁盘上的存储方式。
2、目录操作实现对目录的创建、删除、遍历等操作。
研究目录结构和文件路径的表示方法。
河工大-计算机操作系统-实验报告
操作系统实验指导书计算机科学与软件学院实验一进程控制与描述一、实验目的通过对Windows 2000编程,进一步熟悉操作系统的基本概念,较好地理解Windows 2000的结构。
通过创建进程、观察正在运行的进程和终止进程的程序设计和调试操作,进一步熟悉操作系统的进程概念,理解Windows 2000进程的“一生”。
二、实验环境硬件环境:计算机一台,局域网环境;软件环境:Windows 2000 Professional、Linux Redhat 9.0操作系统平台,Visual C++ 6.0专业版或企业版。
三、实验内容和步骤第一部分:Windows 2000 Professional下的GUI应用程序,使用Visual C++编译器创建一个GUI应用程序,代码中包括了WinMain()方法,该方法GUI类型的应用程序的标准入口点。
在“开始”菜单中单击“程序”-“附件”-“记事本”命令,将程序键入记事本中,并把代码保存为1-1.cpp。
程序1-1 Windows 2000的GUI应用程序// msgbox项目# include <windows.h> // 标准的include// 告诉连接器与包括MessageBox API函数的user32库进行连接# pragma comment(lib, “user32.lib” )// 这是一个可以弹出信息框然后退出的筒单的应用程序int APIENTRY WinMain(HINSTANCE /* hInstance */ ,HINSTANCE /* hPrevInstance */ ,LPSTR /* lpCmdLine */ ,int /* nCmdShow */ ){:: MessageBox(NULL, // 没有父窗口“Hello, Windows 2000” , // 消息框中的文本“Greetings”, // 消息框标题MB_OK) ; // 其中只有一个OK按钮// 返回0以便通知系统不进入消息循环return(0) ;}也可以利用任何其他文本编辑器键入程序代码,如果这样,例如使用WORD来键入和编辑程序,则应该注意什么问题?_________________注意保存成cs文件_______________________________________________________________________________________________________________________ 在“命令提示符”窗口运行CL.EXE,产生1-1.EXE文件:C:\> CL 1-1.cpp在程序1-1的GUI应用程序中,首先需要Windows.h头文件,以便获得传送给WinMain() 和MessageBox() API函数的数据类型定义。
操作系统实验报告(NEUSOFT)
操作系统实验报告说明:1、提交形式:word文档,以“学号姓名”命名,如0911*******张燕.doc 。
2、提交文档的内容:老师课上布置的当次实验需要回答的问题。
注意标明问题序号。
3、提交时间:当次实验课结束一周内,提交到课代表处。
课代表提交给老师。
课代表负责将未提交报告的学生名单以电子版形式附上。
注:本学期共5次课上必做实验,每份实验报告都以电子版形式提交。
实验1分析实验结果参照实验指导书回答下面的问题:5:解释执行“a1.pco”。
6:再次解释执行“a1.pco”。
原因:因为是并发进行的,所以输出的字符串的顺序不是一样的10:解释执行“a2.pco”。
11:再次解释执行“a2.pco”。
因为是并发执行的,所以第一个运行结果先执行x=4,y=0+4;然后执行y=3,x=0+2;第二个运行结果先x=4;然后执行y=3再执行y=y+4,最后执行x=4+2;15:因为是并发执行的,所以当func1和func2()同时执行x=某个数时,进入下一步加1就会使结果少加一次,所以最后结果不等于10019:因为是并发执行的,而且每个func进行加一前都会判断一次另一个func()是否进行完加1,如果没有就一直while不运行下面的函数,从而避免了两个赋值在同时进行,而使结果不为10023:因为是并发执行的,而且每个fun()要执行前都要wait临界资源从而另一个fun ()不能执行。
信号量互斥,需先执行完此函数,在执行另一个fun()实验2分析实验结果参照实验指导书回答下面的问题:5:生产者生产,消费者进去取东西,但里面没有空缓冲区了,生产者就不能进去生产了11:缓冲区没有空了,但是生产者又进去了,消费者不能进去取物品,生产者又出不来,造成死锁17:消费者进去取物品,可是里面没有物品,然后生产者又不能进去产生物品,所以消费者出不来造成死锁实验3(该实验为期中考试项目,按照期中考试要求提交报告)实验4问题1:描述内存控制块结构;描述内存控制块与内存分区和内存块的关系问题2:设计一个含有一个任务的应用程序,该任务负责打印两个起始显示位置不同的相同字符串。
哈工大《操作系统》实验4
问题回答:
(1)在pc.c中去掉所有与信号量有关的代码,再运行程序,执行效果有变化吗?为什么会这样?
答:在去掉与信号量有关的代码后,执行结果Customer的消费数据没有按递增的顺序输出,且fread()函数将产生错误。
因为没有信号量P(S)控制,导致生产者可能在缓冲区满后继续生产,导致没有被消费的数据被覆盖,使得消费者消费的数据不是递增序列。
同时,没有信号量V(S)控制,导致消费者可能在读取所有数据后仍然继续读取,导致读取的数据无效。
没有mutex信号量控制导致出现多进程并发访问缓冲区,导致出现fread()错误。
(2)实验的设计者在第一次编写生产者——消费者程序的时候,是这么做的:
Producer()
{ P(Mutex); //互斥信号量
2014级本科操作系统实验报告实验4学生姓名学号1143710412院系软件学院任课教师实验taxxx实验地点软件学院三楼实验室实验时间2016年06星期四实验题目进程同步实验学时学时实验目的
2014级本科《操作系统》实验报告(实验4)
学生姓名
曾帅
学号
1143710412
院系
软件学院
任课教师
范国祥
实验TA
(1)建立一个生产者进程,N个消费者进程(N>1);
(2)用文件建立一个共享缓冲区;
(3)生产者进程依次向缓冲区写入整数0,1,2,...,M(M>=500);
(4)消费者进程从缓冲区读数,每次读一个,并将读出的数字从缓冲区删除,然后将本进程ID和数字输出到标准输出;
(5)缓冲区同时最多只能保存10个数。
注:pc.c中将会用到sem_open()、sem_close()、sem_wait()和sem_post()等信号量相关的系统调用。
操作系统实验--实验环境的使用heu
操作系统实验--实验环境的使⽤heu 操作系统实验报告哈尔滨⼯程⼤学计算机科学与技术学院第⼀讲实验环境的使⽤⼀、实验概述1. 实验名称实验环境的使⽤2. 实验⽬的熟悉操作系统集成实验环境 OS Lab 的基本使⽤⽅法。
练习编译、调试 EOS 操作系统内核以及 EOS 应⽤程序。
3. 实验类型验证性实验4. 实验内容启动OSLab学习OSLab基本使⽤⽅法EOS内核项⽬的⽣成和调试EOS应⽤程序项⽬的⽣成和调试退出OSLab保存EOS内核项⽬⼆、实验环境使⽤WIINDOWS XP操作系统和OS Lab集成实验环境,涉及C语⾔等编程语⾔。
三、实验过程1. 设计思路和流程图对于WINDOWS控制台应⽤程序:对于EOS内核项⽬:对于EOS应⽤程序项⽬:2. 算法实现验证性实验,⽆需算法3. 需要解决的问题及解答(1)练习使⽤单步调试功能(逐过程、逐语句),体会在哪些情况下应该使⽤“逐过程”调试,在哪些情况下应该使⽤“逐语句”调试。
练习使⽤各种调试⼯具(包括“监视”窗⼝、“调⽤堆栈”窗⼝等)。
解答:逐语句,就是每次执⾏⼀⾏语句,如果碰到函数调⽤,它就会进⼊到函数⾥⾯。
⽽逐过程,碰到函数时,不进⼊函数,把函数调⽤当成⼀条语句执⾏。
因此,在需要进⼊函数体时⽤逐语句调试,⽽不需要进⼊函数体时⽤逐过程调试。
(2)思考⽣成 EOS SDK ⽂件夹的⽬的和作⽤。
查看 EOS SDK ⽂件夹中的内容,明⽩⽂件夹的组织结构和各个⽂件的来源和作⽤。
查看 EOS 应⽤程序包含了 SDK ⽂件夹中的哪些头⽂件,是如何包含的?解答:EOS SDK是为应⽤程序调⽤系统API提供服务,可作为⽤户编程中可使⽤的⼯具包集合。
EOS SDK⽂件夹主要包括INC头⽂件、LIB⽂件夹导⼊库⽂件和BIN⽂件夹动态链接库,可执⾏程序,⼆进制⽂件。
EOS SDK包含的头⽂件有:eos.h 负责导出API函数声明;eosdef.h负责导出函数类型的定义;error.h 负责导出错误码。
哈尔滨工程大学操作系统(磁盘调度算法)
操作系统实验报告哈尔滨工程大学计算机科学与技术学院一、实验概述1. 实验名称磁盘调度算法2. 实验目的(1)通过学习EOS 实现磁盘调度算法的机制,掌握磁盘调度算法执行的条件和时机;(2)观察EOS 实现的FCFS、SSTF和SCAN磁盘调度算法,了解常用的磁盘调度算法;(3)编写CSCAN和N-Step-SCAN磁盘调度算法,加深对各种扫描算法的理解。
3. 实验类型验证性和设计性实验4. 实验内容(1)验证先来先服务(FCFS)磁盘调度算法;(2)验证最短寻道时间优先(SSTF)磁盘调度算法;(3)验证SSTF算法造成的线程“饥饿”现象;(4)验证扫描(SCAN)磁盘调度算法;(5)改写SCAN算法。
二、实验环境在OS Lab实验环境的基础上,利用EOS操作系统,由汇编语言及C语言编写代码,对需要的项目进行生成、调试、查看和修改,并通过EOS应用程序使内核从源代码变为可以在虚拟机上使用。
三、实验过程1. 设计思路和流程图(1)改写SCAN算法在已有SCAN 算法源代码的基础上进行改写,要求不再使用双重循环,而是只遍历一次请求队列中的请求,就可以选中下一个要处理的请求。
算法流程图如下图所示。
图3.1.1 SCAN算法IopDiskSchedule函数流程图(2)编写循环扫描(CSCAN)磁盘调度算法在已经完成的SCAN算法源代码的基础上进行改写,不再使用全局变量ScanInside确定磁头移动的方向,而是规定磁头只能从外向内移动。
当磁头移动到最内的被访问磁道时,磁头立即移动到最外的被访问磁道,即将最大磁道号紧接着最小磁道号构成循环,进行扫描。
算法流程图如下图所示。
图3.1.2 CSCAN算法IopDiskSchedule函数流程图(3)编写N-Step-SCAN磁盘调度算法在已经完成的SCAN 算法源代码的基础上进行改写,将请求队列分成若干个长度为N 的子队列,调度程序按照FCFS原则依次处理这些子队列,而每处理一个子队列时,又是按照SCAN算法。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
输入命令“c”,continue程序的运行,Bochs一如既往地启动了Linux 0.11。
)在Linux 0.11下输入(或拷入)test.c,编译为test,运行之,打印如下信息:
使用命令“u /7”,显示从当前位置开始7条指令的反汇编代码,如下:
“sreg”命令:
可以看到ldtr的值是0x0068=0000000001101000(二进制),表示LDT表存放在GDT表的1101(二进制(十进制)号位置。
而GDT的位置已经由gdtr明确给出,在物理地址的0x00005cc8。
用“xp 0x00005cb8”查看从该地址开始,32个字的内容,即GDT表的前16项,如下:
sreg输出中,ldtr所在行里,dl和dh的值一致,
52d00068 0x000082fd”将其中的加粗数字组合为“0x00fd52d0”,这就是LDT表的物理地址。
“xp 下,页目录表的位置由CR3寄存器指引。
“creg”命令可以看到:
说明页目录表的基址为0。
看看其内容,“xp /68w 0”:
其中第65个页目录项就是我们要找的内容,用“xp /w 0+64*4”查看:
从该位置开始查找3号页表项,得到(xp /w 0x00fa7000+3*4):
067是属性,显然P=1,
线性地址0x10003004对应的物理页框号为0x00fa6,和页内偏移0x004接到一起,得到0x00fa6004,这就
这个数值确实是test.c中i的初值。
现在,通过直接修改内存来改变i的值为0,命令是:setpmem 0x00fa6004 4 0,表示从0x00fa6004地址开编写producer.c、consumer.c,编译运行
问题回答:
)对于地址映射实验部分,列出你认为最重要的那几步(不超过4步),并给出你获得的实验数据。
第一步是:寻找保存变量i的虚拟地址ds:0x3004所对应的LDT,ldtr的值是0x0068=0000000001101000(二进制),表示LDT表存放在GDT表的1101(二进制)=13(十进制)号位置。
GDT的位置已经由gdtr明确给出,在物理地址的0x00005cb8。
dl和dh的值分
0x52d00068,0x000082fd。
组合出LDT表的物理地址0x00fd52d0。
第二步是:由ds:0x0017=0000000000010111(二进制),所以RPL=11,可见是在最低的特权级(因为在应用程序中执行),TI=1,表示查找LDT表,索引值为10(二进制)= 2(十进制),。