当前位置:文档之家› 西安交大操作系统实验报告

西安交大操作系统实验报告

西安交大操作系统实验报告
西安交大操作系统实验报告

西安交通大学

操作系统专题实验报告

班级:

学号:

姓名:

2019年7月16日

目录

1内核编译与系统调用 (1)

1.1实验目的 (1)

1.2实验内容 (1)

1.3实验思想(或流程图) (1)

1.4实验步骤 (1)

1.5测试数据设计 (3)

1.6程序运行初值及运行结果分析 (3)

1.7实验总结 (4)

1.7.1实验中的问题与解决过程 (4)

1.7.2实验收获 (5)

1.7.3意见与建议 (5)

1.8附件 (5)

1.8.1附件1 程序 (5)

1.8.2附件2 MakeFile (8)

1.8.3附件3 Readme (8)

2 进程软中断与管道通信 (13)

2.1实验目的 (13)

2.2实验内容 (13)

2.3实验思想(或流程图) (13)

2.4结果分析 (15)

2.5实验总结 (16)

2.6源代码 (17)

3 模块编程与字符设备驱动 (20)

3.1实验目的 (20)

3.2实验内容 (20)

3.3实验总结 (21)

3.4附件 (22)

I

1内核编译与系统调用

1.1实验目的

掌握系统调用的设计过程,为以后设计更复杂系统奠定基础。

1.2实验内容

安装Linux,熟悉Linux的操作,并编译内核,构建、使用自己的Linux内核设计系统调用:设计、添加自己的系统调用,并重新编译内核予以验证

为Linux内核设计添加一个系统调用,将系统的相关信息(CPU型号、操作系统的版本号、系统中的进程等,类似于Windows的任务管理器)以文字形式列表显示于屏幕,并编写用户程序予以验证。请参阅proc文件系统的相关说明,读取proc文件系统的相关信息,可参考实验指导书的proc编程实验

1.3实验思想(或流程图)

系统调用是应用程序和操作系统内核之间的功能接口,其主要目的使用户可以使用操作系统提供的有关设备管理、输入/ 输出系统、文件系统和进程控制、通信以及存储管理等方面的功能 ,而不必了解系统程序的内部结构和有关硬件细节,从而起到减轻用户负担和保护系统以及提高资源利用率的作用。在Linux系统中,系统调用是作为一种异常类型实现的,它将执行相应的机器代码指令来产生异常信号,产生中断或异常的重要效果是系统自动将用户态切换为核心态来对它进行处理。这就是说,执行系统调用异常指令时,自动地将系统由用户态切换为核心态,并安排异常处理程序的执行。Linux用来实现系统调用异常的实际指令是:int $0x80

这一指令使用中断/异常向量号 128(即16进制的80) 将控制权转移给内核。为达到在使用系统调用时不必用机器指令编程,在标准的 C 语言库中为每一系统调用提供了一段短的子程序 ,完成机器代码的编程工作。事实上 ,机器代码段非常简短。它所要做的工作只是将送给系统调用的参数加载到CPU寄存器中 ,接着执行int $0x80指令 ,然后运行系统调用。系统调用的返回值将送入CPU的一个寄存器中,标准库的子程序取得这一返回值,并将它送回用户程序。

1.4实验步骤

1、新建一个目录,将系统调用的实现全部放在这个目录中;

首先确保在/usr/src/linux-4.7.1/目录下:

cd /usr/src/linux-4.7.1/

新建一个目录,目录名任意,并进入该目录:

mkdir info

cd info/

2、在此目录下新建一个头文件设定系统调用文件名;

新建一个头文件hello_world.h,包含以下内容:

#ifndef HELLO_WORLD_H

#define HELLO_WORLD_H

asmlinkage long sys_hello_world(void);

#endif

其中,asmlinkage告诉编译器去CPU 堆栈查看函数参数,long是内核空间函数常用的返回值类型。

3、新建一个对应的系统调用文件实现系统调用功能;

新建一个对应的hello_world.c实现调用功能

4、新建一个Makefile,以保证新系统调用被编译并包含在内核中;

新建一个Makefile,包含以下内容,以保证新系统调用被编译并包含在内核中:

ifneq ($(KERNELRELEASE),)

obj-y:=hello_world.o

else

KDIR := /lib/modules/linux-4.7.1/

PWD:=$(shell pwd)

all:

make -C $(KDIR) M=$(PWD) modules

clean:

rm -f *.ko *.o *.symvers *.cmd *.cmd.o

endif

5、集成新系统调用(修改源码根目录Makefile;修改系统调用表;修改syscalls.h);(1)修改一些必要的内核文件,让内核集成新的系统调用。

首先回到源码根目录下:

cd /usr/src/linux-4.7.1/,修改当前目录下的Makefile

core-y += kernel/ certs/ mm/ fs/ ipc/ security/ crypto/ block/

将其修改为

core-y += kernel/ certs/ mm/ fs/ ipc/ security/ crypto/ block/ info/

(2)修改与系统调用表相关的文件,以便根据系统调用号在系统表中确定其对应的系统调用名.

修改/usr/src/linux-source-4.15.0/arch/x86/entry/syscalls/syscall_64_tbl 文件,使用文本编辑器打开该文件,找一个空闲的系统调用号(建议直接在尾部追加),例如351,添加:351 my_syscall sys_my_syscall

(3)修改头文件syscalls.h,定义新的系统调用所对应的系统调用号.

/usr/src/linux-source-4.15.0/arch/x86/include/asm/syscalls.h

文件,添加:

asmlinkage int sys_my_syscall(char *)

6、重新编译内核

7、运行测试程序

运行hello

1.5测试数据设计

1.6程序运行初值及运行结果分析

成功输出进程信息,cpu、系统版本信息。

1.7实验总结

系统调用相当于是用户空间与内核空间的信息交流,利用系统调用可以在用户空间与内核空间之间进行信息的传递。

1.7.1实验中的问题与解决过程

1.问题描述

(1)在输出cpu或系统版本信息时,在末尾总是出现乱码,或者在输出cpu信息时,同时也把系统信息输出。

(2)只能在全文字终端中打印出信息

(3)利用for(p = &init_task; (p = next_task(p)) != &init_task;)语句可以遍历所有进程。本来想利用四个char *[]数组分别来储存name、pid、state和paretn name信息,奈何进程太多,需要定义4个3000字节的char *[]数组。使得程序无法运行。

(4)在用tty输出时,同样遇到了无法统一格式的问题。

2.解决过程:(网址,参考资料),具体解决方法

(1)经过一番尝试与思考后,我得知是因为在printf("%s")语句中,字符串的结束需要一个\n 提醒系统字符串已结束。于是在数组末尾添加了一个\n,后在编译运行得到正常结果。(2)利用copy_to_user()函数传送信息到用户空间的一块内存,并在用户空间调用打印函数将

其打印。

(3)无奈只得转换思路。从同学口中得知,tty_ops_write()函数可以从内核直接输出信息到终端,于是利用该函数顺利完成任务。

(4)输出的信息总是混乱的挤在一起或者离散开来。于是利用sprintf函数,先统一格式,再用tty_write统一输出,这样就使得输出有序排列。

1.7.2实验收获

通过设计自己的系统调用,熟悉了系统调用的流程,对linux系统也更加熟悉。

1.7.3意见与建议

遇到问题多百度,csdn上有许多优秀的博主,可以学习他们的做法。

1.8附件

1.8.1附件1 程序

Hello_world.h

#ifndef HELLO_WORLD_H

#define HELLO_WORLD_H

asmlinkage long sys_hello_world(char *,char *);

#endif

Hello_world.c

#include

#include

#include

#include

#include

//#include

#include "hello_world.h"

asmlinkage long sys_hello_world(char *to1,char *to2)

