ucore实验3实验报告

合集下载

化学需氧量的测定实验报告

化学需氧量的测定实验报告

化学需氧量的测定实验报告化学需氧量的测定实验报告引言:化学需氧量(Chemical Oxygen Demand,COD)是指水中可被氧化剂氧化的有机物质的总量,是评价水体有机污染程度的重要指标之一。

本实验旨在通过测定水样中的COD值,了解水体中有机物的含量,并探讨不同因素对COD值的影响。

实验方法:1. 实验仪器与试剂本实验使用的仪器有COD测定仪、电热水浴器等。

试剂包括硫酸钾、硫酸铜、硫酸亚铁、硫酸硝基苯、硫酸铬酸钾等。

2. 实验步骤(1)取适量水样,过滤除去杂质。

(2)将滤液加入COD测定仪中,加入适量硫酸钾,使溶液呈酸性。

(3)加入硫酸铜和硫酸亚铁,进行预处理反应。

(4)加入硫酸硝基苯,进行氧化反应。

(5)加入硫酸铬酸钾,进行消除余量氧化剂反应。

(6)将试管放入电热水浴器中,进行显色反应。

(7)使用COD测定仪读取溶液的吸光度值。

(8)根据标准曲线计算COD值。

结果与讨论:通过实验测定,得到了不同水样的COD值,并进行了统计和分析。

结果表明,不同水样的COD值存在差异,反映了水体中有机物的含量不同。

1. COD值与水体污染程度的关系COD值是评价水体污染程度的重要指标之一。

通常情况下,COD值越高,说明水体中的有机物含量越多,污染程度越严重。

因此,通过测定水样的COD值,可以评估水体的污染程度,并采取相应的措施进行治理。

2. COD值受环境因素的影响COD值的测定受到多种环境因素的影响,如温度、pH值、氧化剂的种类和浓度等。

实验中,我们可以通过改变这些因素的条件,观察COD值的变化情况,以了解它们对COD值的影响程度。

3. COD值的应用范围与局限性COD值广泛应用于环境监测、水处理、工业生产等领域。

它可以作为评估水体污染程度的指标,也可以用于监测废水处理效果。

然而,COD值只能反映水体中有机物的总量,并不能准确地区分不同种类的有机物。

因此,在实际应用中,我们还需要结合其他指标来综合评估水体的质量。

负反馈放大器实验报告

负反馈放大器实验报告

负反馈放大电路实验报告一、实验目的1、掌握负反馈四种基本组态的判断方法。

2、巩固学习负反馈放大器分析方法,加深对基本方程的理解。

3、加深理解负反馈对改善放大器性能的影响。

4、分析掌握影响负反馈电路稳定性的原因及消除方法。

二、仪器设备及备用元器件(1)实验仪器序号名称型号备注1 示波器2 数字万用表3 模拟实验板(2)实验材料序号名称说明备注1 三极管2N5551;9012;90132 电阻见附件3 电容见附件三、实验原理与说明负反馈是电子线路中非常重要的技术之一,负反馈虽然降低了电压放大倍数,但是它能够提高电路的电压放大倍数稳定性,改变输入电阻、输出电阻,减小非线性失真以及展宽通频带。

因此,实际应用中,几乎所有的放大器都具有负反馈电路部分。

本实验中的电路由两级共射放大电路组成,在电路中引入了电压串联负反馈,构成负反馈放大电路。

这样电路既可以稳定输出电压,又可以提高输入电阻。

