<ruby id="bdb3f"></ruby>

    <p id="bdb3f"><cite id="bdb3f"></cite></p>

      <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
        <p id="bdb3f"><cite id="bdb3f"></cite></p>

          <pre id="bdb3f"></pre>
          <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

          <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
          <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

          <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                <ruby id="bdb3f"></ruby>

                合規國際互聯網加速 OSASE為企業客戶提供高速穩定SD-WAN國際加速解決方案。 廣告
                ## 7.5 任務切換(Task Switching) 以下情況中,80386切換到另一個任務執行: 1、? 當前任務執行了一個JMP或CALL,而操作數中指定了一個TSS描述符。 2、? 當前任務執行了一個JMP或CALL,而操作數中指定了一個任務門。 3、? 一個在IDT中的中斷向量或異常向量導致向一個新的任務切換。 4、? 當前任務執行了一條IRET指令,而且NT位設置時。 JMP, CALL, IRET, 中斷和異常原先被設計用于在同一個任務內的機制,不需要任務切換。訪問到何種類型的描述符還是在標志字段NT(nested taks)位可以用于區分出標標準的機制還是變種的任務切換機制。 為了引起任務切換,JMP或CALL指令可以指定一個TSS描述符或者一個任務門。兩種情況下作用是相同的:80386切換到指定的任務。 當在IDT中的中斷或異常向量指示了一個任務門時,中斷或異常將引起任務切換。如果指示了一個IDT中的中斷門或陷阱門,不發生任務切換。關于中斷的更多信息,請參看第9章。 當以一個任務或一個中斷子程序來引發時,中斷處理程序總是將控制返回到被中斷任務的子程序。如果NT位被置位,中斷處理程序則是一個中斷任務,IRET指令將返回到被中斷的子程序。 任務切換操作將做以下的步驟: 1、? 檢測當前任務有權切換到指定的任務。這時數據訪問規則將用于檢測JMP或CALL指令。TSS描述符或者任務門的DPL字段必須小于或者等于CPL和門選擇子RPL字段的最大值。中斷、異常、IRET指令可以切換到任何任務,而不必管目標TSS描述符或者目標任務門的DPL字段。 2、? 檢測目標TSS描述符存在的,而且有一個有效的界限值。到這時,所有的錯誤都算是在的引發任務切換(outgoing task)的上下文中發生的。錯誤是可以被處理和重起的,且對于應用程序是透明的。 3、? 保存當前任務的狀態。處理器從任務寄存器中緩存的不可見部分來找到當前任務的基址。處理器拷貝寄存器值到當前任務TSS(EAX, ECX, EDX, EBX, ESP, EBP, ESI, EDI, ES, CS, SS, DS, FS, GS, 和 標志寄存器EFLAG)。EIP字段則指向引起任務切換的指令的下一條指令。 4、? 將新的任務的選擇子加載到任務寄存器,將新任務的TSS描述符設置為忙。設置MSW的TS(task switched)標志位。選擇子或是從指令操作數中得到,或是從任務門中得到。 5、? 從新的任務的TSS中加載任務的狀態,并恢復其執行。加載的寄存器是LDT寄存器,標志寄存器(EFLAG)通用寄存器EIP,EAX,ECX,EDX,EBX,ESP,EBP,ESI,EDI;段寄存器ES,CS,SS,DS,FS,和GS。還有PDBR(CR3)。所有檢測到的錯誤將發生在新任務的上下文中。對于一個異常處理程序,看來起好似新任務的第一條指令還未執行。 注意,不管怎么樣,舊任務的狀態總是會被保存。如果這個任務被重新執行,它執行引起任務切換的指令的后一條指令。當任務執行時,所有寄存器的值將被恢復。 每一次任務切換都會設置MSW(machine status word)的TS(task switched)位。TS標志對于有協處理器的系統來說是很重要的。TS位指出了協處理器的狀態可能和當前任務的狀態不一致了。第11章進一步討論TS位。 處理任務切換異常的處理程序(表7-1中由第4到16引起的異常)應該注意加載引起異常的選擇子的操作。這樣的操作可能引發第二次異常,除非異常處理程序首先檢查了選擇子并修定了潛在的問題。 將要執行的任務的特權級即不被引起任務切換的任務所影響,也不會被它所約束。因為每個任務的地址空間是分開的,且有不同的TSS,還有就是特權級規則可以用于防止不合法的TSS訪問,但是沒有哪種特權級規則需要用來去約束不同任務間的CPL。新的任務將在CS選擇子的RPL字段特權級執行,這個CS是由TSS中加載的。 ![](https://box.kancloud.cn/2016-03-06_56dbfdaf51be8.jpg)
                  <ruby id="bdb3f"></ruby>

                  <p id="bdb3f"><cite id="bdb3f"></cite></p>

                    <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
                      <p id="bdb3f"><cite id="bdb3f"></cite></p>

                        <pre id="bdb3f"></pre>
                        <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

                        <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
                        <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

                        <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                              <ruby id="bdb3f"></ruby>

                              哎呀哎呀视频在线观看