{

struct file *fp1;

struct file *fp2;

mm_segment_t fs1;

mm_segment_t fs2;

loff_t pos1;

loff_t pos2;

struct task_struct *p;

struct tty_struct *q;

char buf1[42]={"\0"};

char buf2[55]={"\0"};

fp1=filp_open("/proc/cpuinfo",O_RDONLY,0); ///output cpuinfo

fs1=get_fs();

set_fs(KERNEL_DS);

pos1=79;

vfs_read(fp1,buf1,sizeof(buf1),&pos1);

buf1[41]='\0';

copy_to_user(to1,buf1,42);

filp_close(fp1,NULL);

set_fs(fs1);

fp2=filp_open("/proc/version",O_RDONLY,0); ///output version info

fs2=get_fs();

set_fs(KERNEL_DS);

pos2=0;

vfs_read(fp2,buf2,sizeof(buf2),&pos2);

copy_to_user(to2,buf2,55);

filp_close(fp2,NULL);

set_fs(fs2);

q=current->signal->tty;

char temp[20]={"\0"};

char show[80]={"\0"};

q->ops->write(q,"************process info:*****************",42); //output process info

q->ops->write(q,"\n\r",2);

sprintf(show,"%-20s %-20s %-20s %-20s","Name","pid","state","ParentNam e");

q->ops->write(q,show,sizeof(show));

q->ops->write(q,"\n\r",2);

for(p=&init_task;(p=next_task(p))!=&init_task;){

//sprintf(temp,"%-20s",p->comm); output Name

q->ops->write(q,p->comm,20);

sprintf(temp,"%-6d",p->pid); //output pid

q->ops->write(q,temp,20);

sprintf(temp,"%-6d",p->state); //output state

q->ops->write(q,temp,20);

//sprintf(temp,"%-20s",p->parent->comm); /output ParentName

q->ops->write(q,p->parent->comm,20);

q->ops->write(q,"\n\r",2); //next line

}

q->ops->write(q,"\n\r",2);

return 0;

}

用户程序hello

#include

#include

int main()

{

char to1[42]={"\0"};

char to2[55]={"\0"};

syscall(380,to1,to2);

printf("\n");

printf("******THE CPU INFO:******\n");

printf("%s\n",to1);

printf("******THE VERSION INFO:******\n");

printf("%s\n",to2);

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

return 0;

}

1.8.2附件2 MakeFile

ifneq ($(KERNELRELEASE),)

obj-y:=hello_world.o

else

KDIR := /lib/modules/linux-4.7.1/

PWD:=$(shell pwd)

all:

make -C $(KDIR) M=$(PWD) modules

clean:

rm -f *.ko *.o *.symvers *.cmd *.cmd.o

Endif

1.8.3附件3 Readme

1内核编译

ubuntu:ubuntu-14.04.5-desktop-i386.iso

linux内核:linux-4.7.1.tar.xz

账户:xpf

密码:xpf

打开终端:ctrl+alt+t

设置共享文件夹参考网址:https://https://www.doczj.com/doc/f412111863.html,/huangjianxin/p/6343881.html

共享文件夹:d/xpfLinuxGX

终端中打开共享文件夹:/mnt/hgfs

root参考方法:https://https://www.doczj.com/doc/f412111863.html,/jidi2009/article/details/60129964 root登陆方法:选择login,输入用户名:root,输入root密码:xpf

安装依赖包:

安装libncurses5-dev:sudo apt-get install libncurses5-dev

安装libssl-dev:sudo apt-get install libssl-dev

内核编译参考:https://https://www.doczj.com/doc/f412111863.html,/xiaocainiaoshangxiao/article/details/21931801

以及ppt

make menueconfig中,修改标志为linux-4.7.1-2160500151

enable loadable module support没动

在 Device Drivers -> SCSI device support 中选中 SCSI disk support 没动

在文件系统 File systems 中,确保选中对 ext3 文件系统的支持。选中后出现两条子语句,也选中。

退出保存开始编译内核。

编译完成:

Setup is 17100 bytes (padded to 17408 bytes).

System is 6493 kB

CRC 4e10faab

