文档库 最新最全的文档下载
当前位置:文档库 › (实验6)基于动态分区分配的内存管理的模拟设计与实现

(实验6)基于动态分区分配的内存管理的模拟设计与实现

(实验6)基于动态分区分配的内存管理的模拟设计与实现
(实验6)基于动态分区分配的内存管理的模拟设计与实现

实验6 内存的连续分配算法

一.实验目的

掌握内存的连续分配方式的各种分配算法

二.实验内容

本系统模拟操作系统内存分配算法的实现,实现固定分区和动态分区分配,

算法,采用PCB定义结构体来表示一个进程,定义了进程的名称和大小,进程内

存起始地址和进程状态。内存分区表采用单链表来模拟实现。

三.实验题目

基于动态分区分配的内存管理的模拟设计与实现

四.实验要求

1.定义与算法相关的数据结构,如PCB,空闲分区

2.在使用动态分区分配算法时必须实现紧凑和对换功能

3.武汉理工大学《操作系统》课程设计说明书14

{ if(FFA(id,size)==OK) cout<<"分配成功!"<

{ if(BFA(id,size)==OK) cout<<"分配成功!"<

{ if(WFA(id,size)==OK) cout<<"分配成功!"<

Show() { Node *cur=head->next; while(cur)

{ cout<<"***********************************"<

cout<<"区号:"; if(cur->data.ID==FREE) cout<<"无

"<data.ID<

址:"<data.addr<

度:"<data.size<

if(cur->data.state==BUSY) cout<<"已分配"<next; 武汉理工大学《操作系统》

课程设计说明书 15 } } int main() { cout<<" 动态分区

分配方式的模拟"<

cout<<"********************************************"<

cout<<"请输入内存大小(KB):"; cin>>area; while(area<=0)

{ cout<<"输入错误,请重新输入内存大小(KB)"; cin>>area; } while(1)

{ cout<<"********************************************"<

cout<<"** 1.FFA 2.BFA 3.WFA 0.EXIT **"<

cout<<"********************************************"<

cout<<"请选择:"; int ch; cin>>ch; if(ch==0) { break; } Init(area); int choice; while(1) { cout<<"********************************************"<

l; cout<<"** 1.分配 2.回收 3.查看0.退出

**"<

cout<<"********************************************"<

cout<<"请输入您的操作:"; cin>>choice; if(choice==1) { cout<<"请输入进程个数"; int num; cin>>num;

for(;num>0;num--) { Assign(ch); // 分配内存 } 武汉理工大学《操作系统》课程设计说明书 16 } else

if(choice==2) // 内存回收 { int ID; cout<<"请输入

您要释放的分区号:"; cin>>ID; Free(ID); } else

if(choice==3) Show();//显示主存else if(choice==0) break;

else //输入操作有误 { cout<<"输入有误,请重试!"<

continue; } } } return 0; }

4.

课程专题实验报告 (1) 课程名称:模拟电子技术基础 小组成员:涛,敏 学号:0,0 学院:信息工程学院 班级:电子12-1班 指导教师:房建东 成绩: 2014年5月25日

工业大学信息工程学院课程专题设计任务书(1)课程名称:模拟电子技术专业班级:电子12-1 指导教师(签名): 学生/学号:涛 0敏0

实验观察R B 、R C 等参数变化对晶体管共射放大电路放大倍数的影响 一、实验目的 1. 学会放大器静态工作点的调式方法和测量方法。 2.掌握放大器电压放大倍数的测试方法及R B 、R C 等参数对放大倍数的影响。 3. 熟悉常用电子仪器及模拟电路实验设备的使用。 二、实验原理 图1为电阻分压式工作点稳定单管放大器实验电路图。偏置电阻R B1、R B2组成分压电路,并在发射极中接有电阻R E ,以稳定放大器的静态工作点。当在放大器的输入端加入输入信号后,在放大器的输出端便可得到一个与输入信号相位相反、幅值被放大了的输出信号,从而实现了电压放大。 三、实验设备 1、 信号发生器 2、 双踪示波器 SS —7802 3、 交流毫伏表 V76 4、 模拟电路实验箱 TPE —A4 5、 万用表 VC9205 四、实验容 1.测量静态工作点 实验电路如图1所示,它的静态工作点估算方法为: U B ≈ 2 11B B CC B R R U R +? I E =E BE B R U U -≈Ic U CE = U CC -I C (R C +R E )

图1 晶体管放大电路实验电路图 实验中测量放大器的静态工作点,应在输入信号为零的情况下进行。 根据实验结果可用:I C ≈I E = E E R U 或I C = C C CC R U U U BE =U B -U E U CE =U C -U E 计算出放大器的静态工作点。 五.晶体管共射放大电路Multisim仿真 在Multisim中构建单管共射放大电路如图1(a)所示,电路中晶体管采用FMMT5179 (1)测量静态工作点 可在仿真电路中接入虚拟数字万用表,分别设置为直流电流表或直流电压 表,以便测量I BQ 、I CQ 和U CEQ ,如图所示。

实验五动态分区存储管理 一、实验目的 深入了解采用动态分区存储管理方式的内存分配回收的实现。通过编写和调试存储管理的模拟程序以加深对存储管理方案的理解,熟悉动态分区存储管理的内存分配和回收。 二、实验内容 编写程序完成动态分区存储管理方式的内存分配回收。 具体包括:确定内存空间分配表; 采用最优适应算法完成内存空间的分配和回收; 编写主函数对所做工作进行测试。 三、设计思路 整体思路: 动态分区管理方式将内存除操作系统占用区域外的空间看成一个大的空闲区。当作业要求装入内存时,根据作业需要内存空间的大小查询内存中的各个空闲区,当从内存空间中找到一个大于或等于该作业大小的内存空闲区时,选择其中一个空闲区,按作业需求量划出一个分区装人该作业,作业执行完后,其所占的内存分区被收回,成为一个空闲区。如果该空闲区的相邻分区也是空闲区,则需要将相邻空闲区合并成一个空闲区。 设计所采用的算法: 采用最优适应算法,每次为作业分配内存时,总是把既能满足要求、又是最小的空闲分区分配给作业。但最优适应算法容易出现找到的一个分区可能只比作业所需求的长度略大一点的情行,这时,空闲区分割后剩下的空闲区就很小以致很难再使用,降低了内存的使用率。为解决此问题,设定一个限值minsize,如果空闲区的大小减去作业需求长度得到的值小于等于minsize,不再将空闲区分成己分分区和空闲区两部分,而是将整个空闲区都分配给作业。 内存分配与回收所使用的结构体: 为便于对内存的分配和回收,建立两张表记录内存的使用情况。一张为记录作业占用分 区的“内存分配表”,内容包括分区起始地址、长度、作业名/标志(为0时作为标志位表示空栏目);一张为记录空闲区的“空闲分区表”,内容包括分区起始地址、长度、标志(0表空栏目,1表未分配)。两张表都采用顺序表形式。

姓名_____________________班级_____________________学号_____________________ 日期_____________节次______________成绩__________教师签字__________________ 哈尔滨工业大学模拟电路自主设计实验 实验名称:运算放大器在限幅电路中的应用 一、实验目的 1、深入了解运算放大器的放大作用和深度负反馈; 2、灵活运用运算放大器的多种应用; 二、总体技术路线 2.1 当输入信号电压进入某一范围内,其输出信号的电压不再跟随输入信号电压的变化。 串联限幅电路:当输入电压U i <0或U i为数值较小的正电压时,D1截止,运算放大器的输出电压U0=0;仅当输入电压U i>0且U i为数值大于或等于某一个的正电压U th时,D1才正偏导通,电路有输出,且U0跟随输入信号U i变化。 并联限幅电路:当输入信号U i较小时,输出电压U0也较小,D1和D2没有击穿,U0跟随输入信号U i变化而变化,传输系数为:A uf=-R1 /R2;当U i幅值增大,使U0的幅值增大,并使D1和D2击穿,输出U0的幅度保持+(U z+U D)值不变,电路进入限幅工作状态。 2.2绝对值电路 当输入电压U i>0,则运算放大器的输出电压U1,D1导通,D2截止,输出电压U0 =0;当输入电压U i <0,则运算放大器的输出电压U1 >0,D2导通,D1截止,输出电压U0 =-R1 U i/R2。并通过反向放大器将整流信号放大两倍,再增加一个同相加法器,让输入信号的另一极性电

压不经整流,而直接送到加法器,与来自整流电路的输出电压相加,便构成了绝对值电路。 三、实验电路图 1、串联限幅电路: 2、并联限幅电路:

一、设计任务 完成存储器动态分区分配算法的模拟实现。 二、设计思想 在对数据结构有一定掌握程度的情况下设计合理的数据结构来描述存储空间,实现分区存储管理的内存分配功能,应该选择最合适的适应算法(首次适应算法,最佳适应算法,最后适应算法,最坏适应算法),实现分区存储管理的内存回收算法,在这些存储管理中间必然会有碎片的产生,当碎片产生时,进行碎片的拼接,等等相关的内容。 三、预期目的 让我们了解操作系统的基本概念,理解计算机系统的资源如何组织,操作系统如何有效地管理这些系统资源,用户如何通过操作系统与计算机系统打交道。通过课程设计,我们可以进一步理解在计算机系统上运行的其它各类操作系统,并懂得在操作系统的支持下建立自己的应用系统。操作系统课程设计,对于训练学生掌握程序设计、熟悉上机操作和程序调试技术都有重要作用。重点培养学生的思维能力、设计能力、创新能力和排错能力。 四、设计方案 首先是对相关知识的掌握,例如数据结构,计算方法,组成原理以及操作系统等。在这些基本知识的基础上进行扩展,用语言的形式从函数,数据结构原代码,原程序等方面来达到自己想要的目的。该设计就是要达到对各个细节的问题的解决将各个数据块连接起来,最终达到存储器动态分区分配算法的模拟实现。 五、数据结构 1.设计合理的数据结构来描述存储空间: 1)对于未分配出去的部分,用空闲分区链表来描述。 struct freeList { int startAddress; /* 分区起始地址 */ int size; /* 分区大小 */ struct freeList *next; /* 分区链表指针 */ }

struct usedList { int startAddress; /* 分区起始地址 */ int jobID; /* 分区中存放作业ID */ struct usedList *next; /* 分区链表指针 */ } 3)将作业组织成链表。 struct jobList { int id; /* 作业ID */ int size; /* 作业大小(需要的存储空间大小)*/ int status; /* 作业状态 0 : new job ,1 : in the memory , 2 : finished . */ struct jobList *next; /* 作业链表指针 */ } 以上将存储空间分为空闲可占用两部分,在usedlist中设jobID而不设size,可以在不增加空间复杂度(与freelist相比)的同时更方便的实现可变分区存储管理(从后面的一些函数的实现上可以得出这个结论)。 尽管设置joblist增加了空间复杂度,但它的存在,使得该程序可以方便的直接利用D盘中的JOB文件。该文件可以认为是一个和其他进程共享的资源。通过这个文件,其他进程写入数据供读取。这中思想在操作系统设计中体现的很多。 2.实现分区存储管理的内存分配功能,选择适应算法(首次适应算法,最佳适应算法,最后适应算法,最坏适应算法)。 基本原理分析: 1) Best fit :将空闲分区按大小从小到大排序,从头找到大小合适的分区。 2) Worst fit:将空闲分区按大小从大到小排序,从头找到大小合适的分区。 3) First fit :将空闲分区按起始地址大小从小到大排序,…… 4) Last fit :将空闲分区按起始地址大小从大到小排序,…… 由此,可将空闲分区先做合适的排序后用对应的适应算法给作业分配存储空间。排序函数 order(bySize为零则按分区大小排序,否则按分区起始地址;inc为零从小到大排序,否则从大到小排序;通过empty指针返回结果)。 void order(struct freeList **empty,int bySize,int inc) {

实验三、存储管理 一、实验目的: ? 一个好的计算机系统不仅要有一个足够容量的、存取速度高的、稳定可靠的主存储器,而且要能合理地分配和使用这些存储空间。当用户提出申请存储器空间时,存储管理必须根据申请者的要求,按一定的策略分析主存空间的使用情况,找出足够的空闲区域分配给申请者。当作业撤离或主动归还主存资源时,则存储管理要收回作业占用的主存空间或归还部分主存空间。主存的分配和回收的实现虽与主存储器的管理方式有关的,通过本实验理解在不同的存储管理方式下应怎样实现主存空间的分配和回收。 在计算机系统中,为了提高主存利用率,往往把辅助存储器(如磁盘)作为主存储器的扩充,使多道运行的作业的全部逻辑地址空间总和可以超出主存的绝对地址空间。用这种办法扩充的主存储器称为虚拟存储器。通过本实验理解在分页式存储管理中怎样实现虚拟存储器。 在本实验中,通过编写和调试存储管理的模拟程序以加深对存储管理方案的理解。熟悉虚存管理的各种页面淘汰算法通过编写和调试地址转换过程的模拟程序以加强对地址转换过程的了解。 二、实验题目: 设计一个可变式分区分配的存储管理方案。并模拟实现分区的分配和回收过程。 对分区的管理法可以是下面三种算法之一:(任选一种算法实现) 首次适应算法 循环首次适应算法 最佳适应算法 三.实验源程序文件名:cunchuguanli.c

执行文件名:cunchuguanli.exe 四、实验分析: 1)本实验采用可变分区管理,使用首次适应算法实现主存的分配和回收 1、可变分区管理是指在处理作业过程中建立分区,使分区大小正好适合作业的需求,并 且分区个数是可以调整的。当要装入一个作业时,根据作业需要的主存量查看是否有足够的空闲空间,若有,则按需要量分割一个分区分配给该作业;若无,则作业不能装入,作业等待。随着作业的装入、完成,主存空间被分成许多大大小小的分区,有的分区被作业占用,而有的分区是空闲的。 为了说明那些分区是空闲的,可以用来装入新作业,必须有一张空闲说明表 ? 空闲区说明表格式如下:? 第一栏 第二栏 其中,起址——指出一个空闲区的主存起始地址,长度指出空闲区的大小。 长度——指出从起始地址开始的一个连续空闲的长度。 状态——有两种状态,一种是“未分配”状态,指出对应的由起址指出的某个长度的区域是空闲区;另一种是“空表目”状态,表示表中对应的登记项目是空白(无效),可用来登记新的空闲区(例如,作业完成后,它所占的区域就成了空闲区,应找一个“空表目”栏登记归还区的起址和长度且修改状态)。由于分区的个数不定,所以空闲区说明表中应有适量的状态为“空表目”的登记栏目,否则造成表格“溢出”无法登记。 2、当有一个新作业要求装入主存时,必须查空闲区说明表,从中找出一个足够大的空闲区。 有时找到的空闲区可能大于作业需要量,这时应把原来的空闲区变成两部分:一部分分

