当前位置:文档之家› ucore实验7实验报告

ucore实验7实验报告

ucore实验7实验报告
ucore实验7实验报告

LAB7实验报告

实验目的:

●熟悉ucore中的进程同步机制,了解操作系统为进程同步提供的底层支持;

●在ucore中理解信号量(semaphore)机制的具体实现;

●理解管程机制,在ucore内核中增加基于管程(monitor)的条件变量(condition variable)

的支持;

●了解经典进程同步问题,并能使用同步机制解决进程同步问题

实验内容:

实验六完成了用户进程的调度框架和具体的调度算法,可调度运行多个进程。如果多个进程需要协同操作或访问共享资源,则存在如何同步和有序竞争的问题。本次实验,主要是熟悉ucore的进程同步机制—信号量(semaphore)机制,以及基于信

号量的哲学家就餐问题解决方案。然后掌握管程的概念和原理,并参考信号量机制,实现基于管程的条件变量机制和基于条件变量来解决哲学家就餐问题。

在本次实验中,在kern/sync/check_sync.c中提供了一个基于信号量的哲学家就餐问题解法。同时还需完成练习,即实现基于管程(主要是灵活运用条件变量和互斥信号量)的哲学家就餐问题解法。哲学家就餐问题描述如下:有五个哲学家,他们的生活方式是交替地进行思考和进餐。哲学家们公用一张圆桌,周围放有五把椅子,每人坐一把。在圆桌上有五个碗和五根筷子,当一个哲学家思考时,他不与其他人交谈,饥饿时便试图取用其左、右最靠近他的筷子,但他可能一根都拿不到。只有在他拿到两根筷子时,方能进餐,进餐完后,放下筷子又继续思考。

一.练习

练习0:填写已有实验

练习1: 理解内核级信号量的实现和基于内核级信号量的哲学家就餐问题(不需要编码)完成练习0后,建议大家比较一下(可用kdiff3等文件比较软件)个人完成的lab6和练习0完成后的刚修改的lab7之间的区别,

分析了解lab7采用信号量的执行过程。执行make grade,大部分测试用例应该通过。

●请在实验报告中给出内核级信号量的设计描述,并说其大致执行流流程。

●请在实验报告中给出给用户态进程/线程提供信号量机制的设计方案,并比较说明给内

核级提供信号量机制的异同

思考题:

1.请在实验报告中给出内核级信号量的设计描述,并说其大致执行流流程。

答:

struct semaphore {

int count;

queueType queue;

};

void semWait(semaphore s)

{

s.count--;

if (s.count < 0) {

/* place this process in s.queue */;

/* block this process */;

}

}

void semSignal(semaphore s)

{

s.count++;

if (s.count<= 0) {

/* remove a process P from s.queue */;

/* place process P on ready list */;

}

}

基于上诉信号量实现可以认为,当多个(>1)进程可以进行互斥或同步合作时,一个进程会由于无法满足信号量设置的某条件而在某一位置停止,直到它接收到一个特定的信号(表明条件满足了)。为了发信号,需要使用一个称作信号量的特殊变量。为通过信号量s传送信号,信号量的V操作采用进程可执行原语semSignal(s);为通过信号量s接收信号,信号量的P操作采用进程可执行原语semWait(s);如果相应的信号仍然没有发送,则进程被阻塞或睡眠,直到发送完为止。

ucore中信号量参照上述原理描述,建立在开关中断机制和wait queue的基础上进行了具体实现。信号量的数据结构定义如下:

[cpp] view plaincopy

typedef struct {

int value; //信号量的当前值

wait_queue_t wait_queue; //信号量对应的等待队列

} semaphore_t;

在ucore中最重要的信号量操作是P操作函数down(semaphore_t *sem)和V操作函数

up(semaphore_t *sem)。但这两个函数的具体实现是__down(semaphore_t *sem, uint32_t wait_state) 函数和__up(semaphore_t *sem, uint32_t wait_state)函数,二者的具体实现描述如下:

①__down(semaphore_t *sem, uint32_t wait_state, timer_t *timer):具体实现信号量的P操作,首先关掉中断,然后判断当前信号量的value是否大于0。如果是>0,则表明可以获得信号量,故让value减一,并打开中断返回即可;如果不是>0,则表明无法获得信号量,故需要将当前的进程加入到等待队列中,并打开中断,然后运行调度器选择另外一个进程执行。如果被V操作唤醒,则把自身关联的wait从等待队列中删除(此过程需要先关中断,完成后开中断)。具体实现如下所示:

static __noinline uint32_t __down(semaphore_t *sem, uint32_t wait_state) {

bool intr_flag;

local_intr_save(intr_flag);

if (sem->value > 0) {

sem->value --;

local_intr_restore(intr_flag);

return 0;

}

wait_t __wait, *wait = &__wait;

wait_current_set(&(sem->wait_queue), wait, wait_state);//让wait与进程关联,且让当前进程关联的wait进入等待队列queue,当前进程睡眠

local_intr_restore(intr_flag);

schedule();

local_intr_save(intr_flag);//当被唤醒时

wait_current_del(&(sem->wait_queue), wait);

local_intr_restore(intr_flag);

if (wait->wakeup_flags != wait_state) {

return wait->wakeup_flags;

}

return 0;

}

②__up(semaphore_t *sem, uint32_t wait_state):具体实现信号量的V操作,首先关中断,如果信号量对应的wait queue中没有进程在等待,直接把信号量的value加一,然后开中断返回;如果有进程在等待且进程等待的原因是semophore设置的,则调用wakeup_wait函数将waitqueue中等待的第一个wait删除,且把此wait关联的进程唤醒,最后开中断返回。具体实现如下所示:

static __noinline void __up(semaphore_t *sem, uint32_t wait_state) {

bool intr_flag;

local_intr_save(intr_flag);

{

wait_t *wait;

if ((wait = wait_queue_first(&(sem->wait_queue))) == NULL) {//取得wait queue的第一个wait

sem->value ++;

}

else {

wakeup_wait(&(sem->wait_queue), wait, wait_state, 1);

}

}

local_intr_restore(intr_flag);

}

我们可以看出信号量的计数器value具有有如下性质:

value>0,表示共享资源的空闲数

vlaue<0,表示该信号量的等待队列里的进程数

value=0,表示等待队列为空

2.请在实验报告中给出给用户态进程/线程提供信号量机制的设计方案,并比较说明给内核

级提供信号量机制的异同

答:用户级进程/线程可能涉及到多个内核临界区,因此用户级的信号量可能是一个由若干内核级的信号量组成的结构体struct。相应的signal和wait操作应该对结构体中的每个内核级信号量单独执行相同或不同的操作。

练习2: 完成内核级条件变量和基于内核级条件变量的哲学家就餐问题(需要编码)

首先掌握管程机制,然后基于信号量实现完成条件变量实现,然后用管程机制实现哲学家就餐问题的解决方案(基于条件变量)。

