华科操作系统实验

合集下载

华中科技大学单片机实验实验报告MCS51单片机

华中科技大学单片机实验实验报告MCS51单片机

华中科技大学单片机实验报告MCS-51系列单片机(单片机原理及应用实验)(根据2014年电气与电子工程学院单片机实验课程改编)专业:电气工程及其自动化班级:气卓1301姓名:廖鹏毅学号:ALL RIGHT RESERVED目录实验3.1 软件仿真实验 (3)实验2“跑马灯”实验 (8)实验3 数码管显示功能的实现 (11)实验5 按键功能的实现 (23)实验7 A/D转换器件TLC1543的用 (29)实验8 D/A转换器件TLV5617的应用 (34)实验14指示灯的外部中断控制 (47)实验18定时器控制继电器 (49)自行设计实验 (53)实验总结 (55)实验3.1 软件仿真实验一实验目的1 掌握软件仿真的方法2 熟悉集成开发环境的使用3 熟悉常用指令的功能4 熟悉程序调试的方法5 学习自己编写、调试计算机程序二实验内容1 将Keil软件设置为软件仿真的方式2 将3.1.4介绍的示例程序录入、编译、调试3 观察有关寄存器、变量的值,理解程序及指令的功能4 编译、调试、验证自己编写的子程序三实验步骤1 先阅读课本,大致了解仿真软件的使用和注意事项2 结合课本,边看书边上机操作,逐步了解和掌握仿真软件的使用3 阅读和理解3.1.4介绍的示例程序,并将其录入、编译、调试4 赋值给示例程序时,打开各观察窗口,观察有关寄存器、变量的值,验证其功能5 自行编译、调试、验证自己编写的子程序四实验结果1 给十六进制数转换为十进制数子程序赋初值,MOV H_DAT0,#01HMOV H_DAT1,#00H则编译加载调试该子程序,打开各观察窗口观察有关变量,实验发现D_DA T0,D_DAT1,D_DAT2,D_DAT3中的值分别为00,00,00,01。

则符合实际,即验证其功能。

2 给双字节乘法运算子程序赋初值,MOV R4,#8MOV R5,#9MOV R6,#6MOV R7,#7然后编译加载调试该子程序,并用观察窗口观察有关变量,实验发现MUL_0,MUL_1,MUL_2,MUL_3分别为08,04,04,07.则符合实际,即验证其功能。

操作系统实验报告--华科

操作系统实验报告--华科

实验一哲学家就餐问题一、实验目的1、熟练使用VC++6.0编译环境,调试并正确运行程序。

2、理解哲学家就餐问题中出现的问题,进而掌握死锁的必要条件。

3、理解源程序中产生和防止死锁的算法,及相关窗口操作。

4、熟悉哲学家就餐问题流程。

5、在VC++6.0环境下编译哲学家就餐问题演示程序,考虑其他解决死锁方法.二、实验原理1、问题描述有五个哲学家围坐在一圆桌旁,桌中央有一盘通心粉,每人面前有一只空盘子,每两人之间放一只筷子。

每个哲学家的行为是思考,感到饥饿,然后吃通心粉。

为了吃通心粉,每个哲学家必须拿到两只筷子,并且每个人只能直接从自己的左边或右边去取筷子。

2、分配方式方式一(不会进入死锁)仅当一个哲学家左右两边的筷子都可用时,才允许他拿筷子。

这样要么一次占有两只筷子(所有线程需要的资源)进行下一步的吃通心粉,然后释放所有的资源;要么不占用资源,这样就不可能产生死锁了。

方式二(会进入死锁)当筷子(资源)可用时,先分配左边的筷子,等待一会后再分配右边的筷子,由于这个过程中,左边的筷子一直没有释放,就有可能产生死锁了。

3、程序运行说明程序运行过程中会弹出一个MessageBox提示操作者操作:1)第一个对话框用于选择运行模式a.选择yes 表示采用的是运行的防止死锁的方式,这样的话整个程序可以一直运行下去,不会产生死锁。

b.选择no 表示运行产生死锁的方式会弹出第二个对话框。