模拟电路实验报告 实验题目:成绩:__________ 学生姓名:李发崇学号指导教师:陈志坚 学院名称:专业:年级: 实验时间:实验室: 一.实验目的: 1.熟悉电子器件和模拟电路试验箱; 2.掌握放大电路静态工作点的调试方法及其对放大电路性能的影 响; 3.学习测量放大电路Q点、A V、r i、r o的方法,了解公发射极电路特 性; 4.学习放大电路的动态性能。 二、实验仪器 1.示波器 2.信号发生器 3.数字万用表 三、预习要求 1.三极管及单管放大电路工作原理: 2.放大电路的静态和动态测量方法:

四.实验内容和步骤 1.按图连接好电路: (1)用万用表判断试验箱上三极管的好坏,并注意检查电解电容 C1,C2的极性和好坏。 (2)按图连接好电路,将Rp的阻值调到最大位置。(注:接线前先 测量电源+12V,关掉电源后再连接) 2.静态测量与调试 按图接好线,调整Rp,使得Ve=1.8V,计算并填表 心得体会:

3.动态研究 (一)、按图连接好电路 (二)将信号发生器的输入信号调到f=1kHz,幅值为500mVp,接至放大电路A点。观察Vi和V o端的波形,并比较相位。 (三)信号源频率不变,逐渐加大信号源输出幅度,观察V o不失真时的最大值,并填表: 基本结论及心得: Q点至关重要,找到Q点是实验的关键, (四)、保持Vi=5mVp不变,放大器接入负载R L,在改变Rc,R L数值的情况下测量,并将计算结果填入表中:

实验总结和体会: 输出电阻和输出电阻影响放大效果,输入电阻越大,输出电阻越小,放大效果越好。 (1)、输出电阻的阻值会影响放大电路的放大效果,阻值越大,放大的倍数也越大。 (2)、连在三极管集电极的电阻越大,电压的放大倍数越大。 (五)、Vi=5mVp,增大和减小Rp,观察V o波形变化,将结果填入表中: 实验总结和心得体会: 信号失真的时候找到合适Rp是产生输出较好信号关键。 (1)Rp只有在适合的位置,才能很好的放大输入信号,如果Rp阻值太大,会使信号失真,如果Rp阻值太小,则会使输入信号不能被

实验五动态分区存储管理模拟 一、实验目的 深入了解可变分区存储管理式主存分配回收的实现。 二、实验预备知识 可变分区存储管理式不预先将主存划分成几个区域,而把主存除操作系统占用区域外的空间看作一个大的空闲区。当进程要求装入主存时,根据进程需要主存空间的大小查询主存各个空闲区,当从主存空间找到一个大于或等于该进程大小要求的主存空闲区时,选择其中一个空闲区,按进程需求量划出一个分区装入该进程。进程执行完后,它所占的主存分区被回收,成为一个空闲区。如果该空闲区的相邻分区也是空闲区,则需要将相邻空闲区合并成一个空闲区。 这个实验主要需要考虑三个问题: (1)设计记录主存使用情况的数据表格,用来记录空闲区和进程占用的区域; (2)在设计的数据表格基础上设计主存分配算法; (3)在设计的数据表格基础上设计主存回收算法。 首先,考虑第一个问题:设计记录主存使用情况的数据表格,用来记录空闲区和进程占用的区域。 由于可变分区的大小是由进程需求量决定的,故分区的长度是预先不固定的,且分区的个数也随主存分配和回收而变动。总之,所有分区情况随时可能发生变化,数据表格的设计必须和这个特点相适应。由于分区长度不同,因此设计的表格应该包括分区在主存中的起始地址和长度。由于分配时空闲区有时会变成两个分区:空闲区和已分分区,回收主存分区时,可能会合并空闲分区,这样如果整个主存采用一表格记录已分分区和空闲区,就会使表格操作繁琐。主存分配

