JPH1153249A - メモリ管理方法 - Google Patents

メモリ管理方法

Info

Publication number
JPH1153249A
JPH1153249A JP21297497A JP21297497A JPH1153249A JP H1153249 A JPH1153249 A JP H1153249A JP 21297497 A JP21297497 A JP 21297497A JP 21297497 A JP21297497 A JP 21297497A JP H1153249 A JPH1153249 A JP H1153249A
Authority
JP
Japan
Prior art keywords
area
global variable
data
management method
user
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Pending
Application number
JP21297497A
Other languages
English (en)
Inventor
Motohide Nishimura
元秀 西村
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Sharp Corp
Original Assignee
Sharp Corp
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by Sharp Corp filed Critical Sharp Corp
Priority to JP21297497A priority Critical patent/JPH1153249A/ja
Publication of JPH1153249A publication Critical patent/JPH1153249A/ja
Pending legal-status Critical Current

Links

Abstract

(57)【要約】 【課題】 マルチタスクOS・ユーザアプリケーション
の両プログラムが大域変数データを共有する場合におい
て、ユーザアプリケーションの大域変数へのアクセスの
不具合により大域変数データ領域の破壊を防止する。 【解決手段】 ソフトウェアの起動時に、RAMにおけ
るbss領域を多重化して、ハードウェアの機能により
メモリ管理ユニット(MMU)によるマッピング変更,
メモリ例外ルーチン内でのアクセスチェック,モードご
とに切り替えてスワップを行うこと等によりメモリ保護
を行う。

Description