2)第二个对话框用于选择运行时,线程运行的时间a. 选择res 线程时间比较短,很快就可以死锁b.选择no 线程时间跟选择yes 时候的时间差不多,产生死锁的时间稍微长一点。

三、实验过程及分析1、伪代码:1) 不发生死锁的方式(要么一下占用两支筷子,要么不占用)var mutexleftchopstick,mutexrightchopstick;beging:resting;waiting;p(mutexleftchopstick); //先改变左手筷子信号量p(mutexrightchopstick); //马上改变右手筷子信号量GetResource(leftchopstick,rightchopstick);eating;v(mutexleftchopstick);v(mutexrightchopstick);end2) 发生死锁的方式(一旦可以占用筷子,就马上占用)var mutexleftchopstick,mutexrightchopstick;beging:resting;waiting;p(mutexleftchopstick); //改变左手筷子信号量GetResource(leftchopstick); //获取左手筷子p(mutexrightchopstick); //改变右手筷子信号量GetResource(rightchopstick); //获取右手筷子eating;v(mutexleftchopstick);v(mutexrightchopstick);end2、代码分析:1)不发生死锁的方式:先确定两只筷子均没被占用才获取筷子,这样就打破了死锁的必要条件。

华科操作系统实验

华科操作系统实验

课程实验报告课程名称:操作系统课程设计专业班级:学号:姓名:指导教师:报告日期:计算机科学与技术学院目录实验1:进程并发实验 (1)实验概述 (1)实验内容 (1)实验设计 (1)实验过程 (2)实验结果 (6)实验小结 (7)实验2:添加系统功能调用 (8)实验概述 (8)实验内容 (8)阶段1 添加源代码 (8)阶段2 连接新的系统功能调用 (9)阶段3 重建内核 (10)阶段4 修改grub文件 (13)实验小结 (14)实验3:添加设备驱动程序 (15)实验概述 (15)实验内容 (15)阶段1 编写设备驱动程序 (15)阶段2 编译设备驱动模块 (16)阶段3 加载设备驱动模块 (17)阶段4 生成设备文件 (18)阶段5 编写应用程序测试 (18)实验小结 (19)实验总结 (20)实验1:进程并发实验实验概述通过本次进程并发实验,让同学更加熟悉和理解Linux编程环境。

实验内容本次实验的内容主要分为两个任务:1.编写一个C程序,用read、write等系统调用实现文件拷贝功能。

命令形式:copy <源文件名> <目标文件名>2.编写一个C程序,使用图形编程库 (QT/GTK)分窗口显示三个并发进程的运行(一个窗口实时显示当前系统时间,一个窗口循环显示0到9,一个窗口做1到1000的累加求和,刷新周期均为1秒)。

实验设计任务1:实验1的第一个阶段需要实现一个简单的C语言程序,首先需要有一个复制的源文件,同时需要创建一个存放复制内容的复制文件,文件复制传输的中间站可以设置一个缓冲数组,此次试验设计了一个大小为10个字节的数组。

打开复制源文件,返回一个INT标识,使用readbuf()函数,每次读取10个字节的内容,将内容存放到缓冲区数组,使用writebuf()函数将缓冲区的10个字节写到复制文件中,重复上述过程直到将整个复制过程完成。

任务2:实验的第二个阶段是实现进程的同步,实现的工具是QT。

华科_计算机系统实验报告

华科_计算机系统实验报告

课程实验报告课程名称:计算机系统基础专业班级:学号:姓名:指导教师:报告日期:年月日计算机科学与技术学院目录实验1: (1)实验2: (7)实验3: (24)实验总结 (34)实验1:数据表示1.1 实验概述实验目的:更好地熟悉和掌握计算机中整数和浮点数的二进制编码表示。

实验目标:加深对数据二进制编码表示的了解。

实验要求:使用有限类型和数量的运算操作实现一组给定功能的函数。

实验语言:c。

实验环境:linux1.2 实验内容需要完成bits.c中下列函数功能,具体分为三大类:位操作、补码运算和浮点数操作。

1)位操作表1列出了bits.c中一组操作和测试位组的函数。

