哈工大操作系统实验一

合集下载

哈工大《操作系统》实验2

哈工大《操作系统》实验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

哈工大威海计算机操作系统原理实验报告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,并且生产者只能生产“同一种物品”,而消费者也只能购买“同一种物品”。

操作系统实验报告哈工大

操作系统实验报告哈工大

计算机操作系统课程实验报告专业信息管理与信息系统班级 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,不管虚拟磁盘空间是否被全部使用。

选择虚拟机在本地磁盘中的位置和大小,单击下一步。

确认虚拟机的详细情况,点击下一步。

这时我们已经成功的创建了一个虚拟机了,接下来我们要开始配置这个虚拟机安装操作系统选择刚才创建的虚拟机,然后单击上方的“开始”弹出了首次运行向导,单击下一步。

哈工大单片机实验报告

哈工大单片机实验报告

软件实验在软件实验部分,通过实验程序的调试,使学生熟悉MCS-51的指令系统,了解程序设计过程,掌握汇编语言设计方法以及如何使用实验系统提供的调试手段来排除程序错误。

实验一清零程序一、实验目的掌握汇编语言设计和调试方法,熟悉键盘操作。

二、实验内容把2000~20FFh的内容清零。

三、程序框图四、实验过程(1)实验中定义R0为循环次数,利用定义了初值的数据指针DPTR不断加1指向需要被清零的外部数据存储器单元。

(2)再利用MOVX语句,将外部存储器指定内容清零。

(3)用CJNE比较语句判断循环是否结束。

五、实验结果及分析问题回答:清零前2000H~20FFH中为内存里的随机数,清零后全变为0。

六、实验源程序;清零程序ORG 0000HMOV DPTR,#2000HMOV R0,#0FFHORG 0660HMAIN: MOV A,#00HMOVX @DPTR,AINC DPTRDJNZ R0,MAINEND实验二拆字程序一、实验目的掌握汇编语言设计和调试方法。

二、实验内容把2000h的内容拆开,高位送2001h低位,低位送2002h低位,2001h、2002h高位清零,一般本程序用于把数据送显示缓冲区时用。

三、程序框图四、实验过程(1)定义数据指针DPTR为2000H,将其中内容送入累加器A中,利用高低四位交换语句SWAP可将高四位移至低四位,再用语句ANL与0FH进行与操作取出高四位送入2001H低位(2)再次让数据指针DPTR为2000H,将其中内容送入累加器A中,直接与0FH相与取出低四位送入2002H低位。

五、实验结果及分析问题回答:将ANL A,#0FH改为ORL A,#0F0H可以实现将高位置为1。

六、实验源程序;拆字程序ORG 0000HMAIN: MOV DPL, #00HMOV DPH, #20HMOVX A, @DPTRSWAP AANL A, #0FHINC DPTR-3-MOVX @DPTR, AMOV DPL,#00HMOVX A, @DPTRANL A, #0FHINC DPTRINC DPTRMOVX @DPTR, AEND实验三拼字程序一、实验目的进一步掌握汇编语言设计和调试方法。

哈工大软件实验报告

哈工大软件实验报告
Loop:
jmp Loop
;===============================================
END
姓名:
学号:
班级:
同组人:
指导老师:
报告日期:
软件设计实验5:数据块传送实验
实验目的:
掌握外部扩展RAM中的数据操作。
实验内容:
1.对2040H地址开始的100个字节进行赋值,值为#5AH;
; CODE SEGMENT
;===============================================
org 0100h
Start:
MOV R1,#20H
MOV R0,#90H
LOOP1:
MOV @R0,#55H
INC R0
DJNZ R1,LOOP1
MOV R0,#90H
MOV R2,#10H
;===============================================
; CODE SEGMENT
;===============================================
org 0100h
Start:
MOV R0,#09FH
MOV A,R0
SWAP A
;===============================================
; VARIABLES
;===============================================
;===============================================
; Reset Vector

哈尔滨工程大学操作系统(磁盘调度算法)

哈尔滨工程大学操作系统(磁盘调度算法)

操作系统实验报告哈尔滨工程大学计算机科学与技术学院一、实验概述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进程的描述与控制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)代码块,在其中包含应用程序所使用的机器代码和应用程序的数据。

哈工大《操作系统》实验1

哈工大《操作系统》实验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命令验证运行结果。

操作系统实验一

操作系统实验一