【発明の詳細な説明】
【0001】
【発明の属する技術分野】本発明は、計算機のOSのメ
モリ管理方式に関し、例えば、図1に示すCPUコア
1,メモリ管理ユニット(以下、MMUという)2,キ
ャッシュメモリ3,ROM4,RAM5,I/O6,割
り込みコントローラ7からなるシステムにおけるOSの
メモリ管理方式に関するものである。
【0002】
【従来の技術】図6を参照して組み込みシステムのファ
ームウェア化について説明する。まず、プログラマーは
目的のシステムのソフトウェアを実現するため、CやC
++を代表とする高級言語17とターゲットとなるCP
Uのアセンブリ言語18によりプログラムソースを作成
する。
【0003】高級言語17はコンパイラ19とアセンブ
ラ20で、アセンブリ言語18はアセンブラ20を使用
してオブジェクトファイル21を作成する。オブジェク
トファイル21とライブラリ22をリンカー23を使用
して一つの実行イメージ24を作成する。実行イメージ
24はROMライター25を通してROM4に記録され
る。
【0004】ROM4に記録されたイメージは、通常図
2図示のようになっている。まず、電源が入るとリセッ
トベクタにCPUのプログラムカウンタは設定される。
リセットベクタ領域には、最初に実行される初期化プロ
グラムの番地か、その番地へのジャンプ命令が入ってい
る。初期化プログラムIPは、一般的にはハードウェア
の初期化,スタックポインタの設定を行い、ROMプロ
グラムのローダーへジャンプする。ローダーは実行イメ
ージファイルのヘッダー9を解析し、テキスト領域1
0,データ領域(リードオンリー)11,bss領域
(R/W)12を計算し、bss領域12をRAMの指
定のアドレス領域25(図6)へコピーする。そのアド
レスはヘッダー上に記録されている。
【0005】
【発明が解決しようとする課題】組み込みシステムの多
くは、図7のようにC/C++言語で書かれており、そ
れらの言語の中で使われる変数には大域変数R1と局所
変数R2があり、大域変数はデータ領域またはbss領
域Bにマッピングされる。一方、局所変数はスタックS
にマッピングされる。
【0006】ところが、OSもアプリケーションも同じ
言語で書かれているため、それをコンパイル・アセンブ
ル・リンクすると、本来はカーネルはシステムモードで
動作し、アプリケーションはユーザモードで動作するに
もかかわらず、その情報は実行イメージには反映しな
い。そのため、ユーザアプリケーションの大域変数への
アクセスに不具合があり、所定の位置以外のシステムの
変数を書き換えてしまうと、それ以後のOSの動作は保
証されなくなるという問題がある。
【0007】また、MMU(メモリ管理ユニット)で保
護しようとしても、MMUのメモリ保護単位は、ある程
度の大きさ以上のプロックを想定しているため(最低で
も数Kbytes単位)、上記のような数バイト単位でシス
テム・ユーザ変数が混在する可能性がある場合には、そ
れを適用することはできない。
【0008】
【課題を解決するための手段】上記課題を解決するため
に、本発明は上記従来の問題点に鑑み、ソフトウェアの
起動時に、bss領域を多重化し、ハードウェアの機能
によりMMUによるマッピングの変更,メモリ例外ルー
チン内でのアクセスチェック,モードによるスワップを
行うことでメモリ保護を行うものである。
【0009】請求項1の発明は、マルチタスクOSとア
プリケーションの両プログラムが大域変数データを共有
する場合のメモリ管理方法において、プログラムの起動
時にROMに記録された前記大域変数データを主記憶上
の2箇所にコピーすることにより前記大域変数データの
データ領域をシステム用及びユーザ用に二重化し、か
つ、前記データ領域をアドレス変換テーブルで切換え可
能にすることにより、ユーザアプリケーションの大域変
数へのアクセスの不具合による前記大域変数データの破
壊を防止することを特徴とするメモリ管理方法である。
【0010】請求項2の発明は、マルチタスクOSとア
プリケーションの両プログラムが大域変数データを共有
する場合のメモリ管理方法において、プログラムの起動
時に主記憶上のbss領域にコピーされた大域変数デー
タ領域全体をシステム領域として設定し、ユーザモード
のタスクから前記システム領域へのアクセスで発生させ
る例外処理内部で、該アクセスが可能かどうか判断し、
アクセスが可能な場合にのみ前記大域変数データの書き
換えを行う、ユーザアプリケーションの大域変数データ
へのアクセスの不具合による前記大域変数データの破壊
を防止することを特徴とするメモリ管理方法である。
【0011】請求項3の発明は、請求項2の発明におい
て、前記bss領域のシステム用大域変数データ領域と
ユーザ用大域変数データ領域を区切るためソース中にイ
ンデックスデータを書き込み、ページ単位で主記憶上に
コピーすることによりbss領域を縮小することを特徴
とするメモリ管理方法である。
【0012】請求項4の発明は、請求項3の発明におい
て、プログラムの起動時に、大域変数データ領域のシス
テム・ユーザのマップを生成することを特徴とするメモ
リ管理方法である。
【0013】請求項5の発明は、マルチタスクOSとア
プリケーション両プログラムが大域変数データを共有す
る場合のメモリ管理方法において、前記マルチタスクO
Sのプロセスの切り替え時に、大域変数が記録されたR
AMのbss領域をシステム・ユーザモードに応じて主
記憶装置にスワップすることにより、システム領域の大
域変数データをユーザプロセスから保護することを特徴
とするメモリ管理方法である。
【0014】請求項6の発明は、マルチタスクOSのタ
スク間でグローバル・スタティックデータを共有する場
合のメモリ管理方法において、プログラムの起動時に主
記憶上の前記グローバル・スタティックデータのデータ
領域を多重化し、OSのタスク管理切り替えルーチンに
より、前記データ領域をタスク単位ごとに切り替えるこ
とにより、タスク単位でメモリを保護することを特徴と
するメモリ管理方法である。
【0015】請求項7の発明は、請求項1乃至6のいず
れかの方法を実行する機能を有するコンピュータであ
る。
【0016】
【発明の実施の形態】まず、図2に従って、MMU2に
よるメモリ保護について説明する。ファームウェア(R
OM)化されたプログラムは、電源ONで、ハードウェ
アはCPUのPC(プログラム・カウンタ)を0番地に
設定する。0番地はCPUにリセット信号が入った場合
に跳ぶ番地であり、予め初期化プログラムの先頭アドレ
スが入っているか、あるいはそこへのジャンプ命令が記
録されている。前者の場合はプログラムカウンタが自動
的にそのアドレスへ変更され、後者の場合にはその命令
がCPUにより実行される。
【0017】初期化ルーチンはハードウェアの初期化,
スタックポインタの設定等を行い、実行イメージのヘッ
ダー部分9を解析する。即ち、プログラムのテキストセ
クション10のサイズ,データセクション11のサイ
ズ,bssセクション12のサイズを認識し、bssセ
クション12のアドレスを計算し、RAMの任意の場所
から始まる場所2箇所14,15にコピーする。その
後、初期化プログラムは実行形式の実行開始番地へジャ
ンプする。
【0018】実行形式プログラムは最初カーネル13を
起動する。カーネルは、ハードウェアおよびカーネル内
で管理するオブジェクトを初期化しMMU2のアドレス
変換テーブルを作成するが、テキスト・データ領域はス
ルーであり、RAMにはbss領域の部分14,15が
システムおよびユーザモード用にそれぞれ作られる。カ
ーネル13は、初期化が終了すると、設定済みのデータ
またはファイルを読み込みその内容に従ってタスクを起
動する。
【0019】カーネルおよびデバイスドライバ等の一部
システムモードで動作するタスクが動作する場合は、ア
ドレステーブル1を利用し、それがユーザモードの場合
はアドレステーブル2を使用する。アドレス変換の内容
は公知なのでここでは省略する。
【0020】以上の構成により、ユーザ用のbss領域
とシステム用のbss領域を二重化して、それらの領域
をCPUのステータスによりMMUのアドレス変換テー
ブルを切り替えることで、ユーザプロセスがシステム用
のデータ領域を書き換えてもシステム用のbss領域の
保護が実現でき、システムが破壊されることをなくすこ
とができる。上記実施例では、CPU1がMMU2によ
る仮想記憶管理機能を持つ場合について説明したが、本
発明は上述の実施例に限定されるものではなく、仮想記
憶管理機構がないが、システム領域へアクセスした場合
にハードウェアに特権違反を起こす場合であっても、あ
るいはハードウェアによるアクセス例外機構がなくても
同様に実現可能である。
【0021】前者の場合、予めソースコードの中にシス
テム変数かユーザ変数かの区切りのデータを埋め込んで
おく。図3(A)のようにソースコードにシステムの使
用する大域変数の先頭のdummy_topのように0x55a
a55aaを書いておき、最後にはdummy_endのように
0xaa55aa55を書いておく、これが実行イメー
ジになると大域変数領域(bss)は図3(B)のよう
になる。
【0022】図4において、OSの起動時にメモリ管理
ルーチンはbss領域を検査し、その区切りデータによ
り、bss領域のシステム・ユーザ変数のマップを作成
する。そして、bss領域全体をシステム領域に設定
し、ユーザタスクがこの領域をアクセスした場合は特権
違反が発生するようにする。RAM上の規定位置に設定
されたベクター16に従い、例外処理ルーチンにジャン
プする。例外処理ルーチンでは、アクセスしたアドレス
からマップを参照し、アクセス可能かどうか判断する。
アクセス可能であれば、例外の発生した命令を解析し、
システムモードでその部分を実行し(システム領域のデ
ータを変更し)、例外の発生した部分へ正常復帰する。
【0023】また、図5に示すように、ハードウェアが
特にアクセス例外を起こさない場合でも、カーネルがプ
ロセスの切り替え時にbss領域をスワップ(コピー・
リスト)することでシステム領域のデータをユーザプロ
セスから保護することができる。
【0024】以上の実施例によれば、bss領域を多重
化することで、ユーザプロセスによるシステム変数が保
護でき、動作時の信頼性を高めることができる。さらに
モードのみでなく、タスク(グループ)間での大域変数
領域の保護も同様の手法で行うことができる。つまり、
タスクグループ間でも、グローバル・スタティックデー
タは共有領域にあり、一つのタスクの不具合により他の
タスクは影響を受ける。ユーザタスク単位でメモリ保護
を行いたい場合、CPUのモード状態は同じなので、主
記憶上の前記グローバル・スティックデータの記憶領域
を多重化し、OSのタスク管理切り替えルーチンによ
り、タスク単位ごとに、アドレス変換テーブルで切り替
えることでメモリ保護を行うことができる。
【0025】
【発明の効果】以上説明したように、本発明によれば以
上の方法により、ユーザタスクからのシステム変数デー
タ等の保護が可能であり、システムの動作時の信頼性が
向上する。
【図面の簡単な説明】
【図1】本発明を実行するシステム構成図である。
【図2】本発明におけるMMUによるメモリ保護を説明
するための図である。
【図3】本発明においてbss領域のマップ生成を説明
するための図であり、図3(A)はソースコードを、図
3(B)は実行イメージをそれぞれ示す図である。
【図4】本発明においてメモリアクセス例外によるメモ
リ保護を説明するための図である。
【図5】本発明においてbssスワップによるメモリ保
護を説明するための図である。
【図6】本発明及び従来技術においてプログラムのファ
ームウェア化を説明するための図である。
【図7】本発明においてCプログラムと実際のメモリ利
用の関係を説明するための図である。
【符号の説明】
1…CPUコア、2…MMU、3…キャッシュメモリ、
4…ROM、5…RAM、17…高級言語、18…アセ
ンブリ言語、19…コンパイラ、20…アセンブラ、2
1…オブジェットファイル、22…ライブラリ、23…
リンカー。