执行:make grade。如果所显示的应用程序检测都输出ok,则基本正确。如果只是某程序过不去,比如matrix.c,则可执行make run-matrix命令来单独调试它。大致执行结果可看附录。(使用的是qemu-1.0.1)。

●请在实验报告中给出内核级条件变量的设计描述,并说其大致执行流流程。

●请在实验报告中给出给用户态进程/线程提供条件变量机制的设计方案,并比较说明给

内核级提供条件变量机制的异同。

程序代码:①基于信号量实现完成条件变量实现

void cond_signal (condvar_t *cvp) {

//LAB7 EXERCISE1: YOUR CODE

cprintf("cond_signal begin: cvp %x, cvp->count %d, cvp->owner->next_count %d\n", cvp, cvp->count, cvp->owner->next_count);

/*

* cond_signal(cv) {

* if(cv.count>0) {

* mt.next_count ++;

* signal(cv.sem);

* wait(mt.next);

* mt.next_count--;

* }

* }

*/

if(cvp->count>0) {//当前存在执行cond_wait而睡眠的进程

cvp->owner->next_count ++;//睡眠的进程总个数加一

up(&(cvp->sem));//唤醒等待在cv.sem上睡眠的进程

down(&(cvp->owner->next));//自己需要睡眠

cvp->owner->next_count --;//睡醒后等待此条件的睡眠进程个数减一

}

cprintf("cond_signal end: cvp %x, cvp->count %d, cvp->owner->next_count %d\n", cvp,

cvp->count, cvp->owner->next_count);

}

void cond_wait (condvar_t *cvp) {

//LAB7 EXERCISE1: YOUR CODE

cprintf("cond_wait begin: cvp %x, cvp->count %d, cvp->owner->next_count %d\n", cvp,

cvp->count, cvp->owner->next_count);

/*

* cv.count ++;

* if(mt.next_count>0)

* signal(mt.next)

* else

* signal(mt.mutex);

* wait(cv.sem);

* cv.count --;

*/

cvp->count++;//需要睡眠的进程个数加一

if(cvp->owner->next_count > 0)

up(&(cvp->owner->next));//唤醒进程链表中的下一个进程

else

up(&(cvp->owner->mutex));//唤醒睡在monitor.mutex上的进程

down(&(cvp->sem));//将此进程等待

cvp->count --;//睡醒后等待此条件的睡眠进程个数减一

cprintf("cond_wait end: cvp %x, cvp->count %d, cvp->owner->next_count %d\n", cvp, cvp->count, cvp->owner->next_count);

}

②用管程机制实现哲学家就餐问题的解决方案

void phi_take_forks_condvar(int i) {

down(&(mtp->mutex));//进入临界区

//--------into routine in monitor--------------

// LAB7 EXERCISE1: YOUR CODE

// I am hungry

// try to get fork

// I am hungry

state_condvar[i]=HUNGRY; //记录下哲学家i饥饿的事实

// try to get fork

phi_test_condvar(i);

while (state_condvar[i] != EATING) {

cprintf("phi_take_forks_condvar: %d didn't get fork and will wait\n",i);

cond_wait(&mtp->cv[i]);//如果得不到叉子就阻塞

}

//--------leave routine in monitor--------------

if(mtp->next_count>0)//如果阻塞则唤醒

up(&(mtp->next));

else

up(&(mtp->mutex));//离开临界区

}

void phi_put_forks_condvar(int i) {

down(&(mtp->mutex));//进入临界区

//--------into routine in monitor--------------

// LAB7 EXERCISE1: YOUR CODE

// I ate over

// test left and right neighbors

// I ate over

state_condvar[i]=THINKING;//哲学家进餐结束

// test left and right neighbors

phi_test_condvar(LEFT);//看一下左邻居现在是否能进餐

phi_test_condvar(RIGHT);//看一下右邻居现在是否能进餐

//--------leave routine in monitor--------------

if(mtp->next_count>0)//如果存在阻塞则唤醒 up(&(mtp->next));

else

up(&(mtp->mutex));//离开临界区

}

思考题:1.请在实验报告中给出内核级条件变量的设计描述,并说其大致执行流流程。答:管程中的条件变量的数据结构condvar_t定义如下:

typedef struct condvar{

semaphore_t sem; // the sem semaphore is used t o down the waiting proc, and the signaling proc should up the waiting proc

int count;// the number of waiters on condvar

monitor_t * owner; // the owner(monitor) of this condvar

} condvar_t;

ucore设计实现了条件变量wait_cv操作和signal_cv操作对应的具体函数,即cond_wait函数和cond_signal函数,此外还有cond_init初始化函数

cond_wait的原理描述

cv.count++;

if(monitor.next_count > 0)

sem_signal(monitor.next);

else

sem_signal(monitor.mutex);

sem_wait(cv.sem);

cv.count --;

cond_signal的原理描述

if( cv.count > 0) {

monitor.next_count ++;

sem_signal(cv.sem);

sem_wait(monitor.next);

monitor.next_count -- ;

}

为了让整个管程正常运行,还需在管程中的每个函数的入口和出口增加相关操作,即:function (…)

{

sem.wait(monitor.mutex);

the real body of function;

if(monitor.next_count > 0)

sem_signal(monitor.next);

Else

sem_signal(monitor.mutex);

}

2.请在实验报告中给出给用户态进程/线程提供条件变量机制的设计方案,并比较说明给内核级提供条件变量机制的异同。

答:用户级进程/线程可能涉及到多个内核临界区,因此用户级的条件变量可能是一个由若干内核级的条件变量组成的结构体struct。相应的signal和wait操作应该对结构体中的每个内核级条件变量单独执行相同或不同的操作。

二.实验分析与总结

互斥是指某一资源同时只允许一个进程对其进行访问,具有唯一性和排它性,但互斥不用限制进程对资源的访问顺序,即访问可以是无序的。同步是指在进程间的执行必须严格按照规定的某种先后次序来运行,即访问是有序的,这种先后次序取决于要系统完成的任务需求。在进程写资源情况下,进程间要求满足互斥条件。在进程读资源情况下,可允许多个进程同时访问资源。

实验七提供了多种同步互斥手段,包括中断控制、等待队列、信号量、管程机制(包含条件变量设计)等,并基于信号量实现了哲学家问题的执行过程。而练习是要求用管程机制实现哲学家问题的执行过程。在实现信号量机制和管程机制时,需要让无法进入临界区的进程睡眠,为此在ucore中设计了等待队列。当进程无法进入临界区(即无法获得信号量)时,可让进程进入等待队列,这时的进程处于等待状态(也可称为阻塞状态),从而会让实验六中的调度器选择一个处于就绪状态(即RUNNABLE STATE)的进程,进行进程切换,让新进程有机会占用CPU执行,从而让整个系统的运行更加高效。

本次实验涉及的知识点有:计时器的原理和实现、同步互斥的底层支撑、信号量、管程和条件变量。

计时器的原理和实现:在传统的操作系统中,计时器是其中一个基础而重要的功能.它提供了基于时间事件的调度机制。在ucore中,timer中断(irq0)给操作系统提供了有一定间隔的时间事件,操作系统将其作为基本的调度和计时单位(我们记两次时间中断之间的时间间隔为一个时间片,timer splice)。

