可变分区分配与回收,哈尔滨理工大学 操作系统课程设计报告.doc

哈 尔 滨 理 工 大 学 课 程 设 计 ( 操 作 系 统 ) 题 目 可变分区分配与回收 (首次适应算法) 班 级 计算机科学与技术学院 计算机系 10-8班 姓 名 刘旭冬 1004010810 指导教师 高雪瑶 系主任 林克正 2013年 03 月 05日 - II- 目 录 1 可变分区 分配与回收 1 1.1 题目分析 1 1.2 数据结构 1 1.3 流程图 2 1.4 设计结论和心得 4 2 Linux 代码分析 . 6 2.1 功能说明 . 错误 未定义书签。 2.2 接口说明 . 错误 未定义书签。 2.3 局部数据结构 . 错误 未定义书签。 2.4 流程图 . 错误 未定义书签。 2.5 以实例说明运行过程 . 错误 未定义书签。 - 1- 1 可变分区分配与回收 1.1 题目分析 首次适应算法( first fit)简称 FF。 FF 算法要求空间分区链以地址递增的次序链接。再分配内存时,从链首开始顺序查找,直至找到一个大小能满足要求的空闲分区为止,然后再按照作业的大小,从该分区中划出一款内存空间分配给请求者,余下的空闲分区仍留在空闲链中。若找不到一个能满足要求的分区,则此次内存分配失败。 1.2 数据结构 struct float address; /*空闲区起始地址 */ float length; /*空闲区长度,单位为字节 */ int flag; /*空闲区表登记栏标志,用 “0“表示空栏目,用 “1“表示未分配 */ free_tablem; /*空闲区表 */ struct float address; /*已分分区起始地址 */ float length; /*已分分区长度,单位为字节 */ int flag; /*已分配区表登记栏标志,用 “0“表示空栏目 */ used_tablen; /*已分配区表 */ 哈尔滨理工大学课程设计报告- 2- 1.3 流程图 图 1 哈尔滨理工大学课程设计报告- 3- 哈尔滨理工大学课程设计报告- 4- 1.4 设计结论和心得 通过课程设计得到如下结论 设计本课 程前,感觉本课程并不是那么难,很容易下手,因为主要也就是写出回收主程序、内存分配主程序就行了。但是真正实施起来确非常困难。 首先,必须解决动态输入构造空闲区表的问题。刚开始的时候,我们把其他的程序都写出来了,却忘了课题还要求动态输入构造空闲区表。于是我们又花了很大的力气才实现动态输入构造空闲区表,即可以根据自己的需要,从键盘输入空闲区表的块数,并输入每块空闲区表的大小及首地址。 其次,需要解决的是首次适应算法和最佳适应算法之间的转制问题。我们做完首次适哈尔滨理工大学课程设计报告- 5- 应算法的程序后不知道该从什么地方着手写 最佳适应算法。最后过了几天,才想到,原来只需在首次适应算法中,每次申请空闲区前先对空闲区从小到大排序即可。 第三个难题就是解决回收算法的问题。回收算法可以说是本实验最难实现的算法,因为它有四种不同的情况。刚开始我们只考虑了三种情况,即 1、 要回收的区域没有与之相邻接的空闲区。 2、 要回收区域有上邻(与要回收区域相邻的上面有空闲区)。 3、 要回收的区域有下邻(与要回收的区域相邻的下面有空闲区)。 当我们满怀欣喜感觉本课程设计已经完成的时候却发现,程序运行的时候,对于一个刚分配好的空闲区,如果有三个相邻的作业 可以同时在此空闲区内申请到内存,并全并回收此三个作业后,此空闲区会被分割成两个空闲区显示。这时我们才意识到少考虑了一种情况要回收的区域有上邻而且有下邻。我们又不得不再次修改程序。 就这样,在写出大体程序后,我们前后大大小小修改了十多次,最后修改好的程序完全符合课程设计要求,我们的课程设计终于成功了 哈尔滨理工大学课程设计报告- 6- 2 Linux 代码分析 一、 功能说明 tun/tap 驱动程序实现了虚拟网卡的功能, tun 表示虚拟的是点对点设备, tap 表示虚拟的是以太网设备,这两种设备针对网络包实施不同的封装。利用 tun/tap 驱 动,可以将tcp/ip 协议栈处理好的网络分包传给任何一个使用 tun/tap 驱动的进程,由进程重新处理后再发到物理链路中。 在 linux 2.4 内核版本及以后版本中, tun/tap 驱动是作为系统默认预先编译进内核中的。 二、 接口说明 做为虚拟网卡驱动, Tun/tap驱动程序的数据接收和发送并不直接和真实网卡打交道,而是通过用户态来转交。在 linux下,要实现核心态和用户态数据的交互,有多种方式可以通用 socket创建特殊套接字,利用套接字实现数据交互;通过 proc文件系统创建文件来进行数据交互;还可以使用设备文 件的方式,访问设备文件会调用设备驱动相应的例程,设备驱动本身就是核心态和用户态的一个接口, Tun/tap驱动就是利用设备文件实现用户态和核心态的数据交互。 从结构上来说, Tun/tap驱动并不单纯是实现网卡驱动,同时它还实现了字符设备驱动部分。以字符设备的方式连接用户态和核心态。下面是示意图 哈尔滨理工大学课程设计报告- 7- Tun/tap 驱动程序中包含两 个部分,一部分是字符设备驱动,还有一部分是网卡驱动部分。利用网卡驱动部分接收来自 TCP/IP 协议栈的网络分包并发送或者反过来将接收到的网络分包传给协议栈处理,而字符驱动部分则将网络分包在内核与用户态之间传送,模拟物理链路的数据接收和发送。 Tun/tap驱动很好的实现了两种驱动的结合。 三、 局部数据结构 struct tun_struct char name8; 设备名 unsigned long flags; 区分 tun和 tap设备 struct fasync_struct *fasync; 文件异步通知结构 wait_queue_head_t read_wait; 等待队列 struct net_device dev; linux 抽象网络设备结构 哈尔滨理工大学课程设计报告- 8- struct sk_buff_head txq; 网络缓冲区队列 struct net_device_stats stats; 网卡状态信息结构 ; struct net_device结构是 linux内核提供的统一网络设备结构,定义了系统统一的访问接口。 Tun/tap驱动中实现的网 卡驱动的处理例程 static int tun_net_openstruct net_device *dev; static int tun_net_closestruct net_device *dev; static int tun_net_xmitstruct sk_buff *skb, struct net_device *dev; 数据包发送例程 static void tun_net_mcliststruct net_device *dev; 设置多点传输的地址链表 static struct net_device_stats *tun_net_statsstruct net_device *dev; 当一个应用程序需要知道网络接口的一些统计数据时,可调用该函数,如 ifconfig、netstat 等。 int tun_net_initstruct net_device *dev; 网络设备初始例程 字符设备部分 在 Linux中,字符设备和块设备统一以文件的方式访问,访问它们的接口是统一的,都是使用 open函数打开设备文件或普通文件,用 read和 write函数实现读写文件等等。 Tun/tap驱动定义的字符设备的访问接口如下 哈尔滨理工大学课程设计报告- 9- static struct file_operations tun_fops owner THIS_MODULE, llseek tun_chr_lseek, read tun_chr_read, write tun_chr_write, poll tun_chr_poll, ioctl tun_chr_ioctl, open tun_chr_open, release tun_chr_close, fasync tun_chr_fasync ; 在内核中利用 misc_register 函数将该驱动注册为非标准字符设备驱动,提供字符设备具有的各种程序接口。代码摘自 linux-2.4.20linux-2.4.20driversnettun.c static struct miscdevice tun_miscdev TUN_MINOR, “net/tun“, int init tun_initvoid if misc_register return -EIO; return 0; 当打开一个 tun/tap设备时, open 函数将调用 tun_chr_open函数,其中将完成一些重要的初始化过程,包括设置网卡驱动部分的初始化函数以及网络缓冲区链表的初始化和等待队列的初始化。 Tun/tap驱动中网卡的注册被嵌入了字符驱动的 ioctl例程中,它是通过对字符设备文件描述符利用自定义的 ioctl设置标志 TUNSETIFF完成网卡的注册的。 四、 流程图 哈尔滨理工大学课程设计报告- 11- 五 以实例说明运行过程 Tun/tap 驱动程序中包含两个部分,一部分是字符设备驱动,还有一部分是网卡驱动部分。利用网卡驱动部分接收来自 TCP/IP 协议栈的 网络分包并发送或者反过来将接收到的网络分包传给协议栈处理,而字符驱动部分则将网络分包在内核与用户态之间传送,模拟物理链路的数据接收和发送。 Tun/tap 驱动很好的实现了两种驱动的结合。 下面是定义的 tun/tap 设备结构 struct tun_struct char name8; 设备名 unsigned long flags; 区分 tun 和 tap 设备 struct fasync_struct *fasync; 文件异步通 知结构 wait_queue_head_t read_wait; 等待队列 struct net_device dev; linux 抽象网络设备结构 struct sk_buff_head txq; 网络缓冲区队列 struct net_device_stats stats; 网卡状态信息结构 ; struct net_device 结构是 linux 内核提供的统一网络设备结构,定义了系统统一的访问接口。 哈尔滨理工大学课程设计报告- 12- Tun/tap 驱动中实现的网卡 驱动的处理例程 static int tun_net_openstruct net_device *dev; static int tun_net_closestruct net_device *dev; static int tun_net_xmitstruct sk_buff *skb, struct net_device *dev; 数据包发送例程 static void tun_net_mcliststruct net_device *dev; 设置多点传输的地址链表 static struct net_device_stats *tun_net_statsstruct net_device *dev; 当一个应用程序需要知道网络接口的一些统计数据时,可调用该函数,如 ifconfig、 netstat 等。 int tun_net_initstruct net_device *dev; 网络设备初始例程