图3.1 电压串联负反馈放大电路加负反馈后,闭环电压放大倍数:AF A A uuf +=1(3.1)深度负反馈时:FA uf 1=(3.2)电压放大倍数的相对变化量:uu ufuf A dAAF A dA ⋅+=11(3.3)通频带:BW AF BW f )1(+≈(3.4)当引入电压串联负反馈时,闭环输入电阻:i f i R AF R )1(+=(3.5)闭环输出电阻:AFR R oof +=1(3.6)改变反馈深度(调整f R 的大小),可使放大器性能指标得到不同程度的改变。

四、实验要求和任务1、实验前的准备 ⑴ 设备材料的保障(1)检查实验仪器(2)根据自行设计的电路图选择实验器件 (3)检测器件和导线(4)根据自行设计的电路图插接电路⑵ 电路设计如图3.1(完整的计算过程及数据记录)① 确定放大器工作电源(如DC12V ,功率5W 等) ② 确定放大器直流参数(如I CQ1=0.6mA;I CQ2=1mA 等) 例如:在I CQ1=0.6mA 前提下,③ 确定放大器主要参数(如负载为3k Ω;开环电压放大倍数:大于400等)。

多媒体实验3

多媒体实验3

广州大学学生实验报告开课学院及实验室:电子楼316日期:2014年3月31日学院机械与电气工程年级、专业、班电信112姓名孔志荣学号1107400052实验课程名称多媒体实验成绩实验项目名称实验三空域滤波增强指导老师高星辉实验目的空域滤波就是在图像空间中借助模板对图像进行邻域操作。

输出图像中每一个像素的取值都是通过模板对输入像素相应的邻域内的像素值进行计算得到的。

通过本实验,掌握空域滤波方法进行图像增强的理论基础,并在MATLAB中实现多种空域滤波器及其增强算法,观察增强效果并进行总结。

1.1实验内容(1)利用二个均值滤波模板(3×3和9×9)对一幅图象进行平滑,验证模板尺寸对图象的模糊效果的影响。

(2)利用平滑滤波模板对一幅有噪图象(椒盐噪声)进行滤波,检验两种滤波模板(分别使用一个3×3的线性均值滤波器和一个非线性3×3中值滤波器)对噪声的滤波效果。

(3)对图像分别使用最大值滤波器和最小值滤波器进行滤波,观察对比滤波效果。

(4)选择一幅灰度图象,利用拉普拉斯算子对其进行锐化滤波,观察增强效果。

1.2实验原理(1)使用conv2()函数实现对图像和滤波器的二维卷积,实现空域滤波。

函数说明:conv2(f, h):f为图像,h为滤波器。

(2)对被椒盐噪声污染的图像,使用中值滤波器可以取得非常有效的增强效果。

中值滤波使用medfilt2()函数。

函数说明:medfilt2(f,[m n]):f是一幅图像,[m n]为求中值的邻域大小,默认值为3×3。

(3)使用ordfilt2()函数,实现对图像最大值、最小值等非线性滤波。

函数说明:ordfilt2(f, order, domain):对图像进行非线性滤波。

f是一幅图像;order为将指定邻域元素从小到大排序后,用第order个元素代替模板中心元素;domain定义模板大小,为m×n矩阵。

诺顿定理、电容及三相电路 电路分析实验报告

诺顿定理、电容及三相电路  电路分析实验报告

实验三诺顿定理、电容及三相电路一、实验目的:1.用实验验证诺顿定理,加深对诺顿定理的印象;2.用实验仿真电容在交流电下的工作情况,得到电压有效值变化情况;3.验证星形线电压和相电压、线电流和相电流的关系。

二、实验原理:1.含源线性单口网络N,就其单口来看,可以等效为一个电流源和一个电阻并联组成,电流源的电流等于该网络N的短路电流,该电阻即为该网络独立元置零时的等效电阻。

2.电容通交阻直,即交流电可以通过电容,而直流电不可以。

但当接通电源的瞬间,电容的电压的有效值为电源电压;随着时间流逝,电容电路稳定下来,电压的瞬时值为正弦图像。

3.三相电路的线电流和相电流、线电压和相电压的关系;三、实验过程:1.诺顿定理如图连接下面两电路可以通过求开路电压,等效电阻的方式,求得与原电路图等效的诺顿图,然后进行验证。

验证结果,如图所示,电流表的示数由电路误差引起,可以忽略,故诺顿定理得证。

2.电容如图连接电路图示波器波形刚开始给电容充电时电压波形电容电路稳定后的电压波形通过波形图,可以看出,随着时间流逝,电容的电压瞬时值仍是变化的,成正弦变化,但电压有效值在随着时间而减小。

3.三项电路A.如图连接电路当开关在Y时当开关不在Y时B.测得实验数据(1).当开关Y使电阻工作时,使电路处于对称工作状态,在下表中,记录线电压(V)相电压(V)相电流(mA)U A’B’U B’C’U C’A’U A’N’U B’N’U C’N’I A’N’I B’N’I C’N’381.1 381.0 381.0 220.0 220.0 220.0 220.9 220.9 220.8表中,记录各电压表和各电流表的读数。

负载对称时:381.1AB U V =,'220.0AN U V = '381.1 1.732220.0AB AN U U == AB U 、'AN U 之间近似满足关系:'3BN BC U U =同理:BC U 、'BN U 和CA U 、'CN U 之间的关系也基本满足'3BN BC U U = '3CN CA U U =同时220.9A I mA =,220.9B I mA =,220.8C I mA =;A I 、B I 和C I 之间的关系也基本满足:C B A I I I ==即相电流相等。

操作系统lab8

操作系统lab8

HUNAN UNIVERSITY 操作系统实验报告题目:LAB8目录一、实验目的 (3)二、实验内容 (3)三、练习题 (3)练习0 (3)练习1 (4)练习2 (10)四、实验结果 (13)一、实验目的通过完成本次实验,希望能达到以下目标了解基本的文件系统系统调用的实现方法;了解一个基于索引节点组织方式的Simple FS文件系统的设计与实现;了解文件系统抽象层-VFS的设计与实现;二、实验内容实验七完成了在内核中的同步互斥实验。

本次实验涉及的是文件系统,通过分析了解ucore 文件系统的总体架构设计,完善读写文件操作,从新实现基于文件系统的执行程序机制(即改写do_execve),从而可以完成执行存储在磁盘上的文件和实现文件读写等功能三、练习练习0:填写已有实验本实验依赖实验1/2/3/4/5/6/7。

请把你做的实验1/2/3/4/5/6/7的代码填入本实验中代码中有“LAB1”/“LAB2”/“LAB3”/“LAB4”/“LAB5”/“LAB6”/“LAB7”的注释相应部分。

并确保编译通过。

注意:为了能够正确执行lab8的测试应用程序,可能需对已完成的实验1/2/3/4/5/6/7的代码进行进一步改进将其与lab7文件对比,得到缺失文件如下:proc.cdefault_pmm.cpmm.cswap_fifo.cvmm.ctrap.csche.cmonitor.check_sync.c补全后不需要在7的基础上改了练习1: 完成读文件操作的实现(需要编码)首先了解打开文件的处理流程,然后参考本实验后续的文件读写操作的过程分析,编写在sfs_inode.c中sfs_io_nolock读文件中数据的实现代码。

请在实验报告中给出设计实现”UNIX的PIPE机制“的概要设方案,鼓励给出详细设计方案要求是首先了解打开文件的处理流程,然后参考本实验后续的文件读写操作的过程分析,编写在sfs_inode.c中sfs_io_nolock读文件中数据的实现代码。

清华大学操作系统lab1_实验报告

清华大学操作系统lab1_实验报告

实验1:系统软件启动过程练习1:(1)操作系统镜像文件ucore.img 是如何一步一步生成的?在命令行中输入“make V=”1、首先把C的源代码进行编译成为.o文件,也就是目标文件(红色方框内)2、ld命令将这些目标文件转变成可执行文件,比如此处的bootblock.out(绿色方框内)3、dd命令把bootloder放到ucore.img count的虚拟硬盘之中4、还生成了两个软件,一个是Bootloader,另一个是kernel。

(2)一个被系统认为是符合规范的硬盘主引导扇区的特征:在/lab1/tools/sign.c中我们可以了解到规范的硬盘引导扇区的大小为512字节,硬盘结束标志位55AA练习2:(1)从CPU 加电后执行的第一条指令开始,单步跟踪BIOS 的执行改写Makefile文件lab1-mon: $(UCOREIMG)$(V)$(TERMINAL) -e "$(QEMU) -S -s -d in_asm -D $(BINDIR)/q.log -monitor stdio -hda $< -serial null"$(V)sleep 2$(V)$(TERMINAL) -e "gdb -q -x tools/lab1init"在调用qemu时增加-d in_asm -D q.log参数,便可以将运行的汇编指令保存在q.log 中。

(2)在初始化位置0x7c00 设置实地址断点,测试断点正常。

在tools/gdbinit结尾加上set architecture i8086b *0x7c00 //在0x7c00处设置断点。

continuex /2i $pc //显示当前eip处的汇编指令(3)将执行的汇编代码与bootasm.S 和bootblock.asm 进行比较,看看二者是否一致。

Notice:在q.log中进入BIOS之后的跳转地址与实际应跳转地址不相符,汇编代码也与bootasm.S 和bootblock.asm不相同。

化学需氧实验报告

化学需氧实验报告

一、实验目的1. 了解化学需氧量(COD)的概念和测定方法。

2. 掌握重铬酸钾法测定化学需氧量的操作步骤。

3. 学习利用化学需氧量评价水质污染程度。

二、实验原理化学需氧量(COD)是指在一定条件下,用化学氧化剂处理水样时,所需的氧化剂量,是衡量水体有机物污染程度的重要指标。

重铬酸钾法是测定化学需氧量的常用方法,其原理如下:在酸性条件下,重铬酸钾(K2Cr2O7)与水样中的有机物发生氧化还原反应,生成三价铬离子(Cr3+),反应式如下:K2Cr2O7 + 8H2O + 3CnH2nO → 2Cr3+ + 3nCO2 + 2K+ + 16H+反应过程中,重铬酸钾被还原为三价铬离子,其还原过程中消耗的氧化剂量与水样中有机物的含量成正比。

三、实验器材与试剂1. 器材:酸式滴定管、锥形瓶、移液管、电子天平、烘箱、水浴锅、磁力搅拌器、玻璃棒、滴定台等。

2. 试剂:重铬酸钾标准溶液(0.025mol/L)、硫酸(1+1)、硫酸银溶液、硫酸汞溶液、硫酸亚铁铵溶液、邻菲啰啉指示剂等。

四、实验步骤1. 配制重铬酸钾标准溶液:准确称取0.4903g重铬酸钾,溶于少量水中,移入1000mL容量瓶中,用水定容至刻度线,摇匀。

此溶液为0.025mol/L的重铬酸钾标准溶液。

2. 配制硫酸银溶液:准确称取0.7495g硫酸银,溶于少量水中,移入1000mL容量瓶中,用水定容至刻度线,摇匀。

3. 配制硫酸汞溶液:准确称取0.17g硫酸汞,溶于少量水中,移入1000mL容量瓶中,用水定容至刻度线,摇匀。

4. 配制硫酸亚铁铵溶液:准确称取5.00g硫酸亚铁铵,溶于少量水中,移入1000mL容量瓶中,用水定容至刻度线,摇匀。

5. 配制邻菲啰啉指示剂:称取0.1g邻菲啰啉,溶于少量无水乙醇中,移入1000mL容量瓶中,用水定容至刻度线,摇匀。

6. 水样预处理:取一定量的水样,加入少量硫酸,使pH值调至1.0~2.0,加热煮沸,静置冷却。

操作系统lab2实验报告

操作系统lab2实验报告
运行结果四实验体会本实验是关于物理内存管理主要从物理内存和建立页表两个方面设计实验首先了解如何发现系统中的物理内存然后了解如何建立对物理内存的初步管理最后了解页表相关的操作总体来说还是有难度尤其后面需要编程的内容需要很好理解各个文件的代码参考答案进行分析才能更好的理解实验内涵通过实验也能深入理解段页式内存管理机制对上课的内容有了更深理解体会
二、目的
1.理解基于段页式内存地址的转换机制;
2.理解页表的建立和使用方法;
3.理解物理内存的管理方法。
三、实验设计思想和练习题
练习0:填写已有实验
使用eclipse中的diff/merge工具将实验1的代码填入本实验中代码中有“LAB1”的注释相应部分。
练习1:实现first-fit连续物理内存分配算法(需要编程)
list_entry:双向链表指针,指向空闲的物理页;
nr_free:记录当前空闲页的个数的无符号整形变量。
(2)连续物理内存分配思路:
物理内存页管理器顺着双向链表进行搜索空闲内存区域,直到找到一个足够大的空闲区域,这是一种速度很快的算法,因为它尽可能少地搜索链表。如果空闲区域的大小和申请分配的大小正好一样,则把这个空闲区域分配出去,成功返回;否则将该空闲区分为两部分,一部分区域与申请分配的大小相等,把它分配出去,剩下的一部分区域形成新的空闲区。其释放内存的设计思路是把这块区域重新放回双向链表中。
(2)如果找到,获得指向分配的页,重新设置标志位,从空闲链表中删除此页;
(3)判断空闲块大小是否合适;
(4)如果合适,不操作;如果不合适,分割页块;
ห้องสมุดไป่ตู้(5)计算剩余空闲页个数,返回分配的页块地址。
B.具体实现:
注:
算法改进空间:第一页重置标志位操作被注释后,依然可以编译运行。

ucos实验报告

ucos实验报告

ucos实验报告UCOS实验报告引言:UCOS(MicroC/OS-II)是一款轻量级的嵌入式实时操作系统,广泛应用于各种嵌入式设备中。

本篇实验报告将对UCOS的相关实验进行总结和分析,以期对UCOS的特性和应用有更深入的了解。

一、实验目的本次实验的目的是通过搭建UCOS实验环境,学习UCOS的基本概念、原理和使用方法,进一步掌握嵌入式系统的开发和调试技术。

二、实验内容1. UCOS的安装和配置:首先,我们需要下载UCOS的源代码,并将其编译成可执行文件。

然后,根据实验要求配置UCOS的参数,如任务的优先级、堆栈大小等。

2. UCOS任务的创建和管理:在UCOS中,任务是系统的基本执行单元。

我们需要编写任务函数,并通过调用UCOS提供的API函数创建和管理任务。

这样,我们就可以实现多个任务之间的并发执行。

3. UCOS的时间管理:UCOS提供了一套时间管理机制,可以实现任务的定时调度和时间延迟等功能。

我们需要学习如何使用UCOS的时间管理功能,并在实验中进行验证。

4. UCOS的同步与通信:在多任务系统中,任务之间需要进行同步和通信,以实现数据的共享和协调。

UCOS提供了多种同步和通信机制,如信号量、邮箱等。

我们需要学习这些机制的使用方法,并进行相应的实验验证。

5. UCOS的错误处理:在实际应用中,嵌入式系统可能会遇到各种错误和异常情况。

UCOS提供了丰富的错误处理机制,我们需要学习如何使用这些机制来处理错误和异常。

三、实验结果与分析通过对UCOS的实验,我们获得了以下结果和分析:1. UCOS具有良好的可移植性和可扩展性,适用于不同的嵌入式平台和应用场景。

2. UCOS的任务调度算法采用优先级抢占式调度,可以实现任务的实时性和响应性。

3. UCOS的时间管理功能能够满足实时系统对时间约束的要求,提供了精确的时间延迟和定时调度功能。

4. UCOS的同步与通信机制可以实现任务之间的协作和数据共享,提高系统的并发性和效率。

ucore-LAB1实验报告范文

ucore-LAB1实验报告范文

ucore-LAB1实验报告范文实验目的:操作系统是一个软件,也需要通过某种机制加载并运行它。

在这里我们将通过另外一个更加简单的软件-bootloader来完成这些工作。

为此,我们需要完成一个能够切换到某86的保护模式并显示字符的bootloader,为启动操作系统ucore做准备。

lab1提供了一个非常小的bootloader和ucoreOS,整个bootloader执行代码小于512个字节,这样才能放到硬盘的主引导扇区中。

通过分析和实现这个bootloader和ucoreOS,通过分析和实现这个bootloader和ucoreOS,我们可以了解到:基于分段机制的存储管理设备管理的基本概念PC启动bootloader的过程bootloader的文件组成编译运行bootloader的过程调试bootloader的方法ucoreOS的启动过程在汇编级了解栈的结构和处理过程中断处理机制通过串口/并口/CGA输出字符的方法实验内容:一.练习练习1:理解通过make生成执行文件的过程。

1.ucore.img是如何一步一步生成的?(需要比较详细地解释Makefile中每一条相关命令和命令参数的含义,以及说明命令导致的结果)答:Makefile按照如下步骤生成ucore.img(lab1/bin下的ucore.img):①为每一个源文件(.c和.S文件)产生一个描述其依赖关系的makefile文件,以.d为后缀。

即对于一个源文件“NAME.c”,对应的这个makefile文件为“NAME.d”。

包括分别生成ign.c、bootmain.c、bootam.S的makefile依赖文件ign.d、bootmain.d、bootam.d,具体执行的命令如下:mkdir-pobj/ign/toolgcc-Itool/-g-Wall-O2-MMtool/ign.c-MT\obj/ign/tool/ign.dmkdir-pobj/bootgcc-Iboot/-fno-builtin-Wall-ggdb-m32-notdinc-fno-tack-protector-Ilib/-O-notdinc-MMboot/bootmain.c-MT\gcc-Iboot/-fno-builtin-Wall-ggdb-m32-notdinc-fno-tack-protector-Ilib/-O-notdinc-MMboot/bootam.S-MT\gcc重要的编译参数:-I指定搜索系统头文件的目录,可以重复使用多个该选项指定多个目录-Wall显示所有的警告消息-O2优化(级别为2)-m32指明目标代码32位-O对生成的二进制代码进行尺寸上的优化-ggdb提供编译信息-notdinc只为头文件寻找-I选项指定的目录-fno-builtin除非利用\进行引用,否则不识别所有内建函数-fno-tack-protector不检测缓存溢出②编译源文件,只生成目标文件但不链接。

CSE-COA-LAB-003_M(实验三)

CSE-COA-LAB-003_M(实验三)

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42计算机组成实验指导书-LAB31 2 3 4 5 6 7 8 9101112131415161718192021222324252627282930313233343536373839404142 1. O VERVIEW1.1 实验名称简单的类MIPS单周期处理器实现 – 控制器,ALU1.2 实验目的1.理解CPU控制器,ALU的原理1.3 实验范围本次实验将覆盖以下范围1.ISE的使用2.Spartan-3E实验板的使用3.使用Verilog HDL进行逻辑设计4.CPU控制器的实现5.ALU的实现1.4 实验预计时间120~150分钟1.5 实验报告与验收办法需提交纸质报告,实验完毕需验收登记1.6 注意事项1. 本实验的逻辑设计工具为Xilinx ISE13.4,但不仅限于此,学生可以使用自己喜欢的逻辑设计工具,如Snyplify等。

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 3940 41 422. 新建工程 2.1 实验描述2.1.1 新建工程1. 启动ISE 13.4。

2. 选择File > New Project… 出现New Project Wizard 。

3. Project Name 填写lab3,选择工程Project Location,Top-level Source Type 选择HDL 。

点击Next 。

4. Device Properties 中各属性填写如下: Product Category: ALL1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42Family: Spartan3E Device: XC3S500E Package: FG320 Speed: -4Synthesis Tool: XST(VHDL/Verilog)Simulator: ISim (VHDL/Verilog) ,也可用Modelsim 仿真。

ucore-lab2实验报告

ucore-lab2实验报告

Lab2 实验报告任务一:根据代码中的提示完成get_pte函数在一级页表中查找二级页表:pde_t *pdepage=&pgdir[PDX(la)];如果二级页表不存在,即:(*pdepage & PTE_P)==0;再看是否需要创建,如果需要创建,那么申请一页新的物理页:page = alloc_page() 然后设置映射标志:set_page_ref(p, 1);清零:uintptr_t pa = KADDR(page2pa(page));memset(pa, 0, PGSIZE);设置用户权限:*pdepage = page2pa(p) | PTE_USER;如果已经存在了,那么可以直接返回它的物理地址:return &((pte_t*)KADDR(PDE_ADDR(*pdepage)))[PTX(la)]任务二:把page_rmovepte函数补全,仔细阅读page_insert函数了解映射过程,以及函数上面的注释来完成这个练习释放一个二级页表首先要看看它是否还映射到了其他页上,如果有映射,那么就不能释放。

这个判断的函数在pmm.h中有定义:static inline intpage_ref_dec(struct Page *page) {return atomic_sub_return(&(page->ref), 1);}也就是将映射变量减一:page_ref_dec(page),观察返回值,如果为0,那么就说明pte没有再映射到其他页,可以释放:if (page_ref_dec(p) == 0)free_pages(p, 1);同时每次释放或添加页的时候都要更新一次TLB表:tlb_invalidate(pgdir, la)。

任务三:实现page_pgtable_items函数根据提示情况可知:table是要查的页表、left---right是需要查找的表项范围、left_store------right_store是连续权限相同的表项的范围、start是开始查找的位置要查找相同选项的页,采取的算法是从start开始从左到右,*left_store = start;找到第一个有效页(table[start] & PTE_P) != 0然后观察其权限并记录:table[start] & PTE_USER继续往下找连续的相同权限的页,找到第一个权限不同的页时,以其为右边界(*right_store = start)即可。

高频C电容三点式振荡器实验报告

高频C电容三点式振荡器实验报告

天津电子信息职业技术学院电子技术系高频电子线路实验通信S15-38张凯实验8-3 LC电容三点式振荡器1.实验目的(1)掌握LC电容三点式振荡器的电路组成与工作原理,掌握其振荡频率f0的计算与测量方法。

(2)了解负载电阻RL的值对频率稳定度f/f0的影响。

(3)掌握反馈系数F=U f/U0=-X2/X1=-C1/C2不同时及静态工作电流I EQ对振荡器起振及输出电压振幅U om的影响。

2.实验仪器及设备双踪示波器、频率针、数字万用表、高频电路试验箱、实验板、连接导线若干3.实验电路4.实验步骤(1)检查静态工作点1)接好12V电源,注意电源极性不能接反。