基于此时间单位,操作系统得以向上提供基于时间点的事件,并实现基于时间长度的等待和唤醒机制。在每个时钟中断发生时,操作系统产生对应的时间事件。应用程序或者操作系统的其他组件可以以此来构建更复杂和高级的调度。

同步互斥的底层支撑:①开关中断:根据操作系统原理的知识,我们知道如果没有在硬件级

保证读内存-修改值-写回内存的原子性,我们只能通过复杂的软件来实现同步互斥操作。但由于有开关中断和test_and_set_bit等原子操作机器指令的存在,使得我们在实现同步互斥原语上可以大大简化。在atomic.c文件中实现的test_and_set_bit等原子操作。②等待队列:到目前为止,我们的实验中,用户进程或内核线程还没有睡眠的支持机制。在课程中提到用户进程或内核线程可以转入休眠状态以等待某个特定事件,当该事件发生时这些进程能够被再次唤醒。内核实现这一功能的一个底层支撑机制就是等待队列(wait queue),等待队列和每一个事件(睡眠结束、时钟到达、任务完成、资源可用等)联系起来。需要等待事件的进程在转入休眠状态后插入到等待队列中。当事件发生之后,内核遍历相应等待队列,唤醒休眠的用户进程或内核线程,并设置其状态为就绪状态(runnable state),并将该进程从等待队列中清除。ucore在kern/sync/{ wait.h, wait.c }中实现了wait结构和wait queue结构以及相关函数),这是实现ucore中的信号量机制和条件变量机制的基础,进入wait queue的进程会被设为睡眠状态,直到他们被唤醒。

信号量:信号量是一种同步互斥机制的实现,普遍存在于现在的各种操作系统内核里。相对于spinlock的应用对象,信号量的应用对象是在临界区中运行的时间较长的进程。等待信号量的进程需要睡眠来减少占用CPU 的开销。

管程和条件变量:引入了管程是为了将对共享资源的所有访问及其所需要的同步操作集中并封装起来。Hansan为管程所下的定义:“一个管程定义了一个数据结构和能为并发进程所执行(在该数据结构上)的一组操作,这组操作能同步进程和改变管程中的数据”。有上述定义可知,管程由四部分组成:

●管程内部的共享变量;

●管程内部的条件变量;

●管程内部并发执行的进程;

●对局部于管程内部的共享数据设置初始值的语句。

局限在管程中的数据结构,只能被局限在管程的操作过程所访问,任何管程之外的操作过程都不能访问它;另一方面,局限在管程中的操作过程也主要访问管程内的数据结构。由此可见,管程相当于一个隔离区,它把共享变量和对它进行操作的若干个过程围了起来,所有进程要访问临界资源时,都必须经过管程才能进入,而管程每次只允许一个进程进入管程,从而需要确保进程之间互斥。

数据结构实验7实验报告

暨南大学本科实验报告专用纸 课程名称数据结构实验成绩评定 实验项目名称习题6.51 指导教师孙世良 实验项目编号实验7 实验项目类型实验地点实验楼三楼机房学生姓名林炜哲学号2013053005 学院电气信息学院系专业软件工程 实验时间年月日午~月日午温度℃湿度(一)实验目的 熟悉和理解二叉树的结构特性; 熟悉二叉树的各种存储结构的特点及适用范围; 掌握遍历二叉树的各种操作及其实现方式。 (二)实验内容和要求 编写一个算法,输出以二叉树表示的算术表达式,若该表达式中含有括号,则应该在输出时添上。 (三)主要仪器设备 实验环境:Microsoft Visual Studio 2012 (四)源程序 #include #include typedef struct bitnode{ char data; struct bitnode *lchild,*rchild; }bitnode,*bitree; void create(bitree &T){ char t; t=getchar();

if(t==' ') T=NULL; else{ if( !( T=(bitnode*)malloc(sizeof(bitnode)) ) ) exit(0); T->data=t; create(T->lchild); create(T->rchild); } } void middle_order(bitree &Node){ if(Node != NULL){ if((Node->data=='*'||Node->data=='/')&&(Node->lchild->data=='+'|| Node->lchild->data=='-')) printf("( "); middle_order(Node->lchild); if((Node->data=='*'||Node->data=='/')&&(Node->lchild->data=='+'|| Node->lchild->data=='-')) printf(") "); printf("%c ", Node->data); if((Node->data=='*'||Node->data=='/')&&(Node->rchild->data=='+'|| Node->rchild->data=='-')) printf("( "); middle_order(Node->rchild); if((Node->data=='*'||Node->data=='/')&&(Node->rchild->data=='+'|| Node->rchild->data=='-')) printf(") "); } } int main() { bitree y; printf("以先序遍历的方式输入二叉树:"); create(y); printf("输出表达式:"); middle_order(y); return 0; } (五)数据调试

计算机网络实验报告 答案讲解

计算机网络实验报告 专业计算机科学与技术 班级计102 学号109074057 姓名王徽军 组号一组D 指导教师毛绪纹 安徽工业大学计算机学院 二○一二年十二月

目录 实验总体说明 (3) 实验一以太网帧的构成 (3) 实验三路由信息协议RIP (8) 实验四传输控制协议TCP (10) 实验五邮件协议SMTP、POP3、IMAP (12) 实验六超文本传输协议HTTP (14)

实验总体说明 1.实验总体目标 配合计算机网络课程的教学,加强学生对计算机网络知识(TCP/IP协议)的深刻理解,培养学生的实际操作能力。 2.实验环境 计算机网络协议仿真实验室: 实验环境:网络协议仿真教学系统(通用版)一套 硬件设备:服务器,中心控制设备,组控设备,PC机若干台 操作系统:Windows 2003服务器版 3.实验总体要求 ●按照各项实验内容做实验,记录各种数据包信息,包括操作、观察、记录、分析, 通过操作和观察获得直观印象,从获得的数据中分析网络协议的工作原理; ●每项实验均提交实验报告,实验报告的内容可参照实验的具体要求,但总体上应包 括以下内容:实验准备情况,实验记录,实验结果分析,算法描述,程序段,实验过程中遇到的问题以及对思考问题的解答等,实验目的、实验原理、实验步骤不需要写入实验报告中。 实验一以太网帧的构成 实验时间:_____________ 成绩:________________ 实验角色:_____________ 同组者姓名:______________________________

