操作系统(第二个实验)

操作系统(第二个实验)
操作系统(第二个实验)

操作系统

实验报告

哈尔滨工程大学

计算机科学与技术学院

第二讲操作系统的启动

一、实验概述

1. 实验名称

操作系统的启动

2. 实验目的

跟踪调试EOS在PC机上从加电复位到成功启动的全过程,了解操作系统的启动过程。

查看EOS启动后的状态和行为,理解操作系统启动后的工作方式。

3. 实验类型

验证

4. 实验内容

准备实验

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

二、实验环境

EOS操作系统和OS Lab集成实验环境,主要运用了C语言。

三、实验过程

1. 源程序并附上注释

/*

提供该示例代码是为了阐释一个概念,或者进行一个测试,并不代表着

最安全的编码实践,因此不应在应用程序或网站中使用该示例代码。对

于超出本示例代码的预期用途以外的使用所造成的偶然或继发性损失,

北京英真时代科技有限公司不承担任何责任。

*/

#include "EOSApp.h"

int main(int argc, char* argv[])

{

int i;

for (i = 1; i <= 5; i++) {

printf("Hello,world! %d\n", i);

Sleep(1000);

}

printf("Bye-bye!\n");

return 0;

}

2. 程序运行时的初值和运行结果

2.1 准备实验

1. 启动OS Lab。

2. 新建一个EOS Kernel项目。

3. 在“项目管理器”窗口中打开boot文件夹中的boot.asm和loader.asm两个汇编文

件。boot.asm是软盘引导扇区程序的源文件,loader.asm是loader程序的源文件。

4. 按F7生成项目。

5. 生成完成后,使用Windows资源管理器打开项目文件夹中的Debug文件夹。找到由boot.asm生成的软盘引导扇区程序boot.bin文件,该文件的大小一定为512字节(与软盘引导扇区的大小一致)。找到由loader.asm生成的loader程序loader.bin文件,记录下此文件的大小1566字节。找到由其它源文件生成的操作系统内核kernel.dll。

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

2.2.1 使用Bochs做为远程目标机

按照下面的步骤将调试时使用的远程目标机修改为Bochs:

1. 在“项目管理器”窗口中,右键点击项目节点,在弹出的快捷菜单中选择“属性”。

2. 在弹出的“属性页”对话框右侧的属性列表中找到“远程目标机”属性,将此属性值修改为“Bochs Debug”(此时按F1可以获得关于此属性的帮助)。

3. 点击“确定”按钮关闭“属性页”对话框。接下来就可以使用Bochs模拟器调试BIOS程序和软盘引导扇区程序了。

2.2.2 调试BIOS程序

按F5启动调试,此时会弹出两个Bochs窗口。标题为“Bochs for windows - Display”的窗口相当于计算机的显示器,显示操作系统的输出。标题为“Bochs for windows - Console”的窗口是Bochs的控制台,用来输入调试命令,输出各种调试信息。

启动调试后,Bochs在CPU要执行的第一条指令(即BIOS的第一条指令)处中断。此时,Display窗口没有显示任何内容,Console窗口显示要执行的BIOS第一条指令的相关信息,并等待用户输入调试命令。

从Console窗口显示的内容中,我们可以获得关于BIOS第一条指令的如下信息:

(1)行首的[0xfffffff0]表示此条指令所在的物理地址。

(2)f000:fff0表示此条指令所在的逻辑地址(段地址:偏移地址)。

(3)jmp far f000:e05b是此条指令的反汇编代码。

(4)行尾的ea5be000f0是此条指令的十六进制字节码,可以看出此条指令有5个字节。

查看CPU在没有执行任何指令之前主要寄存器中的数据,以及内存中的数据:

1. 在Console窗口中输入调试命令sreg后按回车,显示当前CPU中各个段寄存器的值,其中

CS寄存器信息行中的“s=0xf000”表示CS寄存器的值为0xf000。

0x00000000:0000fff0”表示IP寄存器的值为0xfff0。

出的这1K物理内存的值都为0,说明BIOS中断向量表还没有被加载到此处。

4. 输入调试命令xp /512b 0x7c00,查看软盘引导扇区应该被加载到的内存位置。输出的内存值都为0,说明软盘引导扇区还没有被加载到此处。

可以验证BIOS第一条指令所在逻辑地址中的段地址和CS寄存器值是一致的,偏移地址和IP 寄存器的值是一致的。由于内存还没有被使用,所以其中的值都为0。

2.2.3 调试软盘引导扇区程序

接下来从0x7c00处调试软盘引导扇区程序:

1. 输入调试命令vb 0x0000:0x7c00,这样就在逻辑地址0x0000:0x7c00(相当于物理地址0x7c00)处添加了一个断点。

2. 输入调试命令c继续执行,在0x7c00处的断点中断。中断后会在Console窗口中输出下一个要执行的指令,即软盘引导扇区程序的第一条指令。

3.在纸上分别记录下此条指令的字节码(eb6d)和此条指令要跳转执行的下一条指令的地址(括号中的0x00007c6f)。

4.输入调试命令sreg验证CS寄存器(0x0000)的值。

5.输入调试命令r验证IP寄存器(0x7c00)的值。

6.由于BIOS程序此时已经执行完毕,输入调试命令xp /1024b 0x0000验证此时BIOS中断向量表已经被载入。

7.输入调试命令xp /512b 0x7c00显示软盘引导扇区程序的所有字节码。观察此块内存最开始的两个字节分别为0xeb和0x6d,这和引导程序第一条指令的字节码(eb6d)是相同的。此块内存最后的两个字节分别为0x55和0xaa,表示引导扇区是激活的,可以用来引导操作系统,这两个字节是boot.asm中最后一行语句 dw 0xaa55 定义的。

8.输入调试命令xp /512b 0x0600验证图3-2中第一个用户可用区域是空白的。

9. 输入调试命令xp /512b 0x7e00验证图3-2中第二个用户可用区域是空白的。

10. 自己设计两个查看内存的调试命令,分别验证这两个用户可用区域的高地址端也是的。

