Pintos pro 1 实验报告
- 格式:doc
- 大小:150.50 KB
- 文档页数:19
一、实验目的1. 了解蒲公英的冻干原理和过程。
2. 探究蒲公英冻干前后营养成分的变化。
3. 评估蒲公英冻干产品的品质。
二、实验材料1. 蒲公英新鲜叶:500g2. 冷冻干燥机:1台3. 分析天平:1台4. 高速离心机:1台5. 超声波清洗器:1台6. 容量瓶:1000ml7. 甲醇、丙酮:分析纯8. 营养成分分析试剂盒:1套三、实验方法1. 样品预处理- 将新鲜蒲公英叶清洗干净,去除杂质。
- 将洗净的蒲公英叶放入超声波清洗器中,使用甲醇进行清洗,以去除表面的杂质和污染物。
- 将清洗后的蒲公英叶用分析天平称重,记录质量。
2. 冻干过程- 将称重后的蒲公英叶放入冷冻干燥机中,设置温度为-40℃,真空度为0.08MPa。
- 冻干时间为24小时,直至样品完全干燥。
3. 营养成分分析- 将冻干前后的蒲公英叶分别进行营养成分分析,包括水分、蛋白质、碳水化合物、脂肪、维生素和矿物质等。
- 使用高速离心机将样品离心,取上清液进行分析。
4. 品质评估- 观察冻干前后蒲公英叶的外观、颜色和气味变化。
- 对冻干产品进行感官评价,包括色泽、口感、气味和营养保留情况。
四、实验结果1. 样品预处理- 清洗后的蒲公英叶质量为490g。
2. 冻干过程- 冻干完成后,蒲公英叶质量为50g。
3. 营养成分分析- 冻干前:水分含量为85%,蛋白质含量为2.5%,碳水化合物含量为10%,脂肪含量为0.5%,维生素含量为0.2%,矿物质含量为1.0%。
- 冻干后:水分含量为5%,蛋白质含量为2.2%,碳水化合物含量为9.8%,脂肪含量为0.4%,维生素含量为0.15%,矿物质含量为0.8%。
4. 品质评估- 冻干前后蒲公英叶外观基本一致,颜色无明显变化。
- 冻干后蒲公英叶口感略硬,但无明显异味。
- 感官评价结果显示,冻干产品色泽、口感、气味均良好,营养保留情况较好。
五、实验结论1. 蒲公英冻干过程中,水分含量明显降低,蛋白质、碳水化合物、脂肪、维生素和矿物质等营养成分有所下降,但总体营养保留情况良好。
实验名称:菲林试验实验日期:2021年10月25日实验目的:1. 学习菲林试验的原理和方法;2. 通过菲林试验检测还原糖的存在;3. 掌握实验操作步骤和注意事项。
实验原理:菲林试验是一种检测还原糖的常用方法。
还原糖具有还原性,可以将菲林试剂中的铜离子(Cu2+)还原成氧化亚铜(Cu2O),生成砖红色沉淀。
通过观察沉淀颜色的深浅,可以判断还原糖的含量。
实验材料与用具:1. 实验材料:葡萄糖、果糖、蔗糖溶液,无水乙醇,菲林试剂,蒸馏水;2. 实验用具:试管,移液管,烧杯,酒精灯,恒温水浴锅,试管架。
实验步骤:1. 分别取三支试管,分别编号为1、2、3;2. 向试管1中加入2ml葡萄糖溶液,向试管2中加入2ml果糖溶液,向试管3中加入2ml蔗糖溶液;3. 向每支试管中加入1ml无水乙醇;4. 将试管放入恒温水浴锅中,加热至60℃,保持15分钟;5. 取出试管,冷却至室温;6. 分别向每支试管中加入1ml菲林试剂;7. 将试管放入沸水浴锅中,加热至沸腾,保持5分钟;8. 观察并记录每支试管中沉淀颜色的深浅。
实验结果:1. 试管1中产生砖红色沉淀,颜色较深;2. 试管2中产生砖红色沉淀,颜色较浅;3. 试管3中无沉淀产生。
实验分析:1. 葡萄糖和果糖均为还原糖,在菲林试验中产生砖红色沉淀;2. 蔗糖为非还原糖,在菲林试验中无沉淀产生;3. 葡萄糖和果糖在菲林试验中产生的沉淀颜色深浅不同,说明其还原性不同。
实验结论:1. 菲林试验可以用来检测还原糖的存在;2. 葡萄糖和果糖均为还原糖,蔗糖为非还原糖;3. 葡萄糖和果糖的还原性不同。
注意事项:1. 实验过程中,应严格控制加热温度和时间,避免影响实验结果;2. 操作过程中,应注意安全,避免烫伤和化学试剂的污染;3. 菲林试剂应现配现用,避免长时间存放影响实验效果。
实验总结:通过本次实验,我们学习了菲林试验的原理和方法,掌握了实验操作步骤和注意事项。
实验结果表明,菲林试验可以用来检测还原糖的存在,并判断其含量。
华东师范大学软件学院实验报告实验课程:操作系统实践年级:大二实验成绩:实验名称:Pintos-User Programs 姓名:实验编号:学号:实验日期:2018/12/27指导教师:组号:实验时间:4学时一、实验目的当前, 我们已经完成了pintos 的第一部分(熟悉了其基础结构和线程包), 现在是开始处理系统中允许运行用户程序的部分的时候了。
基本代码已经支持加载和运行用户程序, 但不能加载和运行或交互性。
在此项目中, 我们将使程序能够通过系统调用与操作系统进行交互。
我们将在"userprog" 目录中进行工作, 但我们也将与pintos 的几乎所有其他部分进行交互。
具体目的如下:(1)了解Pintos操作系统的功能流程及内核的软件工程结构。
(2)通过Pintos操作系统内核的剖析,了解现有Pintos操作系统在处理用户程序方面中存在的参数传递问题,有效解决其参数传递的问题。
(3)通过Pintos内核剖析,了解其中断处理的机制,学会操作系统中断功能的编写方法。
(4)了解现有Pintos操作系统的系统调用功能,根据其中断机制,完善系统调用功能,使Pintos系统具有处理用户中断请求的功能。
(5)通过Pintos内核剖析,解决现有Pintos操作系统中存在的进程终止时缺少终端提示的问题。
(6)通过Pintos内核剖析,解决现有Pintos操作系统中存在的运行文件禁止写操作的问题。
二、实验内容与实验步骤实验内容如下:(1)在分析内核的基础上,对Pintos操作系统的参数传递问题提出有效的策略,设计算法,分步跟踪和调试,通过实践,有效解决参数传递问题,并对实验结果进行分析。
(2)通过Pintos操作系统内核的剖析,了解其中断处理的机制,在此基础上,完善Pintos的系统调用功能,设计算法,分步跟踪和调试,通过测试分析完善的系统调用功能。
(3)在分析内核的基础上,对现有Pintos操作系统进行完善,增加进程终止的终端提示功能,设计算法,分步跟踪和调试,通过实践,验证终端提示功的有效性。
pintos实验报告《Pintos实验报告:探索操作系统的奥秘》在当今数字化时代,操作系统扮演着至关重要的角色,它是计算机系统的核心,负责管理硬件资源、提供用户接口、运行应用程序等重要功能。
为了更深入地了解操作系统的内部机制和工作原理,我们进行了一系列Pintos实验,并在此撰写实验报告,以分享我们的实验经验和心得。
Pintos是一款由斯坦福大学开发的教学用操作系统,它旨在帮助学生理解操作系统的基本概念和实现原理。
通过实验Pintos,我们得以深入研究操作系统的各个方面,包括线程管理、内存管理、文件系统等。
在这些实验中,我们不仅仅是简单地完成实验任务,更重要的是通过思考和探索,逐步理解操作系统的运行机制。
在线程管理实验中,我们学习了线程的创建、调度和同步等内容。
通过编写代码实现线程的创建和调度,我们深刻体会到了线程管理的复杂性和重要性。
在内存管理实验中,我们研究了虚拟内存的概念和实现方法,通过实验验证了页面置换算法的效果。
在文件系统实验中,我们了解了文件系统的组织结构和文件操作的实现原理,通过实验探究了文件系统的性能和稳定性。
通过Pintos实验,我们不仅仅是学习了操作系统的理论知识,更重要的是锻炼了我们的动手能力和解决问题的能力。
在实验过程中,我们遇到了各种各样的问题,需要通过分析和调试来解决。
这些问题的解决过程,让我们更加深入地理解了操作系统的内部机制,也提升了我们的编程能力和问题解决能力。
总的来说,通过Pintos实验,我们对操作系统有了更加深入的理解,同时也提升了我们的实际能力。
我们相信,通过不断地学习和实践,我们能够更好地理解和应用操作系统的知识,为未来的技术发展做出更大的贡献。
希望我们的实验报告能够对更多的人有所帮助,一起探索操作系统的奥秘!。
操作系统课程设计pintos project1实验摘记实验摘记:Pintos Project 1实验目标:1.了解Pintos操作系统的基本结构。
2.学习操作系统的引导和初始化过程。
3.理解并实践操作系统的内存管理机制。
4.掌握进程调度和进程控制块(PCB)的使用。
5.理解并实践信号量、消息队列等基本并发控制机制。
实验步骤:1.创建和编译Pintos操作系统内核:a. 使用Makefile编译Pintos内核。
b. 使用汇编语言编写引导加载器(bootloader)。
c. 将引导加载器和内核加载到模拟硬件环境中。
2.操作系统引导和初始化:a. 执行引导加载器,加载内核到内存中。
b. 初始化硬件设备驱动程序。
c. 初始化内存管理机制,如页表、内存分配等。
3.进程管理:a. 创建新的进程。
b. 使用PCB来跟踪和管理进程状态。
c. 使用进程调度算法(如先来先服务、短作业优先等)来决定哪个进程运行。
4.并发控制:a. 使用信号量来实现互斥访问共享资源。
b. 使用消息队列来实现进程间的通信。
5.系统测试:a. 运行多个进程,观察其调度和执行情况。
b. 使用信号量和消息队列实现多进程同步和通信,验证其正确性。
c. 检查内存泄漏和死锁等问题。
6.实验总结:a. 分析实验结果,总结实验经验。
b. 编写实验报告,包括实验目标、实验步骤、实验结果和结论等。
实验结果:通过本次实验,我们成功地创建和编译了Pintos操作系统内核,了解了操作系统的引导和初始化过程,掌握了进程调度和PCB的使用,以及并发控制机制的实现。
在系统测试中,我们观察到了多进程的调度和执行情况,验证了信号量和消息队列等并发控制机制的正确性。
同时,我们也发现了内存泄漏和死锁等问题,并在实验总结中进行了分析和总结。
实验结论:通过本次实验,我们深入了解了操作系统的基本结构和机制,掌握了Pintos操作系统的设计和实现过程。
我们成功地实现了多进程调度和并发控制,并对内存管理等问题进行了深入探讨。
大一p区元素实验报告实验名称:大一P区元素实验报告实验目的:通过实验了解P区元素的基本性质、化学反应和实际应用,掌握化学实验的基本技能和方法,培养实验操作能力和实验思维能力。
实验原理:P区元素是指位于周期表的第三区、第五周期以上的元素,包括磷(P)、砷(As)、锑(Sb)、碲(Te)和碘(I)等。
这些元素在化学和生物学中具有重要的应用和作用。
在实验中,我们将通过以下实验操作探究它们的基本性质:实验1:不同P区元素的颜色反应实验2:P区元素的氧化还原反应实验3:P区元素在化学反应中的应用实验步骤:实验1:1.取5mlPhen水溶液,加2滴氯仿溶液和1mg P、As、Sb、Te 和I各一点点。
2.观察各反应体系的颜色反应。
实验2:1.取5个试管,分别加入P、As、Sb、Te、I,按比例加入金属铜,并加入盐酸。
2.观察反应现象,在反应之后将试管中的结晶收集下来。
实验3:1.分别取4个试管,分别加入P、As、Sb、Te的取物。
2.依次加入NaOH,HN03,KOH饱和溶液,NaHSO3,CuSO4*5H2O,FeSO4*7H2O,BaCl2依次观察在化学反应中的应用。
实验结果:实验1:P、As、Sb、Te分别出现紫色、橙色、橘黄色、红色的不同颜色反应,I则呈现乳白色。
实验2:P、As、Sb、Te、I与铜盐反应,P区元素离子的还原能力依次降低。
P区的元素反应的电子转移次数越多,相应的含氧化还原过程就越显著。
实验3:在NaOH溶液中,P、As、Sb、Te的取物分别呈现出紫色、橙色、橘黄色、红色的沉淀;在HN03溶液中,P、As、Sb 呈现出白色、金黄色、棕色的沉淀,Te呈现出红棕色沉淀;在KOH饱和溶液中,P、As溶液中的铁离子加入后呈现出棕红色沉淀,Sb、Te无明显反应;在NaHSO3溶液中,Sb溶液中属硫酸锂的分子离解程度大,毕竟具有更强的还原性,Sb易被还原成单质而析出,形成黑色Sb沉淀;在CuSO4·5H2O中,P、As、Sb化合物混入CuSO4溶液中,由于P、As、Sb具有还原性,还原了Cu2+,形成了黄色或橙色的Cu2O沉淀;在FeSO4·7H2O中,P和As化合物混入FeSO4溶液中,Ca2+与Fe(SO4)3反应,产生棕色沉淀,其余元素均无明显反应;在BaCl2溶液中,P和As溶液中的碘(离子)加入后产生深蓝色沉淀,Sb溶液中没有明显的变化,Te溶液中生成褐色沉淀。
物理仿真实验法布里-珀罗标准具实验一、实验目的(1)了解F-P干涉仪的构造和原理,学习F-P干涉仪的调节方法。
(2)掌握F-P标准局自由光谱范围和分辨本领的计算方法,并理解其物理意义。
(3)学会用F-P标准具观察谱线的精细结构和作光学测量的方法。
二、实验仪器及其使用方法标准具由平行放置的两块平面板组成的,在两板相对的平面上镀薄银膜和其他有较高反射系数的薄膜。
两平行的镀银平面的间隔是由某些热膨胀系数很小的材料做成的环固定起来的。
实际中两块平板不可能一直绝对平行,所以实验中还需要用3个旋钮来调平。
三、实验原理F-P标准具是由平行放置的两块玻璃或石英板组成,在两板背面上镀有薄银膜或其它有较高的反射率的薄膜,为消除两平板背面反射光的干涉,每块都做成楔型。
两平行的镀银平面玻璃之间夹有一个间隔圈,用膨胀系数很小的石英或锢钢精加工成一定厚度,用以保证两块平面玻璃之间固定的间距,玻璃板上带有三个螺丝,可调节两玻璃板内表面之间的精确的平行度。
标准具的光路图如图所示。
自括展光源上任意一点发出的单色光,射到标准具板的平行平面上,经过和表面的多次反射和透射,分别形成一系列相互平行的反射光束,和透射光束。
在透射诸光束中,相临的两光束的光程差,这一系列平行并有一定光程差的光束在无穷远处或透镜的焦平面上发生干涉。
当光程差为波长的整数倍时产生干涉极大值。
一般情况下标准具反射膜间是空气介质,因此,干涉的极大值为:为整数,成为干涉级。
由于标准具的间隔是固定的,在波长不变的情况下,不同的干涉级对应不同的入射角。
因此在使用扩展光源时,F-P标准具产生等倾干涉。
其干涉条文为一组同心圆环。
中心处,级次最大,, 向外不同半径的同心圆环亮环依次为K-1,K-2,。
考虑同一光源发出的两束具有微小波长差的单色光和(设)入射的情况,它们将分别形成一套圆环花纹。
(对同一干涉级,波长越大的干涉欢直径越小,如图所示。
)如果和的波长差逐渐增大,使得的第级亮环与的第(K-1)级亮环重叠,即有:则:由于F-P标准具中大多数情况,所以上式中:可以近似认为则用波数表示或定义为标准具的自由光谱范围。
兔子纤溶酶原激活物抑制因子1(PAI-1)酶联免疫分析(ELISA)试剂盒使用说明书本试剂仅供研究使用目的:本试剂盒用于测定豚鼠血清,血浆及相关液体样本中类纤溶酶原激活物抑制因子1(PAI-1)的含量。
实验原理:本试剂盒应用双抗体夹心法测定标本中兔子纤溶酶原激活物抑制因子1(PAI-1)水平。
用纯化的兔子纤溶酶原激活物抑制因子1(PAI-1)抗体包被微孔板,制成固相抗体,往包被单抗的微孔中依次加入类纤溶酶原激活物抑制因子1(PAI-1),再与HRP标记的类纤溶酶原激活物抑制因子1(PAI-1)抗体结合,形成抗体-抗原-酶标抗体复合物,经过彻底洗涤后加底物TMB显色。
TMB在HRP酶的催化下转化成蓝色,并在酸的作用下转化成最终的黄色。
颜色的深浅和样品中的类纤溶酶原激活物抑制因子1(PAI-1)呈正相关。
用酶标仪在450nm波长下测定吸光度(OD值),通过标准曲线计算样品中兔子纤溶酶原激活物抑制因子1(PAI-1)浓度。
试剂盒组成:试剂盒组成48孔配置96孔配置保存说明书1份1份封板膜2片(48)2片(96)密封袋1个1个酶标包被板1×48 1×96 2-8℃保存标准品:2700ng/L0.5ml×1瓶0.5ml×1瓶2-8℃保存标准品稀释液 1.5ml×1瓶 1.5ml×1瓶2-8℃保存酶标试剂 3 ml×1瓶 6 ml×1瓶2-8℃保存样品稀释液 3 ml×1瓶 6 ml×1瓶2-8℃保存显色剂A液 3 ml×1瓶 6 ml×1瓶2-8℃保存显色剂B液 3 ml×1瓶 6 ml×1瓶2-8℃保存终止液3ml×1瓶6ml×1瓶2-8℃保存浓缩洗涤液(20ml×20倍)×1瓶(20ml×30倍)×1瓶2-8℃保存样本处理及要求:1. 血清:室温血液自然凝固10-20分钟,离心20分钟左右(2000-3000转/分)。
Pintos pro 1 实验报告第丁组王小花 201201102李三强 2012011031.Alarm Clocktimer_sleep的作用是让此线程等待ticks单位时长,然后再执行。
函数原型:voidtimer_sleep (int64_t ticks) //参数的意思是你想要等待的时间长度{int64_t start = timer_ticks (); //记录开始时的系统时间ASSERT (intr_get_level () == INTR_ON);while (timer_elapsed (start) < ticks) //如果elapse(流逝)的时间>=ticks时就返回。
否则将持续占用cpu。
thread_yield ();}在timer_sleep()函数中让该进程暂时阻塞(调用thread_block()),然后过了ticks个时间段后再把它加回到ready queue中。
至于因为每一次时间中断的时候恰好是ticks加一的时候,因此我们可以改进timer_interrup()函数,使得系统每次调用他的时候都检查一下我的这个进程是否已经等待了足够长得时间了。
如果还没有够,则不管它,如果已经足够长了,则调用thread_unblock()函数将它召唤回ready_queue中。
加入一个整形变量int block_ticks。
当这个线程被block的时候,将block_ticks记录为需要等待的时间长度。
之后每次中断的时候检查它一次,并且顺便使其自减。
当它小到等于0的时候,把线程调到ready queue中。
Threads.h tread.c interrup.h timer.c1.将thread改为:在结构struct thread中增加了成员int64_t block_ticks; 小于0表示无限等待struct thread{/* Owned by thread.c. */tid_t tid; /* Thread identifier. */enum thread_status status; /* Thread state. */char name[16]; /* Name (for debugging purposes). */uint8_t *stack; /* Saved stack pointer. */int priority; /* Priority. */struct list_elem allelem; /* List element for all threads list. */ int block_ticks; /* 存储该进程已经被block多久了*//* Shared between thread.c and synch.c. */struct list_elem elem; /* List element. */#ifdef USERPROG/* Owned by userprog/process.c. */uint32_t *pagedir; /* Page directory. */#endif/* Owned by thread.c. */unsigned magic; /* Detects stack overflow. */};2.改动timer.c中的timer_sleep函数删除了原来的忙等待voidtimer_sleep (int64_t ticks){/*int64_t start = timer_ticks ();*/ASSERT (intr_get_level () == INTR_ON);/*while (timer_elapsed (start) < ticks)thread_yield ();*/if(ticks>0){enum intr_level old_level; //定义变量保存原先的中断状态struct thread *t;t=thread_current ();t->block_ticks = ticks; //将等待时长设置为需要等待的时间old_level = intr_disable (); // thread_block()方法需要关闭中断thread_block(); //阻塞进程intr_set_level (old_level); //恢复中断}}3.为timer.c增加函数用来检查每个进程中的block_ticks是否为零voidblock_check(struct thread *t, void *aux UNUSED){if (t->status == THREAD_BLOCKED&&t->block_ticks>0)//看这个线程是不是阻塞态 {t->block_ticks--; //将等待的时间自减if (t->block_ticks == 0){thread_unblock (t); //把t线程重新”解锁“}}}4.修改timer_interrupt函数,使其每次中断都对所有线程执行block_check函数static voidtimer_interrupt (struct intr_frame *args UNUSED)//nothing表示这个参数没用{enum intr_level old_level; //和先前一样,记录原来的中断状态old_level=intr_disable(); //forreach函数要求关中断。
ticks++;thread_foreach (block_check, NULL);intr_set_level (old_level); //恢复中断thread_tick (); //交给操作系统出发中断并且调度新的线程进驻cpu。
}2.Priority Scheduling依据优先级排队,在ready_list中和BlockList中都要排序采用插入排序1.在thread.c中(在thread.h中申明)加入:依据优先级比较/*list compared by priority <*/bool less_priority(const struct list_elem *a,const struct list_elem *b,void * aux){const struct thread *t1=list_entry(a,struct thread,allelem);const struct thread *t2=list_entry(b,struct thread,allelem);return t1->priority < t2->priority;}2.在thread.c中,thread_yield()函数中修改list_insert_ordered(&ready_list,&cur->elem,less_priority,NULL);// list_push_back (&ready_list, &cur->elem);3.在thread.c中thread_unblock()函数中修改://list_push_back (&ready_list, &t->elem);list_insert_ordered(&ready_list,&t->elem,less_priority,NULL);4.在thread_create()中在thread_unblock(t)后面加入了thread_yield();如果新产生的进程优先及高与当前进程,那么新进程在read_list中的位置前与当前进程。
5.修改了synch.c中seam_down()//list_push_back()为list_insert_ordered()while (sema->value == 0){// list_push_back (&sema->waiters, &thread_current ()->elem);list_insert_ordered(&sema->waiters,&thread_current()->elem,less_priority, NULL);thread_block ();}对cond_wait()函数做同样修改waiter.current_thread=thread_current();list_insert_ordered(&cond->waiters,&waiter.elem,less_priority,(void *)1);/* One semaphore in a list. */struct semaphore_elem{struct list_elem elem; /* List element. */struct semaphore semaphore; /* This semaphore. */struct thread *current_thread; /* wait thread */};此结构在synch.c中,移动到了sych.h中,并加入了struct thread *current_thread; /* wait thread */Priority-Donation1.如果有优先级分别为高中低的三个线程H,M,L. 如果H需要等待L(因为L占有锁),而M 此时在ready_list中,如果按照优先级高低调度,那么H永远得不到CPU,因为L 永远得不到CPU。
解决方法是:H将自己的优先级先给L(当L占有锁的时候),但是L释放锁后应立即调整回他原来的优先级。
实现优先级捐赠需要考虑的情况:1.只针对锁(lock)实现,其他的同步机制不用,如semaphore和condtion不用2.单一捐赠priority-donation-one 即一个进程级另一个进程捐赠3.多重捐赠priority-donation-multiple 即多个进程给一个进程捐赠4.还有嵌套捐赠priority-donation-nested如果H因为一把锁在等待M(因为M恰好占用了这把锁),而M又因为一把锁在等待L. 这时L和M的优先级都应该变为H的优先级。
可以假设嵌套深度不超过8层。
5.当一个线程得到捐献的优先级时,自己如果再通过priority设置自己的优先级,那就不能改变优先级,应该保存起来。
一种实现方法:(1)要求低优先级线程L得到捐赠后,再释放锁后要恢复自己原来的优先级,所以改变的L优先级时,对之前的优先级就保存下来。