操作系统课程设计实验报告以Linux为例Word格式文档下载.docx

上传人:b****6 文档编号:21633616 上传时间:2023-01-31 格式:DOCX 页数:54 大小:32.92KB
下载 相关 举报
操作系统课程设计实验报告以Linux为例Word格式文档下载.docx_第1页
第1页 / 共54页
操作系统课程设计实验报告以Linux为例Word格式文档下载.docx_第2页
第2页 / 共54页
操作系统课程设计实验报告以Linux为例Word格式文档下载.docx_第3页
第3页 / 共54页
操作系统课程设计实验报告以Linux为例Word格式文档下载.docx_第4页
第4页 / 共54页
操作系统课程设计实验报告以Linux为例Word格式文档下载.docx_第5页
第5页 / 共54页
点击查看更多>>
下载资源
资源描述

操作系统课程设计实验报告以Linux为例Word格式文档下载.docx

《操作系统课程设计实验报告以Linux为例Word格式文档下载.docx》由会员分享,可在线阅读,更多相关《操作系统课程设计实验报告以Linux为例Word格式文档下载.docx(54页珍藏版)》请在冰豆网上搜索。

操作系统课程设计实验报告以Linux为例Word格式文档下载.docx

叙述本篇报告要解决什么问题。

注意不可以抄写实验要求中的表述,要用自己的话重新组织我们这里所提出的问题。

3.解决方案:

叙述如何解决自己上面提出的问题,可以用小标题3.1,3.2…等分开。

这是实验报告的关键部分,请尽量展开来写。

注意,这部分是最终课程设计的基本分的部分。

这部分不完成,本课程设计不会及格。

4.实验结果:

按照自己的解决方案,有哪些结果。

结果有异常吗?

能解释一下这些结果吗?

同别人的结果比较过吗?

注意,这部分是实验报告出彩的地方。

本课程设计要得高分,应该在这部分下功夫。

5.结束语:

小结并叙述本次课程设计的经验、教训、体会、难点、收获、为解决的问题、新的疑惑等。

6.附录:

加了注释的程序清单,注释行数目至少同源程序行数目比1:

2,即10行源程序,至少要给出5行注释。

实验一 编译Linux内核

实验时间

  6小时

实验目的

  认识Linux内核的组成,掌握配置、编译、安装Linux内核的步骤。

实验目标

  下载2.6.19或更新的Linux内核,配置该内核使其支持NTFS,并在新的内核中修改其版本为LinuxNameTestKernelx.x.x,其中,Name是你的名字(汉语拼音);

x.x.x是新内核的版本号,最后在你的机器上编译安装这个新内核。

背景知识

  参见《RedHatEnterpriseLinux4入门与提高》第20章。

实验步骤

1.验证gcc的可用:

在你自己的工作目录下,编译链接运行HelloWorld程序。

2.在http:

//www.kernel.org上下载指定的内核,或者查找更新的稳定版内核并下载之。

3.准备相关工具。

提示:

如当前运行的Linux内核是基于2.4版本的,则需要更新以下软件:

module-init-tools和mkinitrd。

具体更新信息可参见下载内核源代码中的Documentation/Changes这个文件。

4.把源代码解压缩至/usr/src中,最终形成/usr/src/linuxx.x.x/目录(x.x.x是新内核的版本号)。

这里的注意点是路径的选择,一般要放在/usr/src/linuxx.x.x/目录下面,以满足Makefile对路径设置的初始要求。

5.进入源代码的根目录(/usr/src/linuxx.x.x),找到合适自己的内核配置方法,并按照实验目标对其进行配置。

6.修改/usr/src/linuxx.x.x/include/linux/version.h文件中的版本信息。

注:

如果没有这个文件,请执行命令:

makeinclude/linux/version.h

7.编译内核。

8.安装模块文件。

9.安装内核文件。

10.重新启动新内核。

实验结果

1.实验步骤1中,编译链接运行程序你下达了哪些命令?

2.实验步骤2中,你下载了哪个版本的内核文件?

3.实验步骤3中,你是否安装了相关工具?

如安装,则写出安装过程。

4.实验步骤4中,你是用哪些命令解压缩内核文件的?

5.实验步骤5中,你用了哪种内核配置的方法?

6.你对实验步骤6中涉及的文件做了怎样的修改?

7.实验步骤7-9的过程,是否出现错误?

如有,你是如何解决的?

8.观察你机器中GRUB的配置文件,它在安装完新内核后发生了哪些变化?

