操作系统的执行中断程序后的恢复原程序现场的过程中的栈与PCB中CPU现场保护区的关系?

时间:2022-07-02 14:25:08
中断过后现场恢复的过程是以下的哪一种?
1.进程控制块PCB中保存有CPU的现场信息,恢复现场时以这些信息为根据。2.堆栈弹出。好像堆栈弹出听的多一些,第一种方式中PCB中的现场信息不是用在恢复现场时吗?
操作系统的执行中断程序后的恢复原程序现场的过程对进程的控制,其中PCB中的CPU现场保护区的作用与堆所用到的堆栈的内容是否重复?如果是用堆栈保护现场,那PCB的现场保护区不是多余的了吗?

3 个解决方案

#1


Q1. 中断过后现场恢复的过程是以下的哪一种?
A1. 两种均可能,视 CPU 与硬件平台而定.
    有些 CPU 配有复杂的虚拟地址管理部件,比如 386 系列的保护模式,对中断的响应就有中断门和任务门两种,前者,寄存器就被保护在栈中,而后者,寄存器就被挂号信在任务控制块中;
    有些 CPU 比较简单,没有虚拟地址管理部件,比如 MCS51,此时,中断后,寄存器一般都保护在栈内.

Q2.好像堆栈弹出听的多一些
A2. 是的.老师在讲解中断时,为突出重点,一般都以简单 CPU 为模型,把寄存器保护在栈内.

Q3. 第一种方式中PCB中的现场信息不是用在恢复现场时吗?
A3. 如果寄存器保护在 PCB 内,CPU 的状态寄存器是有相应位的.当执行中断返回时, CPU 会自动从 PCB 中恢复各寄存器的值.

Q4.PCB中的CPU现场保护区的作用与堆所用到的堆栈的内容是否重复?
A4.视 CPU 及硬件平台而定.

Q5. 如果是用堆栈保护现场,那PCB的现场保护区不是多余的了吗? 
A4. 这仍然与操作系统的设计与实现有关.大多数操作系统,寄存器保护区只有一个,而谓的的"现场保护区"均是寄存器保护区的地址,而非保护区本身.

#2


引用 1 楼 icessl 的回复:
Q1. 中断过后现场恢复的过程是以下的哪一种?
A1. 两种均可能,视 CPU 与硬件平台而定.
    有些 CPU 配有复杂的虚拟地址管理部件,比如 386 系列的保护模式,对中断的响应就有中断门和任务门两种,前者,寄存器就被保护在栈中,而后者,寄存器就被挂号信在任务控制块中;
    有些 CPU 比较简单,没有虚拟地址管理部件,比如 MCS51,此时,中断后,寄存器一般都保护在栈内.

Q2.好像堆栈弹出听的多一些
A2. 是的.老师在讲解中断时,为突出重点,一般都以简单 CPU 为模型,把寄存器保护在栈内.

Q3. 第一种方式中PCB中的现场信息不是用在恢复现场时吗?
A3. 如果寄存器保护在 PCB 内,CPU 的状态寄存器是有相应位的.当执行中断返回时, CPU 会自动从 PCB 中恢复各寄存器的值.

Q4.PCB中的CPU现场保护区的作用与堆所用到的堆栈的内容是否重复?
A4.视 CPU 及硬件平台而定.

Q5. 如果是用堆栈保护现场,那PCB的现场保护区不是多余的了吗? 
A4. 这仍然与操作系统的设计与实现有关.大多数操作系统,寄存器保护区只有一个,而谓的的"现场保护区"均是寄存器保护区的地址,而非保护区本身.

从来没听过中断返回的寄存器可以被保存到PCB中。

#3


引用 1 楼 icessl 的回复:
Q1. 中断过后现场恢复的过程是以下的哪一种?
A1. 两种均可能,视 CPU 与硬件平台而定.
    有些 CPU 配有复杂的虚拟地址管理部件,比如 386 系列的保护模式,对中断的响应就有中断门和任务门两种,前者,寄存器就被保护在栈中,而后者,寄存器就被挂号信在任务控制块中;
    有些 CPU 比较简单,没有虚拟地址管理部件,比如 MCS51,此时,中断后,寄存器一般都保护在栈内.

Q2.好像堆栈弹出听的多一些
A2. 是的.老师在讲解中断时,为突出重点,一般都以简单 CPU 为模型,把寄存器保护在栈内.

Q3. 第一种方式中PCB中的现场信息不是用在恢复现场时吗?
A3. 如果寄存器保护在 PCB 内,CPU 的状态寄存器是有相应位的.当执行中断返回时, CPU 会自动从 PCB 中恢复各寄存器的值.

Q4.PCB中的CPU现场保护区的作用与堆所用到的堆栈的内容是否重复?
A4.视 CPU 及硬件平台而定.

