多任务操作系统中,任务切换时,会把当前任务的寄存器地址等移到内存上。等下次它再有机会运行时,再把寄存器地址还原。我想问的是:当某个任务的寄存器地址在内存上时,如果其他程序有内存越界,那么会不会把某个任务的寄存器地址给篡改了,导致下次那个程序,再运行时崩溃?这方面操作系统有保护没?

解决方案 »

  1.   

    应该是保持在kernel mode的内存上,普通用户程序无法访问,也就不存在冲突崩溃的问题。
      

  2.   

    CPU时间被分成一个个的时间片后分配给不同程序轮流使用,在一个程序的时间片中,和这个程序执行无关的东西(如其他程序的代码和数据)并不需要映射到线性地址中去。
      

  3.   

    操作系统会做这种保护的。windows是这样的进程的内存需要先分配,把内存也标记为committed才可以读写,进程分配内存的时候操作系统会把他们映射到不同的物理内存地址上,从而保证不同进程的数据不会相互影响。进程试图读写没有分配的内存时会产生access violation错误,这个进程会崩溃,但不会影响到其他进程。另外,线程调度是由操作系统来做的,所以相关的数据在系统内核的,用户态程序是不能直接访问的。
      

  4.   

    就是嘛!cpu一次才能执行一个指令,不可能让别的程序破坏的,系统自己会调度!