Kernel: arch/x86/boot/bzImage is ready (#1)

按照https://https://www.doczj.com/doc/f412111863.html,/xiaocainiaoshangxiao/article/details/21931801 复制bzImage和system.map到/boot,但没找到.config。

#make modules(在usr/src/linux-4.7.1目录中)

#make modules_install //安装内核模块

#make install //安装内核

#update-grub //更新grub引导菜单

#gedit /boot/grub/menu.lst //查看编辑引导菜单

(gedit /boot/grub/ grub.cfg)

一切正常

重启开机时按shift。进入新内核。

su root

#uname -r查看内核版本:linux-4.7.1-2160500151.内核编译成功

2系统调用

任务:

设计一个系统调用,功能是将系统的相关信息(CPU型号、操作系统的版本号、系统中的进程等类似于Windows的任务管理器的信息)以文本形式列表显示于屏幕,并编写用户程序予

以验证

尝试:

以方法二写hello world:

建立info文件夹

vi hello_world.h

vi hello_world.c

makefile参考https://https://www.doczj.com/doc/f412111863.html,/xiaoshuai537/article/details/79340153?utm_source=blogxgwz1

修改内核文件,将源码的makefile中的

core-y += kernel/ certs/ mm/ fs/ ipc/ security/ crypto/ block/

改为

core-y += kernel/ certs/ mm/ fs/ ipc/ security/ crypto/ block/

info/

注意info前有一个空格。

修改syscall_32.tbl

修改syscalls.h

编译内核

make bzimage

make modules

make modules_install

make install

重启系统

运行测试程序

成功

正式开始:

linux/show

建立show_info.h

mm_segment_t fs含义参见

https://https://www.doczj.com/doc/f412111863.html,/yf210yf/article/details/8997007

首先尝试输出cpu、内存信息到内核日志。

1.修改hello_world.c文件

使其输出信息

打开全文字终端ctr alt f1

运行hello_world.c

输出信息

shift pgup/pgdn可实现翻页

make bzImage -j4

#include

#include

#include

#include

#include "hello_world.h"

asmlinkage long sys_hello_world(void) { struct file *fp1;

struct file *fp2;

mm_segment_t fs1;

mm_segment_t fs2;

loff_t pos1;

loff_t pos2;

char buf1[54]={"\0"};

char buf2[54]={"\0"};

fp1=filp_open("/proc/cpuinfo",O_RDONL Y,0); fs1=get_fs();

set_fs(KERNEL_DS);

pos1=66;

vfs_read(fp1,buf1,sizeof(buf1),&pos1);

printk(KERN_ALERT "cpu:\n");

printk(KERN_ALERT "%s\n",buf1);

filp_close(fp1,NULL);

set_fs(fs1);

fp2=filp_open("/proc/version",O_RDONL Y,0); fs2=get_fs();

set_fs(KERNEL_DS);

pos2=0;

vfs_read(fp2,buf2,sizeof(buf2),&pos2);

printk(KERN_ALERT "version:\n");

printk(KERN_ALERT "%s\n",buf2);

filp_close(fp2,NULL);

set_fs(fs2);

return 0;

}

困难

在输出cpu或系统版本信息时,在末尾总是出现乱码,或者在输出cpu信息时,同时也把系统信息输出。经过一番尝试与思考后,我得知是因为在printf("%s")语句中,字符串的结束需要一个\n提醒系统字符串已结束。于是在数组末尾添加了一个\n,后在编译运行得到正常结果。

修改:

上一版本只能在全文字终端中打印出信息,故利用copy_to_user()函数传送信息到用户空间的一块内存,并在用户空间调用打印函数将其打印。

进程显示:

利用for(p = &init_task; (p = next_task(p)) != &init_task;)语句可以遍历所有进程。

本来想利用四个char *[]数组分别来储存name、pid、state和paretn name信息,奈何进程太多,需要定义4个3000字节的char *[]数组。使得程序无法运行。

无奈只得转换思路。

从同学口中得知,tty_ops_write()函数可以从内核直接输出信息到终端,于是利用该函数顺利完成任务。

在用tty输出时,同样遇到了无法统一格式的问题。

输出的信息总是混乱的挤在一起或者离散开来。于是利用sprintf函数,先统一格式,再用tty_write统一输出,这样就使得输出有序排列。

2 进程软中断与管道通信

2.1实验目的

本实验在用户态下,根据教材所学习的操作系统原理,完成Linux下进程通信与内存管理算法的实现,通过实验,进一步理解所学理论知识。

(1)进程软中断

编程实现进程的创建和软中断通信,通过观察、分析实验现象,深入理解进程及进程在调度执行和内存空间等方面的特点,掌握在POSIX 规范中系统调用的功能和使用。

(2)管道通信

编程实现进程的管道通信,通过观察、分析实验现象,深入理解进程管道通信的特点,掌握管道通信的同步和互斥机制。

2.2实验内容

(1)进程软中断

编制实现软中断通信的程序

使用系统调用fork()创建两个子进程,再用系统调用signal()让父进程捕捉键盘上发出的中断信号(即按delete键),当父进程接收到这两个软中断的某一个后,父进程用系统调用kill()向两个子进程分别发出整数值为16和17软中断信号,子进程获得对应软中断信号,然后分别输出下列信息后终止:

Child process 1 is killed by parent !!

Child process 2 is killed by parent !!

父进程调用wait()函数等待两个子进程终止后,输入以下信息,结束进程执行:

Parent process is killed!!

多运行几次编写的程序,简略分析出现不同结果的原因。

(2)管道通信

管道是进程间通信的一种简单易用的方法。管道分为匿名管道和命名管道两种。下面首先介绍匿名管道。

匿名管道只能用于父子进程之间的通信,它的创建使用系统调用pipe():

int pipe(int fd[2])

其中的参数fd用于描述管道的两端,其中fd[0]是读端,fd[1]是写端。两个进程分别使用读端和写端,就可以进行通信了。

一个父子进程间使用匿名管道通信的例子。

匿名管道只能用于父子进程之间的通信,而命名管道可以用于任何管道之间的通信。命名管道实际上就是一个FIFO文件,具有普通文件的所有性质,用ls命令也可以列表。但是,它只是一块内存缓冲区。

2.3实验思想(或流程图)

(1)进程软中断

(2)管道通信

2.4结果分析

(1)进程软中断

运行程序后,键入ctrl+\,给父进程发送中断信号,父进程接受到中断信号后,再向两个子进程发送中断信号。两个子进程接受到中断信号后,分别运行结束程序。

再次运行程序,等待5秒后,程序如上步骤执行。

(2)管道通信

多次运行程序,均输出如下结果。

2.5实验总结

(1)进程软中断

1.你最初认为运行结果会怎么样?

两个进程一次结束并输出结束信息。

2.实际的结果什么样?有什么特点?试对产生该现象的原因进行分析。

跟最初认为的一样,不过两个进程结束的顺序不一定,有时候子进程1先结束,有时候子进程2先结束。是由于进程接收到中断信号的时间不一致所决定的。这个时间在该程序中又是决定与当时计算机内状态的,所以会有先后随机问题。

3. kill 命令在程序中使用了几次?每次的作用是什么?执行后的现象是什么?

共使用两次。均为了杀死子进程。执行后向两个子进程发送中断信号,子进程收到中断信号后执行结束程序。

4.使用kill 命令可以在进程的外部杀死进程。进程怎样能主动退出?这两种退出方式哪种更好一些?

使用exit()函数可以主动退出程序。两者各有优势。Kill退出方式使进程能在接收到外部信号后决定是否退出。Exit()函数使进程能在完成任务后主动退出。

(2)软中断

1.你最初认为运行结果会怎么样?

程序输出信号。

2.实际的结果什么样?有什么特点?试对产生该现象的原因进行分析。

程序输出结束信号,顺序固定。子进程2优先于子进程1结束,故先输出子进程2结束信号,再输出子进程1结束信号。

3.实验中管道通信是怎样实现同步与互斥的?如果不控制同步与互斥会发生什么后果?

通过锁住管道实现互斥,当一个进程在操作管道时,将管道锁住,使管道不能被其他进程使用。若果不实现同步与互斥,会导致混乱。输入与输出不一致。

2.6源代码

(1)进程软中断

#include

#include

#include

#include

int wait_flag;

void stop( );

main( ) {

int pid1, pid2; // 定义两个进程号变量

signal(3,stop); // 或者 signal(14,stop);

while((pid1 = fork( )) == -1); // 若创建子进程1不成功,则空循环

if(pid1 > 0) { // 子进程创建成功,pid1为进程号

while((pid2 = fork( )) == -1); // 创建子进程2

if(pid2 > 0) {

wait_flag = 1;

sleep(5); // 父进程等待5秒

kill(pid1,16); // 杀死进程1

kill(pid2,17); // 杀死进程2

wait(0); // 等待第1个子进程1结束的信号

wait(0); // 等待第2个子进程2结束的信号

printf("\n Parent process is killed !!\n");

exit(0); // 父进程结束

}

else {

wait_flag=1;

signal(17,stop); // 等待进程2被杀死的中断号17

while(wait_flag==1);

//pause(); printf("\n Child process 2 is killed by parent !!\n");

exit(0); } } else { wait_flag = 1;

signal(16,stop);

while(wait_flag==1);

//pause();

printf("\n Child process 1 is killed by parent !!\n"); exit(0);

} }

void stop( ) {

wait_flag=0; }

(2)管道通信

网页设计实验报告

实验报告 课程名称网络技术基础实验项目TCP/IP协议配置实验仪器计算机 系别 专业 班级/学号 学生姓名 实验日期 成绩 指导教师

实验一 TCP/IP协议配置 一、实验目的(标题黑体小四) 1.熟练掌握模板的用法。 2.掌握CSS的用法。 3.掌握网站发布的方法。 二、实验内容 1. 创建和使用模板。 2. css的创建和使用。 3. 发布网站。 三、实验课时 4课时 四、实验步骤 创建网站 1、创建一个站点,并创建 images 文件夹存放图片。将示例图片拷贝至images 目录下 2、创建 CSS 文件,名称为 style.css,将其保存至 style文件夹。 3、创建模板文件 tpl.dwt,并保存。结果如下: (1) 给 tpl.dwt 附加样式表 style.css。 在 tpl.dwt 的空白处点击鼠标右键,选择“附加样式表”: 选择 style.css 文件: 完成后,在 tpl.dwt 的 head标签里有如下的代码: (2) 设置模板的背景颜色。打开 CSS 面板,为 style.css 新建一条 css 规则。过程如 下:

将背景颜色设为#ff1e70: 在 style.css 生成如下的代码: body { background-color: #ff1e70? } 3) 制作布局。插入一 2 行 2 列的表格。表格的宽度=316+634=950,其他的设置:让表格居中对齐。 (4) 消除表格两边的空隙。展开 CSS 样式表,双击 body: 双击 body后,打开“body的 CSS 规则定义”对话框,按照下面的方式设置:Style.css 的代码变为: body { background-color: #ff1e70? margin: 0px? }

西安交通大学接口技术实验报告

西安交通大学 微型计算机接口技术实验报告 班级:物联网 姓名: 学号:

实验一基本I/O扩展实验 一、实验目的 1、了解 TTL 芯片扩展简单 I/O 口的方法,掌握数据输入输出程序编制的方法; 2、对利用单片机进行 I/O 操作有一个初步体会。 二、实验内容 74LS244 是一种三态输出的8 总线缓冲驱动器,无锁存功能,当G 为低电平时,Ai 信号传送到Yi,当为高电平时,Yi 处于禁止高阻状态。 74LS273 是一种8D 触发器,当CLR 为高电平且CLK 端电平正跳变时,D0——D7 端数据被锁存到8D 触发器中。 实验原理图: 三、实验说明 利用74LS244 作为输入口,读取开关状态,并将此状态通过74LS273 再驱动发光二极管显示出来,连续运行程序,发光二极管显示开关状态。

四、实验流程图 五、实验连线 1、244的cs连接到CPU地址A15,Y7—Y0连接开关K1-K8; 2、273的CS连接到CPU地址A14,Q7-Q0连接到发光二极管L1-L8; 3、该模块的WR,RD连接CPU的WR,RD,数据线AD7-AD0,地址线A7-A0分别与CPU的数据线AD7-AD0,地址线A7-A0相连接。

六、程序源代码(略) 七、实验结果 通过开关K01 到K08 可以对应依次控制LED 灯的L1 到L8 ,即当将开关Ki 上拨时,对应的Li 被点亮,Ki 下拨时,对应的Li熄灭。 此外,如果将开关拨到AAH 时,将会产生LED 灯左移花样显示;如果开关拨到55H 时,将会产生LED 灯右移花样显示。 七、实验心得 通过本次实验,我了解了TTL 芯片扩展简单I/O 口的方法,同时也对数据输入输出程序编制的方法有一定的了解与掌握,对利用单片机进行I/O 操作有一个初步体会,实验使我对自己在课堂上学的理论知识更加理解,同时也锻炼了我的动手操作能力。

操作系统实验报告--实验一--进程管理

实验一进程管理 一、目的 进程调度是处理机管理的核心内容。本实验要求编写和调试一个简单的进程调度程序。通过本实验加深理解有关进程控制块、进程队列的概念,并体会和了解进程调度算法的具体实施办法。 二、实验内容及要求 1、设计进程控制块PCB的结构(PCB结构通常包括以下信息:进程名(进程ID)、进程优先数、轮转时间片、进程所占用的CPU时间、进程的状态、当前队列指针等。可根据实验的不同,PCB结构的内容可以作适当的增删)。为了便于处理,程序中的某进程运行时间以时间片为单位计算。各进程的轮转时间数以及进程需运行的时间片数的初始值均由用户给定。 2、系统资源(r1…r w),共有w类,每类数目为r1…r w。随机产生n进程P i(id,s(j,k),t),0<=i<=n,0<=j<=m,0<=k<=dt为总运行时间,在运行过程中,会随机申请新的资源。 3、每个进程可有三个状态(即就绪状态W、运行状态R、等待或阻塞状态B),并假设初始状态为就绪状态。建立进程就绪队列。 4、编制进程调度算法:时间片轮转调度算法 本程序用该算法对n个进程进行调度,进程每执行一次,CPU时间片数加1,进程还需要的时间片数减1。在调度算法中,采用固定时间片(即:每执行一次进程,该进程的执行时间片数为已执行了1个单位),这时,CPU时间片数加1,进程还需要的时间片数减1,并排列到就绪队列的尾上。 三、实验环境 操作系统环境:Windows系统。 编程语言:C#。 四、实验思路和设计 1、程序流程图

2、主要程序代码 //PCB结构体 struct pcb { public int id; //进程ID public int ra; //所需资源A的数量 public int rb; //所需资源B的数量 public int rc; //所需资源C的数量 public int ntime; //所需的时间片个数 public int rtime; //已经运行的时间片个数 public char state; //进程状态,W(等待)、R(运行)、B(阻塞) //public int next; } ArrayList hready = new ArrayList(); ArrayList hblock = new ArrayList(); Random random = new Random(); //ArrayList p = new ArrayList(); int m, n, r, a,a1, b,b1, c,c1, h = 0, i = 1, time1Inteval;//m为要模拟的进程个数,n为初始化进程个数 //r为可随机产生的进程数(r=m-n) //a,b,c分别为A,B,C三类资源的总量 //i为进城计数,i=1…n //h为运行的时间片次数,time1Inteval为时间片大小(毫秒) //对进程进行初始化,建立就绪数组、阻塞数组。 public void input()//对进程进行初始化,建立就绪队列、阻塞队列 { m = int.Parse(textBox4.Text); n = int.Parse(textBox5.Text); a = int.Parse(textBox6.Text); b = int.Parse(textBox7.Text); c = int.Parse(textBox8.Text); a1 = a; b1 = b; c1 = c; r = m - n; time1Inteval = int.Parse(textBox9.Text); timer1.Interval = time1Inteval; for (i = 1; i <= n; i++) { pcb jincheng = new pcb(); jincheng.id = i; jincheng.ra = (random.Next(a) + 1); jincheng.rb = (random.Next(b) + 1); jincheng.rc = (random.Next(c) + 1); jincheng.ntime = (random.Next(1, 5)); jincheng.rtime = 0;

西安交通大学 非线性电路实验报告

Duffing 方程及其在信号检测中的应用 李禹锋 (西安交通大学电力设备电气绝缘国家重点实验室,陕西西安710049) 摘要:在工程领域中,在噪声环境下对信号进行检测一直都是研究的重点课题。混沌理论表明一类混沌系统在一定条件下对小信号具有参数敏感性,同时对噪声具有免疫力,因此使得它在信号检测中非常具有发展潜力。为此,本文分析了Duffing 方程的动力学特性,研究了利用Duffing 方程来进行微弱信号检测的原理和过程,并在Matlab 平台下进行了仿真实验。结果表明,可以利用Duffing 方程在噪声背景下进行信号的检测。 关键词:混沌理论;信号检测; Duffing 方程;仿真研究 1 引言 在噪声背景中检测微弱的有用信号是工程应用中的一个重要内容,前人已经开展了大量的研究工作。传统的基于线性理论的信号检测方法由于对噪声背景下的输出信噪比难以提高而存在一定局限性,尤其在对强噪声背景下的微弱信号检测更是受到了限制。然而很多研究证明,利用“混沌振子对周期小信号具有敏感依赖性,而对噪声具有免疫性”的特点,从噪声背景中提取微弱的周期信号是一种行之有效的方法,引起了人们极大的兴趣[1]。 在众多的信号检测中,正弦或余弦信号的检测占有极其重要的地位,在许多领域中有着极其广泛的应用。本文采用余弦小信号作为检测对象,在Matlab 平台下,对Duffing 方程及其在信号检测中的应用进行了初步探讨。 2 基于Duffing 方程的信号检测 2.1 Duffing 方程的数学模型及分析 Duffing 方程已被证明是混沌系统,大量学者对其进行过许多研究,研究它的动力学行为可以揭示系统的各种性质。Duffing 系统所描述的非线性动力学系统表现出丰富的非线性动力学特性,目前已成为研究混沌现象的常用模型[2]。 霍尔姆斯型Duffing 方程为: 232()()cos()d x dx k x t x t t dt dt γω+-+=(1) 式中,cos()t γ为周期策动力;k 为阻尼比;-x (t )+x 3(t )为非线性恢复力[3]。其状态方程为: dx y dt =(2) 3cos()dy ky x x t dt γω=-+-+(3) 在k 固定的情况下,系统状态随γ的变化出现变化,具体分析如下: (1)当策动力γ为0时,计算得到相平面中结点为(0,0)和鞍点为(±1,0)。系统

Web网页设计实验报告

WEB系统开发 综合实验报告 题目红尘客栈网上订房页面 专业计算机科学与技术(信息技术及应用) 班级计信2班 学生蒋波涛 重庆交通大学 2013年

目录 一、设计目的 (3) 二、设计题目 (3) 三、结构设计 (3) 四、技术分析 (4) 五、设计过程 (7) 六、实验心得 (10) 七、实验总结 (11)

一、设计目的 在Internet飞速发展的今天,互联网成为人们快速获取、发布和传递信息的重要渠道,它在人们政治、经济、生活等各个方面发挥着重要的作用。因此网站建设在Internet 应用上的地位显而易见,它已成为政府、企事业单位信息化建设中的重要组成部分,从而倍受人们的重视。我们当代大学生更是离不开网络给我们带来的好处与便利.但是,我们成天浏览的网站网页到底是如何制作的呢?我想这一点很多同学都没有去深究过.所以,这学期我选择了”web网页设计”这门课, 本课程的设计目的是通过实践使同学们经历网页制作的全过程. 通过设计达到掌握网页设计、制作的技巧。 了解和熟悉网页设计的基础知识和实现技巧。根据题目的要求,给出网页设计方案,可以按要求,利用合适图文素材设计制作符合要求的网页设计作品。 熟练掌握Photoshop cs3、Dreamweaver cs等软件的的操作和应用。增强动手实践能力,进一步加强自身综合素质。学会和团队配合,逐渐培养做一个完整项目的能力。 二、设计题目 《红尘客栈》 三、结构设计 选定主题,确定题目之后,在做整个网站之前对网站进行需求分析。首先,做好需求调研。调研方式主要是上网查阅资料,在图书馆里翻阅相关书籍。 然后,调研结束之后对整个网站进行功能描述,并对网站进行总体规划,接着逐步细化。 我们选做的主题是个人主页,并且选定题目为“红尘客栈”,其目的是做一个简单的网站,介绍酒店概况,提供一定的资讯信息。 四、技术分析 (一)建立布局 在这次的网页设计中用到大量的布局,所以怎么样建立布局是关键。Dreamweaver cs3是大多数人设计网页的称手兵器,也是众多入门者的捷径。特别是其在布局方面的出色表现,更受青睐。大家都知道,没有表格的帮助,很难组织出一个协调合理的页面。 1.点击“ALT+F6”键,进入布局模式,插入布局表格。建立一个大概的布局。 2.使用背景图片:选中该项,按浏览可以插入一幅准备好的图片作为表格的背景,因为图片是以平铺的形式作为表格背景,所以表格大小和图片尺寸都要控制好。 (二)网页中的图像

西安交大数字图像处理第二次实验报告

数字图像处理第二次作业

摘要 本次报告主要记录第二次作业中的各项任务完成情况。本次作业以Matlab 2013为平台,结合matlab函数编程实现对lena.bmp,elain1.bmp图像文件的相关处理:1.分别得到了lena.bmp 512*512图像灰度级逐级递减8-1显示,2.计算得到lena.bmp图像的均值和方差,3.通过近邻、双线性和双三次插值法将lena.bmp zoom到2048*2048,4. 把lena和elain 图像分别进行水平shear(参数可设置为1.5,或者自行选择)和旋转30度,并采用用近邻、双线性和双三次插值法zoom到2048*2048。以上任务完成后均得到了预期的结果。 1.把lena 512*512图像灰度级逐级递减8-1显示 (1)实验原理: 给定的lena.bmp是一幅8位灰阶的图像,即有256个灰度色。则K位灰阶图像中某像素的灰度值k(x,y)(以阶色为基准)与原图同像素的灰度值v(x,y)(以256阶色为基准)的对应关系为: 式中floor函数为向下取整操作。取一确定k值,对原图进行上式运算即得降阶后的k位灰阶图像矩阵。 (2)实验方法 首先通过imread()函数读入lena.bmp得到图像的灰度矩阵I,上式对I矩阵进行灰度降阶运算,最后利用imshow()函数输出显示图像。对应源程序为img1.m。 (3)处理结果 8灰度级

7灰度级 6灰度级 5灰度级

4灰度级 3灰度级 2灰度级

1灰度级 (4)结果讨论: 由上图可以看出,在灰度级下降到5之前,肉眼几乎感觉不出降阶后图像发生的变化。但从灰度级4开始,肉眼明显能感觉到图像有稍许的不连续,在灰度缓变区常会出现一些几乎看不出来的非常细的山脊状结构。随着灰度阶数的继续下降,图像开始出现大片的伪轮廓,灰度级数越低,越不能将图像的细节刻画出来,最终的极端情况是退化为只有黑白两色的二值化图像。由此可以得出,图像采样的灰度阶数越高,灰度围越大,细节越丰富,肉眼看去更接近实际情况。 2.计算lena图像的均值方差 (1)实验原理 对分辨率为M*N的灰度图像,其均值和方差分别为: (2)实验方法 首先通过imread()函数读入图像文件到灰度矩阵I中,然后利用 mean2函数和std2函数计算灰度矩阵(即图像)的均值和标准差,再由标准差平方得到方差。对应源程序:img1.m (3)处理结果 均值me =99.0512,标准差st =52.8776,方差sf =2.7960e+03。 (4)结果分析 图像的均值可反应图像整体的明暗程度,而方差可以反应图像整体的对比度情况,方差越大,图像的对比度越大,可以显示的细节就越多。 3.把lena图像用近邻、双线性和双三次插值法zoom到2048*2048; (1)实验原理 图像插值就是利用已知邻近像素点的灰度值来产生未知像素点的灰度值,以便由原始图

嵌入式操作系统实验报告

中南大学信息科学与工程学院实验报告 姓名:安磊 班级:计科0901 学号: 0909090310

指导老师:宋虹

目录 课程设计内容 ----------------------------------- 3 uC/OS操作系统简介 ------------------------------------ 3 uC/OS操作系统的组成 ------------------------------ 3 uC/OS操作系统功能作用 ---------------------------- 4 uC/OS文件系统的建立 ---------------------------- 6 文件系统设计的原则 ------------------------------6 文件系统的层次结构和功能模块 ---------------------6 文件系统的详细设计 -------------------------------- 8 文件系统核心代码 --------------------------------- 9 课程设计感想 ------------------------------------- 11 附录-------------------------------------------------- 12

课程设计内容 在uC/OS操作系统中增加一个简单的文件系统。 要求如下: (1)熟悉并分析uc/os操作系统 (2)设计并实现一个简单的文件系统 (3)可以是存放在内存的虚拟文件系统,也可以是存放在磁盘的实际文件系统 (4)编写测试代码,测试对文件的相关操作:建立,读写等 课程设计目的 操作系统课程主要讲述的内容是多道操作系统的原理与技术,与其它计算机原理、编译原理、汇编语言、计算机网络、程序设计等专业课程关系十分密切。 本课程设计的目的综合应用学生所学知识,建立系统和完整的计算机系统概念,理解和巩固操作系统基本理论、原理和方法,掌握操作系统开发的基本技能。 I.uC/OS操作系统简介 μC/OS-II是一种可移植的,可植入ROM的,可裁剪的,抢占式的,实时多任务操作系统内核。它被广泛应用于微处理器、微控制器和数字信号处理器。 μC/OS 和μC/OS-II 是专门为计算机的嵌入式应用设计的,绝大部分代码是用C语言编写的。CPU 硬件相关部分是用汇编语言编写的、总量约200行的汇编语言部分被压缩到最低限度,为的是便于移植到任何一种其它的CPU 上。用户只要有标准的ANSI 的C交叉编译器,有汇编器、连接器等软件工具,就可以将μC/OS-II嵌入到开发的产品中。μC/OS-II 具有执行效率高、占用空间小、实时性能优良和可扩展性强等特点,最小内核可编译至2KB 。μC/OS-II 已经移植到了几乎所有知名的CPU 上。 严格地说uC/OS-II只是一个实时操作系统内核,它仅仅包含了任务调度,任务管理,时间管理,内存管理和任务间的通信和同步等基本功能。没有提供输入输出管理,文件系统,网络等额外的服务。但由于uC/OS-II良好的可扩展性和源码开放,这些非必须的功能完全 可以由用户自己根据需要分别实现。 uC/OS-II目标是实现一个基于优先级调度的抢占式的实时内核,并在这个内核之上提供最基本的系统服务,如信号量,邮箱,消息队列,内存管理,中断管理等。 uC/OS操作系统的组成 μC/OS-II可以大致分成核心、任务处理、时间处理、任务同步与通信,CPU的移植等5个部分。如下图:

简单网页制作实验总结报告

《大学计算机基础》 实验报告 专业名称: 电子商务2班 学号: xxxxxxxxxxx 姓名: x x 指导教师: x x 2011年12月24日

目录 第一章网站主题设计说明 (1) 1.1 主题内容 (1) 1.2 设计思路 (1) 第二章网站内容设计 (2) 1.1 链接1标题 (2) 1.2 链接2标题 (2) 1.3 flash制作说明 (2) 第三章网站技术难点 (3) 第四章心得体会..................................... ..... ......................... (4)

第一章网站主题设计说明 1.1 主题内容 (1) 网站主题为“四季の花”,包括春夏秋冬四个季节的比较典型的花朵及有关花的诗句,色彩缤纷,十分艳丽夺目。 1.2 设计思路 (2) 大多网站都设计的关于音乐,影视,购物等非常热门的东西,本站设计的主题是花,能让人们在闲下来的时候看看花,品品诗歌,所以做有关花的网页是个不错的选择。同时,让人们分清楚春夏秋冬都各有什么典型的花。

第二章网站内容设计 1.1链接1标题:春の花 春天是生命的季节,在这个季节里,万物复苏。所以就找了虞美人,桃花,牡丹,以及海棠花来作为春天的代表。同时配有与这些花有关的诗句。 1.2 链接2标题:夏の花 夏天充满了激情与阳光,我找了兰花,荷花,百合花等来代表这个季节,色彩艳丽,十分醒目夺人。 1.3 链接3标题:秋の花 大丽花,菊花,月季和牡丹花都竞相出现在本网页,色彩缤纷,赏心悦目。 1.4 链接4标题:冬の花 蝴蝶兰,水仙,迎春花,梅花是冬季的代表,他们刻画了一副傲立冬天的坚强的姿态。

西 安 交 通 大 学 实 验 报 告 生物信息学

课程生物信息学实验名称核酸和蛋白质序列数据的使用系别实验日期: 专业班级组别交报告日期: 姓名学号报告退发:(订正、重做) 同组人无教师审批签字: 实验目的:了解常用的序列数据库,掌握基本的序列数据信息的查询方法。 实验步骤:在序列数据库中查找某条基因序列(insulin人的),通过相关一系列数据库的搜索、比对与结果解释 实验结果: 1.该基因的功能是? DNA结合、RNA结合、雄激素受体结合、酶结合、蛋白结合、转录激活活性、转录调控区的DNA结合、微管蛋白结合、泛素蛋白与连接酶结合、泛素蛋白连接酶的活性、提高泛素蛋白连接酶的活性、锌离子结合 3. 该蛋白质有没有保守的功能结构域 该蛋白质有保守的功能结构域。分别为cd00027(Location:1763 –1842 Blast Score: 107)cd00162(Location:23 –68 Blast Score: 134)pfam04873(Location:655 –978 Blast Score: 1301)pfam12820(Location:344 –507 Blast Score: 809)pfam13923(Location:20 –65 Blast Score: 135) 4. 该蛋白质的功能是怎样的? ①E3泛素蛋白连接酶,专门介导L YS-6'-联泛素链的形成,并通过促胞对DNA损伤的反应,在DNA修复中起着核心的作用;目前还不清楚是否也介导其他类型的泛素链形成。E3泛素蛋白连接酶的活性是其抑癌能必需的。②BARD1- BRCA1异源二聚体协调各种不同的细胞通路,如DNA损伤修复,泛素化和转录调控,以维持基因组稳定性。③调节中心体微核。 ④从G2到有丝分裂的正常细胞周期进程所必需的。⑤参与转录调控在DNA损伤反应中的P21。⑥为FANCD2靶向DNA损伤位点所需。⑦可以用作转录调控因子。⑧绑定到ACACA 和防止其去磷酸化,抑制脂质合成。 5. 该蛋白质的三级结构是什么?如果没有的话, 和它最相似的同源物的结构是什么样子的?给出 示意图。 该蛋白有三级结构,如图所示

实时操作系统报告

实时操作系统课程实验报告 专业:通信1001 学号:3100601025 姓名:陈治州 完成时间:2013年6月11日

实验简易电饭煲的模拟 一.实验目的: 掌握在基于嵌入式实时操作系统μC/OS-II的应用中,基于多任务的模式的编程方法。锻炼综合应用多任务机制,任务间的通信机制,内存管理等的能力。 二.实验要求: 1.按“S”开机,系统进入待机状态,时间区域显示当前北京时间,默认模式“煮饭”; 2.按“C”选择模式,即在“煮饭”、“煮粥”和“煮面”模式中循环选择; 3.按“B”开始执行模式命令,“开始”状态选中,时间区域开始倒计时,倒计时完成后进入“保温”状态,同时该状态显示选中,时间区域显示保温时间; 4.按“Q”取消当前工作状态,系统进入待机状态,时间区域显示北京时间,模式为当前模式; 5.按“X”退出系统,时间区域不显示。 6.煮饭时长为30,煮粥时长为50,煮面时长为40. 三.实验设计: 1.设计思路: 以老师所给的五个程序为基础,看懂每个实验之后,对borlandc的操作有了大概的认识,重点以第五个实验Task_EX为框架,利用其中界面显示与按键扫描以及做出相应的响应,对应实现此次实验所需要的功能。 本次实验分为界面显示、按键查询与响应、切换功能、时钟显示与倒计时模块,综合在一起实验所需功能。 2.模块划分图: (1)界面显示: Main() Taskstart() Taskstartdispinit() 在TaskStartDispInit()函数中,使用PC_DispStr()函数画出界面。

(2)按键查询与响应: Main() Taskstart() 在TaskStart()函数中,用if (PC_GetKey(&key) == TRUE)判断是否有按键输入。然后根据key 的值,判断输入的按键是哪一个;在响应中用switch语句来执行对应按键的响应。 (3)切换功能: l计数“C”按 键的次数 M=l%3 Switch(m) M=0,1,2对应于煮饭,煮粥,煮面,然后使用PC_DispStr()函数在选择的选项前画上“@”指示,同时,在其余两项钱画上“”以“擦出”之前画下的“@”,注意l自增。 四.主要代码: #include "stdio.h" #include "includes.h" #include "time.h" #include "dos.h" #include "sys/types.h" #include "stdlib.h" #define TASK_STK_SIZE 512 #define N_TASKS 2 OS_STK TaskStk[N_TASKS][TASK_STK_SIZE]; OS_STK TaskStartStk[TASK_STK_SIZE]; INT8U TaskData[N_TASKS];

网页制作实验报告

网页制作实验报告 页制作实验报告 实验一:站点设置 一、实验目的及要求 本实例是经过“站点定义为”对话框中的“高级”选项卡创建一具新站点。 二、仪器用具 1、生均一台多媒体电脑,组建内部局域,同时接入国际互联。 2、安装windows xp操作系统;建立iis服务器环境,支持asp。 3、安装页三剑客(dreamweaver mx;flash mx;fireworks mx)等页设计软件; 三、实验原理 经过“站点定义为”对话框中的“高级”选项卡创建一具新站点。 四、实验办法与步骤 1)执行“站点\治理站点”命令,在弹出的“治理站点”对话框中单击“新建”按钮,在弹出的快捷菜单中挑选“站点”命令。 2)在弹出的“站点定义为”对话框中单击“高级”选项卡。 3)在“站点名称”文本框中输入站点名称,在“默认文件夹”文本框中挑选所创建的站点文件夹。在“默认图象文件夹”文本框中挑选存放图象的文件夹,完成后单击“确定”按钮,返回“治理站点”对话框。 4)在“治理站点”对话框中单击“完成”按钮,站点创建完毕。 五、实验结果 六、讨论与结论 实验开始之前要先建立一具根文件夹,在实验的过程中把站点存在自己建的文件夹里,如此才干使实验条理化,别至于在实验后寻别到自己的站点。在实验过程中会浮现一些选项,计算机普通会有默认的挑选,最后别要去更改,假如要更改要先充分了解清晰该选项的含义,以及它会造成的效果,否则会使实验的结果失真。实验前先熟悉好操作软件是做好该实验的关键。 实验二:页面图像设置 一、实验目的及要求: 本实例的目的是设置页面的背景图像,并创建鼠标经过图像。 二、仪器用具 1、生均一台多媒体电脑,组建内部局域,同时接入国际互联。 2、安装windows xp操作系统;建立iis服务器环境,支持asp。 3、安装页三剑客(dreamweaver mx;flash mx;fireworks mx)等页设计软件; 4、安装acdsee、photoshop等图形处理与制作软件; 5、其他一些动画与图形处理或制作软件。 三、实验原理 设置页面的背景图像,并创建鼠标经过图像。 四、实验办法与步骤 1) 在“页面属性”对话框中设置页面的背景图像。 2) 在页面文档中单击“”插入鼠标经过图像。 五、实验结果

