pintos Lab1 实验报告
Lab1 ISE 工具入门

电子基础实验B-EDA实验1
姓名:周林峰学号:222012615220018
实验名称:熟悉实验环境
一、实验目的
1. ISE 工具的使用流程,从最开始的源文件输入到最后的二进制文件的生成。
2. 7 段数码管显示原理
3.拨码开关控制LED 按钮控制7 段数码管的数字电路的实现
二、实验环境
1. Xilinx ISE Design Suite 13.4(FPGA 开发工具)
2. Digilent Adept 编程调试工具
三、实验内容
四、 实验感想
安装程序花了不少时间,与上学期的fpga 实验相比,程序的编写都是用VHDL 语言,且内容接近,但是在设置方面多了不少新的东西,很多新的地方需要学习。
lab-1双向琼脂免疫扩散

五 注意事项
1.用琼脂浇载玻片时,载玻片必须保持水平位置。
2.每个孔的加样量应保持一致,既使每个孔都被 加满,又必须不使样品溢出孔外。 3.打孔时注意不要将孔弄破。
六 思考题
1.画出个孔间的沉淀线位置、数量、形态, 并予以简单的说明 2.对实验结果进行分析
○ ○ ○ 三孔型
○ ○
双孔型
○ ○ ○ ○ 双排孔型
○ ○○○ ○
梅花孔型
图1 双向免疫琼脂扩散孔型
三 材料与器材(略)
四 操作步骤
1.制板:用移液管吸取热琼脂3.5ml,平铺于载玻片上。 2.打孔:待琼脂凝固后,按图1梅花孔型打孔,孔径3mm, 中心孔与边缘孔距离10mm。用针挑去孔内琼脂。 3.用微量加样器将羊抗人IgG抗体及羊抗人IgM(1:30, v/v) 各5ul加入中间孔内。 4.加样:将待检血清用生理盐水稀释成1:2、1:6、1: 10 以及空白(生理盐水)加入周围各孔中,每孔10ul 。 5.将玻璃片置于湿盒内,于37℃温育,隔天观察结果。琼脂免疫实验原理 掌握双向琼脂免疫实验操作方法 学习双向琼脂免疫实验结果分析
二 实验原理
位于凝胶不同小孔中的抗原和抗体,当两者相对扩散时, 经一定时间后,若两者相对应,会在琼脂小孔间、两者最 恰当的比例处形成白色沉淀线。观察沉淀线的位置、数量、 形状以及对比各沉淀线之间的关系,可对抗原或抗体进行 定性分析。 此方法可应用于以下方面: (1)抗原或抗体的纯度鉴定。也可对抗体效价进行初步估算。 (2)用已知抗血清(或抗原)检测未知抗原(或抗体) (3)抗原或抗体相对分子量的估计 双向琼脂扩散常见孔型有三孔型、双孔型、双排孔型、梅 花孔型(见图1)
labreport1

