文档库 最新最全的文档下载
当前位置:文档库 › 操作系统实训报告

操作系统实训报告

操作系统实训报告
操作系统实训报告

北京联合大学

《操作系统课程设计》实验一:命令行解释程序

学院:信息学院

专业:计算机科学与技术

班级: 1203B

姓名:王婧怡

学号: 20120803320878

2015年7月21日

一.采用的数据结构说明

字符数组:

本程序中包含的字符数组有:

filename1[20]:在Ccopy()函数中,存储源文件路径和名字的字符数组。

filename2[20]:在Ccopy()函数中,存储目标文件路径和名字的字符数组。

oldname[20]:在Cmv()函数中用来保存源文件路径和名字的字符数组。

newname[20]:在Cmv()函数中用来保存目标文件路径和名字的字符数组。

Cho2[6]:存取用户输入的指令,并用来作为Switch分支的判定条件之一。

File[20]:Cerase()函数中用来存放要删除的文件的路径和名字的字符数组。

Word[100]:在Cdis()中存放用户要回显的字符串。

二、所需用到的头文件及各头文件的作用:

#include:包含输入输出函数原型

#include:在本程序中用以显示cpu信息包含基本系统数据类型(size_t内存中对象大小 ssize_t计数,错误提示 time_t用来计时)

#include:对线程的创建和终结等操作的函数

#include:包含字符串及相关操作,如strcmp()

#include:定义通过控制台即键盘输入和数据输出的函数,如getchar ()

#include

#include//包含一些库函数,本程序中使用perror命令时调用errno 来显示错误原因

三.源程序清单、注释和流程图

(1)流程图

(2)源程序和注释

#include

#include

#include

#include

#include

#include

#include

int flag=1;

char ch[8];//存储文件读取内容的中间变量

FILE *fp;

FILE *fp1;

char filename1[20];/*复制文件候存放的原文件名*/

char filename2[20];/*复制文件候存放的目标文件名*/

char oldname[20];/*用来存放移动文件的源文件名*/

char newname[20];/*用来存放移动文件的目标文件名*/

voidstart_copy(char *filename1,char *filename2)

/*文件复制函数,可以实现文本和图片的复制*/

