JP2015022373A - 制御装置及びその起動処理方法、並びにその制御装置を備えた画像形成装置 - Google Patents
制御装置及びその起動処理方法、並びにその制御装置を備えた画像形成装置 Download PDFInfo
- Publication number
- JP2015022373A JP2015022373A JP2013147962A JP2013147962A JP2015022373A JP 2015022373 A JP2015022373 A JP 2015022373A JP 2013147962 A JP2013147962 A JP 2013147962A JP 2013147962 A JP2013147962 A JP 2013147962A JP 2015022373 A JP2015022373 A JP 2015022373A
- Authority
- JP
- Japan
- Prior art keywords
- code
- control device
- demand paging
- data
- storage unit
- 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
Links
Images
Landscapes
- Accessory Devices And Overall Control Thereof (AREA)
- Stored Programmes (AREA)
- Facsimiles In General (AREA)
Abstract
【課題】RAM実行のシステムでも、デマンドページング処理を利用した起動の高速化を可能にする。
【解決手段】マスクROM20に格納されているブートローダは、RAM17にロードするプログラムのコード及びデータのうち、プログラムのエントリーポイント、ページテーブルを初期化するコードなど、デマンドページング処理を行うのに必要なものだけをRAM17にロードする。ブートローダは、プログラムのエントリーポイントにジャンプし、割り込み処理の初期化、ページテーブルの初期化などを行う。以降の処理でデマンドページング処理が可能になる。
【選択図】図1
【解決手段】マスクROM20に格納されているブートローダは、RAM17にロードするプログラムのコード及びデータのうち、プログラムのエントリーポイント、ページテーブルを初期化するコードなど、デマンドページング処理を行うのに必要なものだけをRAM17にロードする。ブートローダは、プログラムのエントリーポイントにジャンプし、割り込み処理の初期化、ページテーブルの初期化などを行う。以降の処理でデマンドページング処理が可能になる。
【選択図】図1
Description
本発明は、デマンドページング機能を有する制御装置及びその起動処理方法、並びにその制御装置を備えた画像形成装置に関する。
画像形成装置などの電子機器を起動する際に、デマンドページング処理を利用して、起動時間を短縮する技術が存在する。デマンドページング処理とは、必要になったときに不揮発性メモリからRAMにプログラムのコードもしくはデータをページ単位でロードする処理のことである。デマンドページング処理を利用すれば、必要最低限のコードもしくはデータのみをロードすればよいため、起動時間を短縮することが可能である。デマンドページング機能を利用した起動高速化技術は既に知られている(特許文献1)。
しかしながら、今までのデマンドページング処理を利用した起動高速化技術は、ROM実行を前提としたシステムで動作するというシステム制約があり、RAM実行のシステムには適用できないという問題がある。
ROM実行とは、マスクROMやNORフラッシュROMなどの直接コードを実行することが可能なROMを搭載するシステムにおいて採用される方式で、コードをROMからRAMに展開せず、直接ROM上のコードを実行することである。また、RAM実行とは、NANDフラッシュROMやシリアルフラッシュROMなどの直接コードを実行することができないROMを搭載するシステムにおいて採用される方式で、コードをROMからRAMに展開してからRAM上のコードを実行することである。
ROM実行は、RAMを削減できるためコスト面では有利であるが、速度面では不利なため、コストが重要な電子機器では採用されるものの、画像形成装置など、速度が要求される電子機器においてはRAM実行が採用されることが殆どである。
特許文献1に記載された発明では、リード時間を短縮する目的で、デマンドページング処理によりROM上のデータをRAMに展開している。しかし、この発明は、コードをROM実行し、データはRAMアクセスするというシステムを前提としており、RAM実行のシステムには適用できない。
本発明は、このような問題を解決するためになされたものであり、その目的は、RAM実行のシステムでも、デマンドページング処理を利用した起動の高速化を実現することである。
本発明は、制御装置であって、プログラムのコード及びデータが格納される不揮発性の第1の記憶部と、前記プログラムの作業領域となる第2の記憶部と、デマンドページング処理に必要なコード及びデータを前記第1の記憶部から前記第2の記憶部へロードする手段と、該ロードされたコード及びデータを用いて、デマンドページング処理に必要な初期化処理を行う手段と、を有する制御装置である。
本発明によれば、RAM実行のシステムでも、デマンドページング処理を利用した起動の高速化を実現することができる。
以下、本発明の実施形態について図面を参照して説明する。
<画像形成装置のハードウェア構成>
図1は、本発明の実施形態に係る画像形成装置のハードウェア構成を示すブロック図である。
<画像形成装置のハードウェア構成>
図1は、本発明の実施形態に係る画像形成装置のハードウェア構成を示すブロック図である。
この画像形成装置1は、コントローラボード10と、それぞれがコントローラボード10に接続されたスキャナ30、プロッタ40、及び操作(オペレーション)パネル50を備えている。
スキャナ30は、原稿などの画像を読み取り、画像データを生成する画像入力手段である。プロッタ40は、画像データに基づいて、用紙などの印刷媒体に画像を形成する画像出力手段である。操作パネル50は、各種ボタン、LCDなどの表示デバイス、及び表示デバイス上に配置されたタッチパネルなどを備えており、ユーザがこの画像形成装置1に各種指示を入力するための操作入力手段である。
制御装置としてのコントローラボード10は、この画像形成装置1の全体を制御する機能を持ち、バス21と、それぞれがバス21に接続されたCPU11、スキャナI/F(インタフェース)12、パネルI/F13、画像処理H/W(ハードウェア)14、プロッタI/F15、不揮発性メモリ16、RAM17、ネットワークI/F18、USBI/F19、及びマスクROM20を備えている。
CPU11は、この画像形成装置1の全体を制御するために各種処理や演算などを実行する演算処理手段である。また、CPU11は、デマンドページング処理時にアドレス変換などのメモリ管理を実行するMMU(Memory Management Unit:メモリ管理ユニット)11aを内蔵している。
パネルI/F13は、操作パネル50とのインタフェース手段である。画像処理H/W14は、スキャナ30から入力された画像データ、ネットワークI/F18から入力された画像データ、USBI/F19から入力された画像データに対して、所定の画像処理を施す。プロッタI/F15は、プロッタ40とのインタフェース手段である。
不揮発性メモリ16は、NANDフラッシュROM、シリアルフラッシュROMなどからなり、画像形成装置としてのサービスを提供するプログラム(コピーアプリやFAXアプリなどのアプリケーションプログラム)を格納している。RAM17は、不揮発性メモリ16からロードされたプログラムの作業領域(ワークエリア)などとして使用される主記憶部(メインメモリ)である。マスクROM20は、ブートローダを格納している。
ネットワークI/F18は、LANなどのネットワークとのインタフェース手段である。USBI/F19は、USBに対応した不揮発性メモリ(USBメモリ)などのUSBデバイスとのインタフェース手段である。
以上の構成を備えた画像形成装置1において、起動時には、CPU11によって、マスクROM20に格納されているブートローダが実行される。ブートローダは、スキャナ30やプロッタ40、操作パネル50を制御し、画像形成装置1としてのサービスを提供するプログラムを不揮発性メモリ16から読み出し、RAM17にロードする。
RAM17にロードされたプログラムにはエントリーポイントと呼ばれるプログラムの開始点があり、ブートローダはそこにジャンプして、プログラムの実行を開始する。プログラムの初期化コードにより、ソフトウェア内部データや、スキャナ30やプロッタ40等のハードウェアが初期化され、初期化が完了すると、画像形成装置1は、コピーや印刷などの指示を受け付けることができるようになる。
ブートローダが不揮発性メモリ16からRAM17にプログラムをロードする際、プログラム全体をロードしてからエントリーポイントにジャンプすると、起動時間が長くなってしまう。そこで、プログラムを部分的にRAM17にロードして起動時間を短縮する方法について以降で説明する。
<コントローラボードの起動処理>
図2は、図1におけるコントローラボード10の起動処理を示すフローチャートである。ブートローダは、画像形成装置1の電源が入ると最初に実行される(ステップS101)。
図2は、図1におけるコントローラボード10の起動処理を示すフローチャートである。ブートローダは、画像形成装置1の電源が入ると最初に実行される(ステップS101)。
ブートローダは、RAM17にロードするプログラムのうち、デマンドページング処理を行うのに必要なコード及びデータのみをRAM17にロードする(ステップS102)。
ここで、デマンドページング処理を行うのに必要なコード及びデータとは、プログラムのエントリーポイント(以下、プログラムエントリーポイント)、ページテーブルを初期化するコード(以下、ページテーブル初期化コード)、ベクターテーブル、不揮発性メモリのデバイスドライバ(以下、不揮発性メモリデバイスドライバ)、デマンドページング処理コード、及び割り込み処理コードである。この不揮発性メモリは、コントローラボード10上の不揮発性メモリ16(NANDフラッシュROM、シリアルフラッシュROMなど)である。また、SSD、HDD、USBメモリ等も可能である。
図3は、ブートローダがデマンドページング処理に必要なコード及びデータをRAM17にロードした時点、即ちステップS102が終了した時点でのRAMマップを示す図である。
RAM17の先頭部分のRAM領域171にベクターテーブル、プログラムエントリーポイント、ページテーブル初期化コード、不揮発性メモリデバイスドライバ、デマンドページング処理コード、及び割り込み処理コードがロードされている。一方、それ以外のRAM領域172には何もロードされておらず、不定値のままである。
図示のように、ベクターテーブル、プログラムエントリーポイント、ページテーブル初期化コード、不揮発性メモリデバイスドライバ、デマンドページング処理コード、及び割り込み処理コードを、最も低位のアドレスを0x0として連続して配置する。これは、プログラムのビルド時に使用されるリンカースクリプトを適切に記述することによって行うことができる。リンカースクリプトはプログラムのRAMマップを決定する設定ファイルであり、テキストファイルで記述されているので、ソフトウェア開発者が自由にRAMマップのレイアウトを変更することができる。
図2の説明に戻る。ステップS102でブートローダがデマンドページング処理を行うのに必要なだけのコード及びデータをRAM17にロードした後、プログラムエントリーポイントにジャンプし(ステップS103)、割り込み処理の初期化、ページテーブルの初期化、不揮発性メモリデバイスドライバの初期化を行う(ステップS104)。これにより、以降の処理でデマンドページング処理が可能になる。
図4は、ページング設定、即ちステップS104におけるページテーブルの初期化が行われた後のRAM17のアクセス属性について説明するための図である。
ページテーブルの初期化により、RAM17全体のアクセス属性が決定する。アクセス属性としては、一般的なCPUでは、書き込みアクセス禁止、読み書きアクセス禁止、アクセス禁止なしを設定することができる。
アクセス属性は、ページ単位で設定することができる。図4においては、斜線を付した部分(以下、斜線部分)174を読み書きアクセス禁止属性としている。この斜線部分174に読み出しアクセスや書き込みアクセスが発生すると、ページフォールト例外が発生し、これを契機にデマンドページング処理が行われる。
図4において、白抜きの部分(以下、白抜き部分)には、書き込みアクセス禁止属性、もしくはアクセス禁止なし属性を設定する。書き込みアクセス禁止属性を設定した領域は、読み出しアクセスは成功するが、書き込みアクセスをした場合にはページフォールト例外が発生する。アクセス禁止なし属性を設定した領域は、読み出しアクセスも書き込みアクセスも成功する。ここでは、白抜き部分のうち、デマンドページング処理を行うのに必要なだけのコード及びデータをロードした領域171は書き込みアクセス禁止属性に、ページテーブルを含むデータ部分173はアクセス禁止なし属性を設定すればよい。
図2の説明に戻る。デマンドページング処理を行うために必要な初期化(ステップS104)を行った後は、通常初期化処理(プログラムの初期化処理)を行う。通常初期化処理を行うためのコード及びデータはまだRAM17にロードされていないため、通常初期化処理コードを実行しようとすると(ステップS105)、ページフォールト例外が発生する(ステップS106:YES)。
ページフォールト例外を契機として、デマンドページング処理が行われる(ステップS107)。即ち、プログラムのコード及びデータが格納された不揮発性メモリ16から必要なコード及びデータを読み出し、RAM17に展開する。このデマンドページング処理は、OS(オペレーティングシステム)とMMU11aにより実行される。
デマンドページング処理が完了したら、元のプログラムに戻って、通常初期化処理を再開する(ステップS108:YES→ステップS105)。この過程を通常初期化処理を全て実行し終わるまで繰り返す(ステップS108:NO→起動完了)。
通常初期化処理の中には、デマンドページング処理を行わずに済むものもある(ステップS106:NO)。これは、以前の通常初期化処理によってデマンドページング処理が行われた際に、現在実行中の通常初期化処理のコード及びデータがついでに読み込まれたケースである。
図5は、デマンドページング処理により初期化コード及びデータがロードされていく様子について説明するための図である。
RAMアクセス属性がアクセス禁止属性に設定されている斜線部分174内の領域に対して、コード実行もしくはデータアクセスが行われると、デマンドページング処理が行われる。この結果、その領域は書き込みアクセス禁止属性(コードの場合)、もしくはアクセス禁止なし属性(データの場合)が設定される。
図5において、白抜き部分の領域175及び176が、初期化コードがロードされた領域を表し、白抜き部分の領域177及び178が、初期化データがロードされた領域を表す。デマンドページング処理により、初期化コード及び初期化データのロードが進むにつれて、白抜き部分が増えていく。
<低優先度タスクの読み出しによる起動の高速化>
図6は、低優先度タスクがRAMに読み出しアクセスを行うことによって起動をより高速化する手法について説明するための図である。
図6は、低優先度タスクがRAMに読み出しアクセスを行うことによって起動をより高速化する手法について説明するための図である。
初期化処理の最中に、低優先度タスク(優先度の低いタスク)200を1つ生成し、実行する。この低優先度タスク200は、RAM17に対して、ページ単位で読み出しアクセスする役割を持つ。読み出しアクセスの範囲は、デマンドページング処理に必要なコード及びデータが配置されている領域171の直後のアドレスから、RAM17の終端アドレスまでである。
アクセス単位は1バイトであり、ページ単位で順次読み出しアクセスを行う。ページサイズはCPUに依存する。仮にページサイズを4KBとし、読み出しアクセスを開始するアドレスを0x4000とすると、この低優先度タスク200は、0x4000,0x5000,0x6000,0x7000…に対して読み出しアクセスを行う。RAM17の終端アドレスまでの読み出しアクセスを完了すると、このタスクは終了する。
このタスクの効果について、以下に述べる。
初期化処理の中には、待ち時間を必要とする処理が行われる可能性がある。例えば、周辺デバイスの初期化を行うコードにおいて、周辺デバイスのステータスが変化することを待つ処理が挙げられる。このような待ち時間には、CPUは有効な処理を行うことができず、アイドル状態になるだけである。
初期化処理の中には、待ち時間を必要とする処理が行われる可能性がある。例えば、周辺デバイスの初期化を行うコードにおいて、周辺デバイスのステータスが変化することを待つ処理が挙げられる。このような待ち時間には、CPUは有効な処理を行うことができず、アイドル状態になるだけである。
そこで、この間に、低優先度タスクを動かしておけば、RAMアドレスに読み出しアクセスを行うことによってデマンドページング処理を引き起こすことができる。これにより、将来のデマンドページング処理を先取りすることができる可能性があり、デマンドページング処理時間の短縮に繋がる。また、このタスクは優先度が低いため、初期化処理が実行されている際には、その初期化処理の実行を邪魔することがない。
このようにCPUがアイドル状態になる時に、少しでもデマンドページング処理を進めることにより、トータルの起動時間を短縮させることができる。
以上詳細に説明したように、本発明の実施形態に係る画像形成装置1によれば、起動時に、不揮発性メモリ16に格納されているプログラムのコード及びデータのうち、デマンドページング処理を行うのに必要なコード及びデータ(必要最低限のコード及びデータ)だけをRAM17にロードすることによって、ロード時間を短縮することができる。
その後、ロードしたプログラムのエントリーポイントにジャンプし、割り込み処理の初期化、ページテーブルの初期化、および不揮発性メモリのデバイスドライバの初期化を行うことによって、デマンドページング処理が可能になる。この後は、デマンドページング処理により、随時必要なコード、データが不揮発性メモリ16からRAM17にロードされる。
このように、デマンドページング処理を行うことができるだけのロード及び初期化を実行しておけば、デマンドページング機能を提供することが出来、その結果、起動高速化を実現することができる。
即ち、RAM実行のシステムであっても起動高速化を実現できる。
また、バックグラウンドで低優先度のタスクにより意図的にデマンドページングを引き起こすことによってトータルの起動時間をさらに短縮することができる。
その後、ロードしたプログラムのエントリーポイントにジャンプし、割り込み処理の初期化、ページテーブルの初期化、および不揮発性メモリのデバイスドライバの初期化を行うことによって、デマンドページング処理が可能になる。この後は、デマンドページング処理により、随時必要なコード、データが不揮発性メモリ16からRAM17にロードされる。
このように、デマンドページング処理を行うことができるだけのロード及び初期化を実行しておけば、デマンドページング機能を提供することが出来、その結果、起動高速化を実現することができる。
即ち、RAM実行のシステムであっても起動高速化を実現できる。
また、バックグラウンドで低優先度のタスクにより意図的にデマンドページングを引き起こすことによってトータルの起動時間をさらに短縮することができる。
なお、以上説明した実施形態は、本発明を画像形成装置に適用したものであるが、本発明は、例えばデジタルカメラ、スマートフォン、タブレット端末、パーソナルコンピュータ等の電子機器にも適用することができる。
1…画像形成装置、10…コントローラボード、11…CPU、11a…MMU、16…不揮発性メモリ、17…RAM、20…マスクROM、200…低優先度タスク。
Claims (8)
- プログラムのコード及びデータが格納される不揮発性の第1の記憶部と、
前記プログラムの作業領域となる第2の記憶部と、
デマンドページング処理に必要なコード及びデータを前記第1の記憶部から前記第2の記憶部へロードする手段と、
該ロードされたコード及びデータを用いて、デマンドページング処理に必要な初期化処理を行う手段と、を有する制御装置。 - 請求項1に記載された制御装置において、
前記デマンドページング処理に必要なコード及びデータは、プログラムのエントリーポイント、ページテーブルを初期化するコード、ベクターテーブル、前記第1の記憶部のデバイスドライバ、デマンドページング処理コード、及び割り込み処理コードである、制御装置。 - 請求項1又は2に記載された制御装置において、
前記デマンドページング処理に必要なコード及びデータが、前記第2の記憶部の連続したアドレスの領域に配置されている、制御装置。 - 請求項3に記載された制御装置において、
前記領域のアドレスは、プログラムのビルド時に使用されるリンカースクリプトの記述により設定される、制御装置。 - 請求項3又は4に記載された制御装置において、
最も低位のアドレスが0x0である、制御装置。 - 請求項1〜5のいずれかに記載された制御装置において、
前記初期化処理を行っている最中に、優先度の低いタスクを起動しておき、そのタスクに、デマンドページング処理が行われていない最も低位のアドレスから終端アドレスまで、ページ単位で順次読み出しアクセスさせることにより、バックグラウンドでデマンドページングを引き起こす、制御装置。 - 請求項1〜6のいずれかに記載された制御装置を備えた画像形成装置。
- プログラムのコード及びデータが格納される不揮発性の第1の記憶部と、前記プログラムの作業領域となる第2の記憶部と、を有する制御装置の起動処理方法であって、
デマンドページング処理に必要なコード及びデータを前記第1の記憶部から前記第2の記憶部へロードする工程と、
該ロードされたコード及びデータを用いて、デマンドページング処理に必要な初期化処理を行う工程と、
を有する制御装置の起動処理方法。
Priority Applications (1)
| Application Number | Priority Date | Filing Date | Title |
|---|---|---|---|
| JP2013147962A JP2015022373A (ja) | 2013-07-16 | 2013-07-16 | 制御装置及びその起動処理方法、並びにその制御装置を備えた画像形成装置 |
Applications Claiming Priority (1)
| Application Number | Priority Date | Filing Date | Title |
|---|---|---|---|
| JP2013147962A JP2015022373A (ja) | 2013-07-16 | 2013-07-16 | 制御装置及びその起動処理方法、並びにその制御装置を備えた画像形成装置 |
Publications (1)
| Publication Number | Publication Date |
|---|---|
| JP2015022373A true JP2015022373A (ja) | 2015-02-02 |
Family
ID=52486801
Family Applications (1)
| Application Number | Title | Priority Date | Filing Date |
|---|---|---|---|
| JP2013147962A Pending JP2015022373A (ja) | 2013-07-16 | 2013-07-16 | 制御装置及びその起動処理方法、並びにその制御装置を備えた画像形成装置 |
Country Status (1)
| Country | Link |
|---|---|
| JP (1) | JP2015022373A (ja) |
Citations (1)
| Publication number | Priority date | Publication date | Assignee | Title |
|---|---|---|---|---|
| JP2011501321A (ja) * | 2007-10-26 | 2011-01-06 | クゥアルコム・インコーポレイテッド | 無線デバイスのためのプログレッシブブート |
-
2013
- 2013-07-16 JP JP2013147962A patent/JP2015022373A/ja active Pending
Patent Citations (1)
| Publication number | Priority date | Publication date | Assignee | Title |
|---|---|---|---|---|
| JP2011501321A (ja) * | 2007-10-26 | 2011-01-06 | クゥアルコム・インコーポレイテッド | 無線デバイスのためのプログレッシブブート |
Non-Patent Citations (1)
| Title |
|---|
| 西田 亙: "「configure;make;make install」だけでは終わらせない! GCCプログラミン", UNIX USER, vol. 第12巻,第8号, JPN6017015025, 1 August 2003 (2003-08-01), JP, pages 131 - 140, ISSN: 0003547051 * |
Similar Documents
| Publication | Publication Date | Title |
|---|---|---|
| KR101636870B1 (ko) | 최소 부트 이미지의 생성 방법 및 장치 | |
| JP5783809B2 (ja) | 情報処理装置、起動方法およびプログラム | |
| JP2017228010A (ja) | ストレージ制御手段、ストレージ制御手段を有する情報処理装置、ストレージ制御方法及びそのプログラム | |
| JP2005157528A (ja) | メモリ装置 | |
| KR101285204B1 (ko) | 정보 처리장치 및 정보 처리장치의 제어방법 | |
| KR102116984B1 (ko) | 메모리 스왑 오퍼레이션 제어 방법 및 이를 적용하는 데이터 처리 시스템 | |
| JP5970867B2 (ja) | 情報処理装置、画像形成装置およびプログラム | |
| JP5870043B2 (ja) | 起動制御装置、情報機器および起動制御方法 | |
| JP2015022373A (ja) | 制御装置及びその起動処理方法、並びにその制御装置を備えた画像形成装置 | |
| JP2018078485A (ja) | 情報処理装置および情報処理装置の起動方法 | |
| JP5232728B2 (ja) | 画像形成装置 | |
| JP2006268377A (ja) | プログラム起動制御装置及びプログラム起動制御方法 | |
| JP2008225608A (ja) | メモリを制御するメモリコントローラ、メモリモジュール、メモリの制御方法 | |
| JP2006155391A (ja) | 画像形成装置 | |
| JP2005258967A (ja) | データ処理装置 | |
| JP5826220B2 (ja) | 電子機器およびサスペンド制御プログラム | |
| JP4548505B2 (ja) | 情報処理装置、および情報処理方法、並びにコンピュータ・プログラム | |
| JP4594889B2 (ja) | 複数の処理装置を備えたシステム上で実行されるプログラムのトレース方法、および、複数の処理装置を備えたシステム | |
| JP4334312B2 (ja) | 起動時間短縮演算装置およびデータロード方法 | |
| CN115129526B (zh) | 一种bios动态调试方法、系统、存储介质及设备 | |
| CN113438380B (zh) | 图像形成装置及计算机可读取记录介质 | |
| JP2006126987A (ja) | 画像処理装置 | |
| JP2011203843A (ja) | 情報処理装置 | |
| JP2023128642A (ja) | 情報処理装置、情報処理装置の制御方法、及びプログラム | |
| JP2020052501A (ja) | 情報処理装置及びプログラム |
Legal Events
| Date | Code | Title | Description |
|---|---|---|---|
| A621 | Written request for application examination |
Free format text: JAPANESE INTERMEDIATE CODE: A621 Effective date: 20160707 |
|
| A977 | Report on retrieval |
Free format text: JAPANESE INTERMEDIATE CODE: A971007 Effective date: 20170414 |
|
| A131 | Notification of reasons for refusal |
Free format text: JAPANESE INTERMEDIATE CODE: A131 Effective date: 20170502 |
|
| A02 | Decision of refusal |
Free format text: JAPANESE INTERMEDIATE CODE: A02 Effective date: 20171107 |