集成电路设计实习报告——16bit全加器姓名:翟羽佳 学号:00348186 一、实验目的:1.采用定制的设计方法,完成16bit的加法器的设计2.面向给定的工艺库,完成电路设计,版图设计3.掌握CMOS集成电路的设计方法,熟悉从电路分析,电路设计到流片和测试的设计过程二、实验内容:设计一个16位加法器,满足以下要求:功能:16位的加法器可以正确完成带进位的2个16位二进制数的加法,并输出16位和信号以及最高位的进位输出信号速度:没有要求面积:对于core部分没有要求,对整个芯片IO不超过28个功耗:没有要求可靠性:没有要求完成以下步骤:1.电路设计2.版图设计3.版图验证三、实验过程、数据分析及结果:1.使用半定制设计方法,对电路结构进行设计。
一个16位的加法器,至少要有Ain,Bin两组16bit输入以及Cin进位输入,一组16bit输出sum和Cout进位输出。
这样至少需要16x2+1+16+1=50个IO,但芯片只能提供28个IO,故必须将部分并行的信号改为以时序控制的串行进行处理,并需要相应的存储器用以暂存数据,该设计不是一个简单的组合逻辑而是时序逻辑。
重新考虑以时序方式设计芯片:以串行方式输入Ain与Bin,在此过程中Cin保持不变,Ain与Bin在时钟信号clock的控制下逐个输入16位,暂存入两个寄存器RegA和RegB,由寄存器并行输出两组16位加数及被加数到一个通用的16位全加器,由全加器的组合逻辑产生16位sum和1位进位输出Cout,故需要IO数目1+1+1+16+1=20,再加上时钟控制信号clock,寄存器复位信号reset,置位信号set,故一共需要IO数目20+3=23个,完全满足要求。
结构示意图如下:用Verilog对硬件进行描述,首先描述全加器模块。
采用半定制的设计方法,在bd05core_verilog_library.v的单元库调用16个1‐bit全加器单元module BD_FA_B, 以串行进位的方式搭建成16‐bit全加器:相应的Verilog代码如下:module Adder_16bit(A, B, CI, CO, S);output [15:0] S;output CO;input [15:0] A;input [15:0] B;input CI;wire c0,c1,c2,c3,c4,c5,c6,c7,c8,c9,c10,c11,c12,c13,c14,c15;BD_FA_B adder_0 (.A(A[0]), .B(B[0]), .CI(CI), .CO(c0),.S(S[0]) );BD_FA_B adder_1 (.A(A[1]), .B(B[1]), .CI(c0), .CO(c1),.S(S[1]) );BD_FA_B adder_2 (.A(A[2]), .B(B[2]), .CI(c1), .CO(c2),.S(S[2]) );BD_FA_B adder_3 (.A(A[3]), .B(B[3]), .CI(c2), .CO(c3),.S(S[3]) );BD_FA_B adder_4 (.A(A[4]), .B(B[4]), .CI(c3), .CO(c4),.S(S[4]) );BD_FA_B adder_5 (.A(A[5]), .B(B[5]), .CI(c4), .CO(c5),.S(S[5]) );BD_FA_B adder_6 (.A(A[6]), .B(B[6]), .CI(c5), .CO(c6),.S(S[6]) );BD_FA_B adder_7 (.A(A[7]), .B(B[7]), .CI(c6), .CO(c7),.S(S[7]) );BD_FA_B adder_8 (.A(A[8]), .B(B[8]), .CI(c7), .CO(c8),.S(S[8]) );BD_FA_B adder_9 (.A(A[9]), .B(B[9]), .CI(c8), .CO(c9),.S(S[9]) );BD_FA_B adder_10 (.A(A[10]), .B(B[10]), .CI(c9), .CO(c10),.S(S[10]) );BD_FA_B adder_11 (.A(A[11]), .B(B[11]), .CI(c10), .CO(c11),.S(S[11]) );BD_FA_B adder_12 (.A(A[12]), .B(B[12]), .CI(c11), .CO(c12),.S(S[12]) );BD_FA_B adder_13 (.A(A[13]), .B(B[13]), .CI(c12), .CO(c13),.S(S[13]) );BD_FA_B adder_14 (.A(A[14]), .B(B[14]), .CI(c13), .CO(c14),.S(S[14]) );BD_FA_B adder_15 (.A(A[15]), .B(B[15]), .CI(c14), .CO(CO),.S(S[15]) );endmodule对外部寄存器部分的电路设计采用Verilog中的行为级描述,然后综合出结果。
医学实验报告通用

一、实验名称:细胞凋亡检测实验二、实验日期:2023年10月15日三、实验目的:1. 了解细胞凋亡的基本概念和检测方法。
2. 掌握TUNEL染色技术检测细胞凋亡的原理和操作步骤。
3. 分析细胞凋亡在疾病发生发展中的作用。
四、实验原理:细胞凋亡是细胞程序性死亡的一种形式,是生物体发育、组织更新、免疫调节等生理过程中必不可少的环节。
TUNEL染色技术是一种检测细胞凋亡的方法,其原理是利用末端脱氧核苷酸转移酶(TdT)将生物素标记的脱氧尿苷三磷酸(dUTP)加到细胞凋亡时暴露的DNA的3'-OH末端,然后利用生物素与亲和素之间的结合,将标记有荧光素的亲和素连接到凋亡细胞上,从而实现凋亡细胞的检测。
五、主要仪器与试剂:1. 仪器:荧光显微镜、倒置显微镜、超净工作台、离心机、培养箱等。
2. 试剂:细胞培养液、TUNEL染色试剂盒、DNA酶、蛋白酶K、抗荧光素抗体、DAB显色剂等。
六、实验步骤:1. 细胞培养:将细胞接种于6孔板,培养至适宜的密度。
2. 收集细胞:用胰酶消化细胞,收集细胞悬液。
3. 检测细胞凋亡:a. 制备细胞涂片:将细胞悬液滴加于载玻片上,吹匀,室温固定。
b. 处理细胞:加入DNase和蛋白酶K,处理细胞,使DNA断裂。
c. 添加TdT酶:加入TdT酶和生物素标记的dUTP,室温孵育。
d. 洗涤:用磷酸盐缓冲盐溶液(PBS)洗涤细胞。
e. 添加抗体:加入抗生物素抗体和荧光素标记的抗体,室温孵育。
f. 洗涤:用PBS洗涤细胞。
g. 显微镜观察:在荧光显微镜下观察细胞凋亡情况。
七、注意事项:1. 操作过程中应避免污染,使用超净工作台。
2. 实验前确保细胞处于最佳生长状态。
3. 检测过程中严格控制反应时间,避免反应过度。
4. 实验结束后,及时清洗实验器材,防止交叉污染。
八、实验结果:在荧光显微镜下观察,凋亡细胞呈现明亮的绿色荧光。
与对照组相比,实验组细胞凋亡数量明显增多,说明细胞凋亡在实验过程中得到有效诱导。
lab report例文