时查找空闲区进行分配,然后填写已分分区表,主要操作在空闲区;某个进程执行完成后,将该分区变成空闲区,并将其与相邻空闲区合并,主要操作也在空闲区。由此可见,主存分配和回收主要是对空闲区的操作。 这样,为了便于对主存空间的分配和回收,就建立两分区表记录主存使用情况,一表格记录进程占用分区的“已分分区表”;一是记录空闲区的“空闲区表”。这两表的实现法一般有两种,一种是链表形式,一种是顺序表形式。在实验中,采用顺序表形式,用数组模拟。由于顺序表的长度必须提前固定,所以无论是“已分分区表”还是“空闲区表”都必须事先确定长度。它们的长度必须是系统可能的最大项数,系统运行过程中才不会出错,因而在多数情况下,无论是“已分分区表”还是“空闲区表”都有空闲栏目。已分分区表中除了分区起始地址、长度外,也至少还要有一项“标志”,如果是空闲栏目,容为“空”,如果为某个进程占用分区的登记项,容为该进程的进程名;空闲区表中除了分区起始地址、长度外,也要有一项“标志”,如果是空闲栏目,容为“空”,如果为某个空闲区的登记项,容为“未分配”。在实际系统中,这两个表格的容可能还要更多,实验中仅仅使用上述必须的数据。为此,“已分分区表”和“空闲区表”在实验中有如下的结构定义: 已分分区表的定义: #define n 10 //假定系统允的进程数量最多为n struct { float address; //已分分区起始地址 float length; //已分分区长度,单位为字节

使用动态分区分配方式的模拟 1内容 (1)用C语言分别实现采用首次适应算法和最佳适应算法的动态分区分配过程alloc( )和回收过程free( )。其中,空闲分区通过空闲分区链来管理:在进行内存分配时,系统优先使用空闲区低端的空间。 (2)假设初始状态下,可用的内存空间为640KB,并有下列的请求序列:?作业1申请130KB。 ?作业2申请60KB。 ?作业3申请100KB。 ?作业2释放60KB。 ?作业4申请200KB。 ?作业3释放100KB。 ?作业1释放130KB。 ?作业5申请140KB。 ?作业6申请60KB。 ?作业7申请50KB。 ?作业6释放60KB。 请分别采用首次适应算法和最佳适应算法,对内存块进行分配和回收,要求每次分配和回收后显示出空闲分区链的情况。 2、示例程序: //Tittle: 使用动态分区算法的模拟 //author: XuYongzhen #include #include #include #include using namespace std; typedef struct DuLNode{ struct DuLNode *prior; struct DuLNode *next; int address; int jsize; int jnumber;//显示分区被那个作业占用,显示零则为空闲分区; }DuLNode,*DuLinkList ; void CreatList(DuLinkList &L){ DuLinkList p=(DuLinkList)malloc(sizeof(DuLNode)); L->next=p; L->jnumber=100;//为释放头结点后面的结点空间做统一化处理 p->prior=L; p->next=NULL; p->jsize=600; p->address=0; p->jnumber=0;

北航电子电路设计训练模拟部分实验报告

————————————————————————————————作者:————————————————————————————————日期:

电子电路设计训练模拟部分实验 实验报告

