4

私は中級レベル(抽象化)のプログラマーで、数か月前に抽象化を減らすべきか増やすべきかを考え始めました(減らすことを選択しました)。

今、私は必要なものについての「調査」のほとんどを行ったと思いますが、まだいくつかの質問が残っています。

今は「効果的に何もしない」、Cスキルを強化する(「K&R Cプログラミングラング」を購入)、そして(快適に感じた後)学習目的でオペレーティングシステム(minixなど)の勉強を始めることを考えていますが、私は頭に浮かんだアイデアがありますが、気にする必要があるかどうかはわかりません。

理論的には(確かではありませんが)、高級言語はハードウェアを直接参照できないため(レジスタ、メモリ位置など)、ベースの「完璧な言語」はアセンブリです。

私はすでにアセンブリを(少し前に)勉強して、それがどうだったかを確認しました(そして、本が使用した古いデバッガー(Linuxの場合はアセンブリ言語のステップバイステップ!)のために本の途中で停止しました)が、私は何から読んだことがありますが、私はその言語があまり好きではありません。

したがって、質問は単純です。オペレーティングシステム(ブートローダー/カーネル)は、単一のアセンブリラインに触れることなくプログラムでき、それでも効果的ですか?

できたとしても「クロスアーキテクチャ」ではないでしょうか。(i386 / arm / mipsなど...)

ご協力ありがとうございました

4

3 に答える 3

4

組み立てなしでかなりの量の作業を行うことができます。Linux や NetBSD は、実行する多くのターゲットごとに完全に書き直したり、パッチを当てたりする必要はありません。ほとんどのコードは移植可能で、抽象化レイヤーがあり、抽象化レイヤーの下にターゲット固有のレイヤーがあります。ターゲット固有のレイヤー内であっても、ほとんどのコードは asm ではありません。たとえば、デバイス ドライバのレジスタやメモリをプログラムするには asm が必要だという誤った考えを払拭したいと思います。asm は、高水準言語を使用して生成できない 1) プロセッサの命令に使用します。または 2) 高水準言語で生成されたコードが遅すぎる場合。たとえば、ARM では、割り込みを有効または無効にするために、使用する必要があるプロセッサ状態レジスタにアクセスするための特定の命令があります。そのため、asm が必要です。ただし、割り込みコントローラのプログラミングはすべて高級言語で行われます。2 番目のポイントの例として、C ライブラリでは memcpy やその他の同様の使用頻度の高いライブラリ関数が手動でコーディングされていることがよくあります。これは、劇的に高速であるためです。

確かにASMで好きなことを書いたり実行したりできますが、通常、「ハードウェア(レジスタ、メモリ位置など)」に直接アクセスするために高水準言語が使用されていることがわかります。K&R の本だけでなく、さまざまな C 標準をさまよって C のスキルを強化し続ける必要があります。ビットフィールドや変数サイズの昇格方法など、「実装定義」項目がいくつあるかが気になるかもしれません。 . 10 年前に作成したプログラムが、特定のブランドのコンパイラ (msvc、gcc など) を使用してコンパイルおよび動作し続けているからといって、コードがクリーンで移植性があり、動作し続けるとは限りません。

于 2012-08-16T19:50:53.783 に答える
2

「高水準言語はハードウェアを直接参照できない」という質問に自分で答えました。

好むと好まざるとにかかわらず、OS を作成する場合、ある時点でアセンブリ/マシン コードを処理する必要があります。

割り込みおよび例外ハンドラには、いくつかのアセンブリ コードが含まれている必要があります。そのため、スケジューラが必要になります (直接的でない場合は、間接的に)。そしてシステムコールの仕組み。そしてブートローダー。

于 2012-08-16T07:20:02.093 に答える
0

過去に Web サイトや本を読んで学んだことは、次のとおりです。b) OS の主なプログラミング言語は C と C++ のようです c) C または C++ でソース コードをプロファイリングした後、アセンブリ言語を使用して「コードを高速化」できます (実際には言語は問題ではありません)。

したがって、中級言語と低級言語の組み合わせは、場合によっては避けられません。たとえば、ユーザー入力を待機するコードを高速化しても意味がありません。特定の範囲のコンピューター (AMD、INTEL、ARM、DIGITAL-ALPHA など) 向けの最短かつ最速のコードをビルドすることが重要な場合は、アセンブラーを使用する必要があります。私の意見...

于 2012-08-17T09:11:41.713 に答える