2)反馈电容C2不接3)设R E=1KΩ,IE=UE/RE。

改变电位器RP,测得晶体管VT得发射极电压UE,UE可连续变化,记下U E得最小值、最大值,计算IE值,同时测得U B、U C的值。

将测得数据填入表8-8分析晶体管是否工作在放大区。

表8-8 静态工作点电压、电流值(2)振荡频率与振荡幅度的测试实验条件:I EQ=2mA、C1=120P F、C2=680P F、R L=110KΩ。

1)改变C T电容,当它分别为50P F、100P F、150P F时,频率计接输出端,测量振荡器的振荡频率。

记录相应的频率f0值,填入表8-9.改变C T电容,当它分别为50P F、100P F、150P F时,用示波器测量相应振荡器输出电压峰峰值Uop-p,将测试的数据填入表8-9表8-9 振荡频率、震荡幅度与CT的关系(3)测试当C1、C2不同时,起振点、振幅与电流I EQ的关系1)取C1=100P F,C2=1200P F,C T=100P F,R L=110KΩ,调节电位器RP使IEQ分别为表8-10所示各值,用示波器测量输出电压峰-峰值U OP-P,并将其填入表8-10中。

表8-10振荡幅度与电流I EQ的关系2)取C1=120P F,C2=680P F,C T=100P F,R L=110KΩ,调节电位器RP使IEQ分别为表8-10所示各值,用示波器测量输出电压峰-峰值U OP-P,并将其填入表8-11中。