11. 输入调试命令xp /512b 0xa0000验证图3-2中上位内存已经被系统占用。

12. 自己设计一个查看内存的调试命令,验证上位内存的高地址端已经被系统占用。

NASM汇编器在将boot.asm生成为boot.bin的同时,会生成一个boot.lst列表文件,帮助开发者调试boot.asm文件中的汇编代码。按照下面的步骤查看boot.lst文件:

1. 在“项目管理器”窗口中,右键点击“boot”文件夹中的boot.asm文件。

2. 在弹出的快捷菜单中选择“打开生成的列表文件”,在源代码编辑器中就会打开文件boot.lst。

3. 将boot.lst文件和boot.asm文件对比可以发现,此文件包含了boot.asm文件中所有的汇编代码,同时在代码的左侧又添加了更多的信息。

4. 在boot.lst中查找到软盘引导扇区程序第一条指令所在的行(第73行) 73 00000000 EB6D jmp short Start 此行包含的信息有:

73是行号。 00000000是此条指令相对于程序开始位置的偏移(第一条指令应该为0)。 EB6D 是此条指令的字节码,和之前记录下来的指令字节码是一致的。

软盘引导扇区程序的主要任务就是将软盘中的loader.bin文件加载到物理内存0x1000处,然后跳转到loader程序的第一条指令(物理地址0x1000处的指令)继续执行loader程序。按照下面的步骤调试此过程:

1. 在boot.lst文件中查找到加载完毕loader.bin文件后要跳转到loader程序中执行的指令(第278行)

根据此指令相对于程序开始(0x7C00)的偏移(0x0181)可以得到此指令的逻辑地址为

0x0000:7D81。

2.输入调试命令vb 0x0000:0x7d81添加一个断点。

3.输入调试命令c继续执行,到断点处中断。在Console窗口中显示

此条指令会跳转到物理内存0x1000处(即Loader程序的第一条指令)继续执行。

4.按照打开boot.lst文件的方法打开loader.lst文件,并在此文件中查找到loader程序的第一条指令(第33行)

5.输入调试命令xp /8b 0x1000查看内存0x1000处的数据,验证此块内存的前三个字节和loader.lst文件中的第一条指令的字节码是相同的。

6.根据之前记录的loader.bin文件的大小,自己设计一个查看内存的调试命令,查看内存中loader程序结束位置的字节码,并与loader.lst文件中最后指令的字节码比较,验证loader 程序被完全加载到了正确的位置。

2.2.4 调试加载程序

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

按照下面的步骤调试上述过程:

1.在loader.lst文件中查找到准备进入EOS操作系统内核执行的指令(第755行)

2.计算此条指令的物理地址要复杂一些:偏移地址实际上是相对于节(节SECTION是NASM汇编中的概念)开始的。由于在boot.asm程序中只有一个节,所以之前计算的结果都是正确的,但是在loader.asm程序中有两个节,并且此条指令是在第二个节中。下面引用的代码是loader.lst中第一个节的最后一条指令(第593行)

因为第一个节中最后一条指令的偏移为0x03c1,并占用了3个字节(字节码为C20600),所以可以计算出进入内核执行的指令所在的物理地址为0x1513(0x1000+0x03c1+0x3+0x14f)。

3.使用添加物理地址断点的调试命令pb 0x1513添加一个断点。

4.输入调试命令c继续执行,到断点处中断。在Console窗口中显示要执行的下一条指令(注意,此时的逻辑地址都为虚拟地址):

由于这里使用了函数指针的概念,所以,根据反汇编指令可以确定内核入口点函数的地址就保存在虚拟地址0x8000117处的四个字节中。

5.使用查看虚拟内存的调试命令x /1wx 0x80001117查看内存中保存的32位函数入口地址,在Console窗口中会输出类似下面的内容:

记录下此块内存中保存的函数地址。

2.2.5 调试内核

调试内核的步骤如下:

1.在OS Lab的“项目管理器”窗口中打开ke文件夹中的start.c文件,此文件中只定义了一个函数,就是操作系统内核的入口点函数KiSystemStartup。

2.在KiSystemStartup函数中的代码行(第61行) KiInitializePic(); 添加一个断点。

3.现在可以在Console窗口中输入调试命令c继续调试,在刚刚添加的断点处中断。

4.在start.c源代码文件中的KiSystemStartup函数名上点击鼠标右键,在弹出的快捷菜单中选择“添加监视”,KiSystemStartup函数就被添加到了“监视”窗口中。在“监视”窗口中可以看到此函数地址为

与在虚拟内存x80001117处保存的函数入口地址相同,说明的确是由Loader程序进入了操作系统内核。

5.按F5继续执行EOS操作系统内核,在Display窗口中显示EOS操作系统已经启动,并且控制台程序已经开始运行了。

2.2.6 EOS启动后的状态和行为

查看EOS的版本号:

1.在控制台中输入命令“ver”后按回车。

2.输出EOS版本后的控制台

查看EOS启动后的进程和线程的信息:

1.在控制台中输入命令“pt”后按回车。

2.输出的进程和线程信息。

查看有应用程序运行时进程和线程的信息:

1.在OS Lab中选择“调试”菜单中的“停止调试”,结束之前的调试。

2.在OS Lab“项目管理器”窗口中双击Floppy.img文件,使用FloppyImageEditor工具打开此软盘镜像文件。

3.打开配套资源“学生包”,在其中找到本实验对应的文件夹。

4.将本实验文件夹中的Hello.exe文件拖动到FloppyImageEditor工具窗口的文件列表中释放,Hello.exe文件即被添加到软盘镜像文件中。

5.在FloppyImageEditor中选择“文件”菜单中的“保存”后关闭FloppyImageEditor。

6.按F5启动调试。

7.待EOS启动完毕,在EOS控制台中输入命令“hello”后按回车。此时Hello.exe应用程序就开始执行。

8. 迅速按Ctrl+F2切换到控制台2,并输入命令“pt”后按回车。输出的进程和线程信息。

四、实验体会

管理信息系统实验报告分析报告