西安交通大学实验报告

西安交通大学实验报告 课程_大学计算机_实验名称_检索绘图音频及图像处理_第页共页 系别_____ 能动学院___________ 实验日期年月日专业班级________________组别_____________ 实验报告日期年月日姓名________________学号_____________ 报告退发 ( 订正、重做 ) 同组人_________________________________ 教师审批签字 ●目标任务: 一. 信息检索 1.使用百度地图网站搜索西安交通大学南门到西安大唐芙蓉园的公交线路。(屏幕截图)2.在本校图书馆网站查找两门课程的教学参考书(屏幕截图)。 3.使用百度图片网站搜索有关“飞机”和“天空”的图片,各下载一张,并分别命名为:天空.jpg,飞机.jpg。 4.使用Ei检索,检索目前中国高速铁路(High-speed railway in China)相关的工程论文(屏幕截图) 二. 矢量图绘制 题目:使用Microsoft Office Visio 2010办公绘图软件,绘制流程图。 要求:参见实验教材p27,“四. 实验任务和要求”。 三.数字音频处理 题目:使用GoldWave音频处理软件,完成手机铃声制作 要求:从网上下载一个音乐文件,选取最喜爱的片段,将其保存成手机要求的音频格式(如MP3、WAV)作为手机铃声(存放为另一个音乐文件)。 结果:在实验报告中,粘贴两个音乐文件的属性对话框屏幕截图。(分析文件的大小与占用空间的不同) GoldWave软件存放地址: D:\计算机应用技术基础、ECAT.Software\ECAT-Software\GoldWave.rar 或从网上下载。 四.数字图像处理 题目:使用Photoshop软件进行“飞行编队”图像设计。 要求:参见实验教材p37,“四. 实验任务和要求”(1)飞行编队设计。 结果:将设计的“三角飞行编队图片”粘贴到实验报告中。 最后上传实验报告。 ●实验环境