其中,“级别”栏指出各函数的难度等级(对应于该函数的实验分值),“功能”栏给出函数应实现的输出(即功能),“约束条件”栏指出你的函数实现必须满足的编码规则(具体请查看bits.c中相应函数注释),“最多操作符数量”指出你的函数实现中允许使用的操作符的最大数量。

你也可参考tests.c中对应的测试函数来了解所需实现的功能,但是注意这些测试函数并不满足目标函数必须遵循的编码约束条件,只能用做关于目标函数正确行为的参考。

表1 位操作题目列表2)补码运算表2列出了bits.c中一组使用整数的补码表示的函数。

可参考bits.c中注释说明和tests.c中对应的测试函数了解其更多具体信息。

表2 补码运算题目列表3)浮点数操作表3列出了bits.c中一组浮点数二进制表示的操作函数。

可参考bits.c中注释说明和tests.c中对应的测试函数了解其更多具体信息。

注意float_abs的输入参数和返回结果(以及float_f2i函数的输入参数)均为unsigned int类型,但应作为单精度浮点数解释其32 bit二进制表示对应的值。

表3 浮点数操作题目列表表示,当输入参数是NaN 时,返回NaN 号整型操作,包括||,&&以及if,while控制结构4 float_f2i 返回浮点数‘f’的强制整型转换“(int)f”表示仅能使用任何整型/无符号整型操作,包括||,&&以及if,while控制结构301.3 实验设计根据题目要求,选择合适的操作符来编写代码。

华科实验报告模板

华科实验报告模板

华科实验报告模板
1. 实验目的
(说明实验的目的和意义,可以引用相关文献)
2. 实验原理
(介绍实验的基本原理和背景知识,可以引用相关文献)
3. 实验仪器和材料
(列出实验所用的仪器、设备和材料,包括型号和规格)
4. 实验步骤
(详细描述实验的步骤,可以配上图表和算法)
5. 实验结果与分析
(将实验结果以表格、图形等形式进行呈现,并对实验结果进行详细的分析和解释)
6. 实验总结
(总结实验的主要内容,简要说明实验结果是否达到预期目标,并分析不足之处和改进措施)
7. 参考文献
(列出实验报告中所引用的文献)
附:实验数据、图表和代码
(将实验所得数据、图表和代码附在报告的附录中,方便其他人查看和复现实验结果)
以上是华科实验报告的基本结构和模板,根据实际需要可以对各个部分进行增减和调整。

在撰写实验报告时,需要注意以下几点:
1. 清晰明确:实验目的、原理、步骤和结果表达要清晰明确,不留歧义。

2. 简明扼要:用简洁的语言描述实验过程和结果,避免啰嗦和冗长。

3. 准确无误:字句和数据要准确无误,避免错误和误导。

4. 结构严谨:实验报告的结构要合理严谨,各部分之间要有明确的逻辑连接。

5. 语言规范:文章要使用准确、规范的语言,注重语法和标点的正确使用。

通过遵循以上几点,并根据具体实验的要求,撰写出一份完整、准确、简洁的实验报告。

华科计算机并行实验报告

华科计算机并行实验报告

课程设计报告题目:并行实验报告课程名称:并行编程原理与实践专业班级:学号:姓名:指导教师:报告日期:计算机科学与技术学院目录1,实验一 (1)1 实验目的与要求 (1)1.1实验目的 (1)1.2实验要求 (1)2 实验内容 (1)2.1.1熟悉pthread编程 (1)2.1.2简单的thread编程 (2)2.2.1熟悉openMP编程 (3)2.3.1熟悉MPI编程 (4)2,实验2~5 (7)1 实验目的与要求 (7)2 算法描述 (7)3.实验方案 (8)4实验结果与分析 (8)3 心得体会 (10)附录: (10)3 蒙特.卡罗算法求π的并行优化 (19)1.蒙特.卡罗算法基本思想 (19)2.工作过程 (20)3.算法描述 (20)4 设计与实现 (21)5 结果比较与分析 (23)6 思考与总结 (24)1,实验一1 实验目的与要求1.1实验目的1)熟悉并行开发环境,能进行简单程序的并行开发,在Linux下熟练操作。

2)熟悉一些并行工具,如pthread,OpenMP,MPI等进行并行编程3)培养并行编程的意识1.2实验要求1)利用pthread、OpenMP、MPI等工具,在Linux下进行简单的并行编程,并且掌握其编译、运行的方法。