Lab Report例文I. 引言该实验旨在研究……本文将根据实验结果,以及相应的数据分析和讨论,给出完整的实验报告。
II. 实验方法2.1 设备和材料本实验使用的设备和材料包括:•仪器A•仪器B•材料X•材料Y2.2 实验步骤1.步骤1:……2.步骤2:……3.步骤3:……III. 实验结果3.1 数据收集在本实验中,我们采集了以下数据:(注意:以下为虚构数据)实验条件数据1 数据2 数据3A 10 20 30B 15 25 35C 12 22 323.2 数据处理根据上述数据,我们进行了以下数据处理步骤:1.步骤1:……2.步骤2:……3.步骤3:……3.3 数据分析根据数据处理的结果,我们进行了数据分析,得出以下结论:1.结论1……2.结论2……3.结论3……IV. 讨论4.1 结果分析根据实验结果和数据分析,我们可以得出如下结论:1.结论1……2.结论2……3.结论3……4.2 误差分析在本实验中,可能存在一些误差,这些误差可能导致实验结果的偏差。
以下是可能的误差来源:1.误差来源1:……2.误差来源2:……3.误差来源3:……4.3 实验改进根据误差分析,我们可以提出一些改进实验的方法:1.改进方法1:……2.改进方法2:……3.改进方法3:……V. 结论根据实验结果和讨论,我们得出以下结论:1.结论1……2.结论2……3.结论3……VI. 参考文献[1] 引用文献1[2] 引用文献2[3] 引用文献3VII. 附录在此附上了本实验中使用的原始数据和完整的数据处理过程。
VIII. 致谢感谢实验室的支持,以及所有参与实验的人员的辛勤工作。
感谢导师的指导和建议,使本实验能够顺利完成。
IX. 作者简介•作者A:XXX大学,XXX学院,XXX专业,学号 XXXXX,Email: *******************•作者B:XXX大学,XXX学院,XXX专业,学号 XXXXX,Email: *******************•作者C:XXX大学,XXX学院,XXX专业,学号 XXXXX,Email: *******************以上为该实验的完整报告。
pintos Lab2 实验报告

华东师范大学软件学院实验报告实验课程:操作系统实践年级:大二实验成绩:实验名称: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操作系统进行完善,增加进程终止的终端提示功能,设计算法,分步跟踪和调试,通过实践,验证终端提示功的有效性。
清华大学操作系统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不相同。
四川大学_无线网络技术_lab1实验报告