实验三 存储器实验

实验三 存储器实验

实验三存储器实验一、实验目的(1)初步了角存储器EM的工作原理。

(2)掌握存储器EM的操作步骤。

二、实验要求利用COP2000实验仪上的K16..K23开关做为DBUS的数据,其它开关做为控制信号,将地址数据写入存储器EM中,并读出。

三、实验说明EM原理图存储器EM由一片6116RAM构成,通过一片74HC245与数据总线相连。

存储器EM的地址可选择由PC或MAR提供。

存储器EM的数据输出直接接到指令总线IBUS,指令总线IBUS的数据还可以来自一片74HC245。

当ICOE为0时,这片74HC245输出中断指令B8。

四、实验过程(1)连接线表:连接信号孔接入孔作用有效电平1 J2座J3座将K23-K16接入DBUS[7:0]2 IREN K6 IR, uPC写允许低电平有效3 PCOE K5 PC输出地址低电平有效4 MAROE K4 MAR输出地址低电平有效5 MAREN K3 MAR写允许低电平有效6 EMEN K2 存储器与数据总线相连低电平有效7 EMRD K1 存储器读允许低电平有效8 EMWR K0 存储器写允许低电平有效9 PCCK CLOCK PC工作脉冲上升沿打入10 MARCK CLOCK MAR工作脉冲上升沿打入11 EMCK CLOCK 写脉冲上升沿打入12 IRCK CLOCK IR, uPC工作脉冲上升沿打入(2)实验数据:实验1:PC/MAR输出地址选择置控制信号为:K5 (PCOE)K4(MAROE)地址总线红色地址输出指示灯0 1 PC输出地址PC地址输出指示灯亮1 0 MAR输出地址MAR地址输出指示灯亮1 1 地址总线浮空0 0 错误, PC及MAR同时输出PC及MAR地址输出指示灯亮以下存贮器EM实验均由MAR提供地址实验2:存储器EM写实验(1)将地址0写入MAR二进制开关K23-K16用于DBUS[7:0]的数据输入,置数据00HK23 K22 K21 K20 K19 K18 K17 K160 0 0 0 0 0 0 0 置控制信号为:K6 (IREN)K5(PCOE)K4(MAROE)K3(MAREN)K2(EMEN)K1(EMRD)K0(EMWR)1 1 1 0 1 1 1 按CLOCK键, 将地址0写入MAR将地址55H写入EM[0]二进制开关K23-K16用于DBUS[7:0]的数据输入,置数据55HK23 K22 K21 K20 K19 K18 K17 K160 1 0 1 0 1 0 1 置控制信号为:K6 (IREN)K5(PCOE)K4(MAROE)K3(MAREN)K2(EMEN)K1(EMRD)K0(EMWR)1 1 0 1 0 1 0 按CLOCK键, 将地址55H写入EM[0](2)将地址1写入MAR二进制开关K23-K16用于DBUS[7:0]的数据输入,置01HK23 K22 K21 K20 K19 K18 K17 K160 0 0 0 0 0 0 1置控制信号为:K6 (IREN)K5(PCOE)K4(MAROE)K3(MAREN)K2(EMEN)K1(EMRD)K0(EMWR)1 1 1 0 1 1 1 按CLOCK键, 将地址1写入MAR将地址11H写入EM[1]二进制开关K23-K16用于DBUS[7:0]的数据输入,置数据11HK23 K22 K21 K20 K19 K18 K17 K160 0 0 1 0 0 0 1 置控制信号为:K6 (IREN)K5(PCOE)K4(MAROE)K3(MAREN)K2(EMEN)K1(EMRD)K0(EMWR)1 1 0 1 0 1 0 按CLOCK键, 将地址11H写入EM[1](2)将地址3写入MAR二进制开关K23-K16用于DBUS[7:0]的数据输入,置数据03HK23 K22 K21 K20 K19 K18 K17 K160 0 0 0 0 0 1 1 置控制信号为:K6 (IREN)K5(PCOE)K4(MAROE)K3(MAREN)K2(EMEN)K1(EMRD)K0(EMWR)1 1 1 0 1 1 1 按CLOCK键, 将地址3写入MAR将地址33H写入EM[3]二进制开关K23-K16用于DBUS[7:0]的数据输入,置数据33HK23 K22 K21 K20 K19 K18 K17 K160 0 1 1 0 0 1 1 置控制信号为:K6 (IREN)K5(PCOE)K4(MAROE)K3(MAREN)K2(EMEN)K1(EMRD)K0(EMWR)1 1 1 1 0 1 0按CLOCK键, 将地址33H写入EM[3]实验3:存储器EM读实验(1)将地址0写入MAR二进制开关K23-K16用于DBUS[7:0]的数据输入,置数据00HK23 K22 K21 K20 K19 K18 K17 K160 0 0 0 0 0 0 0 置控制信号为:(IREN) (PCOE) (MAROE) (MAREN) (EMEN) (EMRD) (EMWR)1 1 1 0 1 1 1按CLOCK键, 将地址0写入MAR读EM[0]置控制信号为:K6 (IREN)K5(PCOE)K4(MAROE)K3(MAREN)K2(EMEN)K1(EMRD)K0(EMWR)1 1 0 1 0 0 1 EM[0]被读出: 55H(2)将地址1写入MAR二进制开关K23-K16用于DBUS[7:0]的数据输入,置数据01HK23 K22 K21 K20 K19 K18 K17 K160 0 0 0 0 0 0 1 置控制信号为:K6 (IREN)K5(PCOE)K4(MAROE)K3(MAREN)K2(EMEN)K1(EMRD)K0(EMWR)1 1 1 0 1 1 1 按CLOCK键, 将地址1写入MAR读EM[0]置控制信号为:K6 (IREN)K5(PCOE)K4(MAROE)K3(MAREN)K2(EMEN)K1(EMRD)K0(EMWR)1 1 0 1 0 0 1 EM[0]被读出: 11H(3)将地址3写入MAR二进制开关K23-K16用于DBUS[7:0]的数据输入,置数据03HK23 K22 K21 K20 K19 K18 K17 K160 0 0 0 0 0 1 1 置控制信号为:K6 (IREN)K5(PCOE)K4(MAROE)K3(MAREN)K2(EMEN)K1(EMRD)K0(EMWR)1 1 1 0 1 1 1 按CLOCK键, 将地址3写入MAR读EM[0]置控制信号为:(IREN) (PCOE) (MAROE) (MAREN) (EMEN) (EMRD) (EMWR)1 1 0 1 0 0 1 EM[0]被读出: 33H实验4:存储器打入IR指令寄存器/uPC实验(1)将地址0写入MAR二进制开关K23-K16用于DBUS[7:0]的数据输入,置数据00HK23 K22 K21 K20 K19 K18 K17 K160 0 0 0 0 0 0 0置控制信号为:K6 (IREN)K5(PCOE)K4(MAROE)K3(MAREN)K2(EMEN)K1(EMRD)K0(EMWR)1 1 1 0 1 1 1 按CLOCK键, 将地址0写入MAR读EM[0],写入IR及uPC置控制信号为:K6 (IREN)K5(PCOE)K4(MAROE)K3(MAREN)K2(EMEN)K1(EMRD)K0(EMWR)0 1 0 1 0 0 1 EM[0]被读出: 55H按CLOCK键, 将EM[0]写入IR及uPC, IR = 55H, uPC=54H(2)将地址1写入MAR二进制开关K23-K16用于DBUS[7:0]的数据输入,置数据01HK23 K22 K21 K20 K19 K18 K17 K160 0 0 0 0 0 0 1 置控制信号为:K6 (IREN)K5(PCOE)K4(MAROE)K3(MAREN)K2(EMEN)K1(EMRD)K0(EMWR)1 1 1 0 1 1 1 按CLOCK键, 将地址1写入MAR读EM[1],写入IR及uPC置控制信号为:K6 (IREN)K5(PCOE)K4(MAROE)K3(MAREN)K2(EMEN)K1(EMRD)K0(EMWR)0 1 0 1 0 0 1 EM[0]被读出: 11H按CLOCK键, 将EM[1]写入IR及uPC, IR = 11H, uPC=10H(3)将地址3写入MAR二进制开关K23-K16用于DBUS[7:0]的数据输入,置数据03HK23 K22 K21 K20 K19 K18 K17 K160 0 0 0 0 0 1 1 置控制信号为:K6 (IREN)K5(PCOE)K4(MAROE)K3(MAREN)K2(EMEN)K1(EMRD)K0(EMWR)1 1 1 0 1 1 1 按CLOCK键, 将地址3写入MAR读EM[3],写入IR及uPC置控制信号为:K6 (IREN)K5(PCOE)K4(MAROE)K3(MAREN)K2(EMEN)K1(EMRD)K0(EMWR)0 1 0 1 0 0 1EM[0]被读出: 11H按CLOCK键, 将EM[3]写入IR及uPC, IR = 33H, uPC=32H五、实验感想由本学期学的组成原理的理论知识,我明白了存储器的定义以及原理和作用。

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.请在实验报告中给出内核级信号量的设计描述,并说其大致执行流流程。