练习一:领略真实的MAC帧 q....U 00000010: 85 48 D2 78 62 13 47 24 58 25 00 00 00 00 00 00 .H襵b.G$X%...... 00000020: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................ 00000030: 00 00 00 00 00 00 00 00 00 00 00 00 ............ 练习二:理解MAC地址的作用 ●记录实验结果 表1-3实验结果 本机MAC地址源MAC地址目的MAC地址是否收到,为什么 主机B 8C89A5-7570BB 8C89A5-757113 8C89A5-7570C1 是,主机A与主机B接在同一共享模块 主机D 8C89A5-771A47 8C89A5-757113 8C89A5-7570C1 是,主机C与主机D接在同一共享模块 主机E 8C89A5-757110 无无否,与主机A、C都不在同一共享模块 主机 F 8C89A5-7715F8 无无否,与主机A、C都不在同一共享模块 练习三:编辑并发送MAC广播帧 ●结合练习三的实验结果,简述FFFFFF-FFFFFF作为目的MAC地址的作用。 答:该地址为广播地址,作用是完成一对多的通信方式,即一个数据帧可发送给同一网段内的所有节点。 练习四:编辑并发送LLC帧 ●实验结果 帧类型发送序号N(S)接受序号N(R) LLC 001F 0 ●简述“类型和长度”字段的两种含义 答:一是如果字段的值小于1518,它就是长度字段,用于定义下面数据字段的长度;二是如果字段的值大于1536,用于定义一个封装在帧中的PDU分组的类型。 思考问题: 1.为什么IEEE802标准将数据链路层分割为MAC子层和LLC子层? 答:出于厂商们在商业上的激烈竞争,IEEE的802委员会未能形成一个统一的、最佳的局域网标准,而是被迫制定了几个不同标准,如802.4令牌总线网、802.5令牌环网等。为了使数据链路层能更好地适应多种局域网标准,802委员会就将局域网的数据链路层拆成两个子层,即逻辑链路控制

数据库上机实验7实验报告

上机实验七——视图的建立及操作 一、实习目的: 掌握创建、删除、和查询视图的方法,验证可更新视图和不可更新视图。 二、实习准备: 1.复习第三章3.6节视图 2. 完成习题三第16题中的各项操作的SQL语句。 3.了解可更新视图和不课更新视图 三、实习内容:验证习题三第16题中的各项操作的SQL语句。 ①建立01311班选修了1号课程的学生视图Stu_01311_1 CREATE VIEW Stu_01311_1 AS SELECT * FROM Grade WHERE Cno='1'AND Sno in( SELECT Sno FROM Student WHERE Clno='01311') WITH CHECK OPTION ②建立01311班选修了1号课程并且成绩不及格的学生视图Stu_01311_2 CREATE VIEW Stu_01311_2 AS SELECT * FROM Grade

WHERE Cno='1'AND Gmark<60 AND Sno in( SELECT Sno FROM Student WHERE Clno='01311') WITH CHECK OPTION ③建立视图Stu_year,由学生学号、姓名、出生年份组成 CREATE VIEW Stu_year AS SELECT Sno,Sname,year=2001-Sage FROM Student ④查询1990年以后出生的学生姓名 SELECT Sname FROM Student WHERE 2001-Sage<1990; ⑤查询01311班选修了1号课程并且成绩不及格的学生的学号、姓名、出生年份SELECT Sno,Sname,2014-Sage FROM Student WHERE Clno=01311 AND EXISTS(

C实验报告7参考答案

《高级语言程序设计》实验报告班级:学号:姓名:成绩: 实验7 函数程序设计 一、实验目的 1.掌握函数定义的方法。 2.掌握函数实参与形参的传递方式。 3.掌握函数的嵌套调用和递归调用的方法。 4.了解全局变量和局部变量、动态变量、静态变量的概念和使用方法。 二、实验内容 1 (1)下列sub函数的功能为:将s所指字符串的反序和正序进行连接形成一个新串放在t所指的数组中。例如,当s所指字符串的内容为“ABCD”时,t所指数组中的内容为“DCBAABCD”。纠正程序中存在的错误,以实现其功能。程序以文件名存盘。 #include <> #include <> void sub( char s[], char t[] ) { int i, d; d=strlen( s ); for( i=1; i< d ; i++ ) for( i=0; i< d ; i++ ) t[i]=s[d-1-i] ; for( i=0; i #include<> #define ARR_SIZE = 80; #define ARR_SIZE 80 void Inverse(char str[]) void Inverse(char str[]);

材料力学实验报告答案

篇一:材料力学实验报告答案 材料力学实验报告 评分标准拉伸实验报告 一、实验目的(1分) 1. 测定低碳钢的强度指标(σs、σb)和塑性指标(δ、ψ)。 2. 测定铸铁的强度极限σb。 3. 观察拉伸实验过程中的各种现象,绘制拉伸曲线(p-δl曲线)。 4. 比较低碳钢与铸铁的力学特性。 二、实验设备(1分) 机器型号名称电子万能试验机 测量尺寸的量具名称游标卡尺精度 0.02 mm 三、实验数据(2分) 四、实验结果处理(4分) ?s??b? psa0pba0 =300mpa 左右=420mpa 左右 =20~30%左右=60~75%左右 ?? l1?l0 ?100% l0a0?a1 ?100% a0 ?= 五、回答下列问题(2分,每题0.5分) 1、画出(两种材料)试件破坏后的简图。略 2、画出拉伸曲线图。 3、试比较低碳钢和铸铁拉伸时的力学性质。 低碳钢在拉伸时有明显的弹性阶段、屈服阶段、强化阶段和局部变形阶段,而铸铁没有明显的这四个阶段。 4、材料和直径相同而长短不同的试件,其延伸率是否相同?为什么?相同 延伸率是衡量材料塑性的指标,与构件的尺寸无关。压缩实验报告 一、实验目的(1分) 1. 测定压缩时铸铁的强度极限σb。 2. 观察铸铁在压缩时的变形和破坏现象,并分析原因。 二、实验设备(1分) 机器型号名称电子万能试验机(0.5分) 测量尺寸的量具名称游标卡尺精度 0.02 mm (0.5分) 三、实验数据(1分)四、实验结果处理(2分) ?b? pb =740mpaa0 左右 五、回答下列思考题(3分) 1.画出(两种材料)实验前后的试件形状。略 2. 绘出两种材料的压缩曲线。略 3. 为什么在压缩实验时要加球形承垫?

数据库实验报告记录7

数据库实验报告记录7

————————————————————————————————作者:————————————————————————————————日期:

《数据库原理》实验报告 题目:实验七事务与并发控制学号姓名班级日期Xxxx Xx Xxx 2016.11.10 一. 实验内容、步骤以及结果 假设学校允许学生将银行卡和校园卡进行绑定,在 student 数据库中有如下的基本表,其中校园卡编号 cardid 即为学生的学号: icbc_card(studcardid,icbcid,balance) //校园卡 ID,工行卡 ID,银行卡余额 campus_card(studcardid,balance) //校园卡 ID,校园卡余额数据创建的代码:

1.编写一个事务处理(begin tran)实现如下的操作:某学号为20150032的学生要从银 行卡中转账200元到校园卡中,若中间出现故障则进行rollback。(15分) 修改后的结果: 2.针对本题的数据库和表,分别用具体的例子展现四种数据不一致问题:丢失修改、 读脏数据、不可重复读和幻读(删除和插入)。(40分,每种数据不一致10分) 丢失修改: --事务一: begin tran declare @balance decimal(10,2) select @balance=balance from campus_card where studcardid='20150033' waitfor delay'00:00:05' set @balance=@balance-10 update campus_card set balance=@balance where studcardid='20150033' commit tran go select balance from campus_card where studcardid='20150033'

实验报告答案

实验2:MIPS指令系统和MIPS体系结构 一.实验目的 (1)了解和熟悉指令级模拟器 (2)熟悉掌握MIPSsim模拟器的操作和使用方法 (3)熟悉MIPS指令系统及其特点,加深对MIPS指令操作语义的理解 (4)熟悉MIPS体系结构 二. 实验内容和步骤 首先要阅读MIPSsim模拟器的使用方法,然后了解MIPSsim的指令系统和汇编语言。(1)、启动MIPSsim(用鼠标双击MIPSsim.exe)。 (2)、选择“配置”->“流水方式”选项,使模拟器工作在非流水方式。 (3)、参照使用说明,熟悉MIPSsim模拟器的操作和使用方法。 可以先载入一个样例程序(在本模拟器所在的文件夹下的“样例程序”文件夹中),然后分别以单步执行一条指令、执行多条指令、连续执行、设置断点等的方式运行程序,观察程序的执行情况,观察CPU中寄存器和存储器的内容的变化。 (4)、选择“文件”->“载入程序”选项,加载样例程序 alltest.asm,然后查看“代码”窗口,查看程序所在的位置(起始地址为0x00000000)。 (5)、查看“寄存器”窗口PC寄存器的值:[PC]=0x00000000。 (6)、执行load和store指令,步骤如下: 1)单步执行一条指令(F7)。 2)下一条指令地址为0x00000004,是一条有 (有,无)符号载入字节 (字节,半字,字)指令。 3)单步执行一条指令(F7)。 4)查看R1的值,[R1]= 0xFFFFFFFFFFFFFF80 。 5)下一条指令地址为0x00000008,是一条有 (有,无)符号载入字 (字节,半字,字)指令。 6)单步执行1条指令。 7)查看R1的值,[R1]=0x0000000000000080 。 8)下一条指令地址为0x0000000C ,是一条无 (有,无)符号载入字节 (字节,半字,字)指令。 9)单步执行1条指令。 10)查看R1的值,[R1]= 0x0000000000000080 。 11)单步执行1条指令。 12)下一条指令地址为0x00000014 ,是一条保存字 (字节,半字,字)指令。 13)单步执行一条指令。