2)理解并行计算的基础,理解pthread、OpenMP、MPI等并行方法。

2 实验内容2.1.1熟悉pthread编程Linux系统下的多线程遵循POSIX线程接口,称为 pthread。

编写Linux下的多线程程序,需要使用头文件pthread.h,连接时需要使用库libpthread.a。

下面是pthread编程的几个常用函数:1,int pthread_create(pthread_t *restrict tidp,const pthread_attr_t *restrict attr, void *(*start_rtn)(void),void *restrict arg);返回值:若是成功建立线程返回0,否则返回错误的编号形式参数:pthread_t *restrict tidp 要创建的线程的线程id指针const pthread_attr_t *restrict attr 创建线程时的线程属性void* (start_rtn)(void) 返回值是void类型的指针函数void *restrict arg start_rtn的行参2 , int pthread_join( pthread_t thread, void **retval );thread表示线程ID,与线程中的pid概念类似;retval用于存储等待线程的返回值连接函数pthread_join()是一种在线程间完成同步的方法。

华科操作系统实验报告

华科操作系统实验报告

华科操作系统实验报告一、实验目的操作系统是计算机系统的核心组成部分,对于理解计算机的工作原理和提高计算机应用能力具有重要意义。

本次华科操作系统实验的主要目的是通过实际操作和实践,深入理解操作系统的基本概念、原理和功能,掌握操作系统的核心技术和应用方法,提高我们的实践能力和问题解决能力。

二、实验环境本次实验使用的操作系统为Windows 10 和Linux(Ubuntu 2004),开发工具包括 Visual Studio Code、GCC 编译器等。

实验硬件环境为个人计算机,配置为英特尔酷睿 i7 处理器、16GB 内存、512GB 固态硬盘。

三、实验内容1、进程管理进程创建与销毁进程调度算法模拟进程同步与互斥2、内存管理内存分配与回收算法实现虚拟内存管理3、文件系统文件操作与管理文件系统的实现与优化4、设备管理设备驱动程序编写设备分配与回收四、实验步骤及结果1、进程管理实验进程创建与销毁首先,使用 C 语言编写程序,通过系统调用创建新的进程。

在程序中,使用 fork()函数创建子进程,并在子进程和父进程中分别输出不同的信息,以验证进程的创建和执行。

实验结果表明,子进程和父进程能够独立运行,并输出相应的信息。

进程调度算法模拟实现了先来先服务(FCFS)、短作业优先(SJF)和时间片轮转(RR)三种进程调度算法。

通过模拟多个进程的到达时间、服务时间和优先级等参数,计算不同调度算法下的平均周转时间和平均等待时间。

实验结果显示,SJF 算法在平均周转时间和平均等待时间方面表现较好,而 RR 算法能够提供较好的响应时间和公平性。

进程同步与互斥使用信号量和互斥锁实现了进程的同步与互斥。

编写了生产者消费者问题的程序,通过信号量控制生产者和消费者对缓冲区的访问,避免了数据竞争和不一致的情况。

实验结果表明,信号量和互斥锁能够有效地实现进程间的同步与互斥,保证程序的正确性。

2、内存管理实验内存分配与回收算法实现实现了首次适应(First Fit)、最佳适应(Best Fit)和最坏适应(Worst Fit)三种内存分配算法。

华科汇编第一次实验报告

华科汇编第一次实验报告

汇编实验报告姓名:班级:CS1209 学号:一、实验目的(1) 掌握汇编源程序开发的过程:编译、汇编MASM、连接LINK、用TD调试。

(2)编写简单的汇编代码,加强对汇编语言的理解。

二、实验内容及要求(1)、《80X86汇编语言程序设计》P299中的程序实例。

要求:重复7.4.3节中的整个过程,初步掌握TD的使用方法。

(2)、《80X86汇编语言程序设计》P31中的1.14题。

要求:直接在TD中输入指令进行求和(如MOV AH, x1、MOV AL, x2、ADD AH, AL),记录执行指令后标志位SF、OF、CF、ZF的值(验证自己的作业情况)。