Claims (7)

    【特許請求の範囲】
  1. 【請求項1】 マルチタスクOSとアプリケーションの
    両プログラムが大域変数データを共有する場合のメモリ
    管理方法において、プログラムの起動時にROMに記録
    された前記大域変数データを主記憶上の2箇所にコピー
    することにより前記大域変数データのデータ領域をシス
    テム用及びユーザ用に二重化し、かつ、前記データ領域
    をアドレス変換テーブルで切換え可能にすることによ
    り、ユーザアプリケーションの大域変数へのアクセスの
    不具合による前記大域変数データの破壊を防止すること
    を特徴とするメモリ管理方法。
  2. 【請求項2】 マルチタスクOSとアプリケーションの
    両プログラムが大域変数データを共有する場合のメモリ
    管理方法において、プログラムの起動時に主記憶上のb
    ss領域にコピーされた大域変数データ領域全体をシス
    テム領域として設定し、ユーザモードのタスクから前記
    システム領域へのアクセスで発生させる例外処理内部
    で、該アクセスが可能かどうか判断し、アクセスが可能
    な場合にのみ前記大域変数データの書き換えを行う、ユ
    ーザアプリケーションの大域変数データへのアクセスの
    不具合による前記大域変数データの破壊を防止すること
    を特徴とするメモリ管理方法。
  3. 【請求項3】 前記bss領域のシステム用大域変数デ
    ータ領域とユーザ用大域変数データ領域を区切るためソ
    ース中にインデックスデータを書き込み、ページ単位で
    主記憶上にコピーすることによりbss領域を縮小する
    ことを特徴とする請求項2記載のメモリ管理方法。
  4. 【請求項4】 プログラムの起動時に、大域変数データ
    領域のシステム・ユーザのマップを生成することを特徴
    とする請求項3記載のメモリ管理方法。
  5. 【請求項5】 マルチタスクOSとアプリケーション両
    プログラムが大域変数データを共有する場合のメモリ管
    理方法において、前記マルチタスクOSのプロセスの切
    り替え時に、大域変数が記録されたRAMのbss領域
    をシステム・ユーザモードに応じて主記憶装置にスワッ
    プすることにより、システム領域の大域変数データをユ
    ーザプロセスから保護することを特徴とするメモリ管理
    方法。
  6. 【請求項6】 マルチタスクOSのタスク間でグローバ
    ル・スタティックデータを共有する場合のメモリ管理方
    法において、プログラムの起動時に主記憶上の前記グロ
    ーバル・スタティックデータのデータ領域を多重化し、
    OSのタスク管理切り替えルーチンにより、前記データ
    領域をタスク単位ごとに切り替えることにより、タスク
    単位でメモリを保護することを特徴とするメモリ管理方
    法。
  7. 【請求項7】 請求項1乃至6のいずれかの方法を実行
    する機能を有するコンピュータ。