实验报告 课程:管理信息系统 一、实验目的 验证有关概念和理论,加深对概念和知识的理解和认识;熟悉和掌握Visual Basic 6.0 软件的使用方法;初步具备信息管理知识和制作数据字典、系统数据流程图的能力。运用课程讲授的管理信息系统的系统分析方法、模块化系统设计方法以及系统的调试方法进行人事档案管理信息系统的分析、设计、开发、实现与调试。 二、实验方法 面向对象法 三、实验环境及开发工具 1.硬件环境 在最低配置的情况下,系统的性能往往不尽如人意,但现在的硬件性能已经相当的出色,而且价格便宜,因此通常给服务器的配置高性能的硬件。 处理器:Interl Pentium II 266 MX 或更高 内存:64M 硬盘空间:2 GB 显卡:SVGA 显示适配器 显示器:液晶17寸 2.软件环境 操作系统:Windows/98/ME/2000/XP或更高版本 数据库:Microsoft Access 2000

3.实验开发工具:Visual Bisic 6.0程序系统 四、实验内容 (一)、系统分析 1、系统数据流程图 2、数据字典

3、系统中所有实体(包括实体的属性)以及实体之间的联系类型分析 人员的个人资料经过专业的处理部门的处理形成个人档案。档案包括自然情况,工作情况,简历,政治情况等各方面信息,内容比较庞大复杂。将档案信息传送到人员信息库。同时还综合考虑档案管理工作的性质,总结归纳出所需实现的功能。为人事档案进行服务,对人事的变动、人事资料、以及人事资料的查询,统计等功能。总体上说具有编辑,查询,用户管理,图表统计等功能。然后将最终结果提交到人力资源管理部门,由人力资源管理人员进行审查,以便于对职工的调配。 4、典型处理的表达 档案完整添加用户档案到档案库 个人信息成功添加到档案库 修改用户档案信息 档案不完整失败退回用户档案

计算机操作系统安全实训心得总结

计算机操作系统安全实 训心得总结 文件编码(GHTU-UITID-GGBKT-POIU-WUUI-8968)

本次实训,是对我能力的进一步锻炼,也是一种考验。从中获得的诸多收获,也是很可贵的,是非常有意义的。在实训中我学到了许多新的知识。是一个让我把书本上的理论知识运用于实践中的好机会,原来,学的时候感叹学的内容太难懂,现在想来,有些其实并不难,关键在于理解。在这次实训中还锻炼了我其他方面的能力,提高了我的综合素质。 网络真的很强大,用在学习上将是一个非常高效的助手。几乎所有的资料都能够在网上找到。敢于攻坚,越是难的问题,越是要有挑战的心理。这样就能够达到废寝忘食的境界。当然这也是不提倡熬夜的,毕竟有了精力才能够打持久战。但是做课设一定要有状态,能够在吃饭,睡觉,上厕所都想着要解决的问题,这样你不成功都难。最好在做课设的过程中能够有记录的习惯,这样在写实验报告时能够比较完整的回忆起中间遇到的各种问题。当时遇到我以前从未遇到的问题,让我都不知道从何下手。在经过大量的资料查阅之后,我对这个错误有了一定的了解,并且能够用相应的办法来解决。 这次的实训给了自己好大的提升,无论是学习中、还是同学的交流中。每一次的交流和谈话都会使我对某个问题有一个新的认识。始终把学习作为获得新知、掌握方法、提高能力、解决问题的一条重要途径和方法,切实做到用理论武装头脑、指导实践、推动工作。思想上积极进取,积极的把自己现有的知识用于社会实践中,在实践中也才能检验知识的有用性。所以在这次的实习工作中给我最大的感触就是我们在学校学到了很多的理论知识,但很少用于社会实践中,这样理论和实践就大

操作系统实验报告

实验四进程与线程实验目的(1)理解进程的独立空间;(2)理解线程的相关概念。实验内容与要求1、掌握进程创建和构造的相关知识和线程创建和构造的相关知识,2、了解C 语言程序编写的相关知识;3、理解进程的独立空间的实验内容及步骤4、理解线程的实验步骤5、对整个实验过程进行分析总结,给出详细步骤;实验过程1、进程的与线程的创建和构造进程简单来说就是在操作系统中运行的程序,它是操作系统资源管理的最小单位。新的进程通过克隆旧的程序(当前进程)而建立。fork() clone()(对于线程)系统调用可用来建立新的进程。2、理解进程的独立空间流程图如下所示:(1)编写一个程序,在其main()函数中定义一个变量shared,对其进行循环加/减操作,并输出每次操作后的结果源程序如下所示: #include int main() intshared=1; shared++; shared fork()ERROR 输出shared 操作输出shared 操作pid printf("%d\n",shared); shared--; printf("%d\n", shared); shared++; printf("%d\n", shared); shared--; printf shared);return (2)使用系统调用fork()创建子进程,观察该变量的变化(3)修改程序把shared 变量定义到main()函数之外,重复第(2)步操作,观察该变量的变化。(4)当把shared 放到主函数之外时,运行结果和内部时相比,并未发生变化。 一. 实验目的及实验环境 (一)实验环境 Linux 操作系统

操作系统实验总结

《操作系统》 实验总结 学号: 学生姓名: 专业班级:

1.1进程创建 UNIX中,进程既是一个独立拥有资源的基本单位,又是一个独立调度的基本单位。一个进程实体由若干个区(段)组成,包括程序区、数据区、栈区、共享存储区等。每个区又分为若干页,每个进程配置有唯一的进程控制块PCB,用于控制和管理进程。 在Linux中主要提供了fork、vfork、clone三个进程创建方法。在linux 源码中这三个调用的执行过程是执行fork(),vfork(),clone()时,通过一个系统调用表映射到sys_fork(),sys_vfork(),sys_clone(),再在这三个函数中去调用do_fork()去做具体的创建进程工作。本次实验我们只使用fork。 fork创建一个进程时,子进程只是完全复制父进程的资源,复制出来的子进程有自己的task_struct结构和pid,但却复制父进程其它所有的资源。新旧进程使用同一代码段,复制数据段和堆栈段,这里的复制采用了注明的copy_on_write技术,即一旦子进程开始运行,则新旧进程的地址空间已经分开,两者运行独立。 fork()函数不需要参数,返回一个进程ID。返回值有三种情况: (1)对于父进程,fork函数返回新的子进程的ID。 (2)对于子进程,fork函数返回0。 (3)如果出错,fork函数返回-1。 1.2 进程控制 进程控制主要有: 1.exec( ) 系统调用exec( )系列,也可用于新程序的运行。exec( )系列可以将一个可执行的二进制文件覆盖在新进程的用户级上下文的存储空间上,以更改新进程的用户级上下文。exec( )系列中的系统调用都完成相同的功能,它们把一个新程序装入内存,来改变调用进程的执行代码,从而形成新进程。如果exec( )调用成功,调用进程将被覆盖,然后从新程序的入口开始执行,这样就产生了一个新进程,新进程的进程标识符id 与调用进程相同。 2.wait( ) 进程一旦调用了wait,就立即阻塞自己,由wait自动分析是否当前进程的

操作系统原理实验四

实验4 进程控制 1、实验目的 (1)通过对WindowsXP进行编程,来熟悉和了解系统。 (2)通过分析程序,来了解进程的创建、终止。 2、实验工具 (1)一台WindowsXP操作系统的计算机。 (2)计算机装有Microsoft Visual Studio C++6.0专业版或企业版。 3、预备知识 (3)·CreateProcess()调用:创建一个进程。 (4)·ExitProcess()调用:终止一个进程。 4、实验编程 (1)编程一利用CreateProcess()函数创建一个子进程并且装入画图程序(mspaint.exe)。阅读该程序,完成实验任务。源程序如下: # include < stdio.h > # include < windows.h > int main(VOID) ﹛STARTUPINFO si; PROCESS INFORMA TION pi; ZeroMemory(&si,sizeof(si)); Si.cb=sizeof(si); ZeroMemory(&pi,sizeof(pi)); if(!CreateProcess(NULL, “c: \ WINDOWS\system32\ mspaint.exe”, NULL, NULL, FALSE, 0, NULL, NULL, &si,&pi)) ﹛fprintf(stderr,”Creat Process Failed”); return—1; ﹜ WaitForSingleObject(pi.hProcess,INFINITE); Printf(“child Complete”); CloseHandle(pi.hProcess); CloseHandle(pi hThread); ﹜

操作系统-Linux课程实验报告材料

实验1.1、1.2 Linux Ubuntu的安装、创建新的虚拟机VMWare

实验1.3 Shell编程 1.实验目的与内容 通过本实验,了解Linux系统的shell机制,掌握简单的shell编程技巧。 编制简单的Shell程序,该程序在用户登录时自动执行,显示某些提示信息,如“Welcome to Linux”, 并在命令提示符中包含当前时间、当前目录和当前用户名等基本信息。 2.程序源代码清单 #include #include int main(){ printf("Hello Linux\n"); int pid; int state; int pfd[2]; pipe(pfd); if (fork()==0){ printf("In the grep progress\n"); dup2(pfd[0],0); close(pfd[0]); close(pfd[1]); execlp("grep","grep","sh",0); perror("exelp grep error");

} esle if(fork()==0){ printf("In the ps progress\n"); dup2(pfd[1],1); close(pfd[0]); close(pfd[1]); execlp("ps","ps","-ef",0); perror("execlp ps -ef"); } close(pfd[1]); close(pfd[0]); wait(&state); wait(&state); } 实验2.3 内核模块 实验步骤: (1).编写内核模块 文件中主要包含init_clock(),exit_clock(),read_clock()三个函数。其中init_clock(),exit_clock()负责将模块从系统中加载或卸载,以及增加或删除模块在/proc中的入口。read_clock()负责产生/proc/clock被读时的动作。(2).编译内核模块Makefile文件 # Makefile under 2.6.25

操作系统实验心得

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

系统分析与设计实验报告

鞋店进销存管理系统 一.项目背景 随着计算机技术的不断发展, 它已经成为人们工作和生活中不可缺少的工具。早在1954年,银行、大公司和大企业纷纷采用计算机进行账户和账目管理、生产管理、库存管理、销售管理、统计报表等。从数据的收集、存储、整理到检索统计,应用的范围日益扩大,使计算机的应用很快超过科学计算,成为最大的计算机应用领域。 鞋店管理的特点是信息处理量比较大,所存的鞋种类多,而且由于进货单、销售单、需求单等单据发行量特别大,关联信息多,查询和统计的方式各不相同等原因,因此在管理上实现起来有一定困难。在管理的过程中经常会出现信息的重复传递,单据报表种类繁多,各个部门管理规格不统一等问题。 在本系统的设计过程中,为了克服这些困难,满足计算机管理的需要,我们采取了下面的一些原则: 1、统一各种原始单据的格式,统一账目和报表的格式。 2、删除不必要的管理冗余,实现管理规范化、科学化。 3、程序代码标准化,软件统一化,确保软件的可维护性和实用性。 4、界面尽量简单化,做到实用,方便,尽量满足书店中不同层次员工 的需要。 二.定义 “鞋店进销存管理系统”为用户提供添加、修改、查询、退货操作等服务。用户在登陆界面输入用户名,密码后系统核对正确进入系统内部。系统就要求用户选择事务类型(添加、修改、查询、退货等),直至用户选择退出应用服务,询问用户是否退出应用服务,如果用户选择结束,系统重回登陆界面。用户进入添加界面后,首先可以输入的数字必须大于等于100),否则系统显示输入有误。用户点击确认后,由系统查询,判断该取值是否超出库存量,如果没有,则系统会显示确认界面,用户单点击“确认”后,系统自动生成账单,并在后台进行工作,系统进行清

操作系统实验总结

操作系统实验总结 学号: 姓名: 班级:

在本学期的计算机操作系统这门课学习当中,为了更好的了解操作系统相关知识,我们通过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启动后的进程和线程的信息;查看有应用程序运行时进程和线程的信息

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

