欢迎来到课桌文档! | 帮助中心 课桌文档-建筑工程资料库
课桌文档
全部分类
  • 党建之窗>
  • 感悟体会>
  • 百家争鸣>
  • 教育整顿>
  • 文笔提升>
  • 热门分类>
  • 计划总结>
  • 致辞演讲>
  • 在线阅读>
  • ImageVerifierCode 换一换
    首页 课桌文档 > 资源分类 > DOCX文档下载  

    嵌入式操作系统内核原理和开发.docx

    • 资源ID:435439       资源大小:37.19KB        全文页数:12页
    • 资源格式: DOCX        下载积分:5金币
    快捷下载 游客一键下载
    会员登录下载
    三方登录下载: 微信开放平台登录 QQ登录  
    下载资源需要5金币
    邮箱/手机:
    温馨提示:
    用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)
    支付方式: 支付宝    微信支付   
    验证码:   换一换

    加入VIP免费专享
     
    账号:
    密码:
    验证码:   换一换
      忘记密码?
        
    友情提示
    2、PDF文件下载后,可能会被浏览器默认打开,此种情况可以点击浏览器菜单,保存网页到桌面,就可以正常下载了。
    3、本站不支持迅雷下载,请使用电脑自带的IE浏览器,或者360浏览器、谷歌浏览器下载即可。
    4、本站资源下载后的文档和图纸-无水印,预览文档经过压缩,下载后原文更清晰。
    5、试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。

    嵌入式操作系统内核原理和开发.docx

    嵌入式操作系统内核原理和开发(最快、最优、最差内存安排算法)前面我们说到了基于链表的内存安排算法。但是之前我们也说过,其实内存安排一般有三个原则,最快、最优和最差。最快比较好理解,就是查找到合适的节点就马上安排内存,我们在前面一篇博客采纳的就是这个方法。最优呢,就是查找可以满意当前内存安排的最小节点,这样不会有很大的铺张,但是有可能会产生碎片节点。最终一种就是最差安排算法,说是最差效果未必最差。由于在大的内存安排的时候至少不会很快产生内存碎片,对整个系统的稳定来说有可能是好事。所以这三种方法很难说哪一种好,哪一种不好,需要结合详细的应用场景客观进行分析。不过话说回来,内存碎片是无论如何都避开不了的。首先,为了敏捷对这三种安排算法进行配置,我们定义了宏开关,需要哪个就把那个开关放开。临时默认打开的算法的是最快安排算法。1 ffdefineMAX_SPEED_MALLOC12 ffdefineMIN_SIZE_MALLOC03 #defineMAX_SIZE_MALLOC0由于之前已经争论过最快安排算法,所以这里着重争论的最优安排算法和最差安排算法。又由于两者的差别微小,所以单独分析其中一种算法也行。就拿最优安排算法来说,为了查找到最小的节点,我们需要对整个链表进行遍历,这个还是比较消耗时间的。4 while(pCur)5 (6 if(pCur->size>(size+sizeof(MNG_NODE)7 if(NULL=pFindpFind->size>pCur->size)9 10 pFind=pCur;H)12 )1314 pPre=PCUr;15 pCur=pCur->next;16 )查找到PFind这个我们需要的节点之后,还需要从PFreeLiSt中删除该节点。所以,我们需要进一步的推断和分析,17 if(NULL=pFind)18 returnNULL;1920 pPre=find_previous_node_in_list(pFind,pFreeList);21 if(NULL=pPre)22 pFreeList=pFreeList->next;23 else24 pPre->next=pFind->next;2526returnpFind;首先推断pFind前面有没有节点,假如没有表示pFreeList就是pFind,那么pFreeList需要自行向后退缩;当然假如当前的PFind节点是有前节点的,那么只需要把前节点的next指针重新更改一下即可。当然,这里还对原来的查找节点函数作了一下修改,使之更合理更通用。27/*28*function:findpreviousnode29*/3031MNG_NODE*find_previous_node_in_list(MNG_NODE*pNode,MNG_N0DE*pList)3233MNG_NODE*pFind=pList;34MNG_NODE*pPre=NULL;3536 while(pFind&&pFind!=pNode)37 (38 pPre=pFind;39 pFind=pFind->next;40 )42if(NULL=pFind)43returnNULL;4445returnpPre;46)上面也只是说了个也许,详细的内容可以参见下面的源代码。既可以在VC上编译,也可以在GCC上面编译,都没有问题。当然,假如本地OS没有编译器,可以选择网上在线编译,也是个不错的选择。47/*48*malloc&freeinlinknodealgorithm49*/5051ffinclude<string.h>52#include<malloc.h>5354/*55structdefinition56*5758 typedefstruct_MNG_N0DE59 (60 struct_MNG_N0DE*next;61 unsignedintsize;62 MNG_N0DE;636465/*66*macrodeclaration67*/6869#defineMAX_SPEED_MALLOC170ffdefineMIN_SIZE_MALLOC071#defineMAX_SIZE_MALLOC07273#defineMEM_BUFFER_LENGTH(0xl«24)8II£11fq.xau<-puTdd=PUHd911fpujd=suddu)til(3N9NW)j3zs+azs)>zs<-pujd龈PUwd)"nm£11ZWfpI3d=SJdd*aa0N9NWIIIfseajdd=pujd*3a0N9NWOII)601(zsuPaU即SUn)加0广)工厂4四-PllIJ*gaN9NWgoI£01/*901pds-xeujuspouj.)saqpuj.:uoyq.Dunj.*Sol*/t,0IDOTlWa33dS-XVW£01301IOI(001f3p0Nd=ISlldd*66f)S11dd*=)3u<-ap0Nd$6)L6QSlldd*3a0N9NW'apoNd*3aN9NW)pea-is-oupouppepes96S6/*%4.s,peqoq.uapouPPe:uof”Unj*£6*/361606f()S11dToON-E)NWrP0NdTOON-E)NW)Sn一“一即OirSnOIAaJerPUH*3Q0N9NW6888/*Z>8UOneJBaPUOn)U3*98*/§8£8fs11Divd+3aN9NW不平”秀fs11JddTGONFnw>Re)S"eeaqi9dpo086L/*8Z.UOIleJenapaqejeeqo9*LL*/9Z.SLif(NULL=pFind)returnNULL;if(pFreeList=pFind)PFreeList=pFreeList->next;elsepPre->next=pFind->next;returnpFind;)#endif#ifMIN_SIZE_MALLOC/*function:findbestfitnodeinminsize*/MNG_NODE*find_best_fit_node(unsignedintsize)MNG_NODE*pCur=pFreeList;MNG_NODE*pPre=pCur;MNG_NODE*pFind=NULL;while(pCur)if(pCur->size>(size+sizeof(MNG_NODE)if(NULL=pFindpFind->size>pCur->size)pFind=pCur;)pPre=pCur;pCur=pCur->next;)if(NULL=pFind)returnNULL;pPre=find_previous_node_in_list(pFind,pFreeList);if(NULL=pPre)119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162pFreeList=pFreeList->next;163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205elsepPre->next=pFind->next;returnpFind;)#endif#ifMAX_SIZE_MALLOC/*function:findbestfitnodeinmaxsize*/MNG_NODE*find_best_fit_node(unsignedintsize)MNG_NODE*pCur=pFreeList;MNG_NODE*pPre=pCur;MNG_NODE*pFind=NULL;while(pCur)if(pCur->size>(size+sizeof(MNG_NODE)if(NULL=pFindpFind->size<pCur->size)pFind=pCur;)pPre=pCur;pCur=pCur->next;if(NULL=pFind)returnNULL;pPre=find-previous-node-in-list(pFind,pFreeList);if(NULL=pPre)pFreeList=pFreeList->next;elsepPre->next=pFind->next;returnpFind;6%8KZ.Kf(zs)ooeu-uiiu-UJn)a泯f11NUJrUaJt3(3QON9NW)oazs-H19N31-H3dJ8W3W)<zs)4J£忆ZPZMlNUJruaJ【代(zs=0)丹0代)6£Z(azsupauSsun)ooieu-uiiu*po§£乙1.iZ*9£3Uone)O11eAJOuIaWruoq,ounj.*S*/>£Z£1ZiZMZ(30N9NW)÷oazs+MaNd(*jep)(*ppA)UJruaJ0£Z6ZZf()S11D011vdgfMNd)peaqs"ou-pouppeg江f(lsJdd>8fpod)peq-s-ou-apou-ppeE91ZfazS+(3aN-9NW)j-oazs=-ezs<-podzzfzs=azs<-MNdPZZJ(zs+(3a0N-DNW)zs)-ezs<-pod+GaoN-9NW)3OaZIS+PlOd(*jep)(tqonFnw)=MaNd£%ZZZ1NUJruaJIZZ(PTod=IlnN)HOZZf(azTS)epou-iTj._iS9q_puTj,=PTOd6忆813fid3Q0N9NWLZPTOd*3aN9NW912S忆(ezs4,uPaUSUn)OTTeUl-UlauJ-poz£1Z/*ZlZuo4,eooeAJoWauJuauidu:uoxq.Dunj.*z*/OlZ60Z803HPUa#LOZfujn4,aj£61f(isddd>8rapoNd)peM-s-ou-apou-ppezZf)xau<-apoNd=4×u<-poN9Jdd6Z06Zfujnisj687(apoNJdd=IlnN)H883f()Spo11vd,叩ONd)Sl-UiFPOLI-SnOAajcpu)=poNJddLZ981(斯fujnj咻f(211。":IdgrapoNd)peM-siu"pouppe£8Zfixau<s!po11vd=Spo11vdZ8Z)I8(21"OnVd=poNd)0826LZfapNJdd*3Q0N_9NWUZ)LLZ(apoNd*3aN-9NW)J4-weupQLZ/*PLZjj.Xjoujuj)U3W3dw:Uol):5Unj*ZUl*/ZLZLZOLZ697f3vddUJrUaJg%1.9ZMlNUJn划993(PUIdd=IlnN)HS9Zt9Z£9Zfq.xeu<-puTdd=PUHdZ9Zfpujd=dd19Z)09Z(epoNd=ipujd.pudd)3iqM6SZ8SZflinN=SJdd*3Q0N9NWLZf)Sd=PUHd*aaN9NW9SZ)双QSIIdT。OhrE)NWfepNdTGON-9顺)”11一5"即OlrSnOIAaJCrPU叫TeJON-9NWTSZ£SZ/*epouSnOlAaJdPiJIj:uoizpunj*2*/OSZf(=eoq9d)aajj(SeGqT9d=jIInN)H9££)S££()4.Txe-uiaujpo,£££££/*Z££JaJJnqXjouiwjj.ruoq,ounj.*££*/0££6Z£8况(LZ£f11nN=ISIl:>OnVd9在f(30N9NW)loazs-H19N31-y3dd9-W三W=azs<-¾s9Jdd,比feeaqi9d(#300N-9NW)=ISII33J=Id出£(H±9N31d3dd8W3Wf0feeaqi9d)isuiiu£乙£ZZfujnq.9jz(eeaqi9d=IlnN)H0Z£(H±9N31d3dd9W3W)3ieu(*p)=eeaqT9d6l£)8l£():HUl-U三pZJ£9I£/*SI£j3j4nqAJOuIauIq,3uoq.3unj.*刀£*/£l£ZI£IK(Ol£J(3a0N9NW)lozs-eead(*Jeip)(*m。ON-E)NW)asJ:%uT60£mfujnq.auz,0£(HIE)Nml一纲:Hng-WmW+eeoq9d(*Jep)(*pA)=<Bleedeeaqi9d>eead)190£So£fujnq,j>()£(eead=N)i£0£Z(K(eead+p)9J4uupoio£00£/*663UOlaUnJAJouJaIUjj.:iJOn)UnJ*86Z*/L()Z96Z$6Z%ZPFreeList=NULL;PAllocList=NULL;)/*function:filestartshere*intmain(intargc,char*argv)mem_init();mem_exit();return1;338339340341342343344345346347348349350351352353

    注意事项

    本文(嵌入式操作系统内核原理和开发.docx)为本站会员(夺命阿水)主动上传,课桌文档仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知课桌文档(点击联系客服),我们立即给予删除!

    温馨提示:如果因为网速或其他原因下载失败请重新下载,重复下载不扣分。




    备案号:宁ICP备20000045号-1

    经营许可证:宁B2-20210002

    宁公网安备 64010402000986号

    课桌文档
    收起
    展开