ucore实验3实验报告

ucore实验3实验报告

LAB3实验报告实验目的:●了解虚拟内存的Page Fault异常处理实现●了解页替换算法在操作系统中的实现实验内容:本次实验是在实验二的基础上,借助于页表机制和实验一中涉及的中断异常处理机制,完成Page F ault异常处理和FIFO页替换算法的实现,结合磁盘提供的缓存空间,从而能够支持虚存管理,提供一个比实际物理内存空间“更大”的虚拟内存空间给系统使用。

这个实验与实际操作系统中的实现比较起来要简单,不过需要了解实验一和实验二的具体实现。

实际操作系统系统中的虚拟内存管理设计与实现是相当复杂的,涉及到与进程管理系统、文件系统等的交叉访问。

如果大家有余力,可以尝试完成扩展练习,实现extended clock页替换算法。

一.练习练习0:填写已有实验本实验依赖实验1/2。

请把你做的实验1/2的代码填入本实验中代码中有“LAB1”,“LAB2”的注释相应部分。

练习1:给未被映射的地址映射上物理页完成do_pgfault(mm/vmm.c)函数,给未被映射的地址映射上物理页。

设置访问权限的时候需要参考页面所在VMA的权限,同时需要注意映射物理页时需要操作内存控制结构所指定的页表,而不是内核的页表。