linux课程设计题目主存空间的分配与回收,可变分区分配与回收,哈尔滨理工大学操作系统课程设计报告.doc-资源下载在线文库www.lddoc.cn...相关推荐

  1. dl388g7 驱动 linux,HPDL388G7做OLIRAIDBIOS设置linux安装概要.doc-资源下载在线文库www.lddoc.cn...

    HP DL388 G7做OLIRAIDBIOS设置linux安装概要.doc Hp ilo配置开机怎么进的 第一个界面按any 然后还没出现阵列卡信息的时候赶紧按F8 我就是这样进去的 不知道有没有什 ...

  2. C语言设计函数求最大公约数,C语言程序设计课程设计--编写函数求取两个整数m,n的最大公约数和最小公倍数.doc_在线文库www.lddoc.cn...

    C语言程序设计课程设计--编写函数,求取两个整数m,n的最大公约数和最小公倍数.doc C语言程序设计课程设计C语言程序设计课程设计评语考勤(10)纪律(10)过程(40)设计报告(30)答辩(10) ...

  3. 太原理工大学c语言课程设计报告,[太原理工大学C语言实验报告.doc

    [太原理工大学C语言实验报告 本科实验报告 课程名称: 程序设计技术B 实验项目: 实验地点: 明向校区软件学院机房 专业班级: 学号: 学生姓名: 指导教师: 呼克佑 2014年 12月 日 实验名 ...

  4. 进程同步算法实现实验报告Linux,操作系统进程同步实验报告.doc

    操作系统进程同步实验报告 实验三:进程同步实验 一.实验任务: (1)掌握操作系统的进程同步原理: (2)熟悉linux的进程同步原语: (3)设计程序,实现经典进程同步问题. 二.实验原理: (1) ...

  5. 计算机系统结构实验报告Linux,计算机操作系统体系结构实验报告.doc

    操作系统实验报告 实验目的: 随着操作系统应用领域的扩大,以及操作系统硬件平台的多样化,操作系统的体系结构和开发方式都在不断更新,目前通用机上常见操作系统的体系结构有如下几种:模块组合结构.层次结构. ...

  6. 嵌入式系统课程设计题目

    简介:一些嵌入式系统课程设计题目,可以当做对你学习ARM的一个检测. 嵌入式系统课程设计-选题要求及课题 1.嵌入式系统课程设计时长两星期,要求学生分组进行课程设计,每组学生人数为2-3人(可在不超过 ...

  7. 实验四 主存空间的分配和回收

    实验四 主存空间的分配和回收 一.目的和要求 1.1. 实验目的 用高级语言完成一个主存空间的分配和回收程序,以加深对动态分区分配方式及其算法的理解. 1.2. 实验要求 采用连续分配方式之动态分区分 ...

  8. 课程设计排名C语言,C语言课程设计题目 ----研究生推免(保研)排名统计程序

    C语言课程设计题目 ----研究生推免(保研)排名统计程序,一.C语言课程设计题目 ----研究生推免(保研)排名统计程序这C语言题目太BT了这种题自己做 ,mfc设定界面,用集合就可以了二.为什么我 ...

  9. 班费管理系统c语言报告,班费管理系统课程设计报告.doc

    计算机科学与技术系 课程设计报告 20 -20 学年第 学期 课程 C语言课程设计 课程设计名称 班级班费管理系统 学生姓名 学号 专业班级 指导教师 20 年 月 班级班费管理系统 目录 班级班费管 ...

最新文章

  1. VMTK学习——02.基本的PYPES教程
  2. .NET 调用JS:WebBrowser.Document.InvokeScript 方法抛出“指定的转换无效”异常的原因
  3. java io字符输出流_【Java的IO流之文件字符输入输出流 25】
  4. Python编程基础:第三十七节 石头剪刀布游戏Rock, Paper, Scissors Game
  5. 【Python】青少年蓝桥杯_每日一题_8.01_随机五角星
  6. 8-7复习 stl常用算法
  7. 怎么ping虚拟计算机,虚拟机和主机如何互ping,以及虚拟机网络配置遇到的那些坑...
  8. 《SAP 传奇人物》系列人物故事:看透生死远没有操作0和1那么简单
  9. JavaScript的一些小技巧(转)
  10. Python datatime date
  11. 树莓派3代b型静态IP设置,和ssh的wlan配置
  12. atitit。 hb Hibernate sql 查询使用
  13. 网速提高学习周——软件篇
  14. 家庭宽带上网_03_IP城域网
  15. 用连续自然数之和来表达整数
  16. U盘故障恢复--“文件或目录损坏且无法读取”
  17. 手机通话记录重复显示怎么处理_华为出现重复联系人 - 卡饭网
  18. WampServer环境搭建
  19. html怎么修改td 的宽度,html td怎么设置宽度
  20. linux设备驱动归纳总结(三):6.poll和sellct (2010-12-27 21:32)

热门文章

  1. 如何实现一个动态的背景图?
  2. 宗地图绘制要求和规范_宗地图绘制的基本要求和内容7.ppt
  3. 【C语言】strcat函数_字符串追加/连接
  4. DEFORMABLE DETR学习笔记
  5. 理解Elasticsearch中的桶聚合(Bucket aggregation)
  6. 一阶时滞微分方程三种求解方法的MATLAB实现及稳定性分析
  7. ARMv8-A编程指导之Caches(2)
  8. 大叔分几种类型_“大叔”很抢手?这几种类型的“大叔”最受女人欢迎
  9. sql数据库bak还原数据库,提示与现有数据库“XXX”数据库不同
  10. mvel 调用java_java MVEL2/Spring EL表达式、直接调用、反射性能实测