操作系统实验心得 每一次课程设计度让我学到了在平时课堂不可能学到的东西。所以我对每一次课程设计的机会都非常珍惜。不一定我的课程设计能够完成得有多么完美,但是我总是很投入的去研究去学习。所以在这两周的课设中,熬了2个通宵,生物钟也严重错乱了。但是每完成一个任务我都兴奋不已。一开始任务是任务,到后面任务就成了自己的作品了。总体而言我的课设算是达到了老师的基本要求。总结一下有以下体会。 1、网络真的很强大,用在学习上将是一个非常高效的助手。几乎所有的资料都能够在网上找到。从linux虚拟机的安装,到linux的各种基本命令操作,再到gtk的图形函数,最后到文件系统的详细解析。这些都能在网上找到。也因为这样,整个课程设计下来,我浏览的相关网页已经超过了100个(不完全统计)。当然网上的东西很乱很杂,自己要能够学会筛选。不能决定对或错的,有个很简单的方法就是去尝试。就拿第二个实验来说,编译内核有很多项小操作,这些小操作错了一项就可能会导致编译的失败,而这又是非常要花时间的,我用的虚拟机,编译一次接近3小时。所以要非常的谨慎,尽量少出差错,节省时间。多找个几个参照资料,相互比较,慢慢研究,最后才能事半功倍。 2、同学间的讨论,这是很重要的。老师毕竟比较忙。对于课程设计最大的讨论伴侣应该是同学了。能和学长学姐讨论当然再好不过了,没有这个机会的话,和自己班上同学讨论也是能够受益匪浅的。

大家都在研究同样的问题,讨论起来,更能够把思路理清楚,相互帮助,可以大大提高效率。 3、敢于攻坚,越是难的问题,越是要有挑战的心理。这样就能够达到废寝忘食的境界。当然这也是不提倡熬夜的,毕竟有了精力才能够打持久战。但是做课设一定要有状态,能够在吃饭,睡觉,上厕所都想着要解决的问题,这样你不成功都难。 4、最好在做课设的过程中能够有记录的习惯,这样在写实验报告时能够比较完整的回忆起中间遇到的各种问题。比如当时我遇到我以前从未遇到的段错误的问题,让我都不知道从何下手。在经过大量的资料查阅之后,我对段错误有了一定的了解,并且能够用相应的办法来解决。 在编程中以下几类做法容易导致段错误,基本是是错误地使用指针引起的 1)访问系统数据区,尤其是往系统保护的内存地址写数据,最常见就是给一个指针以0地址 2)内存越界(数组越界,变量类型不一致等) 访问到不属于你的内存区域 3)其他 例如: <1>定义了指针后记得初始化,在使用的时候记得判断是否为 null <2>在使用数组的时候是否被初始化,数组下标是否越界,数组元素是否存在等 <3>在变量处理的时候变量的格式控制是否合理等

操作系统实验报告一

重庆大学 学生实验报告 实验课程名称操作系统原理 开课实验室DS1501 学院软件学院年级2013专业班软件工程2 班学生姓名胡其友学号20131802 开课时间2015至2016学年第一学期 总成绩 教师签名洪明坚 软件学院制

《操作系统原理》实验报告 开课实验室:年月日学院软件学院年级、专业、班2013级软件工 程2班 姓名胡其友成绩 课程名称操作系统原理 实验项目 名称 指导教师洪明坚 教师 评语教师签名:洪明坚年月日 1.实验目的: ?进入实验环境 –双击expenv/setvars.bat ?检出(checkout)EPOS的源代码 –svn checkout https://www.360docs.net/doc/402832001.html,/svn/epos ?编译及运行 –cd epos/app –make run ?清除所有的临时文件 –make clean ?调试 –make debug ?在“Bochs Enhanced Debugger”中,输入“quit”退出调试 –调试指令,请看附录A 2.实验内容: ?编写系统调用“time_t time(time_t *loc)” –功能描述 ?返回从格林尼治时间1970年1月1日午夜起所经过的秒数。如果指针loc 非NULL,则返回值也被填到loc所指向的内存位置 –数据类型time_t其实就是long ?typedef long time_t; 3.实验步骤: ?Kernel space –K1、在machdep.c中,编写系统调用的实现函数“time_t sys_time()”,计算用户秒数。需要用到 ?变量g_startup_time,它记录了EPOS启动时,距离格林尼治时间1970年1午夜的秒数 ?变量g_timer_ticks

操作系统原理实验五