注意:在LAB2 EXERCISE 1处填写代码。

执行make qemu后,如果通过check_pgfault函数的测试后,会有“check_pgfault() succeeded!”的输出,表示练习1基本正确。

请在实验报告中简要说明你的设计实现过程。

请回答如下问题:●请描述页目录项(Pag Director Entry)和页表(Page Table Entry)中组成部分对ucore实现页替换算法的潜在用处。

●如果ucore的缺页服务例程在执行过程中访问内存,出现了页访问异常,请问硬件要做哪些事情?问题分析:当启动分页机制以后,如果一条指令或数据的虚拟地址所对应的物理页不在内存中,或者访问权限不够,那么就会产生页错误异常。

库仑滴定法测维生素C药片中的抗坏血酸含量实验报告

库仑滴定法测维生素C药片中的抗坏血酸含量实验报告

库仑滴定法测维生素C药片中的抗坏血酸含量摘要:库仑滴定是由电解产生的滴定剂来滴定待测物质的一种电化学分析法。

本实验是以冰醋酸与0.3mol/L的KBr溶液等体积混合作为电解液,电解产生的Br2来测定维生素C药片中的抗坏血酸的含量。

具有实验误差小,操作简单,快速、准确的优点。

关键词:库仑滴定法维生素C抗坏血酸双铂电极电流指示法前言维生素C是人体不可缺少的营养物质,它能参与机体的一系列代谢。