(3)、编写程序缓冲区BUF中有若干个有符号短整数(2个字节),找出其中的绝对值最大的数并存放到变量RESULT中。

要求:在BUF中定义不同的正负数,用TD查看变量RESULT的值是否正确。

三、实验步骤题目一,从键盘中输入一个字符,若该字符为‘1’,则在下一行输出字符串‘11111111111!’后返回DOS;若该字符为‘2’,则在下一行输出字符串‘22222222222!‘后返回DOS;若该字符为其他字符,则在下一行输出字符串’Other Character’后返回DOS。

通过TD调试找出下面代码的错误并改正。

1、用记事本建立汇编源程序文件WAN.ASM.386STACK SEGMENT USE16 STACKDB 200 DUP(0)STACK ENDSDATA SEGMENT USE16BUF1 DB 0AH,0DH,'1111111111! $'BUF2 DB 0AH,0DH,'2222222222! $'BUF3 DB 0AH,0DH,'Other Character!',0AH,0DHDATA ENDSCODE SEGMENT USE16ASSUME DS:DATA,CS:CODE,SS:STACKSTART: MOV AX,DATAMOV DS,AXMOV AH,1INT 21H ;等待从键盘输入一个字符CMP AL,'1'JE A1CMP AL,'2'JE A2JMP A3A1: LEA DX,BUF1MOV AH,9INT 21HA2: LEA DX,BUF2MOV AH,9INT 21HA3: LEA DX,BUF3MOV AH,9INT 21HEXIT: MOV AH,4CHINT 21HCODE ENDSEND START2.编译连接该程序3.运行程序中出现了如下问题。

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

华科操作系统实验 Corporation standardization office #QS8QHH-HHGX8Q8-GNHHJ8课程实验报告课程名称:操作系统课程设计专业班级:学号:姓名:指导教师:报告日期:计算机科学与技术学院目录实验1:进程并发实验1.1 实验概述通过本次进程并发实验,让同学更加熟悉和理解Linux编程环境。

1.2 实验内容本次实验的内容主要分为两个任务:1.编写一个C程序,用read、write等系统调用实现文件拷贝功能。

命令形式:copy <源文件名> <目标文件名>2. 编写一个C程序,使用图形编程库 (QT/GTK)分窗口显示三个并发进程的运行(一个窗口实时显示当前系统时间,一个窗口循环显示0到9,一个窗口做1到1000的累加求和,刷新周期均为1秒)。

1.3 实验设计任务1:实验1的第一个阶段需要实现一个简单的C语言程序,首先需要有一个复制的源文件,同时需要创建一个存放复制内容的复制文件,文件复制传输的中间站可以设置一个缓冲数组,此次试验设计了一个大小为10个字节的数组。

打开复制源文件,返回一个INT标识,使用readbuf()函数,每次读取10个字节的内容,将内容存放到缓冲区数组,使用writebuf()函数将缓冲区的10个字节写到复制文件中,重复上述过程直到将整个复制过程完成。

任务2:实验的第二个阶段是实现进程的同步,实现的工具是QT。

主要实现3个进程的同步,3个进程分别为:实时显示系统时间、循环显示0-9、显示1-1000的累加和。

以上程序的刷新时间设置为1秒钟。

使用的是c++编程语言。

为了实现3个进程。

需要为这3个进程分别创建3个不同的类,这3个不用的类具有不同的成员函数,使用成员函数来实现进程的所代表的具体细节。

为了实现进程的结果能实时更新,需要调用connect()函数,该函数的功能是每当其中的timer每次发生变化时,就回调用该类的成员函数,也就是进程的具体实现,从而实时显示进程的细节内容。

而3个进程的实现是在Main中创建3个类,对应3个进程,调用类的一些函数实现进程并发。

1.4 实验过程给出实验过程的详细描述,分步骤说明实验的具体操作过程任务1。

1.首先需要有复制源文件和复制目的文件,具体实现方式如图1-1所示。

图 1-1 打开文件分别以只读和只写的方式将文件打开。

2.创建缓冲区,大小为10个字节的数组。

如图1-2所示。

图 1-2 创建缓存区3.通过循环读写的方式实现文件的复制,如图1-3所示。