实验五线程的同步 1、实验目的 (1)进一步掌握Windows系统环境下线程的创建与撤销。 (2)熟悉Windows系统提供的线程同步API。 (3)使用Windows系统提供的线程同步API解决实际问题。 2、实验准备知识:相关API函数介绍 ①等待对象 等待对象(wait functions)函数包括等待一个对象(WaitForSingleObject ())和等待多个对象(WaitForMultipleObject())两个API函数。 1)等待一个对象 WaitForSingleObject()用于等待一个对象。它等待的对象可以为以下对象 之一。 ·Change ontification:变化通知。 ·Console input: 控制台输入。 ·Event:事件。 ·Job:作业。 ·Mutex:互斥信号量。 ·Process:进程。 ·Semaphore:计数信号量。 ·Thread:线程。 ·Waitable timer:定时器。 原型: DWORD WaitForSingleObject( HANDLE hHandle, // 对象句柄 DWORD dwMilliseconds // 等待时间 ); 参数说明: (1)hHandle:等待对象的对象句柄。该对象句柄必须为SYNCHRONIZE访问。 (2)dwMilliseconds:等待时间,单位为ms。若该值为0,函数在测试对象的状态后立即返回,若为INFINITE,函数一直等待下去,直到接收到 一个信号将其唤醒,如表2-1所示。 返回值: 如果成功返回,其返回值说明是何种事件导致函数返回。

Static HANDLE hHandlel = NULL; DWORD dRes; dRes = WaitForSingleObject(hHandlel,10); //等待对象的句柄为hHandlel,等待时间为10ms 2)等待对个对象 WaitForMultiple()bject()在指定时间内等待多个对象,它等待的对象与 WaitForSingleObject()相同。 原型: DWORD WaitForMultipleObjects( DWORD nCount, //句柄数组中的句柄数 CONST HANDLE * lpHandles, //指向对象句柄数组的指针 BOOL fWaitAll, //等待类型 DWORD dwMilliseconds //等待时间 ); 参数说明: (1)nCount:由指针 * lpHandles指定的句柄数组中的句柄数,最大数是MAXIMUM WAIT OBJECTS。 (2)* lpHandles:指向对象句柄数组的指针。 (3)fWaitAll:等待类型。若为TRUE,当由lpHandles数组指定的所有对象被唤醒时函数返回;若为FALSE,当由lpHandles数组指定的某一个 对象被唤醒时函数返回,且由返回值说明是由于哪个对象引起的函数 返回。 (4)dwMilliseconds:等待时间,单位为ms。若该值为0,函数测试对象的状态后立即返回;若为INFINITE,函数一直等待下去,直到接收到 一个信号将其唤醒。 返回值:、 如果成功返回,其返回值说明是何种事件导致函数返回。 各参数的描述如表2-2所示。

操作系统实验报告心得体会

操作系统实验报告心得体会 每一次课程设计度让我学到了在平时课堂不可能学到的东西。所以我对每一次课程设计的机会都非常珍惜。不一定我的课程设计能够完成得有多么完美,但是我总是很投入的去研究去学习。所以在这两周的课设中,熬了2个通宵,生物钟也严重错乱了。但是每完成一个任务我都兴奋不已。一开始任务是任务,到后面任务就成了自己的作品了。总体而言我的课设算是达到了老师的基本要求。总结一下有以下体会。 1、网络真的很强大,用在学习上将是一个非常高效的助手。几乎所有的资料都能够在网上找到。从linux虚拟机的安装,到linux的各种基本命令操作,再到gtk的图形函数,最后到文件系统的详细解析。这些都能在网上找到。也因为这样,整个课程设计下来,我浏览的相关网页已经超过了100个(不完全统计)。当然网上的东西很乱很杂,自己要能够学会筛选。 不能决定对或错的,有个很简单的方法就是去尝试。就拿第二个实验来说,编译内核有很多项小操作,这些小操作错了一项就可能会导致编译的失败,而这又是非常要花时间的,我用的虚拟机,编译一次接近3小时。所以要非常的谨慎,尽量少出差错,节省时间。多找个几个参照资料,相互比较,

慢慢研究,最后才能事半功倍。 2、同学间的讨论,这是很重要的。老师毕竟比较忙。对于课程设计最大的讨论伴侣应该是同学了。能和学长学姐讨论当然再好不过了,没有这个机会的话,和自己班上同学讨论也是能够受益匪浅的。大家都在研究同样的问题,讨论起来,更能够把思路理清楚,相互帮助,可以大大提高效率。 3、敢于攻坚,越是难的问题,越是要有挑战的心理。这样就能够达到废寝忘食的境界。当然这也是不提倡熬夜的,毕竟有了精力才能够打持久战。但是做课设一定要有状态,能够在吃饭,睡觉,上厕所都想着要解决的问题,这样你不成功都难。 4、最好在做课设的过程中能够有记录的习惯,这样在写实验报告时能够比较完整的回忆起中间遇到的各种问题。比如当时我遇到我以前从未遇到的段错误的问题,让我都不知道从何下手。在经过大量的资料查阅之后,我对段错误有了一定的了解,并且能够用相应的办法来解决。 在编程中以下几类做法容易导致段错误,基本是是错误地使用指针引起的 1)访问系统数据区,尤其是往系统保护的内存地址写数据,最常见就是给一个指针以0地址 2)内存越界(数组越界,变量类型不一致等) 访问到不属于你的内存区域

操作系统原理实验十一

实验十一银行家算法模拟实现 1实验类型 设计型(4学时)。 2实验目的 1)理解死锁避免相关内容; 2)掌握银行家算法主要流程; 3)掌握安全性检查流程。 3实验描述 本实验主要对操作系统中的死锁预防部分的理论进行实验。要求实验者设计一个程序,该程序可对每一次资源申请采用银行家算法进行分配。 4实验内容 1)设计多个资源(≥3); 2)设计多个进程(≥3); 3)设计银行家算法相关的数据结构; 4)动态进行资源申请、分配、安全性检测并给出分配结果。 5实验要求 1)编写程序完成实验内容; 2)画出安全性检测函数流程图; 3)小组派1人上台用PPT演讲实现过程; 4)撰写实验报告。

6测试要求 1)进行Request请求,输入参数为进程号、资源号和资源数; 2)进行3次以上的Request请求; 3)至少进行1次资源数目少于可用资源数,但不安全的请求。 7相关知识 7.1银行家算法的数据结构 1)可利用资源向量Available。其中每个元素代表每类资源的数目。 2)最大需求矩阵Max。其中每个元素代表每个进程对于每类资源的最大需求量。 Max[i,j]=K表示i进程对于j类资源的最大需求量为K。 3)分配矩阵Allocation。其中每个元素代表每个进程已得到的每类资源的数目。 4)需求矩阵Need。其中每个元素代表每个进程还需要的每类资源的数目。 7.2银行家算法 Request i [j]=K表示进程Pi需要K个j类资源。 1)如果Request i [j]≤Need[i , j],便转向步骤2,否则认为出错。 2)如果Request i [j]≤Available[j],便转向步骤3,否则表示无足够资源,Pi需等待; 3)系统尝试分配资源给Pi; 4)系统进行安全性检查,检查此次资源分配后,系统是否安全。如果安全,则正式分配资源,否则撤销此次分配。 7.3安全性算法 1)设置两个向量:工作向量Work和Finish。算法开始时Work=Available;Finish 表示系统是否有足够的资源分配给进程,使之运行完成,开始时,令 Finish[i]=False;如果有足够的资源分配给进程,则令Finish[i]=True。 2)从进程集合中找到一个能满足下列条件的进程:Finish[i]=False;Need[i,j] ≤Work[j],若找到,执行步骤3),否则,执行步骤4); 3)Pi获得所需资源后,可顺利执行指导完成,并释放它占有的资源。并执行:Work[j]=Work[j]+Allocation[i , j]; Finish[i] = True; 到第2)步。

