编写一个能够支持多任务的程序(或OS)是不是必须依赖相应的处理器,比如说必须在80386(或)以上的处理器?

JerKii 2005-11-14 10:15:18
小弟新手,对以下概念不是很理解,希望高手指点:

1。编写一个能够支持多任务的程序(或OS)是不是必须依赖相应的处理器,比如说必须在386(或)以上的处理器?是不是多任务的程序必须依赖这些CPU中的某些特定部件来完成?
在一个80286甚至是8086上通过特定的算法可以实现多任务的程序或操作系统吗?

2。还有内存的存取模式(比如段存取(Segment mode),线性存取(Flat mode))是由操作系统还是有特定的CPU来决定的?应该是CPU吧!为什么像80286这样的CPU就只能通过段的方式来对内存进行管理/访问呢?

3。对于在Windows中(如Windows XP)运行的DOS程序,按理说他们该程序中所用的内存地址就是真正的物理地址,但是实际情况好像并不是这样。。。

4。通常我们会说是一个程序?还是操作系统?还是CPU工作于实模式还是保护模式啊?

5。能否开发出32位的“DOS”应用程序?也就是说我所要开发的程序可以直接对32位的处理器(中的寄存器)进行访问,并且能够任意操作系统中的资源呢?就像以前在80286/386中开发DOS应用程序那样。。。
...全文
237 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
rockefeller8 2005-12-12
  • 打赏
  • 举报
回复
1。编写一个能够支持多任务的程序(或OS)必须依赖相应的处理器,但不是必须在386以上
2。由操作系统来定的,但是要依赖CPU的硬件的支持能力
3。是的,不是。
4。是一个程序。
5。可以。
Kernall 2005-11-18
  • 打赏
  • 举报
回复
中断。
8086可以通过中断来切换任务。
进入中断时一吨PUSH,处理完中断后,sched一下,切换到另一个进程的堆栈,然后再一吨POP,IRET,就切换过去了。
WYlslrt 2005-11-17
  • 打赏
  • 举报
回复
进入保护模式和打开分页模式都是通过操作CR0寄存器来实现的.
段描述符表和页表由操作系统和CPU共同维护.
JerKii 2005-11-17
  • 打赏
  • 举报
回复

多些各位回答我的问题!:)

我们已经知道,386以上的CPU在机器刚启动的时候仍处于实模式,此时CPU所能访问的内存为1M,并且机器的BIOS会将当前的启动驱动器中将该驱动器的第一个扇区(0柱面,0磁道,1扇区)的内容加载到0000:7C00处,然后开始让CPU从7C00出的第一条指令开始执行,在此之后,CPU是怎样从实模式进入到保护模式的呢,因为进入到保护模式后我们可以访问更多的内存资源,并且能够使用32位的寄存器等等?是由引导程序执行相应的指令来完成的吗?

另外,如果进入保护模式并启用页管理机制的话,那么段描述表,页目录,页表等这些数据结构是由我们的引导程序(或者说是之后的OS)来维护,还是由CPU自己来维护的呢?
lander9999 2005-11-16
  • 打赏
  • 举报
回复
8086的机器上怎么能完成一个抢占式的多任务系统呢?协同式的没有什么意思,实际就一个程序在运行。8086如果能把时钟中断用做任务调度切换,可能可以实现抢占式的调度多个不同的任务。不知道有没有人做过这种程序。
fangzhe 2005-11-16
  • 打赏
  • 举报
回复
1。


2。
“应该是CPU吧!”对的

3。
当然是虚拟的……

4。不明白

5。
“5.可以的,你先让386以上的处理器,处于保护模式,加载一个4GB的大段,映射页表,按照物理地址虚拟地址数值等同的方式,然后你就永远只加载一个任务,并且该任务永远运行在0级特权下,是可以访问系统中任务资源的。”
同意,问题是楼主问题是
“并且能够任意操作系统中的资源呢?”不能
因为几乎所有操作系统都是从实模式Boot到保护模式。不论你用保护模式还是V86模式都不能Boot的说

“楼上的,如果你去看看MINIX的源代码就知道了。”
没想到还能遇到看过MINIX代码的人,哈哈
MINIX当时的确很强,Tiny mode可以用中断的办法抢占式多任务
WYlslrt 2005-11-16
  • 打赏
  • 举报
回复
楼上的,如果你去看看MINIX的源代码就知道了。
大熊猫侯佩 2005-11-14
  • 打赏
  • 举报
回复
286 也可进入保护模式,也可实现多任务,只不过还不成熟,不完善,直到
386 开始保护模式机制才逐步完善。

理论上可以不依赖硬件完成多任务机制。

3。对于在Windows中(如Windows XP)运行的DOS程序,
按理说他们该程序中所用的内存地址就是真正的物理
地址,但是实际情况好像并不是这样。。。
;~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
本来就不是,如果可以的话,那就是 xp 超级大 bug

cpu

早就有了吧。
WYlslrt 2005-11-14
  • 打赏
  • 举报
回复
1.不需要硬件支持,哪怕是8086也可以,需要用到软件方式的任务切换,你需要对每一个进程建立进程表,切换时将这个进程的所有寄存器和上下文关系,都用软件的方式保存到进程表中就行。不过就是在支持多任务的CPU中,也是需要软硬两种切换的,因为现在的操作系统中任务模型很大,单独一种方式的切换效率都很低。

2.存取模式是有CPU所支持的方式,并且在所处的方式决定的。286当时还不支持分页管理模式,所以才只能通过段式的访问。

3.它们用的并不是真正的物理地址,用的仍然是线形地址,也就是虚拟地址,此时CPU会处在VM86的模式下,由一个模拟器来监督这个16位的程序,并处理它所产生的异常。
;~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
用楼上的话如果可以的话,那就是操作系统的超级大 bug

4.不知道你说的什么意思

5.可以的,你先让386以上的处理器,处于保护模式,加载一个4GB的大段,映射页表,按照物理地址虚拟地址数值等同的方式,然后你就永远只加载一个任务,并且该任务永远运行在0级特权下,是可以访问系统中任务资源的。

21,499

社区成员

发帖
与我相关
我的任务
社区描述
汇编语言(Assembly Language)是任何一种用于电子计算机、微处理器、微控制器或其他可编程器件的低级语言,亦称为符号语言。
社区管理员
  • 汇编语言
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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