图 1-3 文件复制4.关闭文件。

5.其中的writebuf和readbuf是自己编写的一个读和写的函数,调用的是read和write函数。

如图1-4所示。

图 1-4 读写函数任务2。

1.首先根据3个不同的进程创建3个不同的类。

如图1-5,图1-6,图1-7所示。

图 1-5 进程1图 1-6 进程2图 1-7 进程32.分别为这3个类编写其对应的成员函数,实现进行的具体功能。

具体实现如图1-8,图1-9,图1-10所示。

图 1-8 进程显示时间图 1-9 进程循环显示0-9图 1-10 进程显示1-1000求和3.在一个入口函数中创建3个不同的子进程,在进程中分别创建对应的类,使用类的方法来实现进程的功能。

具体实现如图1-11.图 1.11 入口函数4.分别为这3个进程设计器对应的显示菜单,其中部分变量可以通过设置参数的方式进行调控。

并将进程输出结果与Forms中的UI绑定,在进程结果显示在界面中。

1.5实验结果任务1.任务1的内容比较简单,主要使用C语言完成程序的编写,其对应的结果有两种情况,复制成功或者复制失败,从实验1的第一阶段的代码可以看出,失败阶段主要是是因为复制源文件打开失败造成的。

下面主要演示完成正确赋值的情况。

如图1-12所示。

图 1-12 运行结果图将infile与outfile进行对比如图1-13,图1-14所示。

图 1-13 复制原文件infile图 1-14 任务1复制输出文件进过对比可以看出,程序运行的结果正确。

任务2.任务2需要并发执行3个进程,3个进程分别显示系统当前的时间, 1-1000的求和以及循环显示0-9,刷新时间为1秒(1000ms),程序的运行结果如下图 1-15所示。

图 1-15 任务2进程运行结果图1.6实验小结本次实验分为2个任务,第一个任务完成文件的赋值拷贝。

只要是运用write函数和read函数对文件进行读写操作。

操作简单没有什么难度,通过写readbuf函数和writebuf函数使得读写函数使用起来更加的方便。

运行结果达到了预期要求。

第2个任务需要实现进程的并行以及运行结果的刷新显示,编写的语言是采用c++语言,需要为3个进程创建3个不同的类,在同一个函数入口中对3个并发进行进行操作,并显示其对应的结果。

其中遇到的问题主要集中在两个方便。

一是怎样将输出结果与显示窗口进行绑定,绑定时需要注意什么以及如何调整。

需要去网上查阅资料对对应的参数进行调整,由于QT的环境搭建的很好,学起来还是很轻松的。

将菜单对应的标签与输出结果绑定即可。

第二个问题是怎样实现1秒钟刷新一次输出结果呢?查阅资料发现可以使用connect(timer, SIGNAL(timeout()), this, SLOT(MainWindowtm()));每当timer发生变化时就会调用SLOT中对应的函数,该函数就是对应的进程。

每一秒调用一次从而实现刷新。

通过上述方法成功实现了进程并行与输出结果的刷新。

实验2:添加系统功能调用2.1 实验概述通过添加系统功能调用,掌握添加系统功能调用的方法。

2.2 实验内容采用编译内核的方法,添加一个新的系统调用,实现文件拷贝功能编写一个应用程序,测试新加的系统调用。

2.2.1 阶段1 添加源代码1.任务描述:添加的系统功能调用需要实现一个文件拷贝的系统功能。

2.实验设计:本次实验需要添加的系统功能调用时文件的复制拷贝功能,由于实验1的任务1已经使用c语言实现了该功能则可以借用实验1任务1的思想,只是需要将函数做一些修改,包括函数名格式,入口参数,以及其中调用的其他函数。

3.实验过程:将调用函数名修改为以sys_开头的函数,命名为sys_mysyscall。

文件的打开函数以及输出结果函数也需要使用内核函数,避免内存检查时出现错误。

源代码如图2-1所示。

图 2-1 编写系统调用源代码4.实验结果:完成系统功能调用源代码的设计。

2.2.2 阶段2 连接新的系统功能调用1.任务描述:该阶段的任务主要是使得内核的其余部分知道该系统功能调用的存在。