JP21297497A 1997-08-07 1997-08-07 メモリ管理方法 Pending JPH1153249A (ja)

Priority Applications (1)

Application Number Priority Date Filing Date Title
JP21297497A JPH1153249A (ja) 1997-08-07 1997-08-07 メモリ管理方法

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
JP21297497A JPH1153249A (ja) 1997-08-07 1997-08-07 メモリ管理方法

Publications (1)

Publication Number Publication Date
JPH1153249A true JPH1153249A (ja) 1999-02-26

Family

ID=16631388

Family Applications (1)

Application Number Title Priority Date Filing Date
JP21297497A Pending JPH1153249A (ja) 1997-08-07 1997-08-07 メモリ管理方法

Country Status (1)

Country Link
JP (1) JPH1153249A (ja)

Cited By (5)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP2009544085A (ja) * 2006-07-18 2009-12-10 インテル・コーポレーション Efiベースのファームウェアにおいてpeiモジュールについてグローバル変数を利用する方法
JP2013192776A (ja) * 2012-03-21 2013-09-30 Sophia Co Ltd 遊技機
JP2013192787A (ja) * 2012-03-21 2013-09-30 Sophia Co Ltd 遊技機
JP2013192774A (ja) * 2012-03-21 2013-09-30 Sophia Co Ltd 遊技機
JP2017086949A (ja) * 2017-01-13 2017-05-25 株式会社ソフイア 遊技機