《无线网络技术》仿真实验报告实验一:AODV、DSR仿真专业班级:软件学院2012级**: ***学号: *************指导教师:评阅成绩:评阅意见:提交报告时间:2015年 5月12 日目录1、实验目的……………………………………………………………………2、实验内容………………………………………….………………………3、实验环境………………………………………………………………….4、实验步骤……….…………………………………………………………5、仿真现象描述与结果分析……………………………………………6、实验遇到的问题……………………………………………………………7、实验总结……………………………………………………………….………实验1 AODV仿真一、实验目的1.掌握无线自组织网络的组网方式2.掌握AODV路由协议的工程过程3.利用NS2仿真实现AODV路由协议二、实验内容本实验的内容在于利用NS2仿真实现AODV路由协议,模拟ADOV环境。
AODV是应用最广泛的按需路由协议之一,它是DSDV算法的改进,但中间节点不需事先维护路由。
AODV中节点移动可能会导致原来路由不可用,它采用逐跳路由转发分组,同时加入了组播路由协议扩展,从路由查找回复RREP。
整个通信过程是对称的,路由可逆,所以AODV 协议不支持单向路由。
四、实验环境AODV仿真采用的实验平台为Cygwin + ns-allinone-2.34,在标准的ns2中已集成了相应的模块。
五、实验步骤1.在“home/<用户名>/”目录下新建目录存放仿真脚本AODV.tcl和AODV_topo.scn。
2.在Cygwin中进入存放脚本的目录,输入ns AODV.tcl,回车运行。
3.若要以NAM方式运行仿真动画,则在Cygwin中输入startxwin进入启动XWin。
4.然后再输入ns AODV.tcl,则可看到仿真动画。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
第 4 页 共 14 页
华东师范大学软件学院实验报告
和 release 之时)。 3. 在对一个线程进行优先级设置的时候,如果这个线程处于被捐赠状态,则对 ori_priority 进行设置, 然后如果设置的优先级大于当前优先级,则改变当前优先级,否则在 捐赠状态取消的时候恢复 ori_priority。 4. 在释放锁对一个锁优先级有改变的时候应考虑其余被捐赠优先级和当前优先级。 5. 将信号量的等待队列实现为优先级队列。 6. 将 condition 的 waiters 队列实现为优先级队列。 7. 释放锁的时候若优先级改变则可以发生抢占。 代码实现: 由于对 thread 类改动较大,直接贴出整个类(也包含了 Part3 中的部份):
第 2 页 共 14 页
华东师范大学软件学院实验报告
会将在 "thread.h" 中声明的 thread_ mlfqs 设置为 true,这在 main () 中发生。启用 bsd 计划 程序后, 线程将不再直接控制自己的优先级。应忽略对 thread_ create () 的优先级参数, 以及 对 thread_ set _priority () 的任何调用, 而 thread_ get _ priority() 应返回由计划程序设置的线 程的当前优先级。在以后的任何项目中都不使用高级计划程序。
与之相对应的 thread_unblock():
1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. void thread_unblock (struct thread *t) { enum intr_level old_level; ASSERT (is_thread (t)); old_level = intr_disable (); ASSERT (t->status == THREAD_BLOCKED); list_insert_ordered (&ready_list, &t->elem, (list_less_func *) &thread_priority_cmp, NULL); //check_queue_priority(); t->status = THREAD_READY; ready_thread++; intr_set_level (old_level); }
完成 Part1 所得结果如下:
Part2: Priority Scheduling 实现思路: 1. 在一个线程获取一个锁的时候,如果拥有这个锁的线程优先级比自己低就提高它的 优先级,并且如果这个锁还被别的锁锁着,将会递归地捐赠优先级,然后在这个线程释放掉 这个锁之后恢复未捐赠逻辑下的优先级。 2. 如果一个线程被多个线程捐赠,维持当前优先级为捐赠优先级中的最大值(acquire
int64_t blocked_ticks;
并添加 block 状态:
1. enum thread_status 2. { 3. THREAD_RUNNING, 4. THREAD_READY, 5. THREAD_BLOCKED, 6. THREAD_DYING 7. };
ቤተ መጻሕፍቲ ባይዱ
/* /* /* /*
Running thread. */ Not running but ready to run. */ Waiting for an event to trigger. */ About to be destroyed. */
在 tick 中 thread_foreach 要对每个线程都执行 check_blocked_ticks()以确定是否将他们激活。
1. void check_blocked_ticks(struct thread *t,void *aux){ 2. if (t->status==THREAD_BLOCKED && t->blocked_ticks>0) { 3. t->blocked_ticks--; 4. if (t->blocked_ticks==0) { 5. thread_unblock(t); 6. } 7. } 8. }
华东师范大学软件学院实验报告
华东师范大学软件学院实验报告
实验课程:操作系统实践 实验名称: Pintos-threads 实验编号: 指导教师: 一、实验目的 Pintos 是一个用于 80x86 体系结构的简单操作系统框架。它支持内核线程、加载和运行 用户程序以及文件系统, 但它以非常简单的方式实现了所有这些。在本次 pintos 项目中, 我 们将加强其在线程这一方面的支持。 在本任务中, 老师为我们提供了一个功能最小的线程系统。我们的工作是扩展此系统的 功能, 以便更好地了解同步问题。我们将主要在此分配的 "线程" 目录中工作, 其中一些工作 是在旁边的 "设备" 目录中进行的。编译应在 "线程" 目录中完成。 年级:大二 姓名: 学号: 组号: 实验日期:2018/11/22 实验时间:4 学时 实验成绩:
其中调用到的 thread_block():
1. void 2. thread_block (void) 3. {
第 3 页 共 14 页
华东师范大学软件学院实验报告
4. 5. 6. 7. 8. 9. 10. }
ASSERT (!intr_context ()); ASSERT (intr_get_level () == INTR_OFF); thread_current ()->status = THREAD_BLOCKED; ready_thread--; schedule ();
三、实验环境 操作系统:Ubuntu 18.04 软件要求:VScode、GCC、GNU、Perl、QEMU、X、Bochs
四、实验过程与分析 Part1: Alarm Clock 实现思路: 调用 timer_sleep 的时候直接把线程阻塞掉,然后给线程结构体加一个成员 blocked_ticks 来记录这个线程被 sleep 了多少时间, 然后利用操作系统自身的时钟中断(每 个 tick 会执行一次)加入对线程状态的检测, 每次检测将 blocked_ticks 减 1, 如果减到 0 就 唤醒这个线程。 首先在 thread.h 中线程类中加入:
改动后的 timer_sleep():
1. 2. 3. 4. 5. 6. 7. 8. 9. 10. void timer_sleep (int64_t ticks) { if (ticks<=0) return; enum intr_level old_level; old_level=intr_disable(); thread_current ()->blocked_ticks=ticks; thread_block(); intr_set_level(old_level); }
二、实验内容与实验步骤 第一步: 阅读和理解初始线程系统的代码。pintos 已经实现了线程创建和线程完成, 这是一个在 线程之间切换的简单调度程序, 以及同步基元 (信号量、锁、条件变量和优化障碍)。我们可 以通读源代码的某些部分, 看看发生了什么。例如:创建线程时, 我们将创建要计划的新上 下文。需要提供了一个要在此上下文中运行的函数, 作为 thread_ create () 的参数。第一次计 划并运行线程时, 它从该函数的开头开始, 并在该上下文中执行。当函数返回时, 线程将终 止。因此, 每个线程的行为就像在 pintos 内部运行的一个小型程序, 函数传递给 thread_ create (), 其作用类似于 main ()。在任何给定的时间, 只有一个线程运行, 其余的线程 (如果 有的话) 变为非活动状态。计划程序决定下一步运行哪个线程。 第二步: 重新实现在 "devicese/timerem. c" 中定义的 timer_sleep ()。目前系统虽然提供了一个工 作实现, 但它 基于"忙等待", 也就是说, 它在循环中旋转, 检查当前时间并调用线程, 直到有 足够的时间过去。我们要重新实现它, 以避免繁忙的等待。 [function] void timer_sleep (int64_t ticks) 暂停执行调用线程, 直到时间提前至少计时器 刻度。除非系统处于空闲状态, 否则线程不需要在 x 刻度后唤醒。只要把它放在准备好的队 列后, 他们已经等待了适当的时间。timer _sleep() 对于实时操作的线程非常有用, 例如, 对于
1. struct thread 2. { 3. /* Owned by thread.c. */ 4. tid_t tid; /* Thread identifier. */ 5. enum thread_status status; /* Thread state. */ 6. char name[16]; /* Name (for debugging purposes). */ 7. uint8_t *stack; /* Saved stack pointer. */ 8. int priority; /* Priority. */ 9. int org_priority; 10. struct list locks; 11. struct lock *waiting_for_lock; 12. struct semaphore *waiting_for_sema; 13. int64_t blocked_ticks; 14. struct list_elem allelem; /* List element for all threads list. */ 15. 16. /* Shared between thread.c and synch.c. */ 17. struct list_elem elem; /* List element. */ 18. 19. #ifdef USERPROG 20. /* Owned by userprog/process.c. */ 21. uint32_t *pagedir; /* Page directory. */ 22. #endif 23. 24. int nice; 25. int recent_cpu; 26. /* Owned by thread.c. */ 27. unsigned magic; /* Detects stack overflow. */ 28. };