实验一:共射放大器分析与设计 1.目的: (1)进一步了解Multisim的各项功能,熟练掌握其使用方法,为后续课程打好基础。 (2)通过使用Multisim来仿真电路,测试如图1所示的单管共射放大电路的静态工作点、电压放大倍数、输入电阻和输出电阻,并观察 静态工作点的变化对输出波形的影响。 (3)加深对放大电路工作原理的理解和参数变化对输出波形的影响。 (4)观察失真现象,了解其产生的原因。 图 1 实验一电路图 2.步骤: (1)请对该电路进行直流工作点分析,进而判断管子的工作状态。 (2)请利用软件提供的各种测量仪表测出该电路的输入电阻。 (3)请利用软件提供的各种测量仪表测出该电路的输出电阻。 (4)请利用软件提供的各种测量仪表测出该电路的幅频、相频特性曲线。 (5)请利用交流分析功能给出该电路的幅频、相频特性曲线。 (6)请分别在30Hz、1KHz、100KHz、4MHz和100MHz这5个频点利用示波器测出输入和输出的关系,并仔细观察放大倍数和相位差。 (提示:在上述实验步骤中,建议使用普通的2N2222A三极管,并请注 意信号源幅度和频率的选取,否则将得不到正确的结果。) 3.实验结果及分析: (1)根据直流工作点分析的结果,说明该电路的工作状态。 由simulate->analyses->DC operating point,可测得该电路的静态工作点为:

计算机科学与工程学院学生实验报告 专业计算机科学与技术班级 学号姓名 课程名称操作系统课程类型专业必修课 实验名称动态分区存储管理的模拟实现 实验目的: 1.熟悉动态分区存储管理方式下,主存空间的分配和回收算法。 2.提高C语言编程能力。 实验内容: 假设主存当前状态如右表所示: 系统采用最佳适应分配算法为作业分配主存空间, 而且具有紧凑技术。请编程完成以下操作: (1). 输出此时的已分配区表和未分配区表; (2). 装入 Job3(15K),输出主存分配后的已分配 区表和未分配区表; (3). 回收 Job2所占用的主存空间,输出主存回收 后的已分配区表和未分配区表; (4).装入 Job4(130K),输出主存分配后的已分配 区表和未分配区表。 实验要求 1.数据结构参考定义如下,也可根据需要进行改进: (1)已分配区表: #define n 10 /*假定系统允许的最大作业数量为n,n值为10*/ struct {int number; /*序号*/ int address; /*已分配分区起始地址,单位为KB */ int length; /*已分配分区长度,单位KB*/ float flag; /*已分配区表登记栏标志,0:空表项,否则为作业名;*/

}used_table[n]; /*已分配区表*/ (2)未分配区表: #define m 10 /*假定系统允许的空闲区表最大为m,m值为10*/ struct {int number; /*序号*/ int address; /*空闲区起始地址,单位为KB */ int length; /*空闲区长度,单位为KB*/ int flag; /*空闲区表登记栏标志,0:空表项;1:空闲区*/ }free_table[m]; /*空闲区表*/ 2.以allocate命名主存分配所用的过程或函数(算法参考课件),要将各种情况考虑周全。 3.以reclaim命名主存回收所用的过程或函数(算法参考课件),要将各种情况考虑周全。 4.画出算法实现的N-S流程图。 5.程序调试、运行成功后,请老师检查。 实验步骤: 1.分配内存,结果如下图:

学生学号 实验课成绩 武汉理工大学 学生实验报告书 实验课程名称 计算机操作系统 开 课 学 院 计算机科学与技术学院 指导老师姓名 学 生 姓 名 学生专业班级 2016 — 2017 学年第一学期

实验三 内存管理 一、设计目的、功能与要求 1、实验目的 掌握内存管理的相关内容,对内存的分配和回收有深入的理解。 2、实现功能 模拟实现内存管理机制 3、具体要求 任选一种计算机高级语言编程实现 选择一种内存管理方案:动态分区式、请求页式、段式、段页式等 能够输入给定的内存大小,进程的个数,每个进程所需内存空间的大小等 能够选择分配、回收操作 内购显示进程在内存的储存地址、大小等 显示每次完成内存分配或回收后内存空间的使用情况 二、问题描述 所谓分区,是把内存分为一些大小相等或不等的分区,除操作系统占用一个分区外,其余分区用来存放进程的程序和数据。本次实验中才用动态分区法,也就是在作业的处理过程中划分内存的区域,根据需要确定大小。 动态分区的分配算法:首先从可用表/自由链中找到一个足以容纳该作业的可用空白区,如果这个空白区比需求大,则将它分为两个部分,一部分成为已分配区,剩下部分仍为空白区。最后修改可用表或自由链,并回送一个所分配区的序号或该分区的起始地址。 最先适应法:按分区的起始地址的递增次序,从头查找,找到符合要求的第一个分区。

最佳适应法:按照分区大小的递增次序,查找,找到符合要求的第一个分区。 最坏适应法:按分区大小的递减次序,从头查找,找到符合要求的第一个分区。 三、数据结构及功能设计 1、数据结构 定义空闲分区结构体,用来保存内存中空闲分区的情况。其中size属性表示空闲分区的大小,start_addr表示空闲分区首地址,next指针指向下一个空闲分区。 //空闲分区 typedef struct Free_Block { int size; int start_addr; struct Free_Block *next; } Free_Block; Free_Block *free_block; 定义已分配的内存空间的结构体,用来保存已经被进程占用了内存空间的情况。其中pid作为该被分配分区的编号,用于在释放该内存空间时便于查找。size表示分区的大小,start_addr表示分区的起始地址,process_name存放进程名称,next指针指向下一个分区。 //已分配分区的结构体 typedef struct Allocate_Block { int pid; int size; int start_addr; char process_name[PROCESS_NAME_LEN]; struct Allocate_Block *next; } Allocate_Block; 2、模块说明 2.1 初始化模块 对内存空间进行初始化,初始情况内存空间为空,但是要设置内存的最大容量,该内存空间的首地址,以便之后新建进程的过程中使用。当空闲分区初始化