在该阶段需要编辑两个文件,include/linux/syscalls.h以及arch/x86/syscalls/syscall_32.tbl。

2.实验设计:该阶段需要修改include/linux/syscalls.h的代码添加新的系统调用的函数定义。

asmlinkage long sys_mysyscall(int number);接着需要修改arch/x86/syscalls/syscall_32.tbl(系统调用表)在系统调用表中为新增的系统调用分配调用号和系统调用名。

3.实验过程:在系统调用定义中添加新的系统条用定义。

操作如图2-2所示。

图 2-2 添加系统调用定义接着需要在系统调用表中为该系统调用分配一个系统调用名和一个系统调用号。

系统调用号为359,系统调用名为mysyscall如图2-3所示。

图2-3 分配系统调用号和调用名4.实验结果:完成第二阶段添加系统定义以及为系统调用分配系统调用名和系统调用号。

2.2.3 阶段3 重建内核1.任务描述:在第三阶段主要完成系统内核的重建。

2.实验设计:,其完成的步骤为:1.生成内核配置文件,2.编译内核映像,3.生成并安装模块,4.安装新的系统。

其中如果报错说没有对应的软件包则需要下载软件包。

3.实验过程:a.首先根据自己的内核版本下载对应的内核源码,生成内核配置文件,接着编译内核映像,实现的操作为:make menuconfig。

运行成功回出现一个弹出框,可以直接退出,如图2-4所示。

图 2-4 生成内核配置文件1退出后显示如下结果如图 2-5 所示。

图 2-5 生成内核配置文件2b.当完成内核文件的配置下面需要完成内核配置映像。

操作为指令为make bzImage。

如图2-6所示。

图 2-6 编译内核映像由于在撰写实验报告时已经完成了编译,编译结果如图2-7所示。

图 2-7 编译内核映像结果c.接下来需要编译内核模块。

操作指令如图2-8所示。

图 2-8 编译内核模块编译结果如图2-9所示。

图 2-9 编译内核模块结果d.生成并安装模块。

操作指令为:make modules_install,如图2-10所示。

图 2-10 生成并安装内核模块d.安装新的系统。

操作指令如图2-11所示。

图 2-12 安装新的系统安装结果如图2-12所示。

图 2-13 安装新的系统2.2.4 阶段4 修改grub文件将/etc/default目录下的grub文件注释掉 GRUB_HIDDEN_TIMEOUT=0,然后运行update-grub命令。

如图2-14所示。

图 2-14 注释掉GRUB_HIDDEN_TIMEOUT=02.2.5 重启选择新的修改内核选择新的修改内核如图 2-15所示。

图 2-15 选择新的修改内核2.2.6 编写程序测试编写的检测程序通过系统调用的返回值判断是否赋值成功,如图2-16所示。

图 2-17 测试程序4.实验结果测试结果如图2-18,图2-19所示。

图 2-18 系统调用测试图 2-19 系统调用测试结果2.3 实验小结对本次实验使用的理论、技术、方法和结果进行总结。

描述一下通过实验你有哪些收获。

本次实验的工程量还是相当大的,其中需要是实验步骤很繁多,并且必须一步一步全部正确,不然后面的步骤无法完成。

实验课程的PPT教学做的还是很完善的,只要根据要求来,每步做正确,还是很容易的。

实验完成了系统功能调用的添加。

从最开始的编写系统调用源代码的编写到最后的系统功能调用的测试还是遇到了很多的问题。

其中的内核版本的下载一定要和自己的版本很好的兼容,不然可能或多或少出现一些不必要的麻烦。

添加的系统功能调用的源代码一定要使用内核提供的函数进行编写,因为用户态的内存访问受到限制,可能会引起内存检测时出现错误。

在编译内核模块和安装内核模块时需要很长的时间,需要确保在这段时间里电脑能正常的运行。

不然要浪费掉很长的时间做一些重复的事情。

在修改/etc/default/grub文件时可能不能直接修改,需要进行一些特殊的操作,类似获得权限。

本次实验的收获良多,了解并实践了添加系统功能调用的整个过程,知道了系统功能调用的编写添加的机制,学会了怎样去添加一个新的系统功能调用。

相关文档
最新文档