网页制作实验报告

北京理工大学珠海学院课程设计说明书 _2013_—_2014_学年第_1_学期 题目: 《Web应用开发课程设计》 学院:计算机学院 专业班级: 11级软件工程3班 学号: 110202031031 学生姓名:蒋征 指导教师:魏志军 成绩: 时间: 2014/1/5 2014年 1 月 5 日

摘要 本次作品是一个IT技术交流论坛,实现论坛的基本功能,注册、登录、发帖、浏览和回帖。 论坛分三个分板块,网页、C#和JA V A,纵向层次也是三层,主页、板块页和帖子页。网站使用JavaScript实现动态页面。 关键词:计算机技术交流社区JavaScript 网页 I

目录 摘要 ............................................. I 目录 ............................................. II 1 网站结构和布局 (1) 1.1 网站结构 (1) 1.1.1 总体结构 (1) 1.1.2 横向链接结构 (2) 1.2 页面布局 (3) 1.2.1 主页 (3) 1.2.2 分版页面 (6) 1.2.3 帖子页面 (6) 2 技术应用 (8) 2.1 逻辑设计 (8) 2.1.1 HTML和CSS设计 (8) 2.1.2 JavaScript设计 (10) 参考文献 (13) 心得体会 (14) I

教师评语 (15) 成绩评定表 (16) 课程设计答辩记录表 (17) II

