本人愚笨,求教各位关于“段页式内存管理系统”的问题,求代码!

WMY136 2012-12-18 10:38:12
段页式内存管理系统

设计一个段页式内存管理系统,其中内存页框16个,每个程序有4个段,每个段包含的页面数不少于16个测试页面流不少于500个页面,页面流自己动态生成。


求代码,能运行于Linux环境里的,简单点的。本人是菜鸟级的。。。
...全文
1454 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
gjq_1988 2014-09-28
  • 打赏
  • 举报
回复
你这个问题无解, linux本身就实现了内存管理(也就是你说的分页,事实上分页只是内存管理模块里很小很小的一部分),应用程序要访问硬件只能通过linux系统调用。换句话说应用程序无法直接访问物理内存资源。无法访问控制分页开关的协处理器cp,所以你说的 求代码,能运行于Linux环境里的 本身就是矛盾的,你要自己写内存管理模块,那你要么自己写个裸机程序,仅管理内存(工作量小),要么自己写个微内核(工作量大),要么自己把linux kernel 代码down下来,把它的内存管理相关的代码替换成你自己写的(工作量巨大)。。。 如果你仅仅想要管理内存,你可以在自己的进程空间写一个内存管理模块,负责一些用户空间的内存分配或回收,但段页式内存管理系统是必须要直接控制访问硬件的,需要 1:cpu有段页式硬件支持,有的cpu没有分段硬件支持(比如arm)。 2:软件必须运行于系统级别,也就是OS级别,或者为裸机程序。 3:一个系统只能有一个底层的内存管理模块,多了会冲突,除非你自己做同步(无意义)。
lm_whales 2014-02-27
  • 打赏
  • 举报
回复
好牛啊,这是要写一个内嵌操作系统,还是写一个虚拟机????
haitaozi 2013-09-09
  • 打赏
  • 举报
回复
我最近也在学linux一些基础 的!学一些命令脚本之类的!其实这个系统难不?复杂不·?
上三行 2013-09-02
  • 打赏
  • 举报