操作系统实验报告16487

西安邮电大学 (计算机学院) 课实验报告 实验名称:进程管理 专业名称:计算机科学与技术 班级: 学生: 学号(8位): 指导教师: 实验日期:*****年**月**日

一. 实验目的及实验环境 目的:(1)加深对进程概念的理解,明确进程和程序的区别。 (2)进一步认识并发执行的实质。 (3)分析进程竞争资源现象,学习解决进程互斥的方法。 (4)了解Linux系统中进程通信的基本原理。 环境:Linux操作系统环境: 二. 实验容 (1)阅读Linux的sched.h源文件,加深对进程管理概念的理解。 (2)阅读Linux的fork.c源文件,分析进程的创建过程。 三.方案设计 (1)进程的创建 编写一段源程序,使系统调用fork()创建两个子进程,当此程序运行时,在系统中有一个父进程和两个子进程活动。让每一个进程在屏幕上显示一个字符:父进程显示字符“a”;子进程分别显示字符“b”和字符“c”。试观察纪录屏幕上的显示结果,并分析原因。(2)进程的控制 修改已编写的程序,将每个进程输出一个字符改为每个进程输出一句话,在观察程序执行时屏幕出现的现象,并分析原因。 如果在程序中使用调用lockf()来给每一个子进程加锁,可以实现进程之间的互斥,观察并分析出现的现象。 (3)①编写一段程序,使其现实进程的软中断通信。 要求:使用系统调用fork()创建两个子进程,再用系统调用signal()让父进程捕捉键盘上来的中断信号(即按DEL键);当捕捉到中断信号后,父进程用系统调用Kill()向两个子进程发出信号,子进程捕捉到信号后分别输出下列信息后终止: Child Processll is Killed by Parent! Child Processl2 is Killed by Parent! 父进程等待两个子进程终止后,输出如下的信息后终止 Parent Process is Killed! 程序流程图如下:

操作系统实验个人总结

操作系统实验个人总结 学号: 实验一进程控制与描述 一、实验目的通过对Windows2000编程,进一步熟悉操作系统的基本概念,较好地理解Windows2000的结构。通过创建进程、观察正在运行的进程和终止进程的程序设计和调试操作,进一步熟悉操作系统的进程概念,理解Windows2000中进程的“一生”。 二、实验环境硬件环境:计算机一台,局域网环境;软件环境:Windows2000 Professional、Visual C++ 6、0企业版。 三、实验内容和步骤第一部分:程序1-1Windows2000 的GUI 应用程序Windows2000 Professional下的GUI应用程序,使用Visual C++编译器创建一个GUI应用程序,代码中包括了WinMain()方法,该方法GUI类型的应用程序的标准入口点。 # include # pragma comment(lib, “user 32、lib” ) int APIENTRY WinMain(HINSTANCE/* hInstance */ , HINSTANCE/* hPrevInstance */, LPSTR/* lpCmdLine */, int/* nCmdShow */ )

{ :: MessageBox( NULL, “hello, Windows2000” , “Greetings”, MB_OK) ; return(0) ; }在程序1-1的GUI应用程序中,首先需要Windows、h头文件,以便获得传送给WinMain() 和MessageBox() API函数的数据类型定义。接着的pragma指令指示编译器/连接器找到User 32、LIB库文件并将其与产生的EXE文件连接起来。这样就可以运行简单的命令行命令CL MsgBox、CPP来创建这一应用程序,如果没有pragma指令,则MessageBox() API函数就成为未定义的了。这一指令是Visual Studio C++ 编译器特有的。接下来是WinMain() 方法。其中有四个由实际的低级入口点传递来的参数。hInstance参数用来装入与代码相连的图标或位图一类的资源,无论何时,都可用GetModuleHandle() API函数将这些资源提取出来。系统利用实例句柄来指明代码和初始的数据装在内存的何处。句柄的数值实际上是EXE文件映像的基地址,通常为0x。下一个参数hPrevInstance是为向后兼容而设的,现在系统将其设为NULL。应用程序的命令行 (不包括程序的名称)

操作系统实验_实验1分析

广州大学学生实验报告 1、实验目的 1.1、掌握进程的概念,明确进程的含义 1.2、认识并了解并发执行的实质 2.1、掌握进程另外的创建方法 2.2、熟悉进程的睡眠、同步、撤消等进程控制方法 3.1、进一步认识并发执行的实质 3.2、分析进程竞争资源的现象,学习解决进程互斥的方法 4.1、了解守护进程 5.1、了解什么是信号 5.2、INUX系统中进程之间软中断通信的基本原理 6.1、了解什么是管道 6.2、熟悉UNIX/LINUX支持的管道通信方式 7.1、了解什么是消息 7.2、熟悉消息传送的机理 8.1、了解和熟悉共享存储机制 二、实验内容 1.1、编写一段程序,使用系统调用fork( )创建两个子进程。当此程序运行时,在系统 中有一个父进程和两个子进程活动。让每一个进程在屏幕上显示一个字符:父进程显示'a',子进程分别显示字符'b'和字符'c'。试观察记录屏幕上的显示结果,并分析原因。 1.2、修改上述程序,每一个进程循环显示一句话。子进程显示'daughter …'及 'son ……',父进程显示'parent ……',观察结果,分析原因。 2.1、用fork( )创建一个进程,再调用exec( )用新的程序替换该子进程的内容 2.2、利用wait( )来控制进程执行顺序 3.1、修改实验(一)中的程序2,用lockf( )来给每一个进程加锁,以实现进程之间的互斥 3.2、观察并分析出现的现象 4.1、写一个使用守护进程(daemon)的程序,来实现: 创建一个日志文件/var/log/Mydaemon.log ; 每分钟都向其中写入一个时间戳(使用time_t的格式) ; 5.1、用fork( )创建两个子进程,再用系统调用signal( )让父进程捕捉键盘上来的中断信号(即按^c键);捕捉到中断信号后,父进程用系统调用kill( )向两个子进程发出信号,子进程捕捉到信号后分别输出下列信息后终止: Child process1 is killed by parent! Child process2 is killed by parent! 父进程等待两个子进程终止后,输出如下的信息后终止: Parent process is killed! 5.2、用软中断通信实现进程同步的机理