Cited By (5)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP2009544085A (ja) * 2006-07-18 2009-12-10 インテル・コーポレーション Efiベースのファームウェアにおいてpeiモジュールについてグローバル変数を利用する方法
JP2013192776A (ja) * 2012-03-21 2013-09-30 Sophia Co Ltd 遊技機
JP2013192787A (ja) * 2012-03-21 2013-09-30 Sophia Co Ltd 遊技機
JP2013192774A (ja) * 2012-03-21 2013-09-30 Sophia Co Ltd 遊技機
JP2017086949A (ja) * 2017-01-13 2017-05-25 株式会社ソフイア 遊技機

Similar Documents

Publication Publication Date Title
US5353411A (en) Operating system generation method
US9189263B1 (en) Object synchronization in shared object space
US5701493A (en) Exception handling method and apparatus in data processing systems
CA1266532A (en) Method to share copy on write segment for mapped files
CN100543677C (zh) 模拟实模式内存访问时访问扩展内存的系统和方法
US5596759A (en) Method for initializing a multiple processor computer system using a common ROM
JP3546678B2 (ja) マルチos構成方法
KR101288700B1 (ko) 멀티 오퍼레이팅 시스템(os) 기동 장치, 컴퓨터 판독 가능한 기록 매체 및 멀티 os 기동 방법
JPS621036A (ja) マルチモ−ドマイクロプロセツサにおいてプログラムを実行する方法及びオペレ−テイングシステム
KR20070083569A (ko) 운영체제
JPH06324849A (ja) オペレーティング・システム環境の起動方法およびシステム
US20040111707A1 (en) Debugger for multiple processors and multiple debugging types
US5881282A (en) Controlling ill-behaved computer add-on device through a virtual execution mode
US6438621B1 (en) In-memory modification of computer programs
EP0543610A2 (en) Data processing system
US20040122834A1 (en) Apparatus and method for switching mode in a computer system
KR20070003765A (ko) 운영체제
US6256751B1 (en) Restoring checkpointed processes without restoring attributes of external data referenced by the processes
JP2005122334A (ja) メモリダンプ方法、メモリダンプ用プログラム及び仮想計算機システム
JPH1153249A (ja) メモリ管理方法
Patience Redirecting System Calls in Mach 3.0, An alternative to the Emulator.
JPH09128267A (ja) データ処理装置およびデータ処理方法
JP3210384B2 (ja) 異なるモードで動作する2個のプログラム・セグメント間でコンピューターがコントロールを転送することを可能にする方法及び装置
Coffing An x86 protected mode virtual machine monitor for the mit exokernel
KR20060023956A (ko) 운영체제