打印

请问存储器翻页和进程切换有冲突怎么避免?

[复制链接]
1969|6
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
alphal|  楼主 | 2007-2-26 14:52 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
我的程序使用了OS,几个进程都会对外部存储器操作,而且有一个进程会对存储器进行翻页存储与读取(使用573扩展总线),其他进程都对第0页操作,平时程序也都只对第0页操作。
我的疑问是:当进程A将存储器翻页到第n页工作的时候,任务切换到进程B,进程B会当作是在第0页进行操作了,或者此时进程B将存储器翻到第0页了,再回到进程A的时候A当成还在第n页进行操作,这样对存储器的操作就混乱了。因为我没法控制各个进程会在什么地方退出和进入,所以翻页和进程切换的冲突似乎很难避免?
现在发现程序长时间运行中有出现数据混乱的现象,但没有想象中那么严重,第0页某个区域的数据读出来发现有2个字节有改变,按上面的理解,这么大的一个区域被修改的似乎不应该只这么2个字节。

请问翻页的要求和进程切换的冲突怎么避免?
在翻页操作时禁止任务调度好不好?我担心若翻页操作某时很频繁的话,对其他进程会有较大影响。

相关帖子

沙发
IC1008| | 2007-2-26 17:58 | 只看该作者

做一个专门进行存储的进程行吗

其他进程发出的是任务给存储进程 我想 好像很耗费资源啊 呵呵

使用特权

评论回复
板凳
alphal|  楼主 | 2007-2-26 18:07 | 只看该作者

可是存储进程也会被任务调度打断,还是会有问题啊

使用特权

评论回复
地板
平常人| | 2007-2-26 21:15 | 只看该作者

你这里有两点没有注意到:1)翻页操作要保护,2)任务调度要

1)翻页操作应当做一个不可分的操作,以任何可行的手段保证在翻页操作过程中不能有中断或任务调度发生,P-V操作就是一种可行的手段。

2)任务调度要合理是指,在调度任务时检测第0页的内容是属于下一个任务的,当发现有偏差时,调入合适的页;另一种办法是在发现有偏差时,停止任务调度并退回前一任务,尤其是对第n页操作的进程A。后一种办法是为了防止频繁的翻页操作,但要看具体情况是否允许这样操作。

使用特权

评论回复
5
yos| | 2007-2-27 08:42 | 只看该作者

你用的是51吧

    51很适合做小规模应用,程序和外设规模大了,无论成本还是性能都是不太划算的.除非有其他原因限制你非用51不可,复杂应用还是选高档一点的cpu好.
    如你所述,你的任何一个任务都不会跨页操作,你可以在任务控制块中(所有操作系统都有的)增加一个变量,来记录每个任务所属的页,在上下文切换代码中加入切换页的操作,这个操作也就几条指令,不会对系统响应有太大的影响的.

使用特权

评论回复
6
lailiu| | 2007-2-27 10:06 | 只看该作者

信号量

使用特权

评论回复
7
penny2799| | 2007-2-27 13:10 | 只看该作者

OS/

至少也得有个标志吧,在读取页内信息时先看看标志位,或者是楼上说的信号量

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

112

主题

473

帖子

1

粉丝