matlab实验报告

MATLAB 数学实验报告 指导老师: 班级: 小组成员: 时间:201_/_/_

Matlab 第二次实验报告 小组成员: 1 题目:实验四,MATLAB 选择结构与应用实验 目的:掌握if 选择结构与程序流程控制,重点掌握break,return , pause语句的应用。 问题:问题1:验证“哥德巴赫猜想” ,即:任何一个正偶数(n>=6)均可表示为两个质数的和。要求编制一个函数程序,输入一个正偶数,返回两个质数的和。 问题分析:由用户输入一个大于6 的偶数,由input 语句实现。由if 判断语句判断是否输入的数据符合条件。再引用质数判断函数来找出两个质数,再向屏幕输出两个质数即可。 编程:function [z1,z2]=gede(n); n=input('please input n')

if n<6 disp('data error'); return end if mod(n,2)==0 for i=2:n/2 k=0; for j=2:sqrt(i) if mod(i,j)==0 k=k+1; end end for j=2:sqrt(n-i) if mod(n-i,j)==0 k=k+1; end end if k==0 fprintf('two numbers are') fprintf('%.0f,%.0f',i,n- i) break end

end end 结果分析 如上图,用户输入了大于6的偶数返回两个质数5和31,通过 不断试验,即可验证哥德巴赫猜想。 纪录:if判断语句与for循环语句联合嵌套使用可使程序结构更加明晰,更快的解决问题。 2题目:实验四,MATLAB选择结构与应用实验 目的:用matlab联系生活实际,解决一些生活中常见的实际问 题。

实验报告七-键盘扫描及显示实验

信息工程学院实验报告 课程名称:微机原理与接口技术 实验项目名称:键盘扫描及显示实验 实验时间:2017.1.6 班级: 姓名: 学号: 一、实 验 目 的 1. 掌握 8254 的工作方式及应用编程。 2. 掌握 8254 典型应用电路的接法。 二、实 验 设 备 了解键盘扫描及数码显示的基本原理,熟悉 8255 的编程。 三、实 验 原 理 将 8255 单元与键盘及数码管显示单元连接,编写实验程序,扫描键盘输入,并将扫描结果送数码管 显示。键盘采用 4×4 键盘,每个数码管显示值可为 0~F 共 16 个数。实验具体内容如下:将键盘进行 编号,记作 0~F ,当按下其中一个按键时,将该按键对应的编号在一个数码管上显示出来,当再按下一 个按键时,便将这个按键的编号在下一个数码管上显示出来,数码管上可以显示最近 6 次按下的按键编 号。 键盘及数码管显示单元电路图如图 7-1 和 7-2 所示。8255 键盘及显示实验参考接线图如图 7-3 所 示。 图 7-1 键盘及数码管显示单元 4×4 键盘矩阵电路图 成 绩: 指导老师(签名):

图7-2 键盘及数码管显示单元 6 组数码管电路图 图7-3 8255 键盘扫描及数码管显示实验线路图 四、实验内容与步骤 1. 实验接线图如图7-3 所示,按图连接实验线路图。

图7-4 8255 键盘扫描及数码管显示实验实物连接图 2.运行Tdpit 集成操作软件,根据实验内容,编写实验程序,编译、链接。 图7-5 8255 键盘扫描及数码管显示实验程序编辑界面 3. 运行程序,按下按键,观察数码管的显示,验证程序功能。 五、实验结果及分析: 1. 运行程序,按下按键,观察数码管的显示。

大学物理实验报告答案大全(实验数据)

U 2 I 2 大学物理实验报告答案大全(实验数据及思考题答案全包括) 伏安法测电阻 实验目的 (1) 利用伏安法测电阻。 (2) 验证欧姆定律。 (3) 学会间接测量量不确定度的计算;进一步掌握有效数字的概念。 实验方法原理 根据欧姆定律, R = U ,如测得 U 和 I 则可计算出 R 。值得注意的是,本实验待测电阻有两只, 一个阻值相对较大,一个较小,因此测量时必须采用安培表内接和外接两个方式,以减小测量误差。 实验装置 待测电阻两只,0~5mA 电流表 1 只,0-5V 电压表 1 只,0~50mA 电流表 1 只,0~10V 电压表一 只,滑线变阻器 1 只,DF1730SB3A 稳压源 1 台。 实验步骤 本实验为简单设计性实验,实验线路、数据记录表格和具体实验步骤应由学生自行设计。必要时,可提示学 生参照第 2 章中的第 2.4 一节的有关内容。分压电路是必须要使用的,并作具体提示。 (1) 根据相应的电路图对电阻进行测量,记录 U 值和 I 值。对每一个电阻测量 3 次。 (2) 计算各次测量结果。如多次测量值相差不大,可取其平均值作为测量结果。 (3) 如果同一电阻多次测量结果相差很大,应分析原因并重新测量。 数据处理 (1) 由 U = U max ? 1.5% ,得到 U 1 = 0.15V , U 2 = 0.075V ; (2) 由 I = I max ? 1.5% ,得到 I 1 = 0.075mA , I 2 = 0.75mA ; (3) 再由 u R = R ( 3V ) + ( 3I ) ,求得 u R 1 = 9 ? 101 &, u R 2 = 1& ; (4) 结果表示 R 1 = (2.92 ± 0.09) ?10 3 &, R 2 = (44 ± 1)& 光栅衍射 实验目的 (1) 了解分光计的原理和构造。 (2) 学会分光计的调节和使用方法。 (3) 观测汞灯在可见光范围内几条光谱线的波长 实验方法原理