. 实验一晶体管共射极单管放大器 一、实验目的 1、学会放大器静态工作点的调试方法,分析静态工作点对放大器性能的影响。 2、掌握放大器电压放大倍数、输入电阻、输出电阻及最大不失真输出电压的测试方法。 3、熟悉常用电子仪器及模拟电路实验设备的使用。 二、实验原理 图2-1为电阻分压式工作点稳定单管放大器实验电路图。它的偏置电路采用R 和R组成的分压电路,并在发射极中接有电阻R,以稳定放大器的静态工EB1B2作点。当在放大器的输入端加入输入信号u后,在放大器的输出端便可得到一i个与u相位相反,幅值被放大了的输出信号u,从而实现了电压放大。0i 图2-1 共射极单管放大器实验电路 在图2-1电路中,当流过偏置电阻R和R 的电流远大于晶体管T 的 B2B1基极电流I时(一般5~10倍),则它的静态工作点可用下式估算B教育资料.. R B1U?U CCB R?R B2B1 U?U BEB I??I EC R E

)R+R=UU-I(ECCCCEC电压放大倍数 RR // LCβA??V r be输入电阻 r R/// R=R/beiB1 B2 输出电阻 R R≈CO由于电子器件性能的分散性比较大,因此在设计和制作晶 体管放大电路时, 为电路设计提供必离不开测量和调试技术。在设计前应测量所用元器件的参数,还必须测量和调试放大器的静态工作点和各要的依据,在完成设计和装配以后,因此,一个优质放大器,必定是理论设计与实验调整相结合的产物。项性能指标。除了学习放大器的理论知识和设计方法外,还必须掌握必要的测量和调试技术。消除干扰放大器静态工作点的测量与调试,放大器的测量和调试一般包括:与自激振荡及放大器各项动态参数的测量与调试等。、放大器静态工作点的测量 与调试 1 静态工作点的测量1) 即将放大的情况下进行,=u 测量放大器的静态工作点,应在输入信号0 i教育资料. . 器输入端与地端短接,然后选用量程合适的直流毫安表和直流电压表,分别测量晶体管的集电极电流I以及各电极对地的电位U、U和U。一般实验中,为了避 ECCB免断开集电极,所以采用测量电压U或U,然后算出I的方法,例如,只要 测CEC出U,即可用E UU?U CECC??II?I,由U确定I(也可根据I),算出CCC CEC RR CE同时也能算出U=U-U,U=U-U。EBEECBCE为了减小误差,提高测量精度,应选用内阻较高的直流电压表。 2) 静态工作点的调试 放大器静态工作点的调试是指对管子集电极电流I(或U)的调整与测试。 CEC静态工作点是否合适,对放大器的性能和输出波形都有很大影响。如工作点偏高,放大器在加入交流信号以后易产生饱和失真,此时u的负半周将被削底,O 如图2-2(a)所示;如工作点偏低则易产生截止失真,即u的正半周被缩顶(一 O般截止失真不如饱和失真明显),如图2-2(b)所示。这些情况都不符合不失真放大的要求。所以在选定工作点以后还必须进行动态调试,即在放大器的输入端 加入一定的输入电压u,检查输出电压u的大小和波形是否满足要求。如不满Oi

实验三使用动态分区分配方式的模拟 1、实验目的 了解动态分区分配方式中使用的数据结构和分配算法,并进一步加深对动态分区存储管理方式及其实现过程的理解。 2、实验内容 (1) 用C语言分别实现采用首次适应算法和最佳适应算法的动态分区分配过程alloc( )和回收过程free( )。其中,空闲分区通过空闲分区链来管理:在进行内存分配时,系统优先使用空闲区低端的空间。 (2) 假设初始状态下,可用的内存空间为640KB,并有下列的请求序列: ?作业1申请130KB。 ?作业2申请60KB。 ?作业3申请100KB。 ?作业2释放60KB。 ?作业4申请200KB。 ?作业3释放100KB。 ?作业1释放130KB。 ?作业5申请140KB。 ?作业6申请60KB。 ?作业7申请50KB。 ?作业6释放60KB。 请分别采用首次适应算法和最佳适应算法,对内存块进行分配和回收,要求每次分配和回收后显示出空闲分区链的情况。 程序代码——C语言实现 #include #include struct node //空闲分区链结点的定义 { node *before; node *after; int size; int address; int state; }; node L; struct usenode { usenode *next; int num; int add; int size; }U,*n;

void Init() //空闲分区链的初始化 { node *p; p=(node *)malloc(sizeof(node)); p->before=&L; p->after=NULL; p->size=640; p->address=0; p->state=0; L.after=p; L.before=NULL; L.size=0; U.next=NULL; n=&U; } node *search(int a) { node *p=L.after; if(p==NULL) { printf("没有空闲的区域!"); p=NULL; return p; } else { while(p!=NULL && a>p->size) p=p->after; if(p==NULL) { printf("没有找到合适的空闲空间!"); p=NULL; return p; } else return p; } } void recovery(int a,int b) //内存回收算法 {

计算机操作系统内存分配实验报告记录

————————————————————————————————作者:————————————————————————————————日期:

一、实验目的 熟悉主存的分配与回收。理解在不同的存储管理方式下,如何实现主存空间的分配与回收。掌握动态分区分配方式中的数据结构和分配算法及动态分区存储管理方式及其实现过程。 二、实验内容和要求 主存的分配和回收的实现是与主存储器的管理方式有关的。所谓分配,就是解决多道作业或多进程如何共享主存空间的问题。所谓回收,就是当作业运行完成时将作业或进程所占的主存空间归还给系统。 可变分区管理是指在处理作业过程中建立分区,使分区大小正好适合作业的需求,并且分区个数是可以调整的。当要装入一个作业时,根据作业需要的主存量查看是否有足够的空闲空间,若有,则按需要量分割一个分区分配给该作业;若无,则作业不能装入,作业等待。随着作业的装入、完成,主存空间被分成许多大大小小的分区,有的分区被作业占用,而有的分区是空闲的。 实验要求使用可变分区存储管理方式,分区分配中所用的数据结构采用空闲分区表和空闲分区链来进行,分区分配中所用的算法采用首次适应算法、最佳适应算法、最差适应算法三种算法来实现主存的分配与回收。同时,要求设计一个实用友好的用户界面,并显示分配与回收的过程。同时要求设计一个实用友好的用户界面,并显示分配与回收的过程。 三、实验主要仪器设备和材料 实验环境 硬件环境:PC或兼容机 软件环境:VC++ 6.0 四、实验原理及设计分析 某系统采用可变分区存储管理,在系统运行当然开始,假设初始状态下,可用的内存空间为640KB,存储器区被分为操作系统分区(40KB)和可给用户的空间区(600KB)。 (作业1 申请130KB、作业2 申请60KB、作业3 申请100KB 、作业2 释放 60KB 、作业4 申请 200KB、作业3释放100KB、作业1 释放130KB 、作业5申请140KB 、作业6申请60KB 、作业7申请50KB) 当作业1进入内存后,分给作业1(130KB),随着作业1、2、3的进入,分别分配60KB、100KB,经过一段时间的运行后,作业2运行完毕,释放所占内存。此时,作业4进入系统,要求分配200KB内存。作业3、1运行完毕,释放所占内存。此时又有作业5申请140KB,作业6申请60KB,作业7申请50KB。为它们进行主存分配和回收。 1、采用可变分区存储管理,使用空闲分区链实现主存分配和回收。 空闲分区链:使用链指针把所有的空闲分区链成一条链,为了实现对空闲分区的分配和链接,在每个分区的起始部分设置状态位、分区的大小和链接各个分区的前向指针,由状态位指示该分区是否分配出去了;同时,在分区尾部还设置有一后向指针,用来链接后面的分区;分区中间部分是用来存放作业的空闲内存空间,当该分区分配出去后,状态位就由“0”置为“1”。 设置一个内存空闲分区链,内存空间分区通过空闲分区链来管理,在进行内存分配时,系统优先使用空闲低端的空间。 设计一个空闲分区说明链,设计一个某时刻主存空间占用情况表,作为主存当前使用基础。初始化空间区和已分配区说明链的值,设计作业申请队列以及作业完成后释放顺序,实现主存的分配和回收。要求每次分配和回收后显示出空闲内存分区链的情况。把空闲区说明

实验报告 课程名称:集成电路原理 实验名称:模拟集成电路版图设计与验证小组成员: 实验地点:科技实验大楼606 实验时间:2017年6月19日 2017年6月19日 微电子与固体电子学院

一、实验名称:模拟集成电路版图设计与验证 二、实验学时:4 三、实验原理 1、电路设计与仿真 实验2内容,根据电路的指标和工作条件,然后通过模拟计算,决定电路中各器件的参数(包括电参数、几何参数等),EDA软件进行模拟仿真。 2、工艺设计 根据电路特点结合所给的工艺,再按电路中各器件的参数要求,确定满足这些参数的工艺参数、工艺流程和工艺条件。 3、版图设计 按电路设计和确定的工艺流程,把电路中有源器件、阻容元件及互连以一定的规则布置在Candence下的版图编辑器内。并优化版图结构。 四、实验目的 本实验是基于微电子技术应用背景和《集成电路原理》课程设置及其特点而设置,为IC设计性实验。其目的在于: 1、根据实验任务要求,综合运用课程所学知识自主完成相应的模拟集成电路版图设计,掌握基本的IC版图布局布线技巧。 2、学习并掌握国际流行的EDA仿真软件Cadence的使用方法,并进行版图的的设计与验证。 通过该实验,使学生掌握CMOS模拟IC版图设计的流程,加深对课程知识的感性认识,增强学生的设计与综合分析能力。 五、实验内容 1、UNIX操作系统常用命令的使用,Cadence EDA仿真环境的调用。

2、根据实验2所得参数,自主完成版图设计,并掌握布局布线的基本技巧。 3、整理版图生成文件,总结、撰写并提交实验报告。 六、实验仪器设备 (1)工作站或微机终端一台 (2)EDA仿真软件1套 七、实验步骤 1、根据实验指导书掌握Cadence EDA仿真环境的调用。熟悉版图编辑器Layout Editor的使用。了解基本的布局布线方法及元器件的画法。 2、根据实验2所计算验证的两级共源CMOS运放的元器件参数如表1所示,在版图设计器里画出相应的元器件,对V+、V-、V out、V DD、GND的压焊点位置合理化放置,通过金属画线将各个元器件按实验2的电路图合理连接,避免跳线。 表 1运放各器件版图参数

c++动态分区分配算法模拟(操作系统课程 设计)

课程设计 课程设计名称:操作系统课程设计 专业班级: 学生姓名: 学号: 指导教师: 课程设计时间:6月13日-——6月17日

计算机科学专业课程设计任务书 说明:本表由指导教师填写,由教研室主任审核后下达给选题学生,装订在设计(论文)首页

1:需求分析 (1)用C语言实现采用首次适应算法的动态分区分配过程alloc()和回收过程free()。其中,空闲分区通过空闲分区链表来管理,在进行内存分配时,系统优先使用空闲区低端的空间。 (2)假设初始状态下,可用的内存空间为640KB,并有下列的请求序列:作业1申请130KB;作业2申请60KB;作业3申请100KB;作业2释放60KB;作业4申请200 KB;作业3释放100 KB;作业1释放 130 KB;作业5申请140 KB;作业6申请60 KB;作业7申请 50KB;作业6释放60 KB。采用首次适应算法进行内存块的分配和回 收,同时显示内存块分配和回收后空闲内存分区链的情况。 2:概要设计 (1)数据结构:作业队列数据结构,用于存储待处理作业;阻塞作业队列数据结构,用于存储阻塞的作业。已分配内存块的双向链表,记录当前系 统已分配的各个内存块;未分配内存块的双向链表,记录系统中剩余的 各个内存块;系统内存分配总情况的结点对象,记录系统中阻塞的作业 总数,已分配的内存块数,剩余的内存块数。 (2)主函数:对作业队列、阻塞队列、已分配内存块链表、未分配内存块链表、系统总内存分配情况结点对象进行初始化,调用分配函数或回收函 数,循环处理11个作业步。 (3)分配函数alloc():首次适应算法检索未分配的内存块链表,若找到合适的内存块,则加以判断,空闲内存块大小减去作业去请求内存块大小小于

一.实验目的 通过编写和调试存储管理的模拟程序以加深对存储管理方案的理解,熟悉可变分区存储管理的内存分配和回收。 二.实验内容 1.确定内存空间分配表; 2.采用最优适应算法完成内存空间的分配和回收; 3.编写主函数对所做工作进行测试。 三.实验背景材料 由于可变分区的大小是由作业需求量决定的,故分区的长度是预先不固定的,且分区的个数也随内存分配和回收变动。总之,所有分区情况随时可能发生变化,数据表格的设计必须和这个特点相适应。由于分区长度不同,因此设计的表格应该包括分区在内存中的起始地址和长度。由于分配时空闲区有时会变成两个分区:空闲区和已分分区,回收内存分区时,可能会合并空闲分区,这样如果整个内存采用一张表格记录己分分区和空闲区,就会使表格操作繁琐。分配内存时查找空闲区进行分配,然后填写己分配区表,主要操作在空闲区;某个作业执行完后,将该分区变成空闲区,并将其与相邻的空闲区合并,主要操作也在空闲区。由此可见,内存的分配和回收主要是对空闲区的操作。这样为了便于对内存空间的分配和回收,就建立两张分区表记录内存使用情况,一张表格记录作业占用分区的“己分分区表”;一张是记录空闲区的“空闲区表”。这两张表的实现方法一般有两种:一种是链表形式,一种是顺序表形式。在实验中,采用顺序表形式,用数组模拟。由于顺序表的长度必须提前固定,所以无论是“已分分区表”还是“空闲区表”都必须事先确定长度。它们的长度必须是系统可能的最大项数。 “已分分区表”的结构定义 #define n 10 //假定系统允许的最大作业数量为n struct { float address; //已分分区起始地址 float length; //已分分区长度、单位为字节 int flag; //已分分区表登记栏标志,“0”表示空栏目,实验中只支持一个字符的作业名 }used_table[n]; //已分分区表 “空闲区表”的结构定义 #define m 10 //假定系统允许的空闲区最大为m struct { float address; //空闲区起始地址 float length; //空闲区长度、单位为字节 int flag; //空闲区表登记栏标志,“0”表示空栏目,“1”表示未分配 }used_table[n]; //空闲区表 第二,在设计的数据表格基础上设计内存分配。 装入一个作业时,从空闲区表中查找满足作业长度的未分配区,如大于作业,空闲区划分成两个分区,一个给作业,一个成为小空闲分区。 实验中内存分配的算法采用“最优适应”算法,即选择一个能满足要求的最小空闲分区。 第三,在设计的数据表格基础上设计内存回收问题。内存回收时若相邻有空闲分区则合并空闲区,修改空闲区表。 四、参考程序 #define n 10 //假定系统允许的最大作业数量为n

实验四、动态分区存储管理 (一)、实验目的和要求 为了进一步提高主存的利用率,使存储空间划分更加适应不同的作业组合,人们设计可变式分区方案。本实验要求模拟放置与回收策略算法,加深对动态分区存储管理的理解。(二)、实验内容 本实验模拟了最佳适应算法分配算法,最坏适应算法、首次适应算法同学们可以据此自己实现。 实验原理: 放置策略: 首次适应算法的表是按空闲区首址升序的(即空闲区表是按空闲区首址从小到大)方法组织的。最佳适应算法是将申请者放入与其大小最接近、切割后的空闲区最小的空闲区中。若系统中有与申请区大小相等的空闲区。最坏适应算法的空闲区表是按空闲区大小降序的方法组织的(从大到小的顺序)。 回收算法 当一个进程(或程序)释放某内存区时,要调用存储区释放算法release,它将首先检查释放区是否与空闲区表(队列)中的其它空闲区相邻,若相邻则合并成一个空闲区,否则,将释放的一个空闲区插入空闲区表(或队列)中的适当位置。 空闲释放区与空闲区相邻有四种情况。 上邻空闲区 下上邻空闲区 上、下邻空闲区 上、下邻已分配区 (三)、实验环境 1、pc 2、vc++ (四)、程序源代码: #include #include #include #include #define n 10 #define m 10 #define minisize 100 struct { float address; float length; int flag; }used_table[n]; struct {

float address; float length; int flag; }free_table[m]; void allocate(char J,float xk) { int i,k; float ad; k=-1; for(i=0; i=xk&&free_table[i].flag==1) if(k==-1||free_table[i].length=n) { printf("无表目填写已分分区,错误\n"); if(free_table[k].flag==0) free_table[k].flag=1; else { free_table[k].length=free_table[k].length+xk; return; } } else {

相关文档
相关文档 最新文档