1 网站结构 1.1主体结构 1.1.1总结构 网站是以技术交流社区为主题的论坛型网站。 这个网站是按树形结构设计如图1-1-1,页面种类共分三层,分别是主页,分主题页还有就是内容页。 主页连向三个分主题分区页面,分别是MTHL板块,C#板块还有就是JAVA 板块。 主题分区页面下面是内容帖子。 图1-1-1网页关系 1

西安交通大学检测技术课内实验报告

西安交通大学 现代检测技术实验报告 实验一金属箔式应变片——电子秤实验 实验二霍尔传感器转速测量实验 实验三光电传感器转速测量实验 实验四E型热电偶测温实验 实验五E型热电偶冷端温度补偿实验

实验一 金属箔式应变片——电子秤实验 一、实验目的: 了解金属箔式应变片的应变效应,直流全桥工作原理和性能,了解电路的定标。 二、实验仪器: 应变传感器实验模块、托盘、砝码、数显电压表、±15V 、±4V 电源、万用表(自备)。 三、实验原理: 电阻丝在外力作用下发生机械变形时,其电阻值发生变化,这就是电阻应变效应,描述电阻应变效应的关系式为 ε?=?k R R (1-1) 式中 R R ?为电阻丝电阻相对变化; k 为应变灵敏系数; l l ?= ε为电阻丝长度相对变化。 金属箔式应变片就是通过光刻、腐蚀等工艺制成的应变敏感组件。如图1-1所示,将四 个金属箔应变片分别贴在双孔悬臂梁式弹性体的上下两侧,弹性体受到压力发生形变,应变片随弹性体形变被拉伸,或被压缩。 图1-1 双孔悬臂梁式称重传感器结构图