操作系统实验报告哈尔滨工程大学计算机科学与技术学院第一讲实验环境的使用一、实验概述1. 实验名称实验环境的使用2. 实验目的(1)熟悉操作系统集成实验环境OS Lab的基本使用方法。

(2)练习编译、调试EOS操作系统内核以及EOS应用程序3. 实验类型验证4. 实验内容4.1 启动OS Lab1. 双击OS Lab 的图标2.注册用户信息的对话框3. 观察OS Lab 主窗口的布局4.2 学习b OS Lab 的基本使用方法4.2.1 新建s Windows 控制台应用程序项目4.2.2 生成项目使用“生成项目”功能可以将程序的源代码文件编译为可执行的二进制文件4.2.3 执行项目在OS Lab 中选择“调试”菜单中的“开始执行(不调试)”,可以执行刚刚生成的Windows 控制台应用程序。

启动执行后会弹出一个Windows 控制台窗口,显示控制台应用程序输出的内容。

按任意键即可关闭此Windows 控制台窗口。

4.2.4 调试项目步骤如下:1. 右键点击“项目管理器”窗口中的“源文件”文件夹节点,在弹出的快捷菜单中选择“添加”中的“添加新文件”。

2. 在弹出的“添加新文件”对话框中选择“C 源文件”模板。

3. 在“名称”中输入文件名称“func”。

4. 点击“添加”按钮,添加并自动打开文件func.c5. 在func.c 文件中添加函数:int Func (int n){n = n + 1;return n;}6. 点击源代码编辑器上方的console.c 标签,切换到console.c 文件。

将main 函数修改为:int main (int argc, char* argv[]){int Func (int n); // 声明Func 函数int n = 0;n = Func(10);printf ("Hello World!\n");return 0;}代码修改完毕后按F7(“生成项目”功能的快捷键)。

哈尔滨工程大学实验报告参考模板

哈尔滨工程大学实验报告参考模板

实验报告哈尔滨工程大学教务处制实验一:软硬件实验环境配置实验一、实验目的本次实验主要是要求信息安全专业学生熟悉常用的保密泄密分析软件,及其环境配置等工作。

本次课通过破解二进制文件使学生掌握常用的代码分析工具,从而为以后进行造成泄密的系统漏洞进行分析研究奠定工具基础。

二、实验环境(实验所使用的器件、仪器设备名称及规格)装有Windows XP sp2 的操作系统,有Visual C++6.0 编译环境,另外需要安装IDA,OllyDbg, LordPE、UltraEdit 等软件。

三、实验任务及其要求本实验就是破解二进制文件,使学生掌握常用的代码分析工具,从而为以后进行造成泄密的系统漏洞进行分析研究奠定工具基础。

四、实验过程及分析1)在VC6.0下运行附录中所给的C源程序。

我们可以发现只有输入正确的密码1234567才能得到密码验证的确认,不管密码输入正确与否,能否跳出循环直接取决于main函数中的If 判断2)打开IDA,把由VC6.0 得到的.exe 文件直接拖进IDA,稍等片刻,IDA 就会把二进制文件翻译成质量上乘的反汇编代码,默认情况下,IDA会自动识别出main函数,并用类似流程图的形式标注出函数内部的跳转指令,如果按F12,IDA会自动绘制出更加专业和详细的函数流程图。

3)在IDA 的图形显示界面中,用鼠标选中程序分支点,也就是我们要找的对应于C 代码中的if 分支点,按空格键切换到汇编指令界面,光标仍然显示高亮的这条汇编指令就是刚才在流程图中看到的引起程序分支的指令。

可以看到这条指令位于PE文件的.text 节,并且IDA 已经自动将该指令的地址换算成了运行时的内存地址VA:0x004010C9。

4)选在关闭IDA,换用OllyDbg进行动态调试来看看程序到底是怎样分支的。

用OllyDbg把PE文件打开。

5)找到main 函数调用后,按F7 单步跟入就可以看到真正的代码了,我们也可以按快捷键Ctrl+G直接跳到有IDA得到的VA:0x004010C9处查看那条引起程序分支的关键指令。

哈工大《操作系统》实验1

哈工大《操作系统》实验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.

哈工大威海计算机操作系统原理实验报告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_实验一-启动系统

哈工大操作系统实验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的结尾地址总之是定义了根文件系统的物理位置。

哈工大 单片机第一次试验报告

哈工大 单片机第一次试验报告