实验后心得体会

实验后心得体会 篇一:实验心得体会 实验心得体会 在做测试技术的实验前,我以为不会难做,就像以前做物理实验一样,做完实验,然后两下子就将实验报告做完.直到做完测试实验时,我才知道其实并不容易做,但学到的知识与难度成正比,使我受益匪浅. 在做实验前,一定要将课本上的知识吃透,因为这是做实验的基础,否则,在老师讲解时就会听不懂,这将使你在做实验时的难度加大,浪费做实验的宝贵时间.比如做应变片的实验,你要清楚电桥的各种接法,如果你不清楚,在做实验时才去摸索,这将使你极大地浪费时间,使你事倍功半.做实验时,一定要亲力亲为,务必要将每个步骤,每个细节弄清楚,弄明白,实验后,还要复习,思考,这样,你的印象才深刻,记得才牢固,否则,过后不久你就会忘得一干二净,这还不如不做.做实验时,老师还会根据自己的亲身体会,将一些课本上没有的知识教给我们,拓宽我们的眼界,使我们认识到这门课程在生活中的应用是那么的广泛. 通过这次测试技术的实验,使我学到了不少实用的知识,更重要的是,做实验的过程,思考问题的方法,这与做其

他的实验是通用的,真正使我们受益匪浅. 实验心得体会 这个学期我们学习了测试技术这门课程,它是一门综合应用相关课程的知识和内容来解决科研、生产、国防建设乃至人类生活所面临的测试问题的课程。测试技术是测量和实验的技术,涉及到测试方法的分类和选择,传感器的选择、标定、安装及信号获取,信号调理、变换、信号分析和特征识别、诊断等,涉及到测试系统静动态性能、测试动力学方面的考虑和自动化程度的提高,涉及到计算机技术基础和基于LabVIEW的虚拟测试技术的运用等。 课程知识的实用性很强,因此实验就显得非常重要,我们做了金属箔式应变片:单臂、半桥、全桥比较, 回转机构振动测量及谱分析, 悬臂梁一阶固有频率及阻尼系数测试三个实验。刚开始做实验的时候,由于自己的理论知识基础不好,在实验过程遇到了许多的难题,也使我感到理论知识的重要性。但是我并没有气垒,在实验中发现问题,自己看书,独立思考,最终解决问题,从而也就加深我对课本理论知识的理解,达到了“双赢”的效果。 实验中我学会了单臂单桥、半桥、全桥的性能的验证;用振动测试的方法,识别一小阻尼结构的(悬臂梁)一阶固有频率和阻尼系数;掌握压电加速度传感器的性能与使用方

操作系统原理实验报告

操作系统原理 实验报告 学院:信息与电子工程学院专业:计算机科学与技术 班级:计算机 学号: 姓名: 浙江科技学院 2010-2011学年第2学期

实验1 进程管理 一、实验目的 1. 弄清进程和程序的区别,加深对进程概念的理解。 2. 了解并发进程的执行过程,进一步认识并发执行的实质。 3. 掌握解决进程互斥使用资源的方法。 二、实验内容 1. 管道通信 使用系统调用pipe( )建立一个管道,然后使用系统调用fork( )创建2个子进程p1和p2。这2个子进程分别向管道中写入字符串:“Child process p1 is sending message!”和“Child process p2 is sending message!”,而父进程则从管道中读出来自两个子进程的信息,并显示在屏幕上。 2. 软中断通信 使用系统调用fork( )创建2个子进程p1和p2,在父进程中使用系统调用signal( )捕捉来自键盘上的软中断信号SIGINT(即按Ctrl-C),当捕捉到软中断信号SIGINT后,父进程使用系统调用kill( )分别向2个子进程发出软中断信号SIGUSR1和SIGUSR2,子进程捕捉到信号后分别输出信息“Child process p1 is killed by parent!”和“Child process p2 is killed by parent!”后终止。而父进程等待2个子进程终止后,输出信息“Parent process is killed!”后终止。 三、实验要求 1. 根据实验内容编写C程序。 2. 上机调试程序。 3. 记录并分析程序运行结果。

浙江大学2005–2006学年秋季学期 《操作系统分析及实验》课程期末考试试卷

浙江大学2005–2006学年秋季学期 《操作系统分析及实验》课程期末考试试卷 开课学院:计算机学院、软件学院,考试形式:有限开卷,只允许带3张A4纸入场考试时间:_____年____月____日, 所需时间:120分钟教师姓名:_________考生姓名: ___学号:专业:得分: 答案: For every following question, please select your best answer only!!!

1.UNIX is a __________ operating system. A.)time-sharing B.)batched-processing C.)uniprogramming D.)real-time 2.Which is the oldest among the following OSes? A.)AT&T UNIX B.)Solaris C.)Linux D.)Windows NT 3.Which of the following is able to write to standard output and files simultaneously? A.)tee B.)| C.)|| D.)T 4.How do you extract the kernel from the tarball linux-2.6.14.tar.bz2? A.)tar x linux-2.6.14.tar.bz2 B.)untar linux-2.6.14.tar.bz2 C.)tar tzvf linux-2.6.14.tar.bz2 D.)tar xjf linux-2.6.14.tar.bz2 5.You want to install the RPM package file foobar.rpm. This file is located in /home/bob. Which command would you use to install this file? A.)install /home/bob/foobar.rpm B.)rpminst /home/bob/foobar.rpm C.)rpm -i /home/bob/foobar.rpm D.)instrpm /home/bob/foobar.rpm 6.What does the device file /dev/hdb6 represent? A.)A logical partition on a SCSI disk drive B.)An extended partition on an IDE disk drive C.)A primary partition on an IDE disk drive D.)A logical partition on an IDE disk drive 7.Which of the following commands results in mailing the content of the current directory to Bob? A.)mail Bob < ls B.)ls > mail Bob C.)ls || mail Bob D.)ls | mail Bob

相关文档
最新文档