国产精品1024永久观看,大尺度欧美暖暖视频在线观看,亚洲宅男精品一区在线观看,欧美日韩一区二区三区视频,2021中文字幕在线观看

  • <option id="fbvk0"></option>
    1. <rt id="fbvk0"><tr id="fbvk0"></tr></rt>
      <center id="fbvk0"><optgroup id="fbvk0"></optgroup></center>
      <center id="fbvk0"></center>

      <li id="fbvk0"><abbr id="fbvk0"><dl id="fbvk0"></dl></abbr></li>

      堆棧使用的方法

      文檔序號(hào):6601184閱讀:543來(lái)源:國(guó)知局
      專(zhuān)利名稱(chēng):堆棧使用的方法
      技術(shù)領(lǐng)域
      本發(fā)明涉及Java加速器設(shè)備中堆棧的使用方法。此處,″Java″是一個(gè)商標(biāo)。
      背景技術(shù)
      Java是由Sun Microsystems公司(美國(guó))在C++基礎(chǔ)上開(kāi)發(fā)的一種面向?qū)ο蟮某绦蛘Z(yǔ)言,它具有能夠創(chuàng)建不依賴(lài)特定的操作系統(tǒng)(OS)或特定的個(gè)人計(jì)算機(jī)(PC)運(yùn)行程序的特點(diǎn)。雖然程序的源代碼不依賴(lài)于特定的操作系統(tǒng)或特定類(lèi)型的個(gè)人計(jì)算機(jī),但它需要一個(gè)稱(chēng)為Java虛擬機(jī)(VM)的解釋程序。
      VM是一個(gè)提供運(yùn)行被稱(chēng)為字節(jié)碼的中間編碼功能的軟件。VM具有下列特點(diǎn)字節(jié)碼作為VM的指令集是非常簡(jiǎn)潔的。嵌入上述VM到硬件之中的Java芯片被用做開(kāi)發(fā)能夠執(zhí)行有著一小段編碼的字節(jié)碼程序的裝置,如便攜式終端。
      當(dāng)Java受到更多的重視時(shí),出現(xiàn)了各種加快Java運(yùn)行速度的嘗試。例如,使用硬件來(lái)執(zhí)行部分解釋程序的Java加速器來(lái)加快Java運(yùn)行的速度。這樣的Java加速器裝置提供一個(gè)允許高速訪問(wèn)的內(nèi)部硬件堆棧存儲(chǔ)單元來(lái)提高堆棧訪問(wèn)速度。
      但是,由于允許高速訪問(wèn)的內(nèi)存的價(jià)格昂貴,上述堆棧儲(chǔ)存單元的容量?jī)A向于盡可能的小,然而這樣會(huì)導(dǎo)致堆棧溢出。當(dāng)溢出發(fā)生時(shí),一些裝置使用主存儲(chǔ)介質(zhì)(主內(nèi)存)中預(yù)定義的區(qū)域供給VM作為堆棧區(qū)域使用。不過(guò),這使得加速器的使用沒(méi)有意義。

      發(fā)明內(nèi)容
      于是,針對(duì)上述問(wèn)題,本發(fā)明的目的在于即使當(dāng)堆棧存儲(chǔ)單元發(fā)生溢出時(shí),使Java加速器裝置處理速度的性能下降變?yōu)樽钚 ?br> 根據(jù)本發(fā)明堆棧使用的方法,包括下列步驟指示Java加速器裝置將Java加速器裝置中堆棧存儲(chǔ)單元的線程由第一線程切換到第二線程;指示Java加速器裝置執(zhí)行分配給堆棧存儲(chǔ)單元所切換的第二線程。
      根據(jù)本方法來(lái)使用堆棧,由Java加速器裝置執(zhí)行的第二線程總是出現(xiàn)在提供給Java加速器裝置的堆棧存儲(chǔ)單元中。
      而且最好是,在切換后,第一線程被分配給安排在Java加速器裝置之外的主存儲(chǔ)介質(zhì)中預(yù)定義的區(qū)域。此外,堆棧存儲(chǔ)單元被平均分區(qū)為多個(gè)線程所在的堆棧幀。并且,不能分配給堆棧儲(chǔ)存單元的線程將分配給堆棧存儲(chǔ)單元相應(yīng)的主存儲(chǔ)介質(zhì)的虛擬堆棧幀中。
      附圖簡(jiǎn)述

      圖1是對(duì)應(yīng)于本發(fā)明所應(yīng)用實(shí)施方案的Java加速器裝置堆棧使用方法的示例配置方塊圖。
      圖2是對(duì)應(yīng)于本發(fā)明實(shí)施方案堆棧使用方法的示例流程圖。
      圖3是說(shuō)明堆棧分區(qū)的圖。
      圖4是對(duì)應(yīng)于本發(fā)明實(shí)施方案堆棧使用方法的示例流程圖。
      圖5(a)-(c)是說(shuō)明線程切換的圖。
      發(fā)明詳述此后,本發(fā)明的一個(gè)實(shí)施方案將參照附圖予以說(shuō)明。
      圖1是對(duì)應(yīng)于本發(fā)明所應(yīng)用實(shí)施方案的Java加速器裝置堆棧使用方法的示例配置方塊圖。這種加速器裝置101被用作連接有著CPU102、主存儲(chǔ)介質(zhì)103、暫態(tài)存儲(chǔ)單元111、控制單元112和堆棧存儲(chǔ)單元113的計(jì)算機(jī)。
      CPU102根據(jù)存儲(chǔ)在主存儲(chǔ)介質(zhì)103中的程序,處理加速器裝置101的軟件并進(jìn)行控制。當(dāng)Java程序被執(zhí)行時(shí),在主存儲(chǔ)介質(zhì)103中提供一個(gè)虛擬堆棧區(qū)域。在加速器裝置101中,控制單元112執(zhí)行解釋程序,堆棧數(shù)據(jù)通過(guò)硬件來(lái)復(fù)制進(jìn)程。暫態(tài)存儲(chǔ)單元111被CPU102用來(lái)控制加速器裝置101。在包含多個(gè)等分堆棧區(qū)域的堆棧存儲(chǔ)單元113中,數(shù)據(jù)通過(guò)控制單元112和CPU102進(jìn)行讀、寫(xiě)。
      控制單元112根據(jù)CPU102的指令來(lái)執(zhí)行各種程序。當(dāng)控制單元112從CPU102接收到“Start”指令啟動(dòng)程序時(shí),它執(zhí)行如解釋器、堆棧存儲(chǔ)單元113中堆棧操作的字節(jié)碼程序;或者當(dāng)字節(jié)碼不能被加速器裝置101執(zhí)行時(shí),取指令、停止加速器裝置101(STOP)并通知CPU102。
      當(dāng)控制單元112接收到“COPY”指令時(shí),它根據(jù)由CPU對(duì)暫態(tài)存儲(chǔ)單元111給出的地址和大小,在堆棧存儲(chǔ)單元113的堆棧區(qū)域和主存儲(chǔ)介質(zhì)103虛擬堆棧區(qū)域間交換數(shù)據(jù)。這種數(shù)據(jù)交換程序在線程切換時(shí)被執(zhí)行。
      當(dāng)控制器單元112接收到“GROWUP”指令時(shí),它根據(jù)由CPU對(duì)暫態(tài)存儲(chǔ)單元111給出的地址和大小,存儲(chǔ)數(shù)據(jù)到主存儲(chǔ)介質(zhì)103虛擬堆棧區(qū)域的堆棧存儲(chǔ)單元113的堆棧區(qū)域。當(dāng)控制單元112接收到“CHANGE”指令時(shí),它根據(jù)由CPU對(duì)暫態(tài)存儲(chǔ)單元111給出的兩個(gè)地址,在堆棧存儲(chǔ)單元113的堆棧區(qū)域交換數(shù)據(jù),并重新確定堆棧區(qū)域的參考值。
      根據(jù)本實(shí)施方案,如上所述使用堆棧存儲(chǔ)單元113的加速器裝置可描述為執(zhí)行如下操作的Java虛擬機(jī)。
      首先,當(dāng)CPU102進(jìn)入一個(gè)解釋循環(huán)時(shí),它傳送“START”指令給加速器裝置101,然后,并執(zhí)行解釋程序。
      當(dāng)加速器裝置101執(zhí)行解釋程序遇到一個(gè)硬件不能執(zhí)行的字節(jié)碼時(shí),傳送“STOP”通知CPU102。當(dāng)接收到通知后,CPU102執(zhí)行上述的字節(jié)碼程序并再次傳送“START”指令給加速器裝置。然后,不活躍的字節(jié)碼將由CPU102處理,這樣加速器裝置101將僅執(zhí)行特定的字節(jié)碼程序。幀壓入和線程切換將由CPU102執(zhí)行。
      堆棧存儲(chǔ)單元113被平均分區(qū)為多個(gè)區(qū)域(單個(gè)區(qū)域指“堆棧區(qū)域”)。一個(gè)堆棧區(qū)域是一個(gè)分配給線程的堆棧幀,這樣多個(gè)線程就可以同時(shí)使用堆棧存儲(chǔ)單元113。
      當(dāng)產(chǎn)生的線程數(shù)量等于或少于等分的堆棧存儲(chǔ)單元113的堆棧區(qū)域數(shù)量時(shí),線程可以作為堆棧幀直接分配給堆棧區(qū)域。當(dāng)產(chǎn)生的線程數(shù)量大于等分的堆棧區(qū)域數(shù)量時(shí),線程分配給主存儲(chǔ)介質(zhì)103虛擬堆棧區(qū)域的虛擬堆棧幀中。
      當(dāng)產(chǎn)生的線程數(shù)量大于預(yù)訂的堆棧區(qū)域時(shí),堆棧存儲(chǔ)單元113堆棧區(qū)域的堆棧數(shù)據(jù)和虛擬堆棧的虛擬堆棧幀分別被保留,并在線程切換之前保存,這樣,當(dāng)前執(zhí)行的線程(稱(chēng)作“當(dāng)前線程”)總時(shí)分配給堆棧存儲(chǔ)單元113。切換程序通過(guò)在CPU102到加速器裝置101之間傳送一個(gè)“COPY”指令來(lái)執(zhí)行切換操作。
      當(dāng)線程產(chǎn)生時(shí),產(chǎn)生線程的堆棧區(qū)域其屬性將被確定。這些值存儲(chǔ)在各自的線程中。當(dāng)線程成為當(dāng)前線程時(shí),數(shù)據(jù)總是位于堆棧存儲(chǔ)單元113的同一個(gè)區(qū)域(堆棧區(qū)域)。
      為能更加有效的使用堆棧區(qū)域,繼續(xù)存在線程注銷(xiāo)的數(shù)量、堆棧區(qū)域的現(xiàn)有線程和曾有線程將被檢查。如果任何不被使用的堆棧區(qū)域被發(fā)現(xiàn),將從具有更多線程的現(xiàn)有堆棧區(qū)域調(diào)用線程開(kāi)始。這樣的線程切換程序是使用硬件在CPU102到加速器裝置101間傳送“CHANGE”指令進(jìn)行操作的。
      屬于每個(gè)堆棧區(qū)域的線程數(shù)量是通過(guò)下述方法知道的當(dāng)一個(gè)新的線程產(chǎn)生時(shí),它分配給有著至少一個(gè)線程的堆棧區(qū)域。例如當(dāng)在線程切換,線程第一次存儲(chǔ)在虛擬堆棧區(qū)域時(shí),虛擬區(qū)域的虛擬堆棧幀的大小就被確定了。相應(yīng)的,為了存儲(chǔ)堆棧區(qū)域,固定的對(duì)應(yīng)于每個(gè)堆棧區(qū)域的虛擬堆棧幀將分配給每個(gè)存儲(chǔ)在主儲(chǔ)存介質(zhì)103的虛擬堆棧區(qū)域的線程。
      當(dāng)一個(gè)新的堆棧需要保留一個(gè)執(zhí)行的目標(biāo)線程(推幀)時(shí)、當(dāng)用作該線程的堆棧數(shù)據(jù)大小超過(guò)堆棧區(qū)域的大小時(shí),超出的數(shù)據(jù)被儲(chǔ)存在下面所描述的相應(yīng)的虛擬堆棧中。這被稱(chēng)作堆棧幀的再增長(zhǎng),通過(guò)由CPU102到加速器裝置101間傳送“GROWUP”指令來(lái)執(zhí)行。當(dāng)控制單元112接收到“GROWUP”指令,它在虛擬堆棧幀中保存剛剛使用的、存儲(chǔ)在堆棧存儲(chǔ)單元113線程的堆棧數(shù)據(jù)。其余的空堆棧區(qū)域被用作上述新線程堆棧數(shù)據(jù)區(qū)域(再增長(zhǎng)區(qū)域)。
      其后,當(dāng)線程的數(shù)量超過(guò)在堆棧存儲(chǔ)單元113中的分區(qū)數(shù)量的堆棧幀分配裝置將參照附圖2到4來(lái)說(shuō)明。首先,當(dāng)產(chǎn)生的線程沒(méi)有超過(guò)在堆棧存儲(chǔ)單元113中分區(qū)數(shù)量時(shí),產(chǎn)生的線程將被直接在堆棧存儲(chǔ)單元113的堆棧區(qū)域中進(jìn)行分配。
      另一方面,當(dāng)產(chǎn)生的線程數(shù)量超過(guò)了堆棧存儲(chǔ)單元113的分區(qū)數(shù)量時(shí),首先,在圖2所示流程圖的S201步驟中,有著最小數(shù)量線程的堆棧數(shù)據(jù)被查找,查找到的區(qū)域在產(chǎn)生的線程中用于存儲(chǔ)。
      然后,在主存儲(chǔ)介質(zhì)103的虛擬堆棧區(qū)域中產(chǎn)生一個(gè)虛擬堆棧幀。產(chǎn)生的虛擬堆棧幀的地址存儲(chǔ)在上述產(chǎn)生的線程中。而且,存儲(chǔ)在產(chǎn)生線程堆棧區(qū)域線程的數(shù)量被計(jì)數(shù)。當(dāng)產(chǎn)生線程歸屬的堆棧區(qū)域確定后(步驟S201)、當(dāng)線程被真的存儲(chǔ)在堆棧區(qū)域中時(shí),首先,相應(yīng)的堆棧區(qū)域被選擇,然后其它線程是否分配給選定的堆棧區(qū)域中被檢查(步驟S202)。
      當(dāng)有其它線程分配給選定的堆棧區(qū)域中,在主存儲(chǔ)介質(zhì)103的虛擬堆棧幀產(chǎn)生(申請(qǐng))一個(gè)虛擬堆棧幀(步驟S203)。另一方面,當(dāng)沒(méi)有線程位于選定的區(qū)域(步驟S202)時(shí),線程作為堆棧幀分配給選定的堆棧區(qū)域(步驟S204)。圖3是堆棧存儲(chǔ)單元113被劃分為3個(gè)區(qū)域的一張圖,產(chǎn)生的線程數(shù)為5。5個(gè)產(chǎn)生的線程中,第一線程位于第一堆棧區(qū)域,第二線程位于第二區(qū)域,第三線程位于第三區(qū)域。
      第四、第五線程將第一和第二堆棧區(qū)域作為分配區(qū)域分別存儲(chǔ)。但是,因?yàn)?,第一和第二區(qū)域已經(jīng)分配其它線程,第四和第五線程將不分配堆棧存儲(chǔ)單元113,而是在主存儲(chǔ)介質(zhì)103的虛擬堆棧區(qū)域中申請(qǐng)各自的虛擬堆棧幀。
      然后,根據(jù)本實(shí)施方案,在堆棧區(qū)域和堆棧幀分配各自線程狀態(tài),被執(zhí)行的目標(biāo)線程和目標(biāo)裝置在堆棧存儲(chǔ)單元113中根據(jù)下面所描述的線程切換進(jìn)行定位。這里,線程包括多個(gè)裝置。其后,堆棧存儲(chǔ)單元113被分為3個(gè)區(qū)域,5個(gè)線程被產(chǎn)生,如圖3所示。
      首先,如圖4流程圖所示,第四線程是否作為一個(gè)線程被切換,分配相應(yīng)的第一堆棧將被判斷(步驟S401)。如果線程切換已經(jīng)被分配,則無(wú)須切換,終止操作。然而,在本案中,第一線程已經(jīng)分配第一堆棧區(qū)域,第四線程的切換將不被分配。于是,下面的程序?qū)?zhí)行步驟S402。
      然后,是否有其它線程分配堆棧區(qū)域?qū)⒈粰z查,例如在第一區(qū)域(步驟S402)。如圖5A所示,因?yàn)榈谝欢褩^(qū)域已經(jīng)分配給第一線程,即,其它已經(jīng)分配給線程的堆棧區(qū)域?qū)⒈唤粨Q,程序執(zhí)行步驟S403。在步驟S403中,線程的虛擬堆棧幀是否被保存,例如第一線程,保存在虛擬堆棧區(qū)域中將被檢查。
      如圖5A所示,在虛擬堆棧區(qū)域沒(méi)有為第一線程給出虛擬堆棧幀,于是程序執(zhí)行步驟S405來(lái)為第一線程在虛擬堆棧區(qū)域中保存虛擬堆棧幀。所獲得的虛擬堆棧幀的地址保存在相應(yīng)的線程中(第一線程)。如果線程虛擬堆棧幀的保存被判斷為保存在驟S403中,程序執(zhí)行S404來(lái)判斷是否保存的虛擬堆棧幀的大小大于相應(yīng)線程的數(shù)據(jù)大小(保存數(shù)據(jù)的大小)。
      當(dāng)堆棧幀被保存,而且其大小大于保存的數(shù)據(jù)大小,程序執(zhí)行步驟S406,目前分配給第一線程的第一堆棧區(qū)域分配給保存在虛擬堆棧區(qū)域的第四線程。保存的數(shù)據(jù)大小將和始自第一線程的堆棧數(shù)據(jù)的頂部(至位置SP)有效堆棧數(shù)據(jù)區(qū)域相一致。其結(jié)果是,第一堆棧區(qū)域?qū)⑷鐖D5B所示被挪用。
      于是,作為堆棧數(shù)據(jù)切換的第四線程將由控制單元112(加速器裝置101)(步驟S407)復(fù)制到堆棧存儲(chǔ)單元113的第一堆棧區(qū)域。第四線程的有效尺寸將由在主存儲(chǔ)介質(zhì)103的虛擬堆棧區(qū)域的虛擬堆棧幀復(fù)制。而且,第四線程的第一堆棧區(qū)域?qū)⒎峙渚€程。第一線程的數(shù)據(jù)不再作為當(dāng)前線程,將不被保存,直至屬于同一堆棧區(qū)域的第五線程成為當(dāng)前線程。
      另一方面,當(dāng)沒(méi)有其它線程位于交換堆棧區(qū)域時(shí),例如第一線程,在步驟S402中,程序執(zhí)行步驟S407,復(fù)制第四線程的數(shù)據(jù)作為堆棧數(shù)據(jù)切換至堆棧存儲(chǔ)單元113的第一存儲(chǔ)區(qū)域。
      相應(yīng)的,被執(zhí)行的目標(biāo)線程將總是處于加速器裝置101的堆棧存儲(chǔ)單元113中,繼續(xù)允許高速訪問(wèn)。
      如上所述,根據(jù)本發(fā)明,目標(biāo)線程總是位于Java加速器裝置的堆棧存儲(chǔ)單元中被執(zhí)行。于是,各種優(yōu)點(diǎn)例如增強(qiáng)內(nèi)存訪問(wèn)速度和程序運(yùn)行速度的性能下降變?yōu)樽钚⒈猾@得。
      本發(fā)明不背離其思路和基本特征可以同樣以其它特定的形式來(lái)實(shí)施。本實(shí)施方案于是考慮的是說(shuō)明性的各個(gè)方面而并非限定,本發(fā)明的范圍將由附屬的權(quán)利申明而不是通過(guò)放棄在內(nèi)容和范圍上等效于權(quán)利申明試圖包含的所有變化來(lái)指出。
      權(quán)利要求
      1.使用堆棧的方法,該方法包括下列步驟指示Java加速器裝置切換到分配至包含在Java加速器裝置內(nèi)的堆棧存儲(chǔ)單元中的線程,由第一線程至第二線程;并指示Java加速器裝置執(zhí)行分配至堆棧存儲(chǔ)單元已切換的第二線程。
      2.權(quán)利要求1中使用堆棧的方法,其中切換后第一線程被分配給Java加速器裝置外部主存儲(chǔ)介質(zhì)預(yù)定義的區(qū)域。
      3.權(quán)利要求1中使用堆棧的方法,其中堆棧存儲(chǔ)單元被平均分區(qū)為供線程分配的多個(gè)堆棧幀。
      4.權(quán)利要求2中使用堆棧的方法,其中堆棧存儲(chǔ)單元被平均分區(qū)為多個(gè)供線程分配的堆棧幀。
      5.權(quán)利要求3中使用堆棧的方法,其中線程不能被分配到堆棧存儲(chǔ)單元堆棧幀時(shí),將被分配至由主存儲(chǔ)介質(zhì)構(gòu)建的,相應(yīng)于堆棧存儲(chǔ)單元的虛擬堆棧幀。
      6.權(quán)利要求4中使用堆棧的方法,其中線程不能被分配到堆棧存儲(chǔ)單元堆棧幀時(shí),將被分配至由主存儲(chǔ)介質(zhì)構(gòu)建的,相應(yīng)于堆棧存儲(chǔ)單元的虛擬堆棧幀。
      7.權(quán)利要求2中使用堆棧的方法,其中主存儲(chǔ)介質(zhì)為硬盤(pán)。
      8.權(quán)利要求3中使用堆棧的方法,其中主存儲(chǔ)介質(zhì)為硬盤(pán)。
      9.權(quán)利要求4中使用堆棧的方法,其中主存儲(chǔ)介質(zhì)為硬盤(pán)。
      10.權(quán)利要求5中使用堆棧的方法,其中主存儲(chǔ)介質(zhì)為硬盤(pán)。
      11.權(quán)利要求6中使用堆棧的方法,其中主存儲(chǔ)介質(zhì)為硬盤(pán)。
      全文摘要
      本發(fā)明的目的在于:當(dāng)堆棧存儲(chǔ)單元堆棧溢出時(shí),Java加速器運(yùn)行速度的性能下降成為最小。當(dāng)前分配給堆棧存儲(chǔ)單元113的第一線程的堆棧區(qū)分配給存儲(chǔ)在主存儲(chǔ)單元103虛擬堆棧區(qū)域的第四線程。于是,第四線程的數(shù)據(jù)作為堆棧數(shù)據(jù)進(jìn)行切換,通過(guò)控制器單元112(加速器裝置101)復(fù)制到堆棧存儲(chǔ)單元113的堆棧區(qū)域。
      文檔編號(hào)G06F9/44GK1423196SQ0215295
      公開(kāi)日2003年6月11日 申請(qǐng)日期2002年11月29日 優(yōu)先權(quán)日2001年11月30日
      發(fā)明者青木彌生 申請(qǐng)人:日本電氣株式會(huì)社
      網(wǎng)友詢問(wèn)留言 已有0條留言
      • 還沒(méi)有人留言評(píng)論。精彩留言會(huì)獲得點(diǎn)贊!
      1