9.新内核启动过程是否成功?

如有错误,是哪些错误?

你是如何消错的?

(如不够,可另附页)

#include"

mqx_inc.h"

//将“max-inc.h”添加到源文件中

/*!

*\private

//声明私有变量及分配存储空间声明私有变量及分配存储空间

*

*\briefCreatesthelightweightsemaphore.

//简单创建轻量级的信号

*\param[in]sem_ptrPointertothelightweightsemaphoretocreate.

//创建轻量级指针信号

*\param[in]initial_numberInitalnumberofsemaphoresavailable.

//信号量可用的初始数量

*\param[in]hiddenTRUEifsemaphorewillnehiddenfromkernel,FALSEifnot.

如果信号量ne被隐藏在核心代码中则为true,否则则为false

*\param[in]userUsermodefunctionality.

//用户模式的功能

*\returnMQX_OK

//返回MQX_OK

*\returnMQX_EINVAL

//返回MOX_EINVAL

*\returnMQX_INVALID_LWSEM

//返回MQX_INVALID_LWSEM

*\see_lwsem_create

*\see_lwsem_create_hidden

*\see_usr_lwsem_create

*\seeLWSEM_STRUCT

*/

_mqx_uint_lwsem_create_internal

LWSEM_STRUCT_PTRsem_ptr,

_mqx_intinitial_number,//初始数

booleanhidden,//隐藏

booleanuser//用户

{

KERNEL_DATA_STRUCT_PTRkernel_data;

//内核数据结构指针的核心数据

LWSEM_STRUCT_PTRsem_chk_ptr;

//lwsemstructPTRSEM检查PTR

#ifMQX_ENABLE_USER_MODE

//如果启用用户模式代码

if(user&

&

!

_psp_mem_check_access_mask((uint_32)sem_ptr,sizeof(LWSEM_STRUCT),MPU_UM_R,MPU_UM_RW))

如果用户

{

returnMQX_INVALID_LWSEM;

//返回MQX_INVALID_LWSEM;

}

#endif/*MQX_ENABLE_USER_MODE*///结束条件指令

_GET_KERNEL_DATA(kernel_data);

//得到的内核数据(内核-数据)

_KLOGE2(KLOG_lwsem_create,initial_number);

//

sem_ptr->

VALUE=initial_number;

_QUEUE_INIT(&

sem_ptr->

TD_QUEUE,0);

_int_disable();

if(!

hidden)//如果没有隐藏

#ifMQX_CHECK_ERRORS

/*Checkiflwsemisalreadyinitialized*/

//检查lwsem是否已经初始化

#ifMQX_ENABLE_USER_MODE//如果用户启用mqx

if(user)

sem_chk_ptr=(LWSEM_STRUCT_PTR)((pointer)kernel_data->

USR_LWSEM.NEXT);

while(sem_chk_ptr!

=(LWSEM_STRUCT_PTR)((pointer)&

kernel_data->

USR_LWSEM))

if(sem_chk_ptr==sem_ptr)

_int_enable();

_KLOGX2(KLOG_lwsem_create,MQX_EINVAL);

return(MQX_EINVAL);

sem_chk_ptr=(LWSEM_STRUCT_PTR)((pointer)sem_chk_ptr->

NEXT);

else

#endif/*MQX_ENABLE_USER_MODE*/

sem_chk_ptr=(LWSEM_STRUCT_PTR)((pointer)kernel_data->

LWSEM.NEXT);

=(LWSEM_STRUCT_PTR)((pointer)&

LWSEM))

return(MQX_EINVAL);

sem_chk_ptr=(LWSEM_STRUCT_PTR)((pointer)sem_chk_ptr->

#endif/*MQX_CHECK_ERRORS*/

if(user)

_QUEUE_ENQUEUE(&

USR_LWSEM,sem_ptr);

LWSEM,sem_ptr);

VALID=LWSEM_VALID;

_KLOGX2(KLOG_lwsem_create,MQX_OK);

return(MQX_OK);

}

*Becauselightweightsemaphoresareacorecomponent,anapplicationneednotto

*createthecomponentbeforeitcreateslightweightsemaphores.

//因为是轻量的核心组件,所以应用程序不需要在它创建的轻量级信号量创建组件

//参数sem_ptr指针创建轻量级信号.

//参数initial_number初始数量的可用信号量。

*\returnMQX_OK返回MQX_OK

*\returnMQX_EINVAL返回MQX_EINVAL

*\returnMQX_INVALID_LWSEM返回MQX_INVALID_LWSEM