C实验报告7参考答案

《高级语言程序设计》实验报告班级:_________ 学号:_______ 姓名:_________ 成绩:_________ 实验7函数程序设计 一、实验目的 1 ?掌握函数定义的方法。 2. 掌握函数实参与形参的传递方式。 3. 掌握函数的嵌套调用和递归调用的方法。 4. 了解全局变量和局部变量、动态变量、静态变量的概念和使用方法。 二、实验内容 1.改错题(在程序中画出错误的语句,将修改后的语句完整地写在该语句的右边。|) (1)下列sub函数的功能为:将s所指字符串的反序和正序进行连接形成一个新串放 在t所指的数组中。例如,当s所指字符串的内容为“ ABCD时,t所指数组中的内容为“DCBAABCD纠正程序中存在的错误,以实现其功能。程序以文件名sy7_1.c存盘。 #i nclude #in clude void sub( char s[], char t[]) { int i, d; d=strle n( s ); for( i=1; i< d ; i++ ) for( i= 0; i< d ; i++ ) t[i]=s[d-1-i]; for( i=0; i #i nclude #defi ne ARR_SIZE = 80; #define ARR_SIZE 80

数据库实验七实验报告

一.实验目的 熟练掌握SQL Server中变量、数据类型和表达式的定义和使用,掌握Transact—SQL中常用系统函数的使用,掌握流程控制语句和结构化程序设计方法,掌握分行处理表中记录机制以及利用游标对数据进行查询、修改和删除的方法。 二.实验准备 1.物理准备:安装了SQL sever的计算机一台,连接服务器;2.实验指导书:《数据库技术与应用》蓝皮书; 3.理论准备:掌握以下基础知识: (1)T ransact—SQL中变量、数据类型和表达式的使用。 (2)T ransact—SQL中常用系统函数的使用。 (3)利用程序控制语句实现结构化程序设计。 (4)利用游标分行处理机制实现数据的定位、查询、修改和删除三.实验题目 (1)定义局部变量@max,@min接收学生表studinfo中的最大出生日期和最小出生日期的查询结果。 实验过程:编写Transact—SQL语句 declare @max char(30),@min char(30) select @max=max(出生日期) , @min=min(出生日期) from student_xuesheng select @max as 最大,@min as 最小 运行结果:

(2)在学生表studinfo中增加一个字段,利用系统函数与出生日期信息计算每个同学的年龄。 实验过程:编写Transact—SQL语句 分析:先增加年龄字段,再将函数运算之后的年龄添加进去 --alter table student_xuesheng --add 年龄 int --GO if exists(select 出生日期 from student_xuesheng where 出生日期 is not null) begin update student_xuesheng set 年龄=year(getdate())-year(出生日期) end 运行结果:

实验报告7-虚拟变量

2013-2014学年第 一 学期 实 验 报 告 实验课程名称 虚拟变量模型 专 业 班 级 资产评估1101 学生 学号 31105073 学 生 姓 名 方申慧 实验指导教师 董美双 编号:

实验名称多重共线性检验与修正指导老师董美双成绩 专业资产评估班级 1101 姓名方申慧学号 31105073 一、实验目的 目的:通过实验,理解并掌握虚拟变量模型的意义、建模的方法、虚拟变量引入的原则和技巧等。 要求:熟练掌握虚拟变量引入的加法方式和乘法方式,并正确解读和分析回归结果。 首先做例题8-10,按步骤分析季节性因素的影响;然后利用上证指数的数据分析股市周效应(周1-周5任选),或者自己收集数据按上面的步骤做一遍,把结果输出到word文档中。 步骤: 例题8-10 Dependent Variable: Y Method: Least Squares Date: 11/28/13 Time: 09:12 Sample: 1982:1 1988:4 Included observations: 28 C 2431.198 93.35790 26.04170 0.0000 T 48.95067 4.528524 10.80941 0.0000 D1 1388.091 103.3655 13.42896 0.0000 D2 201.8415 102.8683 1.962136 0.0620 D3 85.00647 102.5688 0.828775 0.4157 R-squared 0.945831 Mean dependent var 3559.718 Adjusted R-squared 0.936411 S.D. dependent var 760.2102 S.E. of regression 191.7016 Akaike info criterion 13.51019 Sum squared resid 845238.2 Schwarz criterion 13.74808

材料力学实验报告标准答案

力学实验报告 标准答案 长安大学力学实验教学中心 目录 一、拉伸实验 (2) 二、压缩实验 (4)

三、拉压弹性模量E测定实验 (6) 四、低碳钢剪切弹性模量G测定实验 (8) 五、扭转破坏实验 (10) 六、纯弯曲梁正应力实验 (12) 七、弯扭组合变形时的主应力测定实验 (15) 八、压杆稳定实验 (18) 一、拉伸实验报告标准答案 问题讨论: 1、为何在拉伸试验中必须采用标准试件或比例试件,材料相同而长短不同的试 件延伸率是否相同? 答:拉伸实验中延伸率的大小与材料有关,同时与试件的标距长度有关.试件局部变形较大的断口部分,在不同长度的标距中所占比例也不同.因此拉伸试验中必须采用标准试件或比例试件,这样其有关性质才具可比性. 材料相同而长短不同的试件通常情况下延伸率是不同的(横截面面积与长度存在某种特殊比例关系除外). 2、分析比较两种材料在拉伸时的力学性能及断口特征. 答:试件在拉伸时铸铁延伸率小表现为脆性,低碳钢延伸率大表现为塑性;低碳钢具有屈服现象,铸铁无.低碳钢断口为直径缩小的杯锥状,且有450的剪切唇,

