




免费预览已结束,剩余4页可下载查看
下载本文档
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
操作系统课程设计设计项目:1、Linux进程调度2、Linux系统调用姓名: oxstar计算机科学与工程学院2009年9月一、准备工作1、Linux系统安装本次试验的Linux系统版本为Red Hat Linux 9,初始内核版本为2.4.20-8。我选择的安装方式是在VMware虚拟机中安装,虚拟机中是Linux单系统,实验起来更加方便而且安全。VMware参数设置好以后,就可以完全参照操作系统实验指导中的安装步骤进行操作了。2、2.4.32内核的准备2.4.32内核是2.4内核的最后稳定版,也是本次试验的基本内核平台。准备步骤如下:1. 网上下载2.4.32内核(linux-2.4.32.tar.gz)并存入优盘;2. 在目录/mnt下新建usb文件夹,输入命令# mount t vfat o iocharset=cp936 /dev/sda1 /mnt/usb以挂载优盘。“-o iocharset=cp936”这条命令是配置优盘支持显示简体中文;3. 将linux-2.4.32.tar.gz放在/usr/src文件夹下,并在此解压:# tar -xzvf linux-2.4.32.tar.gz;4. 删除原内核的链接,并为linux-2.4.32文件夹创建一个名为“linux”的新链接。3、2.4.32内核的编译1. 进入/usr/src/linux文件夹;2. 分别执行:# make mrproper/确保源代码目录下没有不正确的.o文件以及文件的互相依赖。# make oldconfig/进行内核配置。此处用的是原有配置。# make dep/读取配置过程生成的配置文件,来创建对应于配置的依赖关系树,从而决定哪些需要编译而那些不需要。# make clean/删除前面步骤留下的文件,以避免出现一些错误。# make bzImage/生成一个稍大的内核用于引导。3. 将usr/src/linux/arch/i386/boot目录下的bzImage文件复制到/boot文件夹下,并将其重命名为mybzImage;4. 在/boot/grub/grub.conf文件末尾添加如下的代码:title Red Hat Linux (2.4.32)root (hd0,0)kernel /mybzImage5. 重新启动系统,选择Red Hat Linux (2.4.32),进入新编译的内核:二、实验一:进程调度1、实验目的及要求理解Linux进程调度的工作机制。在不改变Linux系统性能的前提下,重写Linux核心的调度程度(schedule()函数)中的goodness()函数,使得一个新创建的普通进程所获得的优先级比一个曾经运行过的进程的优先级高(例如高300900)。2、实验步骤及程序清单1. 阅读Linux 2.4内核中进程调度方面的部分源代码(例如函数schedule()、goodness()以及一些关键的结构如task_struct等等),了解其调度机制。2. 修改内核中部分的源代码(1)在/usr/src/linux/include/linux/sched.h文件中找到结构task_struct的定义,在其中添加一个新分量:300int lock_depth;/* Lock depth */301302/*303 * Add my new varialble304 * Modified by Niu Xing305 */306int fb;(2)在/usr/src/linux/include/linux/sched.h文件中找到三种调度策略的宏定义,再在其后添加一个新的定义:105/*106 * Scheduling policies107 */108#define SCHED_OTHER0109#define SCHED_FIFO1110#define SCHED_RR2111/* Modified by Niu Xing */112#define SCHED_FBSCHED_OTHER(3)在/usr/src/linux/kernel/sched.c文件中找到goodness()函数,修改部分代码:154if (p-policy & SCHED_YIELD)155goto out;156157/*158 * Feedback process159 * Modified by Niu Xing160 */161if (p-policy = SCHED_FB) 162/*163 * Give the process a first-approximation goodness value164 * according to the number of clock-ticks it has left.165 *166 * Dont do any other calculations if the time slice is167 * over.168 */169weight = p-counter;170if (!weight)171goto out;172/* Add my new policy */173weight += p-fb * 300;174if( p-fb )175p-fb = 0;(4)在/usr/src/linux/kernel/fork.c文件的函数do_fork()中的“current-counter = 1;”语句下添加一条新语句:786p-counter = (current-counter + 1) 1;787current-counter = 1;788/*789 * Change here790 * Modified by Niu Xing791 */792p-fb = 1;3. 编译修改后的内核,方法与准备工作中完全类似,部分差异如下: 将usr/src/linux/arch/i386/boot目录下的bzImage文件复制到/boot文件夹下,并将其重命名为bzImageExp1; 在/boot/grub/grub.conf文件末尾添加如下的代码:title Red Hat Linux Exp1(2.4.32)root (hd0,0)kernel /bzImageExp1 重新启动系统,选择Red Hat Linux Exp1(2.4.32),进入新编译的内核。3、实验结果及分析修改调度策略后,系统多任务运行依然正常:新的调度策略只是一个很小的改变,系统运行性能也未见显著变化。4、设计小结详见文末的“四、设计小结”。三、实验二:系统调用1、实验目的及要求理解系统调用的工作机制,掌握扩展内核功能的技术。编写一个系统调用的响应函数,(获取系统当前时间并显示在控制终端屏幕上)。并且在内核中连接这个新的系统调用重新编译内核启动使用新内核的操作系统,最后要求在用户程序中尝试使用这个新的系统调用。2、实验步骤及程序清单1. 确定新的系统调用所要实现的功能及其名称,并将新系统调用响应函数添加到/usr/src/linux/kernel/sys.c文件中的相应位置:16#include 17/*18 * Add a new headfile19 * Modified by Niu Xing20 */21#include 1291/* 1292 * Add a new syscall here1293 * Modified by Niu Xing1294 */1295extern struct timezone sys_tz;1296asmlinkage int sys_ptimeofday( struct timeval *tv, struct timezone* tz )12971298if( tv )12991300struct timeval ktv;1301do_gettimeofday( &ktv );1302if( copy_to_user( tv, &ktv, sizeof(ktv) ) )1303return -EFAULT;1304printk( Date : %09d%09dn, ktv.tv_sec, ktv.tv_usec );13051306if( tz )13071308if( copy_to_user( tz, &sys_tz, sizeof(sys_tz) ) )1309return -EFAULT;1310printk( The time is: %09d%09dn, sys_tz.tz_minuteswest, sys_tz.tz_dsttime );13111312return 0;13132. 修改内核中部分的源代码(1)在/usr/src/linux/arch/i386/kernel/entry.S文件内sys_call_table表中添加新加系统调用的入口地址:665.long SYMBOL_NAME(sys_ni_syscall)/* sys_set_tid_address */666/*667 * Add new syscall here668 * Modified by Niu Xing669 */670.long SYMBOL_NAME(sys_ni_syscall)/* sys_ptimeofday 259 */(2)在/usr/src/linux/include/asm-i386/unistd.h文件中增加必要的向量号宏定义声明:259#define _NR_exit_group252260/*261 * Add a new define262 * Modified by Niu Xing263 */264#define _NR_ptimeofday2593. 编译修改后的内核,方法与准备工作中完全类似,部分差异如下: 将usr/src/linux/arch/i386/boot目录下的bzImage文件复制到/boot文件夹下,并将其重命名为bzImageExp2; 在/boot/grub/grub.conf文件末尾添加如下的代码:title Red Hat Linux Exp2(2.4.32)root (hd0,0)kernel /bzImageExp2 重新启动系统,选择Red Hat Linux Exp2(2.4.32),进入新编译的内核。4. 编写调用了此系统调用的应用程序,程序清单ptime.c如下:01#include02#include03#include04#include0506#define _NR_ptimeofday2590708_syscall2( int, ptimeofday, struct timeval*, tv, struct timezone*, tz )0910main()1112struct timeval tv;13struct timezone tz;14ptimeofday( &tv, &tz );1516printf( Current time : %sn, ctime( &(tv.tv_sec) ) );175. 编译新系统调用程序:# gcc o ptime ptime.c6. 执行此程序:# ./ptime3、实验结果及分析运行结果如下:由于是在x-windows下的终端执行此程序,结果显示当前的时间的一行。4、设计小结详见文末的“四、设计小结”。四、设计小结在这次课程设计之前,我对Linux的了解非常肤浅。通过查阅大量相关资料,我渐渐熟悉了Linux下的命令行控制。实验过程中会遇到很多细节上的问题,这需要足够的耐心去寻找和解决,比如:1、 VMware虚拟机必须选择IDE硬盘方式,否则以后编译会出很多问题,解决起来也很麻烦在执行# make install之后会出现错误:No module Buslogic found for kernel x.x.x,错误发生原因就在于选择了SCSI硬盘,而RH9默认不包含SCSI硬盘驱动的,这样config需要相应调整,drivers也缺少个别文件。2、 实验时应当尽量选择2.4.32内核版本,虽然最新的2.4版本是2.4.37,但这个版本执行# make oldconfig之后需要选择很多额外的选项,而2.4.32版本就可以一步到位;RH9看起来似乎是2.4.20版本(2.4.20-8),但实际上它比网上的2.4.20内核版本要高,配置起来会更麻烦。3、 Linux下设备使用文件表示的,例如IDE硬盘是hd,SCSI硬盘则是sd,这样挂载U盘的时候就应当视情况而决定挂载点。4、 在执行编译内核后继续执行# make all;# make modules;# make modules_install;# make install,GRUB会自动修改,更加方便,但这些操作会花费更多时间。5、 实验二的实验指导代码是存在一些小错误,如果不小心,就会在编译内核时报错。6、 关于宏指令“_syscallN()”a) 这里的N确实是个不定值,Unistd.h中有7个这样的指令,分别是_syscall0(),_syscall1()
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 工业的地域形成课件
- 子宫平滑肌瘤课件
- 子宫内膜癌课件
- 工业电器安全培训课件
- 娱乐主播教学课件
- 娱乐中科普健康知识课件
- 威海食品安全知识培训课件
- 工业机器人教学课件
- 威尼的小艇课件
- 2024年利辛县招聘城市社区专职工作人员考试真题
- 转作风重实干课件
- 村干部饮水安全培训总结课件
- 安全生产治本攻坚三年行动半年工作总结
- 单招备考科学方案
- 医美咨询培训课件
- 海船船员适任 评估规范(2024)轮机专业
- DB50-T 1463.2-2023 牛羊布鲁氏菌病防控技术规范 第2部分:人员防护
- NoSQL数据库应用与实践 课件 第1-6章 认识NoSQL - 增删改查
- 20世纪宋史研究:主要趋势、热点领域与未来展望
- 《工程勘察设计收费标准》(2002年修订本)
- 矿山档案(台帐) 表格参照模板参考范本
评论
0/150
提交评论