Q5. 如果是用堆栈保护现场,那PCB的现场保护区不是多余的了吗? 
A4. 这仍然与操作系统的设计与实现有关.大多数操作系统,寄存器保护区只有一个,而谓的的"现场保护区"均是寄存器保护区的地址,而非保护区本身.

太精彩了,谢谢~

#1


Q1. 中断过后现场恢复的过程是以下的哪一种?
A1. 两种均可能,视 CPU 与硬件平台而定.
    有些 CPU 配有复杂的虚拟地址管理部件,比如 386 系列的保护模式,对中断的响应就有中断门和任务门两种,前者,寄存器就被保护在栈中,而后者,寄存器就被挂号信在任务控制块中;
    有些 CPU 比较简单,没有虚拟地址管理部件,比如 MCS51,此时,中断后,寄存器一般都保护在栈内.

Q2.好像堆栈弹出听的多一些
A2. 是的.老师在讲解中断时,为突出重点,一般都以简单 CPU 为模型,把寄存器保护在栈内.

Q3. 第一种方式中PCB中的现场信息不是用在恢复现场时吗?
A3. 如果寄存器保护在 PCB 内,CPU 的状态寄存器是有相应位的.当执行中断返回时, CPU 会自动从 PCB 中恢复各寄存器的值.

Q4.PCB中的CPU现场保护区的作用与堆所用到的堆栈的内容是否重复?
A4.视 CPU 及硬件平台而定.

Q5. 如果是用堆栈保护现场,那PCB的现场保护区不是多余的了吗? 
A4. 这仍然与操作系统的设计与实现有关.大多数操作系统,寄存器保护区只有一个,而谓的的"现场保护区"均是寄存器保护区的地址,而非保护区本身.

#2


引用 1 楼 icessl 的回复:
Q1. 中断过后现场恢复的过程是以下的哪一种?
A1. 两种均可能,视 CPU 与硬件平台而定.
    有些 CPU 配有复杂的虚拟地址管理部件,比如 386 系列的保护模式,对中断的响应就有中断门和任务门两种,前者,寄存器就被保护在栈中,而后者,寄存器就被挂号信在任务控制块中;
    有些 CPU 比较简单,没有虚拟地址管理部件,比如 MCS51,此时,中断后,寄存器一般都保护在栈内.

Q2.好像堆栈弹出听的多一些
A2. 是的.老师在讲解中断时,为突出重点,一般都以简单 CPU 为模型,把寄存器保护在栈内.

Q3. 第一种方式中PCB中的现场信息不是用在恢复现场时吗?
A3. 如果寄存器保护在 PCB 内,CPU 的状态寄存器是有相应位的.当执行中断返回时, CPU 会自动从 PCB 中恢复各寄存器的值.

Q4.PCB中的CPU现场保护区的作用与堆所用到的堆栈的内容是否重复?
A4.视 CPU 及硬件平台而定.

Q5. 如果是用堆栈保护现场,那PCB的现场保护区不是多余的了吗? 
A4. 这仍然与操作系统的设计与实现有关.大多数操作系统,寄存器保护区只有一个,而谓的的"现场保护区"均是寄存器保护区的地址,而非保护区本身.

从来没听过中断返回的寄存器可以被保存到PCB中。

#3


引用 1 楼 icessl 的回复:
Q1. 中断过后现场恢复的过程是以下的哪一种?
A1. 两种均可能,视 CPU 与硬件平台而定.
    有些 CPU 配有复杂的虚拟地址管理部件,比如 386 系列的保护模式,对中断的响应就有中断门和任务门两种,前者,寄存器就被保护在栈中,而后者,寄存器就被挂号信在任务控制块中;
    有些 CPU 比较简单,没有虚拟地址管理部件,比如 MCS51,此时,中断后,寄存器一般都保护在栈内.

Q2.好像堆栈弹出听的多一些
A2. 是的.老师在讲解中断时,为突出重点,一般都以简单 CPU 为模型,把寄存器保护在栈内.

Q3. 第一种方式中PCB中的现场信息不是用在恢复现场时吗?
A3. 如果寄存器保护在 PCB 内,CPU 的状态寄存器是有相应位的.当执行中断返回时, CPU 会自动从 PCB 中恢复各寄存器的值.

Q4.PCB中的CPU现场保护区的作用与堆所用到的堆栈的内容是否重复?
A4.视 CPU 及硬件平台而定.

Q5. 如果是用堆栈保护现场,那PCB的现场保护区不是多余的了吗? 
A4. 这仍然与操作系统的设计与实现有关.大多数操作系统,寄存器保护区只有一个,而谓的的"现场保护区"均是寄存器保护区的地址,而非保护区本身.

太精彩了,谢谢~