{

if((fp=fopen(filename1,"rb"))==NULL||(fp1=fopen(filename2,"

wb"))==NULL)

/*源文件或目标文件打开失败则无法进行复制*/

{

printf("can't open the source file!\n");

exit(0);//程序正常退出,若返回值为1为非正常退出

}

else

{

fread(ch,1,1,fp);//一次读取1个字节的字节流,存放到ch字符数组里

while (!feof(fp))//没读取到文件尾部时,持续读取

{

fwrite(ch,1,1,fp1);//写到目标文件里

fread(ch,1,1,fp);//继续读取

}

fclose(fp);//关闭指针,释放内存

fclose(fp1);//关闭将缓冲区里的内容写到目标文件里

}

}

voidCend()

{

flag=0;//将循环条件flag=1变为0来结束循环,结束程序

}

voidCdir()

{

/*目录显示函数,除了调用Cmd没有更好的

解决办法,是本程序的遗憾.*/

system("cmd.exe /b dir");

}

void Ccopy()//文件复制主函数

{

scanf("%s%s",&filename1,&filename2);//获取源文件和目标文件名

start_copy(filename1,filename2);//传参到复制函数

}

void Cerase()//删除文件函数

{

char File[20];//文件名存储

scanf("%s",&File);//获得文件名

if(remove(File)==0)//删除成功remove返回0

{

printf("Remove %s Successfully!\n",File);

}

else

{

perror("Failed!"); //调用库函数errno显示错误原因}

}

voidCdis()

{

char Word[100];//存放用户输入的字符串

//getchar();//吸取第一个不必要的回车字符,因为get语句遇到回车就中止

gets(Word);//获得用户的字符串内容

printf("---------E---C---H---O-------------\n");

puts(Word);//显示用户的字符串内容

}

void Cmv()//重命名文件函数

{

scanf("%s%s",&oldname,&newname);//获取用户输入的两个文件名rename(oldname,newname);

}

int main()

{

//定义判定字符

char cdir1[]="Cdir";

char cdir2[]="cdir";

char ccopy1[]="Ccopy";

char ccopy2[]="ccopy";

char cerase1[]="Cerase";

char cerase2[]="cerase";

char cdis1[]="Cdis";

char cdis2[]="cdis";

char cend1[]="Cend";

char cend2[]="cend";

char clr1[]="Cclr";

char clr2[]="cclr";

char cmv1[]="Cmv";

char cmv2[]="cmv";

char cuname1[]="Cuname";

char cuname2[]="cuname";

while(flag)//flag不为0,执行下面的循环

{

char Cho2[6];

intnum=0;

/*主菜单*/

printf("***********************************\n");

printf("*********M E N U**********\n");

printf("-----------------------------------\n");

printf("1:Cdir-Show the Detail of Dir and files.\n"); printf("2:Ccopy-Copy the file.\n");

printf("3:Cerase-Erase(Delete) the file.\n");

printf("4:Cdis-The Echo of your input words\n");

printf("5:Cclr-Clear the Screen.\n");

printf("6:Cmv-Move Rename the file.\n");

printf("7:Cuname-Show CPU Info.\n");

printf("8:Cend-Quit.\n");

printf("\n");

printf("\n");

printf("Please Enter The Command:");

scanf("%s",&Cho2);

/*下面这一段将对用户输入的字符串第一个空格前的

内容进行判定,确定功能号,在转入对应的Case分支决定用户本次所使用的功能.*/

if(strcmp(Cho2,cdir1)==0||strcmp(Cho2,cdir2)==0)//首字母大小写均可识别

{

num=1;

}

else if(strcmp(Cho2,ccopy1)==0||strcmp(Cho2,ccopy2)==0)

{

num=2;

}

else if(strcmp(Cho2,cerase1)==0||strcmp(Cho2,cerase2)==0) {

num=3;

}

else if(strcmp(Cho2,cdis1)==0||strcmp(Cho2,cdis2)==0)

{

num=4;

}

else if(strcmp(Cho2,cend1)==0||strcmp(Cho2,cend2)==0)

{

num=5;

}

else if(strcmp(Cho2,clr1)==0||strcmp(Cho2,clr2)==0)

{

num=6;

}

else if(strcmp(Cho2,cmv1)==0||strcmp(Cho2,cmv2)==0)

{

num=7;

}

else if(strcmp(Cho2,cuname1)==0||strcmp(Cho2,cuname2)==0) {

num=8;

}

else

{

printf("ERROR COMMAND,TRY AGAIN!\n");

}

switch(num)

{

case(1):Cdir();break;//功能1,启动Cmd调用dir \b检查目录

case(2):Ccopy();getchar();break;//功能2,复制一个文件到另一个目录

case(3):Cerase();break;//功能3,删除一个指定路径的文件

case(4):Cdis();break;//功能4,回显用户输入的字符串内容

case(5):Cend();break;//功能5,结束程序

case(6):system("cls");break;//功能6,清屏

case(7):Cmv();break;//功能7,移动一个文件,如果路径不变只改变名字,则变为重命名功能

case(8):system("systemInfo");break;//功能8,显示计算机详细信息

}

}

}

四.Windows命令与Linux命令的不同

本程序的功能有8个,其中Cdir和Linux下的ls基本区别不大,但是ls 后面有很多参数,这是和Windows在cmd下调用dir不太一样的地方。

Ccopy和Linux下的Cp命令没有什么区别。

Cerase和Linux的rm是有区别的,Linux删除的文件是无法补救的,因此在删除之前会有提示是否要真的删除,rm–r可以连同文件的子目录都删除,这点和windows下的rmdir类似。

Cdis是我自定的回显函数,和Linux的Echo一样。

Cend就是单纯的退出程序,和Linux的Logout一样。

Cclr是清屏功能,就是Linux下的clear指令。

Cmv是移动文件指令,如果路径不做变化,那么就会变成重命名的功能,和Linux的mv功能一样,移动的时候子目录也会一起移动。

五.收获体会

本次实验所编的程序让我明白了许多,尤其是知道了很多命令的功能含义,和以前注意不到的一些细节问题,现在将我从本程序收获的知识总结如下:

1、在实现复制文件的功能时,读取文件命令:fread(ch,1,1,fp);需要注意的是:

一次读取1个字节的字节流,存放到ch字符数组里,如果将括号中第三个数值改为n,就会出现一次读取n个字符,若文件中的字符不等于n的倍数则会出现最后几个不到n倍数的字符无法被复制的情况。

2、复制完后需要关闭目标文件指针fp1。在本程序中,为保险起见写入了:

fclose(fp); //关闭源文件指针

fclose(fp1); //关闭目标文件指针

两条关闭指针命令,第一条命令如果去掉不会有什么影响,因为源文件本身就在硬盘上,而第二条命令fclose(fp1)不能去掉,因为写入目标文件后会造成内存与外存的不一致,需将新添加的内容写回硬盘,这正是fclose(fp1)的作用。

3、深刻了解了perror的作用:本程序中实现删除命令时,当删除失败则:

perror("Failed!");这句话是使用perror调用库函数errno显示删除失败的原因,它会将errno所提供的错误原因显示在Failed!之后,而perror("")括号中的内容随便些什么都行,不影响整条语句。

4、Strcmp(ch02,cdir1)==0:比较ch02,cdir1两字符串,若两者相等返回0;前

者大于后者返回正数;后者大于前者返回负数。

5、标志符flag=1时进行程序循环,等于0时即结束程序。

6、在显示所输入的字符串的程序中,获得用户字符串(gets(word)语句)内

容之前,需添加getchar();语句来吸取第一个不必要的回车字符以避免get 语句遇到回车就中止执行后面的语句导致无法输入内容。

此外,我也大致了解了各个头文件的功能及他们的必要性,巩固了以前学过的c语言知识,通过和同学之间交流不懂的问题还更好的理解了Shell指令的工作原理,让我获益匪浅。

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

实验、 Linux Ubuntu的安装、创建新的虚拟机VMWare 实验 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); } 实验内核模块 实验步骤: (1).编写内核模块 文件中主要包含init_clock(),exit_clock(),read_clock()三个函数。其中init_clock(),exit_clock()负责将模块从系统中加载或卸载,以及增加或删除模块在/proc中的入口。read_clock()负责产生/proc/clock被读时的动作。 (2).编译内核模块Makefile文件 # Makefile under ifneq ($(KERNELRELEASE),) #kbuild syntax. dependency relationshsip of files and target modules are listed here. obj-m := else PWD := $(shell pwd) KVER ?= $(shell uname -r) KDIR := /lib/modules/$(KVER)/build all: $(MAKE) -C $(KDIR) M=$(PWD) modules clean: rm -rf .*.cmd *.o *. *.ko .tmp_versions *.symvers *.order endif 编译完成之后生成模块文件。 (3).内核模块源代码 #include #include #include #include #include #include #define MODULE #define MODULE_VERSION "" #define MODULE_NAME "clock" struct proc_dir_entry* my_clock; int read_clock(char* page, char** start, off_t off, int count, int* eof, void* data) { int len; struct timeval xtime;

北大操作系统高级课程-陈向群作业-线程调度实习报告

线程调度实习报告

目录 内容一:总体概述 (3) 内容二:任务完成情况 (3) 任务完成列表(Y/N) (3) 具体Exercise的完成情况 (3) 内容三:遇到的困难以及解决方法 (8) 内容四:收获及感想 (9) 内容五:对课程的意见和建议 (9) 内容六:参考文献 (9)

内容一:总体概述 本次lab主要是对线程调度的学习和理解。当计算机系统是多道程序设计系统时,通常就会有多个进程或或线程同时竞争CPU。只要有两个或更多的进程处于就绪态,这种情况就会发生,那么就必须选择下一个要运行的进程。在操作系统中,完成选择工作的这一部分称为调度程序,该程序使用的算法称为调度算法。 进程调度策略的选择对整个系统性能有至关重要的影响,一个好的调度算法应该考虑很多方面:公平、有效、响应时间、周转时间、系统吞吐量等等。但这些因素之间又是相互矛盾的,最终的取舍根据系统要达到的目标而定,同时我们也可以看出多进程的管理是~种非常复杂的并发程序设计.每个进程的状态不仅由其自身决定,而且还要受诸多外在因素的影响.而在此基础上的进程调度,为了保证操作系统的稳定性、提高效率和增加灵活性,还必须采用很多方法,这些都是值得我们去研究和探讨的。 本次实验针对Nachos系统的代码的阅读和修改,了解Nachos系统中线程调度在代码中如何实现,以及在其上扩展线程调度算法,实现基于优先级的抢占式调度算法。 内容二:任务完成情况 任务完成列表(Y/N) Exercise1 Exercise2 Exercise3 完成情况Y Y Y 具体Exercise的完成情况 Exercise1调研 了解Linux或Windows中采用的进程/线程调度算法。 解答:Linux 的调度算法演化伴随着其内核版本的更迭,具有代表性的版本以此为:2.4,2.6,以及最近几年频繁更替的版本:3.5,3.6,3.7,3.8,其中3.8 是最新的稳定版本。下面就其调度机制的演化进行论述。 在 2.4 版本的内核之前,当很多任务都处于活动状态时,调度器有很明显的限制。这是由于调度器是使用一个复杂度为O(n) 的算法实现的。在这种调度器中,调度任务所花费的时间是一个系统中任务个数的函数。换而言之,活动的任务越多,调度任务所花费的时间越长。在任务负载非常重时,处理器会因调度消耗掉大量的时间,用于任务本身的时间就非常少了。因此,这个算法缺乏可伸缩性。在对称多处理系统(SMP)中,2.4 版本之前的调度器对所有的处理器都使用一个运行队列。

操作系统课程设计报告书

题目1 连续动态内存管理模拟实现 1.1 题目的主要研究内容及预期达到的目标 (1)针对操作系统中内存管理相关理论进行设计,编写程序并进行测试,该程序管理一块虚拟内存。重点分析三种连续动态内存分配算法,即首次适应算法、循环首次适应算法和最佳适应算法。 (2)实现内存分配和回收功能。 1.2 题目研究的工作基础或实验条件 (1)硬件环境:PC机 (2)软件环境:Windows XP,Visual C++ 6.0 1.3 设计思想 首次适应算法的实现:从空闲分区表的第一个表目起查找该表,把最先能够满足要求的空闲区分配给作业,这种方法的目的在于减少查找时间。为适应这种算法,空闲分区表中的空闲分区要按地址由低到高进行排序。该算法优先使用低址部分空闲区,在低址空间造成许多小的空闲区,在高址空间保留大的空闲区。 循环首次适应算法的实现:在分配内存空间时,不再每次从表头开始查找,而是从上次找到空闲区的下一个空闲开始查找,直到找到第一个能满足要求的的空闲区为止,并从中划出一块与请求大小相等的内存空间分配给作业。该算法能使内存中的空闲区分布得较均匀。 最佳适应算法的实现:从全部空闲区中找到能满足作业要求的、且最小的空闲分区,这种方法能使碎片尽量小。为适应此算法,空闲分区表中的空闲分区要按从小到大进行排序,从表头开始查找第一个满足要求的自由分配。 1.4 流程图 内存分配流程图,如图1-1所示。

图1-1 内存分配流程图内存回收流程图,如1-2所示。

图1-2 内存回收流程图 1.5 主要程序代码 (1)分配内存 void allocate(char z,float l) { int i,k; float ad; k=-1; for(i=0;i= l && free_table[i].flag == 1) if(k==-1 || free_table[i].length

计算机操作系统实验课实验报告

实验报告 实验课程: 计算机操作系统学生姓名:XXX 学号:XXXX 专业班级:软件 2014年12月25日

目录 实验一熟悉Windows XP中的进程和线程.. 3实验二进程调度 (7) 实验三死锁避免—银行家算法的实现 (18) 实验四存储管理 (24)

实验一熟悉Windows XP中的进程和线程 一、实验名称 熟悉Windows XP中的进程和线程 二、实验目的 1、熟悉Windows中任务管理器的使用。 2、通过任务管理器识别操作系统中的进程和线程的相关信息。 3、掌握利用spy++.exe来察看Windows中各个任务的更详细信息。 三、实验结果分析 1、启动操作系统自带的任务管理器: 方法:直接按组合键Ctrl+Alt+Del,或者是在点击任务条上的“开始”“运行”,并输入“taskmgr.exe”。

2、调整任务管理器的“查看”中的相关设置,显示关于进程的以下各项信息,并 完成下表: 表一:统计进程的各项主要信息 3、启动办公软件“Word”,在任务管理器中找到该软件的登记,并将其结束掉。再

从任务管理器中分别找到下列程序:winlogon.exe、lsass.exe、csrss.exe、smss.exe,试着结束它们,观察到的反应是任务管理器无法结束进程, 原因是该系统是系统进程。 4、在任务管理器中找到进程“explorer.exe”,将之结束掉,并将桌面上你打开的所 有窗口最小化,看看你的计算机系统起来什么样的变化桌面上图标菜单都消失了、得到的结论explorer.exe是管理桌面图标的文件(说出explorer.exe进程的作用)。 5、运行“spy++.exe”应用软件,点击按钮“”,切换到进程显示栏上,查看进 程“explorer.exe”的各项信息,并填写下表: 进程:explorer.exe 中的各个线程

计算机管理实习报告

计算机管理实习报告 新疆农业大学实习报告实习课程名称:毕业实习学院:计算机与信息工程学院专业、班级:信息管理与信息系统024指导教师:张胜光报告人:柳新年学号:024631432时间:XX年4月22日实习主要内容:因为时间的原因,和工商联没有计算机中心,因此我没能介入到网络管理的每一个方面,重点完成了针对计算机维护、网络安全的实习。现将我在工商联实习的心得总结如下:一、计算机维护计算机维护分为硬件维护和软件维护两个方面。工商联的计算机现状大概是总共有用于办公的计算机20余台,大部分是方正奔腾4的品牌机,还有一些联想的品牌机,以及少量打印机。

1、对硬件的维护主要集中在上一代未更新的计算机,因为使用年限比较久,硬件老化及磨损相对比较严重。在使用现在部分大型软件的时候经常出现死机,蓝屏,自动重启等现象。一般常见的引起硬件故障的主要原因有很多种,例如:各个配件间的兼容性不好;有些硬件的质量不过关等。但一般常见的硬件故障主要由以下几个方面引起。首先,电源电压不稳定或经常断电引起的故障。微机所使用的电源的电压不稳定,那么硬盘在读写文件时就会出现丢失或被损坏的现象。如果经常会发生不正常的断电现象导致微机重启,或是经常在计算机运行程序时进行冷启动,将会使系统受到破坏。为使微机更安全地工作,最好使用电源稳压器或不间断电源。其次,部件之间接触不良引起的故障。接触不良主要反映在各种卡类与主板的接触不良或电源线数据线音频线的连接不良。其中,各种接口卡内存条与主板接触不良最为常见。例如:显卡与主板接

触不良可能会使显示器不显示,内存条与主板接触不良可能使微机不工作等,通常只要更换相应的插槽或用橡皮轻轻擦一擦接口卡或内存条的金手指,即可排除故障。2、软件维护方面,在新近配置的一批方正计算机中因为随商家发货过来的时候,已经装好了操作系统还附带安装了瑞星杀毒软件,但是因为他们安装的操作系统WindowsXP没有打上SP2补丁,而且安装的瑞星杀毒软件也是XX年版的,再加上所有的办公计算机都是挂在网络上的,这样就使得计算机对病毒和入侵的抵御能力很差,但同时又面临开放网络的大量病毒和入侵,造成该批计算机大面积中毒。给我们带来了巨大的工作量,在这次病毒感染中,计算机感染的集中表现为:震荡波和一种叫的病毒。我们开始更新瑞星杀毒软件,能找到内存中的病毒并清除,但是这并不能从根本上解决问题。因为病毒是利用操作系统本身存在的漏洞进行攻击的,如果不把漏洞堵上,还是会被感

操作系统课程设计报告

操作系统课程设计报告

东莞理工学院 操作系统课程设计报告 学院:计算机学院 专业班级: 13软件工程1班 提交时间: 2015/9/14 指导教师评阅意见: . 项目名称:进程与线程管理功能 一、设计目的 用语言来模拟进程和线程管理系统,加深对进程和线程的理解,掌握对进程和线程各种状态和管理的算法原理。

二、环境条件 系统: WindowsXP、VMWare、Ubuntu Linux 语言:C/C++ 开发工具:gcc/g++、Visual C++ 6.0 三、设计内容 1. 项目背景 计算机的硬件资源有限,为了提高内存的利用率和系统的吞吐量,就要根据某种算法来管理进程和线程的状态从而达到目的。 进程与线程管理功能完成基于优先级的抢占式线程调度功能,完成进程虚拟内存管理功能。 进程与线程管理功能 基本要求:完成基于优先级的抢占式线程调度功能,完成进程虚拟内存管理功能。 提高要求:(增加1项就予以加分) (1) 实现多种线程调度算法; (2)通过“公共信箱”进行通信的机制,规定每一封信的大小为128字节,实现两个用户进程之间通过这个“公共信箱”进行通信。 (3) 实现多用户进程并发的虚拟内存管理功能。

(4) 实现用户进程间通信功能,并用生产者/消费者问题测试进程间通信功能的正确性。 (5) 实现改进型Clock页面置换算法。 (6) 实现Cache功能,采用FIFO替换算法。 2. 扩展内容 实现多种线程调度算法:时间片轮转调度算法 四、人员分工 优先级调度算法:钟德新,莫友芝 时间片轮转调度算法:张德华,袁马龙 设计报告由小组队员共同完成。小组成员设计的代码分工如下:钟德新编写的代码:void Prinft(){ PCB *p; system("cls");//清屏 p=run; //运行队列 if(p!=NULL) { p->next=NULL; } cout<<"当前正在运行的进程:"<procname<<"\t\t"<pri<<"\t"<needOftime<<"\t\t"<runtime<<"\t\t"<state<next; } cout<

操作系统实习报告样本

操作系统实习报告样本 1 操作系统实习报告内容(1) 基本信息:完成人姓名、学号、报告日期 (2) 实习内容(3) 实习目的(4) 实习题目(5) 设计思路和流程图(6) 主要数据结构及其说明(7) 源程序并附上注释(8) 程序运行时的初值和运行结果(9) 实习体会:实习中遇到的问题及解决过程、实习中产生的错误及原因分析、实习的体会及收获、对搞好今后实习提出建设性建议等。实习报告可以书面或电子文档形式提交。 2操作系统实习报告样本样本1一、实习内容模拟分页式虚拟存储管理中硬件的地址转换和缺页中断,以及选择页面调度算法处理缺页中断。二、实习目的在计算机系统中,为了提高主存利用率,往往把辅助存储器(如磁盘)作为主存储器的扩充,使多道运行的作业的全部逻辑地址空间总和可以超出主存的绝对地址空间。用这种办法扩充的主存储器称为虚拟存储器。通过本实习理解在分页式存储管理中怎样实现虚拟存储器。三、实习题目本实习有三个小题。第一题:模拟分页式存储管理中硬件的地址转换和产生缺页中断。[设计思路、数据结构、流程图]:(1) 分页式虚拟存储系统是把作业信息的副本存放在磁盘上,当作业被选中时,可把作业的开始几页先装入主存且启动执行。为此,在为作业建立页表时,应说明哪些页已在主存,哪些页尚未装入主存,页表的格式为:页号标志主存块号在磁盘上的位置其中,标志——用来表示对应页是否已经装入主存,标志位=1,则表示该页已经在主存,标志位=0,则表示该页尚未装入主存。主存块号——用来表示已经装入主存的页所占的块号。在磁盘上的位置——用来指出作业副本的每一页被存放在磁盘上的位置。(2) 作业执行时,指令中的逻辑地址指出参加运算的操作数存放的地址,该地址被解释为页号和单元号,硬件的地址转换机构按页号查页表,若该页对应标志为“1”,则表示该页已在主存,这时根据关系式:绝对地址=块号′块长+单元号计算出欲访问的主存单元地址。如果块长为2的幂次,则可把块号作为高地址部分,把单元号作为低地址部分,两者拼接而成绝对地址。按计算出的绝对地址可以取到操作数,完成一条指令的执行。若访问的页对应标志为“0”,则表示该页不在主存,这时硬件发“缺页中断”信号,由操作系统按该页在磁盘上的位置,把该页信息从磁盘读出装入主存后再重新执行这条指令。(3) 设计一个“地址转换”程序来模拟硬件的地址转换

操作系统课程设计报告

上海电力学院 计算机操作系统原理 课程设计报告 题目名称:编写程序模拟虚拟存储器管理 姓名:杜志豪.学号: 班级: 2012053班 . 同组姓名:孙嘉轶 课程设计时间:—— 评语: 成绩: 目录 一、设计内容及要求 (4) 1. 1 设计题目 (4) 1.2 使用算法分析: (4)

1. FIFO算法(先进先出淘汰算法) (4) 1. LRU算法(最久未使用淘汰算法) (5) 1. OPT算法(最佳淘汰算法) (5) 分工情况 (5) 二、详细设计 (6) 原理概述 (6) 主要数据结构(主要代码) (6) 算法流程图 (9) 主流程图 (9) Optimal算法流程图 (10) FIFO算法流程图 (10) LRU算法流程图 (11) .1源程序文件名 (11) . 2执行文件名 (11) 三、实验结果与分析 (11) Optimal页面置换算法结果与分析 (11) FIFO页面置换算法结果与分析 (16) LRU页面置换算法结果与分析 (20) 四、设计创新点 (24) 五、设计与总结 (27)

六、代码附录 (27) 课程设计题目 一、设计内容及要求 编写程序模拟虚拟存储器管理。假设以M页的进程分配了N

块内存(N

视频监控系统实习报告范本

. 安全防技术 视频监控系统工程技术实训报告 班级: : 课程名称:安全防技术 实训项目:视频监控系统工程综合实训 指导老师: 提交日期:2016年8月日

概要 视频监控是指以维护社会公共安全为目的,而采取的防入侵、防盗、防破坏和安全检查措施。视频监控设计是完成一个视频监控系统工程项目的第一步,也是非常关键的一布。 本次校园视频监控从校园建筑安全防系统工程的设计实际出发,依据用户任务书和国家的有关规与标准,建立一个以视频监控安全防系统。以人防与物防、技防相结合,达到防入侵、防盗、防破坏等系统进行联合设计,组成一个综合的、多功能的安全防系统是社会建设发展的需要也是校园安稳和平的需要。 校园视频监控系统的工程设计根据使用要求、现场情况、工程规模、系统造价以及校园的特殊需要等来综合考虑,达到最佳效果。 系统组成:本次实训的系统主要由前端设备、线路设备和终端设备组成。由于现在楼宇自动化的程度越来越高,作为其中一个重要组成部分的视频监控系统也得到了相当的发展,所以视频监控是发展前景很大的项目。

目录 前言....................................... .. (4) 第一章系统介绍 ............................. . (5) 第二章设计思路.............................. ... . (6) 第三章主要设备介绍 (8) 第四章主要设备(摄像机、硬盘录像机工作原理) (10) 4.1前端系统设备.................................. .. (10) 4.2视频监控前端现场设备安装要求................... . (15) 4.3终端视频图像监控子系统................... . (15) 第五章视频监控的简介................... . (19) 第六章实验步骤 (27) 第七章海康网络设备搜索软件的使用步骤 (28) 第八章海康网络设备客户端4200软件使用步骤 (33) 结论 (43) 致 (44) 参考文献 (45)

操作系统课程设计报告

东莞理工学院 操作系统课程设计报告学院:计算机学院 专业班级:13软件工程1班 提交时间:2015/9/14 指导教师评阅意见: . 项目名称:进程与线程管理功能 一、设计目的 用语言来模拟进程和线程管理系统,加深对进程和线程的理解,掌握对进程和线程各种状态和管理的算法原理。 二、环境条件 系统:WindowsXP、VMWare、Ubuntu Linux 语言:C/C++ 开发工具:gcc/g++、Visual C++ 6.0 三、设计内容 1. 项目背景

计算机的硬件资源有限,为了提高内存的利用率和系统的吞吐量,就要根据某种算法来管理进程和线程的状态从而达到目的。 进程与线程管理功能完成基于优先级的抢占式线程调度功能,完成进程虚拟内存管理功能。 进程与线程管理功能 基本要求:完成基于优先级的抢占式线程调度功能,完成进程虚拟内存管理功能。 提高要求:(增加1项就予以加分) (1) 实现多种线程调度算法; (2)通过“公共信箱”进行通信的机制,规定每一封信的大小为128字节,实现两个用户进程之间通过这个“公共信箱”进行通信。 (3) 实现多用户进程并发的虚拟内存管理功能。 (4) 实现用户进程间通信功能,并用生产者/消费者问题测试进程间通信功能的正确性。 (5) 实现改进型Clock页面置换算法。 (6) 实现Cache功能,采用FIFO替换算法。 2. 扩展内容 实现多种线程调度算法:时间片轮转调度算法 四、人员分工 优先级调度算法:钟德新,莫友芝 时间片轮转调度算法:张德华,袁马龙 设计报告由小组队员共同完成。小组成员设计的代码分工如下: 钟德新编写的代码:void Prinft(){ PCB *p; system("cls");//清屏 p=run; //运行队列 if(p!=NULL) { p->next=NULL; } cout<<"当前正在运行的进程:"<procname<<"\t\t"<pri<<"\t"<needOftime<<"\t\t"<runtime<<"\t\t"<state<next; } cout<procname<<"\t\t"<pri<<"\t"<needOftime<<"\t\t"<runtime<<"\t\t"<state<next; } cout<

操作系统课程设计实验报告

河北大学工商学院 课程设计 题目:操作系统课程设计 学部信息学部 学科门类电气信息 专业计算机 学号2011482370 姓名耿雪涛 指导教师朱亮 2013 年6月19日

主要内容 一、设计目的 通过模拟操作系统的实现,加深对操作系统工作原理理解,进一步了解操作系统的实现方法,并可练习合作完成系统的团队精神和提高程序设计能力。 二、设计思想 实现一个模拟操作系统,使用VB、VC、CB等windows环境下的程序设计语言,以借助这些语言环境来模拟硬件的一些并行工作。模拟采用多道程序设计方法的单用户操作系统,该操作系统包括进程管理、存储管理、设备管理、文件管理和用户接口四部分。 设计模板如下图: 注:本人主要涉及设备管理模块

三、设计要求 设备管理主要包括设备的分配和回收。 ⑴模拟系统中有A、B、C三种独占型设备,A设备1个,B设备2个,C设备2个。 ⑵采用死锁的预防方法来处理申请独占设备可能造成的死锁。 ⑶屏幕显示 注:屏幕显示要求包括:每个设备是否被使用,哪个进程在使用该设备,哪些进程在等待使用该设备。 设备管理模块详细设计 一、设备管理的任务 I/O设备是按照用户的请求,控制设备的各种操作,用于完成I/O 设备与内存之间的数据交换(包括设备的分配与回收,设备的驱动管理等),最终完成用户的I/O请求,并且I/O设备为用户提供了使用外部设备的接口,可以满足用户的需求。 二、设备管理函数的详细描述 1、检查设备是否可用(主要代码) public bool JudgeDevice(DeviceType type) { bool str = false; switch (type) { case DeviceType.a: {

Linux操作系统实习报告

桂林理工大学·信息科学与工程学院Linux操作系统报告 学院:信息科学与工程学院 班级:计算机2010-1 指导:王爱学 学号:3100717102 姓名:周杰 日期:2013年12月25日

【摘要】 Linux是一种自由和开放源码的类Unix操作系统,存在着许多不同的Linux版本,但它们都使用了Linux内核。Linux可安装在各种计算机硬件设备中,比如手机、平板电脑、路由器、视频游戏控制台、台式计算机、大型机和超级计算机。Linux是一个领先的操作系统,世界上运算最快的10台超级计算机运行的都是Linux操作系统。严格来讲,Linux这个词本身只表示Linux 内核,但实际上人们已经习惯了用Linux来形容整个基于Linux内核,并且使用GNU 工程各种工具和数据库的操作系统。Linux得名于天才程序员林纳斯·托瓦兹。 Linux操作系统是UNIX操作系统的一种克隆系统,它诞生于1991 年的10 月5 日(这是第一次正式向外公布的时间)。以后借助于Internet网络,并通过全世界各地计算机爱好者的共同努力,已成为今天世界上使用最多的一种UNIX 类操作系统,并且使用人数还在迅猛增长。 【操作】 1.ls -l -a -F的区别 从图中可以看出,-a,-l,-F的特点: 单纯的ls命令不能显示隐藏文件,需要-a才能显示文件名以.开头的隐藏文件和文件夹 ls -l则可以以长格式显示文件信息 ls -F则是:在列出的文件目录名称后加一符号例如可执行文件加"*", 目录则加"/"

2. cd 命令 cd 这个命令是用来进出目录的它的使用方法和在dos下没什么两样,但和dos不同的是Linux 的目录对大小写是敏感的,如果大小写拼写有误,你的cd操作是成功不了的,另外cd 如果直接输入cd 后面不加任何东西会回到使用者自己的Home,目录假设如果是root,那就是回到/root,这个功能同cd ~是一样的 3. mkdir rmdir mkdir 命令用来建立新的目录如输入如下命令 mkdir zj 将在当前目录下新建一个zj 目录 rmdir 用来删除已建立的目录如输入如下命令 rmdir zj 将删除已存在的空目录zj 4. cp

操作系统课程设计报告

东莞理工学院 操作系统课程设计报告 学院:计算机学院 专业班级:13软件工程1班 提交时间:2015/9/14 指导教师评阅意见: . 项目名称:进程与线程管理功能 一、设计目的 用语言来模拟进程和线程管理系统,加深对进程和线程的理解,掌握对进程和线程各种状态和管理的算法原理。 二、环境条件

系统:WindowsXP、VMWare、Ubuntu Linux 语言:C/C++ 开发工具:gcc/g++、Visual C++ 6.0 三、设计内容 1. 项目背景 计算机的硬件资源有限,为了提高内存的利用率和系统的吞吐量,就要根据某种算法来管理进程和线程的状态从而达到目的。 进程与线程管理功能完成基于优先级的抢占式线程调度功能,完成进程虚拟内存管理功能。 进程与线程管理功能 基本要求:完成基于优先级的抢占式线程调度功能,完成进程虚拟内存管理功能。 提高要求:(增加1项就予以加分) (1) 实现多种线程调度算法; (2)通过“公共信箱”进行通信的机制,规定每一封信的大小为128字节,实现两个用户进程之间通过这个“公共信箱”进行通信。 (3) 实现多用户进程并发的虚拟内存管理功能。 (4) 实现用户进程间通信功能,并用生产者/消费者问题测试进程间通信功能的正确性。 (5) 实现改进型Clock页面置换算法。 (6) 实现Cache功能,采用FIFO替换算法。

2. 扩展内容 实现多种线程调度算法:时间片轮转调度算法 四、人员分工 优先级调度算法:钟德新,莫友芝 时间片轮转调度算法:张德华,袁马龙 设计报告由小组队员共同完成。小组成员设计的代码分工如下:钟德新编写的代码:void Prinft(){ PCB *p; system("cls");//清屏 p=run; //运行队列 if(p!=NULL) { p->next=NULL; } cout<<"当前正在运行的进程:"<procname<<"\t\t"<pri<<"\t"<needOftime<<"\t\t"<runtime<<"\t\t"<state<next; } cout<procname<<"\t\t"<pri<<"\t"<needOftime<<"\t\t"<runtime<<"\t\t"<state<next; } cout<procname<<"\t\t"<pri<<"\t"<needOftime<<"\t\t"<runtime<<"\t\t"<state<

操作系统安装的实验报告

实验报告 课程名称:网络操作系统 实验项目名称: Windows Server 2003的操作系统的安装; Red Hat Linux 9的操作系统的安装 学生姓名:胡廷 专业:计算机网络技术 学号:1200007833 实验地点:昆明冶金高等专科学校实训楼六机房 实验日期:2013 年11月16 日

目录 实验项目名称: Windows Server 2003的操作系统的安装; (1) Red Hat Linux 9的操作系统的安装 (1) 实训1: Windows Server 2003的安装 (3) 一、实验目的 (3) 二、实验内容 (3) 三、实验步骤 (3) 四、结论 (13) 五、思考题 (14) 实训2: Red Hat Linux 操作系统的安装 (15) 一、实验目的 (15) 二、实验内容 (15) 三、实验步骤 (16) 四、结论 (31) 五、思考题 (32)

实训1: Windows Server 2003的安装 一、实验目的 1、掌握Windows Server 2003操作系统网络授权模式的选择和确定 2、了解各种不同的安装方式,能根据不同的情况正确选择不同的方式来安装Windows Server 2003操作系统。 3、熟悉Windows Server 2003操作系统的启动与安装步骤。 二、实验内容 为新建的虚拟机安装Windows Server 2003操作系统,要求如下: 1、Windows Server 2003分区的大小为20GB,文件系统格式为NTFS; 2、授权模式为每服务器15个连接,计算机名称srever47-win2003,管理员密码为wlczxt0912$47; 3、服务器的IP地址为192.168.15.47,子网掩码为255.255.255.0,DNS地址为218.194.208.5、211.98.72.8,网关设置为192.168.15.252,属于工作组workgroup。 三、实验步骤 1、启动VMWARE,新建一个虚拟机,将光盘指向Windows Server 2003安装映像文件,启动虚拟机,进入安装界面;

操作系统实验报告

操作系统教程 实 验 指 导 书 姓名: 学号: 班级:软124班 指导老师:郭玉华 2014年12月10日

实验一WINDOWS进程初识 1、实验目的 (1)学会使用VC编写基本的Win32 Consol Application(控制台应用程序)。 (2)掌握WINDOWS API的使用方法。 (3)编写测试程序,理解用户态运行和核心态运行。 2、实验内容和步骤 (1)编写基本的Win32 Consol Application 步骤1:登录进入Windows,启动VC++ 6.0。 步骤2:在“FILE”菜单中单击“NEW”子菜单,在“projects”选项卡中选择“Win32 Consol Application”,然后在“Project name”处输入工程名,在“Location”处输入工程目录。创建一个新的控制台应用程序工程。 步骤3:在“FILE”菜单中单击“NEW”子菜单,在“Files”选项卡中选择“C++ Source File”, 然后在“File”处输入C/C++源程序的文件名。 步骤4:将清单1-1所示的程序清单复制到新创建的C/C++源程序中。编译成可执行文件。 步骤5:在“开始”菜单中单击“程序”-“附件”-“命令提示符”命令,进入Windows“命令提示符”窗口,然后进入工程目录中的debug子目录,执行编译好的可执行程序: E:\课程\os课\os实验\程序\os11\debug>hello.exe 运行结果 (如果运行不成功,则可能的原因是什么?) : 有可能是因为DOS下路径的问题 (2)计算进程在核心态运行和用户态运行的时间 步骤1:按照(1)中的步骤创建一个新的“Win32 Consol Application”工程,然后将清单1-2中的程序拷贝过来,编译成可执行文件。 步骤2:在创建一个新的“Win32 Consol Application”工程,程序的参考程序如清单1-3所示,编译成可执行文件并执行。 步骤3:在“命令提示符”窗口中运行步骤1中生成的可执行文件,测试步骤2中可执行文件在核心态运行和用户态运行的时间。 E:\课程\os课\os实验\程序\os12\debug>time TEST.exe 步骤4:运行结果 (如果运行不成功,则可能的原因是什么?) : 因为程序是个死循环程序 步骤5:分别屏蔽While循环中的两个for循环,或调整两个for循环的次数,写出运行结果。 屏蔽i循环: 屏蔽j循环: _______________________________________________________________________________调整循环变量i的循环次数:

数据库实习报告

数据库实习报告 关于《数据库实习报告》,是我们特意为大家整理,希望对大家有所帮助。 ?次实习的主要任务是图书管理系统的开发。项目运行的平台是windowsxp,运用系统主要是microsoft visual studioxx,microsoft sql server xx,运用的知识主要有我们学习过的知识数据库技术,以及实习过程中所提及的知识。在软件开发果过程中首先要了解三层结构的的含义及其设计模式思想部署企业级数据库业务系统开发。 三层结构是一种成熟、简单并得到普遍应用的应用程序架构,它将应用程序结构划分三层独立的包,包括用户表示层、业务逻辑层、数据访问层。其中将实现人机界面的所有表单和组件放在表示层,将所有业务规则和逻辑的实现封装在负责业务逻辑组件中,将所有和数据库的交互封装在数据访问组件中。 三层结构示意图 三层结构是一种严格分层方法,即数据访问层只能被业务逻辑层访问,业务逻辑层只能被表示层访问,用户通过表示层将请求传送给业务逻辑层,业务逻辑层完成相关业务规则和逻辑,并通过数据访问层访问数据库获得数据,然后按照相反的顺序依次返回将数据显示在表示层。 下面介绍图书管理系统开发技术 一系统的功能设计 首先对系统进行需求分析,我们必须要知道要做一个系统“用来干什么”,这需要在对用户需求进行充分调研的基础上,深入理解并描述出软件的功能、性能、接口等方面的需求,可以使用uml建模作为需求分析和系统设计的有效方法。图(1)给出了本图书管理系统的功能结构图,其工作流程为:普通用户直接登录主页面,只能浏览、快速查询图书、注册新用户、修改自己的密码以及查看图书的详情,管理员用户除了可以完成普通用户的操作外,还可以进入图书管理模块进行图书添加、修改和删除的操作。 1、系统的功能特点

操作系统课程设计报告

操作系统课程设计实验报告 实验名称:进程控制 姓名/学号: 一、实验目的 学习、理解和掌握Linux与windows的进行控制系统调用的功能,熟悉主要的几个系统调用命令的格式和如何利用系统调用命令进行编程。通过学习,理解如何创建一个进程、改变进程执行的程序、进程和线程终止以及父子进程的同步等,从而提高对进程和线程控制系统调用的编程能力。 二、实验内容 设计并实现Unix的“time”命令。“mytime”命令通过命令行参数接受要运行的程序,创建一个独立的进程来运行该程序,并记录程序运行的时间。 三、实验环境 CPU: Inter ×2 2.10GHz RAM: 3.00GB Windows 7 旗舰版 Linux Ubuntu 10.04 编译: VS2010 四、程序设计与实现 4.1进程控制系统的调用 4.1.1 windows进程控制调用程序中使用的数据结构及主要符号说明 SYSTEMTIME starttime,endtime; //进程开始时间和结束时间 PROCESS_INFORMATION pi //该结构返回有关新进程及 //其主线程的信息 STARTUPINFO si //该结构用于指定新进程的主窗口特性4.1.2 linux进程控制调用程序中使用的数据结构及主要符号说明 struct timeval starttime,endtime //进程开始时间和结束时间 pid_t pid //进程标志符

4.2 程序流程图 图1 windows进程控制调用图2 linux进程控制调用程序运行流程图程序运行流程图 五、实验结果和分析 5.1 windows实验结果和分析

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

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

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

相关文档