H a r b i n I n s t i t u t e o f T e c h n o l o g y单片机原理与应用实验报告学生姓名:学号:班级:专业:通信工程任课教师:所在单位:电子与信息工程学院2013年5月软件实验在软件实验部分,通过实验程序的调试,使学生熟悉MCS-51的指令系统,了解程序设计过程,掌握汇编语言设计方法以及如何使用实验系统提供的调试手段来排除程序错误。

实验一清零程序一、实验目的掌握汇编语言设计和调试方法,熟悉键盘操作。

二、实验内容把2000~20FFh的内容清零。

三、程序框图四、实验过程1、LED环境⑴在“P.”状态下按“0→EV/UN”,装载实验所需的代码程序。

⑵在“P.”状态下键入0640,然后按“STEP”或“EXEC”进入实验项目的调试与运行。

2、PC环境在与PC联机状态下,编译、连接、下载PH51\se01.asm,用连续或单步方式运行程序。

3、运行结果检查⑴在单步运行时,每走一步可观察其运行结果。

⑵在连续运行状态下,应按“暂停图标”或实验箱上的“暂停按钮”,使系统无条件退出用户运行状态返回监控,然后再用相应的命令键观察与检查2000H以后的存储空间中执行程序前后的内容变化。

五、实验结果及分析运行程序前如下图运行程序后如下图:六、实验源程序ORG 0640HMOV DPTR,#2000HMOV R0,#00HLOOP: MOVX @DPTR,AINC DPTRINC R0CJNE R0,#00H,LOOPSJMP $END实验二拆字程序一、实验目的掌握汇编语言设计和调试方法。

二、实验内容把2000h的内容拆开,高位送2001h低位,低位送2002h低位,2001h、2002h高位清零,一般本程序用于把数据送显示缓冲区时用。

三、程序流程四、实验步骤1、LED环境⑴在“P.”状态下按“0→EV/UN”,装载实验所需的代码程序。

⑵在“P.”状态下键入0660,然后按“STEP”或“EXEC”进入实验项目的调试与运行。

河工大-计算机操作系统-实验报告

河工大-计算机操作系统-实验报告

操作系统实验指导书计算机科学与软件学院实验一进程控制与描述一、实验目的通过对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函数的数据类型定义。

哈工大 嵌入式系统实验指导01

哈工大 嵌入式系统实验指导01

实验一:汇编指令实验1.实验目的z了解Keil uVision集成开发环境及软件仿真功能使用。

z掌握ARM7TDMI汇编指令的用法,并能编写简单的汇编程序。

z掌握指令的条件执行和使用LDR/STR指令完成存储器的访问。

z掌握基本的汇编程序调试。

2.实验设备z硬件:PC机一台z软件:WindowsXP系统,Keil uVision 4.0集成开发环境3.实验内容(1)使用LDR指令读取0x40000100地址上的数据,将数据加1。

若结果小于10,则使用STR指令把结果写回原地址;若结果大于等于10,则把0写回原地址。

(2)使用Keil uVision软件仿真,单步、全速运行程序,设置断点,打开寄存器窗口监视R0和R1的值,打开存储器观察窗口监视0x40000100地址上的值。

4.实验预习要求(1)学习ARM指令系统的内容,重点掌握LDR/STR指令和指令条件执行;(2)查阅Keil uVision 软件的介绍,了解软件的功能和操作方法。

5.实验步骤(1)启动Keil uVision,新建一个工程ex01。

见图1-1、图1-2、图1-3。

图1-1 建立工程图1-2 选择目标芯片图1-3 不需要系统提供的Startup文件(2)建立汇编源文件ex01.s,编写实验程序,然后添加到工程中。

见图1-4、图1-5、图1-6、图1-7。

图1-4 建立新文件图1-5 保存扩展名为.s的汇编程序文件图1-6 把文件添加到工程图1-7 添加文件到工程后(3)设置工程选项,存储器映射。

见图1-8、图1-9。

图1-8 设置工程选项图1-9 设置存储器映射(4)编译链接工程。

见图1-10。

(5)进行软件仿真调试。

见图1-11、图1-12、图1-13、图1-14。

图1-11 调试运行图1-12 调试界面图1-13 设置断点图1-14 运行程序6.实验参考程序汇编指令实验的参考程序见程序清单1.1。