断口组织为暗灰色纤维状组织。铸铁断口为横断面,为闪光的结晶状组织。. 二、压缩实验报告标准答案 问题讨论: 1、分析铸铁试件压缩破坏的原因. 答:铸铁试件压缩破坏,其断口与轴线成45°~50°夹角,在断口位置剪应力已达到其抵抗的最大极限值,抗剪先于抗压达到极限,因而发生斜面剪切破坏。 2、低碳钢与铸铁在压缩时力学性质有何不同? 结构工程中怎样合理使用这 两类不同性质的材料? 答:低碳钢为塑性材料,抗压屈服极限与抗拉屈服极限相近,此时试件不会发生断裂,随荷载增加发生塑性形变;铸铁为脆性材料,抗压强度远大于抗拉强度,无屈服现象。压缩试验时,铸铁因达到剪切极限而被剪切破坏。 通过试验可以发现低碳钢材料塑性好,其抗剪能力弱于抗拉;抗拉与抗压相近。铸铁材料塑性差,其抗拉远小于抗压强度,抗剪优于抗拉低于抗压。 故在工程结构中塑性材料应用范围广,脆性材料最好处于受压状态,比如车床机座。 三、拉压弹性模量E测定试验报告 问题讨论: 1、试件的尺寸和形状对测定弹性模量有无影响?为什么? 答: 弹性模量是材料的固有性质,与试件的尺寸和形状无关。 2、逐级加载方法所求出的弹性模量与一次加载到最终值所求出的弹性模量是 否相同?为什么必须用逐级加载的方法测弹性模量? 答: 逐级加载方法所求出的弹性模量与一次加载到最终值所求出的弹性模量不相同,采用逐级加载方法所求出的弹性模量可降低误差,同时可以验证材料此时是否处于弹性状态,以保证实验结果的可靠性。 四、低碳钢剪切弹性模量G测定实验报告标准答案 问题讨论: 1、试验过程中,有时候在加砝码时,百分表指针不动,这是为什么?应采取什么 措施? 答:检查百分表是否接触测臂或超出百分表测量上限,应调整百分表位置。

实验七-实验报告

实验七:超声化学法制备纳米多孔氧化物及其电化学性能研究专业:材料物理姓名:许航学号:141190093 一、实验内容与目的 1、学习超声化学反应的基本原理,熟悉反应装置的构成; 2、通过与其他方法比较,了解超声化学法在多孔纳米材料制备方面的优缺点; 3、学习超声化学法制备多孔金属氧化物的实验步骤,了解多孔纳米材料的表征方法; 4、学习电化学工作原理,掌握电容测试方法,熟悉超级电容器常用的金属氧化物材料。 二、实验原理 超声化学主要源于声空化导致液体中微小气泡形成、振荡、生长收缩与崩裂及其引起的物理、化学效应。液体声空化是集中声场能量并迅速释放的过程,空化泡崩裂时,在极短时间和空化极小空间内,产生5000K以上的高温和约5.05×108Pa的高压,速度变化率高达1010K/s,并伴有强烈的冲击波和时速高达400km的微射流生成,使碰撞密度高达1.5kg/s;空化气泡的寿命约0.1μs,它在爆炸时释放出巨大的能量,冷却速率可达109K/s。这为一般条件下难以或不能实现的化学反应提供了一种特殊的环境。这些极端条件足以使有机物、无机物在空化气泡内发生化学键断裂、水相燃烧和热分解条件,促进非均相界面之间搅动和相界面的更新,极大提高非均相反应的速率,实现非均相反应物间的均匀混合,加速反应物和产物的扩散,促进固体新相的生成,并控制颗粒的尺寸和分布。通过将超声探头浸入反应溶液中就可将超声波引入到一个有良好控温范围的反应系统。利用超声来使反应体系中的物质得到充分的反应,从而制备出颗粒分布、大小尺寸均匀的纳米多孔氧化物。

三、实验数据及处理 1.循环伏安曲线 在恒定扫描速率下,伏安特性曲线为闭合曲线,且扫描速率越快,围成的图形面积越大。 2.恒流充放电电压-时间曲线 曲线包括充电和放电两个过程,设定电压从0V充到0.6V,再放电到0V。随着充电电流的增加,充放电总时间增长,曲线的峰点向时间增加的方向移动。

C实验报告7参考答案

《高级语言程序设计》实验报告 班级:___________ 学号:________ 姓名:____________ 成绩: ___________ 实验7函数程序设计 一、实验目的 1 ?掌握函数定义的方法。 2. 掌握函数实参与形参的传递方式。 3. 掌握函数的嵌套调用和递归调用的方法。 4. 了解全局变量和局部变量、动态变量、静态变量的概念和使用方法。 二、实验内容 1.改错题(在程序中画出错误的语句,将修改后的语句完整地写在该语句的右边。|) (1)下列sub函数的功能为:将s所指字符串的反序和正序进行连接形成一个新串放 在t所指的数组中。例如,当s所指字符串的内容为“ ABCD ”时,t所指数组中的内容为“DCBAABCD ”。纠正程序中存在的错误,以实现其功能。程序以文件名存盘。 #in elude <> #in elude <> void sub( char s[], char t[]) { int i, d; d=strle n( s ); for( i=1; i< d ; i++ ) for( i= 0; i< d ; i++ ) t[i]=s[d-1-i]; for( i=0; i #in clude<> #defi ne ARR_SIZE = 80; void In verse(char str[])#defi ne ARR_SIZE 80 void Inverse(char str[]);

材料力学实验报告标准答案

力学实验报告标准答案 长安大学力学实验教学中心

目录 一、拉伸实 验 (2) 二、压缩实 验 (4) 三、拉压弹性模量E测定实 验 (6) 四、低碳钢剪切弹性模量G测定实验 (8) 五、扭转破坏实验·························································

(10) 六、纯弯曲梁正应力实验 (12) 七、弯扭组合变形时的主应力测定实验 (15) 八、压杆稳定实验 (18)

一、拉伸实验报告标准答案 实验目的: 见教材。 实验仪器 见教材。 实验结果及数据处理: 例:(一)低碳钢试件 强度指标: P s =__22.1___KN 屈服应力 σs = P s /A __273.8___MP a P b =__33.2___KN 强度极限 σb = P b /A __411.3___MP a 塑性指标: 1L -L 100%L δ=?=伸长率 33.24 % 1 100%A A A ψ-=?=面积收缩率 68.40 % 低碳钢拉伸图:

(二)铸铁试件 试验前试验后最小平均直径d= 10.16 mm最小直径d= 10.15 mm 截面面积A= 81.03 mm2截面面积A1= 80.91 mm2计算长度L= 100 mm计算长度L1≈100 mm 试验前草图试验后草图 强度指标: 最大载荷P b =__14.4___ KN 强度极限σ b = P b / A = _177.7__ M P a 问题讨论: 1、为何在拉伸试验中必须采用标准试件或比例试件,材料相同而长短不同的 试件延伸率是否相同? 答:拉伸实验中延伸率的大小与材料有关,同时与试件的标距长度有关.试件局部变形较大的断口部分,在不同长度的标距中所占比例也不同.因此拉伸试验中必须采用标准试件或比例试件,这样其有关性质才具可比性. 材料相同而长短不同的试件通常情况下延伸率是不同的(横截面面积与长度存在某种特殊比例关系除外). 2、分析比较两种材料在拉伸时的力学性能及断口特征. 答:试件在拉伸时铸铁延伸率小表现为脆性,低碳钢延伸率大表现为塑性;低碳钢具有屈服现象,铸铁无.低碳钢断口为直径缩小的杯锥状,且有450的剪切