适量摄入维生素C 对人们的身体健康有举足轻重的作用,所以研究药品及果蔬类中维生素C含量的测定方法有一定的应用价值。

目前测量维生素C含量的方法有光度法、碘量法等,光度法设备昂贵,不经济,碘量法中碘易变质、挥发、难保存。

而库仑滴定法准确灵敏,不需配制标准溶液或使用基准物质,省却了费时的洗涤、干燥、称量等步骤,并且能测定微量、痕量组分。

本法在特定的电解液中,以一定强度的恒电流进行电解,电极反应的产物作为滴定剂与物质定量作用,被测物反应完毕后,库仑仪自动指示终点,并直接读出产生滴定剂所消耗的电量,然后根据法拉第定律计算出被测物质的含量。

[1] 本实验是以电解产生的Br2来测定抗坏血酸的含量。

抗坏血酸与溴能发生氧化-还原反应,有抗坏血酸脱氢抗坏血酸该反应能快速而又定量地进行,因此可通过电生Br2来“滴定”抗坏血酸,此即库仑滴定。

本实验用KBr作电解质来电生Br2,电极反应为:阳极:2Br −= 2e−+ Br2阴极:2H ++ 2e−= H2(g)滴定终点用双铂指示电极安培法来确定,实验装置如图1所示。

图1.采用电流法指示终点的库仑滴定装置即在双铂电极间加一小的电压(约150 mV),在终点前,电生出的Br2立即被抗坏血酸还原为Br−离子,因此溶液未形成电对Br2/Br−。

指示电极没有电流通过(仅有微小的残余电流),但当达到终点后,存在过量的Br2形成Br2/Br−可逆电对,使电流表的指针明显偏转,指示终点到达。

定量方法根据法拉第定律来计算,有式中,m为被滴定抗坏血酸的质量,mg;Q为电极反应所消耗的电量(本仪器所示电量为毫库仑);M为抗坏血酸的分子量(176.1);F为Faraday(法拉第)常数,其值为96485 C•mol-1;n为电极反应的电子转移数。

浓纳米北实验报告

浓纳米北实验报告

浓纳米北实验报告1. 引言浓纳米北是一次旨在探索纳米材料应用前景的实验。

本实验通过制备并测试不同浓度的纳米材料对生物体的影响,以评估其潜在的应用价值。

纳米材料作为一种新兴材料,具有广泛的应用前景,但同时也引起了人们对其安全性和环境影响的担忧。

本实验旨在为纳米材料的应用提供科学依据和参考。

2. 实验设计2.1 实验材料和设备- 纳米材料溶液:浓度分为低浓度组、中浓度组和高浓度组- 生物样本:小鼠- 实验设备:培养皿、注射器、显微镜等2.2 实验步骤1. 制备不同浓度的纳米材料溶液。

2. 将纳米材料溶液分别注射到不同的小鼠体内。

3. 观察小鼠在注射后的行为和生理变化。

4. 采集小鼠的血液和组织样本。

5. 使用显微镜和其他实验方法分析样本。

3. 实验结果3.1 小鼠行为和生理变化观察观察发现,注射纳米材料后的小鼠在行为和生理上并无明显异常。

它们保持正常的食欲和水分摄入,运动活跃度也与对照组相似。

3.2 血液和组织样本分析分析小鼠的血液样本后发现,注射纳米材料后,血液中的生化指标与对照组无明显差异。

通过对不同组纳米材料取样进行显微镜观察,发现小鼠体内的组织结构未受到纳米材料的明显影响。

4. 讨论与分析通过实验结果可以得出几个结论:首先,注射浓度在一定范围内的纳米材料对小鼠的行为和生理变化没有明显影响。

这表明纳米材料在适当的浓度下可能是安全的。

其次,血液和组织样本分析结果也支持了这个结论。

实验中的纳米材料没有对小鼠体内的生化指标和组织结构产生明显影响。

综上所述,浓纳米北实验结果表明,在适当的浓度下,纳米材料对生物体可能是安全的。

然而,这只是初步的实验结果,仍需要进一步的研究来确定更精确的安全浓度范围,并对纳米材料的长期影响进行深入研究。

5. 结论本实验通过制备不同浓度的纳米材料溶液,并将其注射到小鼠体内,评估了纳米材料对生物体的影响。

实验结果显示,在适当浓度下,纳米材料对小鼠的生理和行为没有明显影响。

这为纳米材料的应用提供了一定的科学依据和参考,但仍需进一步深入研究。

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

LAB3实验报告实验目的:●了解虚拟内存的Page Fault异常处理实现●了解页替换算法在操作系统中的实现实验内容:本次实验是在实验二的基础上,借助于页表机制和实验一中涉及的中断异常处理机制,完成Page F ault异常处理和FIFO页替换算法的实现,结合磁盘提供的缓存空间,从而能够支持虚存管理,提供一个比实际物理内存空间“更大”的虚拟内存空间给系统使用。

这个实验与实际操作系统中的实现比较起来要简单,不过需要了解实验一和实验二的具体实现。

实际操作系统系统中的虚拟内存管理设计与实现是相当复杂的,涉及到与进程管理系统、文件系统等的交叉访问。

如果大家有余力,可以尝试完成扩展练习,实现extended clock页替换算法。

一.练习练习0:填写已有实验本实验依赖实验1/2。

请把你做的实验1/2的代码填入本实验中代码中有“LAB1”,“LAB2”的注释相应部分。

练习1:给未被映射的地址映射上物理页完成do_pgfault(mm/vmm.c)函数,给未被映射的地址映射上物理页。

设置访问权限的时候需要参考页面所在VMA的权限,同时需要注意映射物理页时需要操作内存控制结构所指定的页表,而不是内核的页表。

注意:在LAB2 EXERCISE 1处填写代码。

执行make qemu后,如果通过check_pgfault函数的测试后,会有“check_pgfault() succeeded!”的输出,表示练习1基本正确。

请在实验报告中简要说明你的设计实现过程。

请回答如下问题:●请描述页目录项(Pag Director Entry)和页表(Page Table Entry)中组成部分对ucore实现页替换算法的潜在用处。

●如果ucore的缺页服务例程在执行过程中访问内存,出现了页访问异常,请问硬件要做哪些事情?问题分析:当启动分页机制以后,如果一条指令或数据的虚拟地址所对应的物理页不在内存中,或者访问权限不够,那么就会产生页错误异常。

其具体原因有以下三点:1.页表项全为0——虚拟地址与物理地址为建立映射关系或已被撤销。

