- 1、本文档共12页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 5、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 6、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 7、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 8、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
操作系统课程设计02的
网 络 教 育 学 院
继 续 教 育 学 院
计算机会计课程设计
函授站(学习中心) 株 洲 .
会 计 专业 12春 级(春、秋)层次 专科 .
学 生 姓 名 : .
摘 要
本文围绕C编程语言在网络编程方面的具体应用,论述了使用面向对象方法,对Hannoi塔程序进行需求分析、概要设计、详细设计,最后使用C编程实现的全过程。
关键词:操作系统 C语言
目 录
一、设计题目
二、设计内容
三、设计过程
3.1需求分析
3.2概要设计
3.3详细设计
3.4代码实现
3.5程序运行
四、总结
五、参考文献
设计题目
《最先适应算法》
由用户输入进程名称以及所需分配内存空间大小,实现内存的动态分配。
空闲区域表变化情况
若申请内存成功,则为相应进程分配的内存区首址一定是某个空闲区域的首址
1 申请内存空间大小恰好 等于 对应空闲区大小
只需在空闲区域表中删除对应空闲区即可
2 申请内存空间大小 小于 对应空闲区大小
保存对应空闲区,修改空闲区首址和大小
分配表变化情况
在分配表中添加一个分配区
释放内存模块设计
空闲区域表变化情况
1 将释放的分配区添加到空闲区域表中
2 按照空闲区首址从小到大的顺序对空闲区进行排序
由于最先适应算法要求找到的空闲区首址最小,因此,经过排序后只需找到第一个内存大小满足要求的空闲区即为所要空闲区
3 相连空闲区处理
释放内存之后,释放的分配区可能恰好和原来的内存区相连(释放分配区的首址恰好是某个原内存区下一个位置,或释放分配区的下一个位置恰好是某个原内存区的首址),由于空闲区都是等价的,所以相连的两个或多个空闲区相当于一个大的空闲区,因此在释放操作之后需要判断是否存在相连空闲区,若有,则合并。
说明:这里所说的合并只是对释放内存后导致的相连空闲区来说,与下面所说的合并空闲区不是一个概念。
由于空闲区相连是有内存释放引起的,而且在释放之前没有空闲区相连(若有,一定经过合并),所以相连空闲区最多只有3个(与释放分配去相邻的两个原空闲区)。
分配表变化情况
释放成功只需将对应分配表中的内存区删除即可。
合并空闲区模块设计
只有当空闲区域表中任何一个单独空闲区的大小都不能满足申请所需内存的要求,但所有空闲区之和能满足要求时,才进行合并空闲区操作。
具体实现:合并空闲区时,将所有分散的空闲区合并成一个大空闲区,然后再进行分配内存操作。
打印内存分配情况
输出分配表和空闲区域表中的内容。
三、设计过程
3.1需求分析
操作系统的存储管理的基本功能有:存储分配、地址转换和存储保护、存储共享、存储扩充。存储分配指为选中的多道运行的作业分配主存空间;地址转换是把逻辑地址空间中的用户程序通过静态重定位或动态重定位转换和映射到分给的物理地址空间中,以便用户程序的执行;存储保护指各道程序只能访问自己的存储区域,而不能互相干扰,以免其他程序受到有意或无意的破坏;存储共享指主存中的某些程序和数据可供不同用户进程共享。
最简单的单道系统中,一旦一个程序能装入主存,它将一直运行直到结束。如果程序长度超出了主存的实际容量,可以通过覆盖和交换的技术获得解决。更多的操作系统支持多个用户进程在主存同时执行,能满足多道程序设计需要的最简单的存储管理技术是分区方式,有分固定分区和可变分区。
最先适应算法具有最佳性能。并且从回收过程来看,最先适应法也是最佳的。它的另一个优点就是尽可能地利用了低地址空间。从而保证高地址有较大的空闲区来放置要求内存过多的进程或作业。
3.2概要设计
本课程设计就是分析动态分区法,与固定分区法相比,动态分区法在作业执行前并不建立分区,分区的建立是在作业的处理过程中进行的。且其大小可随作业或进程对内存的要求而改变分区的建立是在作业的处理过程中进行的。且其大小可 int start;
int length;
int state;
struct area *next;
}Area,*pArea;
4个数据成员,分别为: start(分区的首地址)、length(分区的长度)、state(标志进程状态)、next(指针用来指向下一个进程),由此可得分区尾地址Eaddress(分区的尾地址)=length+start。
3.3详细设计
变量申明与数据结构
进程结构
struct Process{
string name; //进程名
int addr; //首址
int size; //长度
};
进程名:用于标识一个进程,两个进程不能同名
首址、长度:
文档评论(0)