回复
这个写起来不是几个小时就能搞定的,你得自己去看书,linux0.11一书中详细讲解了段页式内存管理原理,你自己对照代码看书就OK了
早先年,驰骋网络,积累了很多源代码…… 互联网的基因、骨头里就是自由、分享,非常感谢没有墙的时代,无限怀念,想想当时的BBS,俱往矣~ 如今的互联网却在疯狂的过滤、筛选、删除,有了N多的墙…… 不知道说什么好,很多的资源因为商业利益的原因从如今臭名昭著的搜索引擎中被删除,恐怕是很担忧后起之秀…… 遗憾的是互联网不但是必须自由的,而且是创新的天地,前辈们结实的臂膀就是无私奉献给后来者攀登的,而决不是扼杀…… 最近看到网络上的商业争吵,很是气愤~!!! 于是就开始重新注意网络蜘蛛…… 很难过,网络上已经很难找到免费的、有价值的蜘蛛代码~ 每一个程序人(包括国外的)如果没有demo,又从何入手??? 可笑的人,可笑的世界,一个自由的网络被勒上了无形的缰绳,网络上哪些免费的、有价值的资源正被搜索引擎“淡”化,包括谷沟(早先一睹古够地图后就下了结论:互联网摧毁一切!),不是吗?看看全世界的墙,从太极看:物极必反,自由的极端就是地狱、牢笼……任何东西都有互反的作用,美味的食物都带“毒”,但人们选择容忍、忽略,存在有不用付出代价的东西吗?! 我翻出我的布袋,把它们依然放回它们应该呆的地方,让更多的人们得到启发,开始创新之旅,期待您的精彩,感谢曾经自由的(不被看重)网络~~~ ------------------------------- 这个是完整的项目源代码,原汁原味,无需多舌~ 搞程序,必须e文过关,自己琢磨去吧~ 我们记住一点: 互联网上流转的都是数字,那些非数字的东西只是方便更多人使用,网络上“散布”的什么反向搜索等等只是一种愚笨的方法而已,实际上蜘蛛是根本不需要DNS、注册机构什么劳什子的,它只需要不知疲倦地啃噬不同国家地区的IP,并不是所有的IP都注册、登记哦~ 把不“规则”的物料抓回来,接着才是反向等方的数据整理,蜘蛛织网、缝补都是需要时间积累的,这些原始的东西才是人们真正感兴趣的东西,“归置、加工”后只是一种规则下的苟且或商业的需要罢了…… 所以这个蜘蛛只需要你给(小小更动)它喂食(IP库)~ 它就会不知疲劳地四处爬,抓回的东西…… 怎么组织数据(库)才是搜索引擎的关键~!!! 抓回来就看你怎么折腾、运作了,可以肯定的是: 互联网需要的就是千奇百怪的、五花八门的搜索引擎~!!! 目前的数量远远不够,远远不够,这将是它的魅力,需要大家的智慧和义务劳动,在摧毁一切之前我们尽心营造和谐,呵呵~ ===================================== 忘记了…… 再来说下用途: 比如你在某网站,看到想看的图片,但要注册什么的看不到,还有其它资源~ 怎么办呢? 就用蜘蛛吧,把地址准确输入,它就会自动给你爬出来…… 可以设定要抓取的文件类型,…… 比如图片什么的,征婚网站有很多mm图片,就是看不到,怎么办? 用爬虫吧,当然爬虫只能爬所有http资源,数据库中的就得用另法了,呵呵~
很多光盘上的程序,比如电脑迷光盘,开头总有一段动画,用来展现企业品牌和LOGO之用。这个动画是Flash做的,而且嵌入到程序中简直做到无缝融合,因为右键点击它也不会有那特有而烦人的Flash右键菜单。 因此将Flash融合到WinForm中能够增强程序的多媒体效果和炫丽的外观。现在我们就来看看在C#桌面程序中如何插入Flash视频,而且去掉烦人的右键菜单。 首先要插入Flash就必须使用Flash控件,在工具栏右键选择“选择项…”,然后在“COM组件”面板下点击“浏览”按钮,在本机电脑C:\WINDOWS\system32\Macromed\Flash\目录里选择Flash8.ocx(也有可能是Flash9F.ocx,版本不同所致),然后点击确定就可以了。但到这里还没有完,因为要使用Flash控件必须注册它。 在CMD里面输入如下: regsvr32 C:\WINDOWS\system32\Macromed\Flash\Flash8.ocx 系统会提示注册成功,这个时侯就可以在VS2008里面使用该控件了! 打开VS2008,新建一个Windows程序,然后把刚才我们选择的Flash控件Shockwave Flash Object拖到窗体中,这时窗体中会出现一个白色的矩形框,Name属性我们设置为Myflash,在里面可以播放我们需要的swf文件。 注意到该控件主要有几个属性: Name属性,这个是所有对象都会有的。 Menu属性,这个是Flash菜单项,默认值为true,也就是右键的时候会出现完整的Flash菜单,如果设置为False,则只出现最简的菜单(设置与关于)。 Move属性,这个属性是用来指定要播放的Flash文件的。 Playing属性,指定是否装在影片之后马上播放。 Quality属性,设置影片的质量。 Scalemode属性,设置影片的缩放模。 Visible属性,设置影片控件的可视与否。 接下来我们在窗体中放置一个按钮,Text属性设置为LoadSwf。双击添加事件代码如下: OpenFileDialog ofd = new OpenFileDialog(); ofd.Filter = "Flash文件|*.swf"; DialogResult dr = ofd.ShowDialog(); if (dr == DialogResult.OK) { Myflash.Movie = ofd.FileName; Myflash.Play(); } 这样当程序运行的时候点击按钮会要我们选择一个SWF文件,选择好后确定就自动播放了! 当然,我们还可以添加一些按钮,分别为Play,Pause Play按钮的播放功能如下: This.Myflash.Play(); Pause按钮的暂停功能如下: This.Myflash.StopPlay(); 这里就不再啰嗦了,各位园友可以自行去研究一些常用的功能。下面我们主要来讲解如何消去烦人的Flash右键菜单! 消去Flash右键菜单有两种方法(本人愚笨,到目前只发现这两种): 方法一: 这个方法比较复杂,也比较繁琐,主要是用到API函数的调用。代码如下: #region 去掉Flash右键菜单,API函数的声明 private const int GWL_WNDPROC = -4; public delegate IntPtr FlaWndProc(IntPtr hWnd, int msg, IntPtr wParam, IntPtr lParam); private IntPtr OldWndProc = IntPtr.Zero; private FlaWndProc Wpr = null; [DllImport("user32.dll", CharSet = CharSet.Auto)] public static extern IntPtr SetWindowLong(IntPtr hWnd, int nIndex, FlaWndProc wndProc); [DllImport("user32.dll", CharSet = CharSet.Auto)] public static extern IntPtr CallWindowProc(IntPtr wndProc, IntPtr hWnd, int msg, IntPtr wParam, IntPtr lParam); private IntPtr FlashWndProc(IntPtr hWnd, int msg, IntPtr wParam, IntPtr lParam) { if(msg == 516) //516就是对应鼠标的右键,当然你也可以用0X0204右键鼠标的16进制编码 return (IntPtr)0; //什么都不做 return CallWindowProc(OldWndProc, hWnd, msg, wParam, lParam); } #endregion 将以上代码放在窗体声明字段的地方。 注:要调用API函数就必须引用一个命名空间: using System.Runtime.InteropServices; 然后在窗体的载入事件里面添加如下代码: private void Flash_Load(object sender, EventArgs e) { this.Wpr = new FlaWndProc(this.FlashWndProc); this.OldWndProc = SetWindowLong(Myflash.Handle, GWL_WNDPROC, Wpr); //关联flash控件 } 如此则大功告成,看看是不是把Flash右键菜单给去掉了!! 方法二: 这个方法很简单,也很灵活,主要用到继承和重写等面向对象的核心内容。 首先声明一个类,让它去继承AxShockwaveFlashObjects.AxShockwaveFlash,该类是实例化Flash控件生成的类。该类中包含各种Flash的事件和属性,在这里我们只对右键菜单的事件感兴趣,因此我们去重写该事件。 类的代码如下: public class FlashRightKey : AxShockwaveFlashObjects.AxShockwaveFlash { //定义一个公共类FlashRightKey(类名自己定义)来继承AxShockwaveFlashObjects.AxShockwaveFlash(在实例化Shockwave Flash Object控件后生成)类 protected override void WndProc(ref Message m) //重载WndProc方法(此方法即消息处理机制) { if (m.Msg == 0X0204) //0×0204即鼠标右键的16进制编码 return; //返回并不输出 else base.WndProc(ref m); //如果不是右键的话则返回正常的信息 } } 类写好了,我们要在Flash控件里面使用它,必须在实例化Flash控件的时候用如下代码(写在Flash.Designer.cs文件相应的地方): private FlashRightKey MyFlash2; this.MyFlash2 = new Namespace.FlashRightKey(); 注:Namespace为工程项目的命名空间。 剩下的就和不用我多说了,大功告成,实现了Flash控件去掉右键菜单。 以上代码在 XP+VS2008+Flash8播放器 调试通过。 本文也只是抛砖引玉,至于如何获取点击事件以及和其他控件的通信则是比较高深一点的知识了,各位朋友互相勉励,想更高深的知识挺进!

3,286

社区成员

发帖
与我相关
我的任务
社区描述
Linux/Unix社区 实用资料发布区
社区管理员
  • 实用资料发布区社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