nachos实验七实验报告

nachos实验报告七 实验题目: Extension of AddrSpace 学号:201200301057 日期:2014-11-29 班级:计软12-3 姓名:高鹏辉 实验目的: 在了解了Nachos 装入并执行单个用户进程的情况后,我们就需要进一步完成用户内存空间的扩充以便多用户程序同时驻留内存,进而使多用户进程并发执行。 硬件环境: Mem:3.9G CPU:Intel? Core?2 Quad CPU Q9500 @ 2.83GHz × 4 Disk:15.5 GB 软件环境: System:ubuntu12.04LST i386 gcc: (Ubuntu 4.6.3-1ubuntu5) 4.6.3 nachos system 实验步骤: 要在Nachos中实现多用户程序同时驻留内存并发执行,首先涉及到Nachos的两个系统调用:Exec()和Exit()。这两个系统调用也是构造父子进程并发执行的基础。假设我们有以下两个用户程序:../test/exec.c和../test/halt.c ../test/halt.c 第65页 用户进程管理设计 1 #include "syscall.h" 2 int 3 main() 4 { 5 Halt() 6 } ../test/exec.c 1 #include "syscall.h" 2 int 3 main() 4 { 5 SpacId pid; 6 pid = Exec("../test/halt.noff");

7 Halt() 8 } 在文件../test/exec.c第5行上的语句Exec是一条Nachos的系统功能调用,它的功能为装入并执行以其参数为名的可执行文件,即创建一个新的用户进程。假设我们先执行../test/exec.noff 程序,则../test/exec.noff 会在它还没有执行结束时又装入并执行另外一个程序halt.noff,并与它同时驻留内存. pageTable[i].physicalPage=usermap-->Find();避免从头开始物理存储覆盖了前一个用户程序的内存内容 利用Nachos在../userprog/bitmap.h 中文件定义的Bitmap类。利用bitmap 记录和申请内存物理帧,使不同的程序装入到不同的物理空间中去,下面是对新的内存分配存储算法,改进了对多个用户程序的同时进驻内存的支持

材料力学实验报告答案

材料力学实验报告答案 Document serial number【NL89WT-NY98YT-NC8CB-NNUUT-NUT108】

材料力学实验报告 评分标准 拉伸实验报告 一、实验目的(1分) 1. 测定低碳钢的强度指标(σs、σb)和塑性指标(δ、 ψ)。 2. 测定铸铁的强度极限σb。 3. 观察拉伸实验过程中的各种现象,绘制拉伸曲线(P- ΔL曲线)。 4. 比较低碳钢与铸铁的力学特性。 二、实验设备(1分) 机器型号名称电子万能试验机 测量尺寸的量具名称游标卡尺精度0.02 mm 三、实验数据(2分)

四、实验结果处理 (4分) 0A P s s = σ =300MPa 左右 0 A P b b = σ =420MPa 左右 %10000 1?-= L L L δ =20~30%左右 %= 1000 1 0?-A A A ψ =60~75%左右 五、回答下列问题(2分,每题分) 1、画出(两种材料)试件破坏后的简图。 略 2、画出拉伸曲线图。 3、试比较低碳钢和铸铁拉伸时的力学性质。 低碳钢在拉伸时有明显的弹性阶段、屈服阶段、强化阶段和局部变形阶段,而铸铁没有明显的这四个阶段。 4、材料和直径相同而长短不同的试件,其延伸率是否相同为什么 相同 延伸率是衡量材料塑性的指标,与构件的尺寸无关。 压缩实验报告 一、实验目的(1分) 1. 测定压缩时铸铁的强度极限σb 。 2. 观察铸铁在压缩时的变形和破坏现象,并分析原因。

机器型号名称电子万能试验机 (分) 测量尺寸的量具名称 游标卡尺 精度 0.02 mm (分) 三、实验数据(1分) 四、实验结果处理 (2分) A P b b = σ =740MPa 左右 五、回答下列思考题(3分) 1.画出(两种材料)实验前后的试件形状。 略 2. 绘出两种材料的压缩曲线。 略 3. 为什么在压缩实验时要加球形承垫 当试件的两端稍有不平行时,利用试验机上的球形承垫自动调节,可保证压力通过试件的轴线。 4. 对压缩试件的尺寸有何要求为什么 试件承受压缩时,上下两端与试验机承垫之间产生很大的摩擦力,使试件两端的横向变形受阻,导致测得的抗压强度比实际偏高。试件越短,影响越明显。 若试件过长,容易产生失稳现象。 5. 铸铁的压缩破坏形式说明了什么 铸铁的抗剪能力低于抗压能力。 测定弹性模量E 实验报告 一、实验目的 (1分) 1. 测定常用金属材料的弹性模量E 二、实验设备 (1分) 机器型号名称 电子万能试验机 测量尺寸的量具名称 游标卡尺 精度 0.02 mm 引伸计标距 50 mm

实验七探究性实验报告—叶脉书签

实验日期 6 月 3 日第 1 组姓名陈博殷学号 073 成绩____________ 实验七探究性实验报告 一、实验题目 “制作叶脉书签” 二、实验主要步骤 1、选材:应选择叶脉粗壮丰富、叶质较厚、大小适中、叶面平整、叶脉的树叶。本实验选用白兰树叶、绿化芒树叶、美丽异木棉树叶、紫荆树叶、鸡蛋花树叶。 2、配液:将碱溶解在适量的水中,配制不同浓度、不同种类的碱液。将硫酸溶液配制到所需浓度。注意安全,千万不要将酸碱液溅到眼睛里。 3、加热:将配好的酸、碱液放在容器中加热。当加热到液体即将沸腾(80℃左右)时候将选好的叶子放入容器里,并不断搅拌。具体加热时间以叶肉容易被刷掉为度,一般在10分钟左右。(如果碱液浓度不大,或者所选的叶子较老则应延长加热时间。)可以过两三分钟取一片子出来观察,直至叶片变成褐色(或叶肉有脱落)。 4、清洗:在自来水水流下冲洗,洗去多余碱液、酸液。 5、刷除叶肉:将叶片放在玻璃板上,加入一层水,把牙刷打斜(与水平面大约成45度角),顺叶脉轻轻地刷净叶肉,刷时注意:只向一个方向刷(绝对不能来回刷),以免将叶脉刷坏。刷时先从背面开始,刷净背面再刷正面,主叶脉边沿处可用敲出法。刷洗干净后放到滤纸(或报纸)上晾干。如果是老树叶,则在刷洗的过程中,会有两层叶脉出现,这时只要将其中品质稍次的一片去除即可。 6、晾干:取出放在阴凉处风干。或者放在废旧书报中吸干。 7、着色:将风干到6 成的叶脉分别放在甲基橙溶液、紫色石蕊试液、品红溶液中着色,后晾干。建议夹在书中,这样既可以吸干水分,又可以成型。 三、实验现象描述与图片记录 1、探究不同酸碱液的腐蚀效果 2、探究不同浓度的NaOH溶液的腐蚀效果

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