*\see_lwsem_create_hidden创建隐藏

*\see_lwsem_destroy释放函数

*\see_lwsem_post向服务器传送数据

*\see_lwsem_test测试

*\see_lwsem_wait等待

*\see_lwsem_wait_for等待

*\see_lwsem_wait_ticks等待时间中断

*\see_lwsem_wait_until等待结束后继续执行

_mqx_uint_lwsem_create

_mqx_intinitial_number

#ifMQX_ENABLE_USER_MODE&

MQX_ENABLE_USER_STDAPI

if(MQX_RUN_IN_USER_MODE)

return_usr_lwsem_create(sem_ptr,initial_number);

#endif

return_lwsem_create_internal(sem_ptr,initial_number,FALSE,FALSE);

*\briefCreatesthelightweightsemaphorehiddenfromkernel.

//简单创建轻量级信号量隐藏在核心数据中

//参数sem_ptr指针创建轻量级信号

*\returnMQX_OK返回MQX_OK

*\returnMQX_EINVAL返回MQX_EINVAL

*\returnMQX_INVALID_LWSEM返回MQX_INVALID_LWSEM

*\see_lwsem_create创建

_mqx_uint_lwsem_create_hidden

return_lwsem_create_internal(sem_ptr,initial_number,TRUE,FALSE);

*\briefCreatesthelightweightsemaphorehiddenformkernel.

*Thisfunctionisanequivalenttothe_lwsem_create()APIcallbutitcanbe

*executedfromwithintheUsertaskorothercoderunningintheCPUUsermode.

//这个函数是一个相当于_lwsem_create()API调用,但是它可执行从用户任务或其他代码在CPU用户模式运行。

*Parameterspassedtothisfunctionbypointerarerequiredtomeetthememory

*protectionrequirementsasdescribedintheparameterlistbelow.

//如下面的参数列表描述。

需要满足内存的指针传递给这个函数的参数保护的要求。

*\param[in]sem_ptrReadonly.Pointertothelightweightsemaphoretocreate.

//参数[中]sem_ptr只读。

由指针的轻量级的信号来创建。

//参数[中]initial_number初始数量的可用信号量。

*\returnMQX_OK返回MQX_OK

_mqx_uint_usr_lwsem_create

MQX_API_CALL_PARAMSparams=

{(uint_32)sem_ptr,(uint_32)initial_number,(uint_32)FALSE,0,0};

return_mqx_api_call(MQX_API_LWSEM_CREATE,&

params);

*\private//声明私有变量及分配存储空间

*\briefDestroysthelightweightsemaphore.

//简单的释放轻量级信号量

*\param[in]sem_ptrPointertothecreatedlightweightsemaphore.

//\参数[中]sem_ptr指针创建的轻量级的信号量的

//[在]用户参数的用户模式功能。

*\returnMQX_OK//返回MQX_OK

*\returnMQX_INVALID_LWSEM(Lwsem_ptrdoesnotpointtoavalidlightweightsemaphore.)//返回MQX_INVALID_LWSEM(lwsem_ptr没有指向有效的轻量级的信号。

_mqx_uint_lwsem_destroy_internal

booleanuser

{/*Body*/

KERNEL_DATA_STRUCT_PTRkernel_data;

TD_STRUCT_PTRtd_ptr;

LWSEM_STRUCT_PTRsem_chk_ptr;

_KLOGE2(KLOG_lwsem_destroy,sem_ptr);

#ifMQX_CHECK_VALIDITY

if(sem_ptr->

VALID!

=LWSEM_VALID)

_KLOGX2(KLOG_lwsem_destroy,MQX_INVALID_LWSEM);

return(MQX_INVALID_LWSEM);

}/*Endif*/

VALID=0;

/*Invalidatethesemaphore*/

while(_QUEUE_GET_SIZE(&

TD_QUEUE))

_QUEUE_DEQUEUE(&

TD_QUEUE,td_ptr);

_BACKUP_POINTER(td_ptr,TD_STRUCT,AUX_QUEUE);

_TIME_DEQUEUE(td_ptr,kernel_data);

_TASK_READY(td_ptr,kernel_data);

}/*Endwhile*/

/*Checkiflwsemisinkernel'

ssemaphorelist*/

//检查lwsem是否是内核的信号量表

/*removesemaphorefromkernelLWSEMqueue*/

_QUEUE_REMOVE(&

break;

/*removesemaphorefromkerne

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 外语学习 > 韩语学习

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1