图1-2 全桥面板接线图 全桥测量电路中,将受力性质相同的两只应变片接到电桥的对边,不同的接入邻边,如图3-1,当应变片初始值相等,变化量也相等时,其桥路输出 Uo=R R E ?? (3-1) 式中E 为电桥电源电压。 R R ?为电阻丝电阻相对变化; 式3-1表明,全桥输出灵敏度比半桥又提高了一倍,非线性误差得到进一步改善。 电子称实验原理同全桥测量原理,通过调节放大电路对电桥输出的放大倍数使电路输出电压值为重量的对应值,电压量纲(V )改为重量量纲(g )即成一台比较原始的电子称。 四、实验内容与步骤 1.应变传感器上的各应变片已分别接到应变传感器模块左上方的R1、R2、R3、R4上,可用万用表测量判别,R1=R2=R3=R4=350Ω。 2.差动放大器调零。从主控台接入±15V 电源,检查无误后,合上主控台电源开关,将差动放大器的输入端Ui 短接并与地短接,输出端Uo 2接数显电压表(选择2V 档)。将电位器Rw3调到增益最大位置(顺时针转到底),调节电位器Rw4使电压表显示为0V 。关闭主控台电源。(Rw3、

嵌入式实时操作系统实验报告

嵌入式实时操作系统实验报告 任务间通信机制的建立 系别计算机与电子系 专业班级***** 学生姓名****** 指导教师 ****** 提交日期 2012 年 4 月 1 日

一、实验目的 掌握在基于嵌入式实时操作系统μC/OS-II的应用中,任务使用信号量的一般原理。掌握在基于优先级的可抢占嵌入式实时操作系统的应用中,出现优先级反转现象的原理及解决优先级反转的策略——优先级继承的原理。 二、实验内容 1.建立并熟悉Borland C 编译及调试环境。 2.使用课本配套光盘中第五章的例程运行(例5-4,例5-5,例5-6),观察运行结果,掌握信号量的基本原理及使用方法,理解出现优先级反转现象的根本原因并提出解决方案。 3.试编写一个应用程序,采用计数器型信号量(初值为2),有3个用户任务需要此信号量,它们轮流使用此信号量,在同一时刻只有两个任务能使用信号量,当其中一个任务获得信号量时向屏幕打印“TASK N get the signal”。观察程序运行结果并记录。 4. 试编写一个应用程序实现例5-7的内容,即用优先级继承的方法解决优先级反转的问题,观察程序运行结果并记录。 5.在例5-8基础上修改程序增加一个任务HerTask,它和YouTask一样从邮箱Str_Box里取消息并打印出来,打印信息中增加任务标识,即由哪个任务打印的;MyTask发送消息改为当Times为5的倍数时才发送,HerTask接收消息采用无等待方式,如果邮箱为空,则输出“The mailbox is empty”, 观察程序运行结果并记录。 三、实验原理 1. 信号量 μC/OS-II中的信号量由两部分组成:一个是信号量的计数值,它是一个16位的无符号整数(0 到65,535之间);另一个是由等待该信号量的任务组成的等待任务表。用户要在OS_CFG.H中将OS_SEM_EN开关量常数置成1,这样μC/OS-II 才能支持信号量。

西南交大c实验报告

实验__8__实验报告 教学班级:_26_ 学生学号:_201_ 学生:_ _ 实验日期:__5.26___ 实验地点:_________(机房) 指导教师签名:__________ 实验成绩:___________ 一、实验目的 1.掌握对数值型一维数组的使用方法; 2.掌握对数组的插入、删除、修改、排序和查找等常用算法。 二、实验任务 1. 设有一批学生的程序设计课程的考试成绩(学生人数最多为N=100人,数据如下: (提示:可以建立三个一维数组来存放学生的数据,其中:学号为一个long类型的数组studentID,为一个string类型的数组name,成绩为一个int类型的数组grade)(1)由键盘获取学生人数n,要求学生人数n的取值围11到N-2; (2)由键盘获取学生的相关数据; (3)用选择排序法将学生的数据按学号进行升序排列并输出排序后的学生数据; 2. 在任务1的基础上,在学生数据中,完成以下任务: (1)键盘输入一个学生的学号,用折半查找法查找是否有该学生,若有该学生则输出该学生的所有信息,按如下格式输出: 学号程序设计成绩 2015112324 思德72 若没有该学生,则输出“查无此人”的信息。 (2)插入一个新学生的数据,要求插入后学生的数据任按学号升序排列。 ⒊在任务1的基础上,在学生数据中,完成以下任务: ⑴用选择排序法将学生数据按学生程序设计课程成绩降序排列。 ⑵键盘输入一个学生的学号和程序设计课程的新成绩,在学生数据中查找是否有该学生,若有该学生则用键盘输入的新成绩替换该学生的原成绩,否则输出“查无此人”的信息。 三、实验结果(源程序+ 注释)

Dreamweaver网页制作实训报告

广西科技大学鹿山学院 课程设计报告 课程名称:网页制作课程设计 课题名称:我的梦幻网 指导教师:韦灵 班级:计软141班 姓名:邓康言 学号: 20141409 成绩评定:

指导教师签字: 2015 年 07 月 07 日 目录 一. 网页制作课程设计目的 (3) 二. 1.实训意义: (3) 2.实训目的: (3) 二、课程设计内容 (5) 1.网站主题《我的梦幻网》 (5) 2.网站材料 (5) 3.网站规划 (5) 三、课程设计步骤 (6) 四、网站各模块实现 (7) 1.我的梦幻网模块功能: (7) 2.背景故事模块功能: (8) 3.宠物介绍模块功能: (9) 4.门派介绍模块功能 (10) 5.装备模块功能介绍: (11) 6.人物模块功能介绍: (12)

7.地图介绍模块功能: (14) 7.我的梦幻模块功能: (15) 五、总结及心得体会 (17) 一.网页制作课程设计目的 1.实训意义: 本次网页设计与制作实训是网页教学过程中重要的实践性教学环节.它是根据网页教学计划的要求.在教师的指导下进行网页制作专业技能的训练,培养学生综合运用理论知识分析和解决实际问题的能力,实现由理论知识向操作技能的培养过程.因此加强实践教学环节,搞好实训教学,对实现本专业的培养目标,提高学生的综合素质有着重要的作用. 2.实训目的: 通过综合实训进一步巩固,深化和加强我的理论知识 (1) 掌握规划网站的内容结构,目录结构,链接结构的方法。 (2) 熟练掌握网页制作软件Dreamweaver8和基本操作和使

用。 (3) 掌握页面的整体控制和头部内容设置的方法。 (4) 熟练掌握网页页面布局的各种方法。 (5) 熟练掌握在网页中输入,设置标题和正文文字的方法。 (6) 熟练掌握在网页中插入图像,Flash动画和背景音乐的方法。 (7) 熟练建立各种形式的超级链接的方法。 (8) 掌握表单网页制作方法。 (9) 掌握网页特效制作方法。 (10) 掌握网站测试的方法。 2. 训练和培养我获取信息和处理信息的能力,充分培养和提高动手能力,学会通过网站、书籍、素材等方式收集所需的文字资料、图像资料、Flash动画和网页特效等。 3. 培养我运用所学的理论知识和技能解决网站开发过程中所遇到的实际问题的能力及基本工作素质。 4. 培养我的理论联系实际的工作作风,严肃认真的科学态度以及独立工作的能力,树立自信心。

西安交大自动控制原理实验报告

自动控制原理实验报告 学院: 班级: 姓名: 学号:

西安交通大学实验报告 课程自动控制原理实验日期2014 年12月22 日专业班号交报告日期 2014 年 12月27日姓名学号 实验五直流电机转速控制系统设计 一、实验设备 1.硬件平台——NI ELVIS 2.软件工具——LabVIEW 二、实验任务 1.使用NI ELVIS可变电源提供的电源能力,驱动直流马达旋转,并通过改变电压改变 其运行速度; 2.通过光电开关测量马达转速; 3.通过编程将可变电源所控制的马达和转速计整合在一起,基于计算机实现一个转速自 动控制系统。 三、实验步骤 任务一:通过可变电源控制马达旋转 任务二:通过光电开关测量马达转速 任务三:通过程序自动调整电源电压,从而逼近设定转速

编程思路:PID控制器输入SP为期望转速输出,PV为实际测量得到的电机转速,MV为PID输出控制电压。其中SP由前面板输入;PV通过光电开关测量马达转速得到;将PID 的输出控制电压接到“可变电源控制马达旋转”模块的电压输入控制端,控制可变电源产生所需的直流电机控制电压。通过不断地检测马达转速与期望值对比产生偏差,通过PID控制器产生控制信号,达到直流电机转速的负反馈控制。 PID参数:比例增益:0.0023 积分时间:0.010 微分时间:0.006 采样率和待读取采样:采样率:500kS/s 待读取采样:500 启动死区:电机刚上电时,速度为0,脉冲周期测量为0,脉冲频率测量为无限大。通过设定转速的“虚拟下限”解决。本实验电机转速最大为600r/min。故可将其上限值设为600r/min,超过上限时,转速的虚拟下限设为200r/min。 改进:利用LabVIEW中的移位寄存器对转速测量值取滑动平均。

操作系统实验报告

实验报告 实验课程名称:操作系统 实验地点:南主楼七楼机房 2018—2019学年(一)学期 2018年 9月至 2019 年 1 月 专业: 班级: 学号: 姓名: 指导老师:刘一男

实验一 实验项目:分时系统模拟 实验学时:2实验日期: 2018-10-25 成绩: 实验目的利用程序设计语言模拟分时系统中多个进程按时间片轮转调度算法进行进程调度的过程; 假设有五个进程A,B,C,D,E,它们的到达时间及要求服务的时间分别为:进程名 A B C D E 到达时间0 1 2 3 4 服务时间 4 3 4 2 4 时间片大小为1,利用程序模拟A,B,C,D,E五个进程按时间片轮转的调度及执行过程并计算各进程的周转时间及带权周转时间。 执行过程并计算各进程的周转时间及带权周转时间。 轮转调度:BDACE

(1)修改时间片大小为2,利用程序模拟A,B,C,D,E五个进程按时间片轮转的调度及执行过程并计算各进程的周转时间及带权周转时间。 轮转调度:ADBCE (2)修改时间片大小为4,利用程序模拟A,B,C,D,E五个进程按时间片轮转的调度及执行过程并计算各进程的周转时间及带权周转时间.

顺序:ABCDE 1、思考 时间片的大小对调度算法产生什么影响?对计算机的性能产生什么影响?答:通过对时间片轮转调度算法中进程最后一次执行时间片分配的优化,提出了一种改进的时间片轮转调度算法,该算法具有更好的实时性,同时减少了任务调度次数和进程切换次数,降低了系统开销,提升了CPU的运行效率,使操作系统的性能得到了一定的提高。 A B C D E 时间片为1 周转时间12 9 14 8 13 3 3 3.5 4 3.25 带权周转 时间 时间片为2 周转时间8 12 13 7 13 2 4 3.25 3.5 3.25 带权周转 时间 时间片为4 周转时间 4 6 9 10 13 1 2 2.25 5 3.25 带权周转 时间

相关主题
文本预览
相关文档 最新文档