2.物理页面不在内存中——需要进行换页机制。

3.访问权限不够——应当报错。

根据以上三点错误原因,完成页错误处理函数do——pgfault()。

大体思路:do_pgfault()函数从CR2寄存器中获取页错误异常的虚拟地址,根据error code来查找这个虚拟地址是否在某一个VMA的地址范围内,并且具有正确的权限。

如果满足上述两个要求,则需要为分配一个物理页。

程序代码:Kern/mm/vmm.c中do_pgfault()函数的EXERCISE 1修改如下://尝试找到pte, 如果对应的页表项PT不存在则创建一个//这里调用函数get_pte(pde_t *pgdir, uintptr_t la, bool create), 其中create=1表示若PT 不存在则允许创建if ((ptep = get_pte(mm->pgdir, addr, 1)) == NULL) {//尝试查找页表入口cprintf("get_pte in do_pgfault failed\n");//如果找不到入口,是非法访问,退出goto failed;}//如果物理地址不存在,则建立一个逻辑地址和物理地址的映射//perm为VMA的权限if (*ptep == 0) { //尝试申请一个页,如果申请失败就是内存不足了,退出if (pgdir_alloc_page(mm->pgdir, addr, perm) == NULL) {cprintf("pgdir_alloc_page in do_pgfault failed\n");goto failed;}}思考题:1.请描述页目录项(Page Director Entry)和页表(Page Table Entry)中组成部分对ucore实现页替换算法的潜在用处。

Ans. 页目录项(pgdir)作为一个双向链表存储了目前所有的页的物理地址和逻辑地址的对应,即在实内存中的所有页,替换算法中被换出的页从pgdir中选出。

页表(pte)则存储了替换算法中被换入的页的信息,替换后会将其映射到一物理地址。

2.如果ucore的缺页服务例程在执行过程中访问内存,出现了页访问异常,请问硬件要做哪些事情?Ans. 产生页访问异常后,CPU把引起页访问异常的线性地址装到寄存器CR2中,并给出了出错码errorCode,说明了页访问异常的类型。

ucore OS会把这个值保存在struct trapframe 中tf_err成员变量中。

而中断服务例程会调用页访问异常处理函数do_pgfault进行具体处理。

练习2:补充完成基于FIFO的页面替换算法(需要编程)完成vmm.c中的do_pgfault函数,并且在实现FIFO算法的swap_fifo.c中完成map_swappable 和swap_out_vistim函数。

通过对swap的测试。

注意:在LAB2 EXERCISE 2处填写代码。

执行make qemu后,如果通过check_swap函数的测试后,会有“check_swap() s ucceeded!”的输出,表示练习2基本正确。

请在实验报告中简要说明你的设计实现过程。

请在实验报告中回答如下问题:●如果要在ucore上实现"extended clock页替换算法"请给你的设计方案,现有的swap_manager框架是否足以支持在ucore中实现此算法?如果是,请给你的设计方案。

如果不是,请给出你的新的扩展和基此扩展的设计方案。

并需要回答如下问题●需要被换出的页的特征是什么?●在ucore中如何判断具有这样特征的页?●何时进行换入和换出操作?问题分析:根据练习1,当页错误异常发生时,有可能是因为页面保存在swap区或者磁盘文件上造成的,练习2需要利用页面替换算法解决这个问题。

大体思路:页面替换主要分为两个方面,页面换出和页面换入。

页面换入主要在vmm.c中的do_pgfault()函数实现:页面换出主要在swap_fifo.c中的swap_out_vistim()函数实现。

在换入时,需要先检查产生访问异常的地址是否属于某个vma表示的合法虚拟地址,并且保存在硬盘的swap文件中(对应的PTE的高24位不为0)。

如果满足以上两点,则执行swap_in()函数换入页面。

换出则相对简单,当申请空闲页面时,alloc_pages()函数不能获得空闲页,则需要调用swap_out()函数函数换出不常用的页面。

程序代码:Kern/mm/vmm.c中do_pgfault()函数的EXERCISE 2修改如下:else {//如果pte是需要交换的表项,那么就从硬盘的物理地址将数据读到页中//然后调用page_insert()建立物理地址和逻辑地址映射if(swap_init_ok) {struct Page *page=NULL;//根据mm结构和addr地址,尝试将硬盘中的内容换入至page中//此时的page还没有加入到队列中if ((ret = swap_in(mm, addr, &page)) != 0) {//ret=0表示swap_in()正常运行结束cprintf("swap_in in do_pgfault failed\n");goto failed;}//建立虚拟地址合物理地址之间的对应关系page_insert(mm->pgdir, page, addr, perm);//将此页面设置成可交换的swap_map_swappable(mm, addr, page, 1);}else {cprintf("no swap_init_ok but ptep is %x, failed\n",*ptep);goto failed;}Kern/mm/swap_fifo.c中的EXERCISE 2修改如下:_fifo_map_swappable(struct mm_struct *mm, uintptr_t addr, struct Page *page, int swap_in) {//将最近被用到的页面添加到算法所维护的次序队列//找到pra_list_head队列list_entry_t *head=(list_entry_t*) mm->sm_priv;//找到被换入的页表项list_entry_t *entry=&(page->pra_page_link);assert(entry != NULL && head != NULL);/*LAB3 EXERCISE 2: YOUR CODE*///将最近分配的页插入到pra_list_head队列的尾部.list_add_before(head, entry);return 0;}_fifo_swap_out_victim(struct mm_struct *mm, struct Page ** ptr_page, int in_tick){//查询哪个页面需要被换出//找到pra_list_head队列list_entry_t *head=(list_entry_t*) mm->sm_priv;assert(head != NULL);assert(in_tick==0);//选择应该被换出的页表,即FIFO中最早调入的页表list_entry_t *le = head->next;assert(le != head);/*LAB3 EXERCISE 2: YOUR CODE*///将换出的页表从pra_list_head队列中删除struct Page *p = le2page(le, pra_page_link);list_del(le);assert(p != NULL);//将页的地址的地址赋值给ptr_page*ptr_page = p;return 0;}思考题:如果要在ucore上实现"extended clock页替换算法"请给你的设计方案,现有的swap_manager框架是否足以支持在ucore中实现此算法?如果是,请给你的设计方案。

如果不是,请给出你的新的扩展和基此扩展的设计方案。

答:目前的swap_manager框架足以支持在ucore中实现extended clock算法。

在kern/mm/mmu.h文件中有如下定义:#define PTE_A 0x020 // Accesseed所以(*ptep & PTE_A)即可以表明该页是否被访问过,由此实现extended clock。

相关文档
最新文档