程序清单1.1 汇编指令实验参考程序COUNT EQU 0X40000100 ;定义一个变量,地址为0x40000100 AREA RESET, CODE, READONLY ;声明代码段RESETENTRY ;表示程序入口CODE32 ;声明32位ARM指令START LDR R1,=COUNT ;R1 ← COUNTMOV R0,#0 ;R0 ← 0STR R0,[R1] ;[R1] ← R0,即设置COUNT为0LOOP LDR R1,=COUNTLDR R0,[R1] ;R0 ← [R1]ADD R0,R0,#1 ;R0 ← R0 + 1CMP R0,#10 ;R0与10比较,影响条件码标志MOVHS R0,#0 ;若R0 >= 10, 则此指令执行,即R0 ← 0STR R0,[R1] ;[R1] ← R0,即保存COUNTB LOOPEND7.思 考(1)若使用LDRB/STRB代替程序清单中的所有加载/存储指令(LDR/STR),程序会得到正确的执行吗?(2)LDR伪指令与LDR加载指令的功能和应用有何区别,举例说明?(提示:LDR伪指令的形式为“LDR Rn,=expr”。

操作系统实验报告实验3_1

操作系统实验报告实验3_1

操作系统实验报告实验3_1一、实验目的本次实验的主要目的是深入理解操作系统中进程管理的相关概念和原理,通过实际操作和观察,掌握进程的创建、调度、同步与互斥等关键机制,提高对操作系统内核工作原理的认知和实践能力。

二、实验环境本次实验在装有 Windows 10 操作系统的计算机上进行,使用了Visual Studio 2019 作为开发工具,编程语言为 C++。

三、实验内容与步骤(一)进程创建1、编写一个简单的 C++程序,使用系统调用创建一个新的进程。

2、在父进程和子进程中分别输出不同的信息,以区分它们的执行逻辑。

```cppinclude <iostream>include <windowsh>int main(){DWORD pid;HANDLE hProcess = CreateProcess(NULL, "childexe", NULL, NULL, FALSE, 0, NULL, NULL, NULL, &pid);if (hProcess!= NULL) {std::cout <<"Parent process: Created child process with PID "<< pid << std::endl;WaitForSingleObject(hProcess, INFINITE);CloseHandle(hProcess);} else {std::cerr <<"Failed to create child process" << std::endl;return 1;}return 0;}```(二)进程调度1、设计一个多进程并发执行的程序,通过设置不同的优先级,观察操作系统对进程的调度情况。

2、记录每个进程的执行时间和等待时间,分析调度算法的效果。

```cppinclude <iostream>include <windowsh>DWORD WINAPI ProcessFunction(LPVOID lpParam) {int priority =(int)lpParam;DWORD start = GetTickCount();std::cout <<"Process with priority "<< priority <<"started" << std::endl;for (int i = 0; i < 100000000; i++){//执行一些计算操作}DWORD end = GetTickCount();DWORD executionTime = end start;std::cout <<"Process with priority "<< priority <<" ended Execution time: "<< executionTime <<" ms" << std::endl;return 0;}int main(){HANDLE hThread1, hThread2;int priority1 = 1, priority2 = 2;hThread1 = CreateThread(NULL, 0, ProcessFunction, &priority1, 0, NULL);hThread2 = CreateThread(NULL, 0, ProcessFunction, &priority2, 0, NULL);if (hThread1!= NULL && hThread2!= NULL) {SetThreadPriority(hThread1, THREAD_PRIORITY_LOWEST);SetThreadPriority(hThread2, THREAD_PRIORITY_NORMAL);WaitForSingleObject(hThread1, INFINITE);WaitForSingleObject(hThread2, INFINITE);CloseHandle(hThread1);CloseHandle(hThread2);} else {std::cerr <<"Failed to create threads" << std::endl;return 1;}return 0;}```(三)进程同步与互斥1、实现一个生产者消费者问题的程序,使用信号量来实现进程之间的同步与互斥。

操作系统实验--实验环境的使用heu

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

哈尔滨工业大学远程教育课程操作系统
实验一
(选做)
主讲人:张英涛
背景知识
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的硬盘。

安装程序提供了建立分区、删除分区以及格式化等功能
•GUI图形界面阶段:进行系统设置与复制文件的动作,完成Windows 2000系统的安装
实验提示
n同意接受Windows许可协议
n记录机器总的硬盘空间数据
n选择文件系统:FAT、FAT32和NTFS,但一般建议选择NTFS文件系统
n按提示安装“Service Pack”光盘
n软件的产品序列号(25个字符的产品密钥)。

相关文档
最新文档