プログラマーとしてコンピューターアーキテクチャを学ぶ[非公開]


12

私は通常、SOや他の場所(インストラクター、本の著者など)で教導師に出くわし"This will cause alignment issues"ます。

私はこれらすべての情報を知りたい relevantプログラミング。今では通常、低レベルの本(たとえばコンピューターアーキテクチャの本)を見ると、低レベルであり、ソフトウェアデザインではなくコンピューターアーキテクチャが主な関心分野である人々を対象としています。

プログラマーに関連する低レベルのものを扱う本についての推奨事項はありますか?


4
「低レベルのものを通り抜ける本」が欲しいのに、「低レベル」の本が欲しくないのですか?一部のプログラマ向けの学習アーキテクチャは、非常に有利です。TCP / IPスタックを理解しているWeb開発者に似ています。あなたが本当にそれを必要とするまで、それはそれほど有用ではありません。\
クリス

1
@Chris:私が意味したのは「プログラマー向けの低レベル」でした...技術的にはCPUアーキテクチャを完全に拡張することができます。これは、すべてのプログラマーが完璧であることを知っておくべき低レベルのものを教えます。
サマーサ

その場合、どの入門書でも正しい方向に進むことができます。その後、必要に応じて選択します。
クリス

自動変速機で車を運転する人は、運転中に車が何であり、どのように機能するかを知ることから恩恵を受けます。「スティックをドライブする」ことを学ぶときにあなたがより良いドライバーになると同じように、アセンブリ言語で少なくとも少しプログラミングすることを学ぶことで、あなたはより良いプログラマーになると信じています。
ウォーレンP

回答:


16

まさにこの目的のための素晴らしい本のセットは、Randall Hydeの「Write Great Code」シリーズ(Vol.1 Vol。2)です。高レベル言語で効率的なコードを書くために知っておくべきことの観点からの機械アーキテクチャの明示的な説明。


これはどの高級言語に適用されますか?これには、たとえばPython、JavaScript、C#、Scalaが含まれますか?
仕事

@Job-私は本を読んでいませんが、マルチスレッドや64ビット処理のようなものを利用する/利用する可能性のあるものすべてに当てはまると思います。言及した言語を実行すると、おそらくその知識が役立つでしょう(特に、サーバー管理者である場合、またはそれらの言語をWeb環境外で実行する場合)。
シャウナ

Hydeはアセンブリ言語の第一人者なので、彼にとって「高レベル」とはほとんどがCを意味します。しかし、彼のコンテンツは、さらに高い言語のユーザーにとっても同様に重要です。文字列やプロシージャコールなどは、Cで宣言されているかPythonで宣言されているかにかかわらず、ハードウェアレベルで実際にはそれほど違いはありません。
キリアンフォス

少しのアセンブリ言語も許可するネイティブコンパイル言語(C、C ++、Pascal、Objective-C)は、この本から最も恩恵を受けると思います。ただし、Pythonを使用し、Cで拡張機能を作成する人、またはjavaを使用してネイティブメソッドをまったく使用しない人でさえ、自分がしていることのコストについてもう少し考えればできます。使用しているプラ​​ットフォーム内で効率的に作業を行う方法。
ウォーレンP

私はまだ本を読んでいませんが、本のレビュー/要約に基づいてこの答えを正しいものとして選択します。
サマーサ

6

悲しいことに、マイクロプロセッサに相当する最新のものがわかりません。R。デュワーによるプログラマの見解。私が知っている最も近いのは、コンピューター構成と設計、第4版:David A. PattersonとJohn L. Hennessyによるハードウェア/ソフトウェアインターフェイスですが、低すぎるとは思わないでしょう。確かに、他の作品であるコンピューターアーキテクチャ、量的アプローチのためにそれを行うでしょう。

オンラインでは、このhttp://www-uxsup.csx.cam.ac.uk/courses/Architecture/course.pdfで、おそらくあなたが望むものが得られます。


PDFへのリンクは無効です。
アジャイ

5

x86プラットフォームの場合は、IntelのIA-32およびIntel 64プロセッサマニュアルのコピーを入手してください。最適化リファレンスマニュアルでは、Intel x86 CPUの低レベルの観点からこれらの問題の多くについて説明しています。AMDには、同じ問題を扱う同様のマニュアルもあります。

他のほとんどのCPUアーキテクチャには、パフォーマンスの問題を説明する同様のマニュアルがあります。(たとえば、 ARMおよびPowerPC。)


3

ヘネシーとパターソンによる「コンピューターアーキテクチャ:定量的アプローチ」(Amazon link)は、プログラミングに直接関連するケーススタディが非常に多く、コンピューターアーキテクチャへの非常に強力かつ堅実なアプローチであると思います。

米国のいくつかの学部および大学院レベルのCSアーキテクチャコースでさまざまな範囲で使用されています。

また、しばらく前にArs Technicaで素晴らしいレビューを得ました。


1
私はこの本が気に入っていますが(私は4つのエディションを所有しています)、プログラマーではなくコンピューターアーキテクトを対象としています。
AProgrammer

3

これが、私が現在Computer Systemsクラスで使用しているものです。ComputerSystems:A Programmer's Perspective(2nd Edition)で、クラスが始まったばかりの間に、私はそれを見て、本当に気に入っています。

本の説明は次のとおりです。

コンピュータサイエンスやコンピュータエンジニアリングを勉強している学生はほとんどいないため、コンピュータシステムを構築する機会はありません。一方、ほとんどの学生は、ほぼ毎日コンピューターを使用してプログラムする必要があります。コンピューターシステム:プログラマーの視点は、これらのアイデアがアプリケーションプログラムの正確性、パフォーマンス、ユーティリティにどのように影響するかを示すことにより、コンピューターシステムの根底にある重要かつ永続的な概念を紹介します。テキストの実践的なアプローチ(包括的なラボセットを含む)は、学生が現代のコンピューターシステムの「内部」操作を理解し、コンパイラー、コンピューターアーキテクチャ、オペレーティングシステム、とネットワーキング。


それは素晴らしい本です!!
アルマンド

2

大変な作業ですが、プログラミング言語の語用論はまさにあなたが探しているものかもしれません。この本は、理論的にはほとんど解析とコンパイル(プログラミングを本当に学びたい人にとって不可欠な知識)についてのものであり、その過程で、言語の概念がどのように低レベルで何が起こっているのかを学ぶことになります。さらに良いのは、一度に多くの言語でこれを学習し、異なる言語が実際にどのように機能するかをインテリジェントに比較および対比できるようになることです。

実際に教材を学習するのに数か月を費やすことができない限り、私はお勧めできません。それはあなたがただざっと見て、突然啓発されるようなものではありません。しかし、あなたが真剣なら、私はそれを強くお勧めします。


2

生物学では間違っているかもしれませんが、コンピューターサイエンスでは、「個体発生は系統発生を再現」しています。最初のコンピューター以来のコンピューターアーキテクチャーの歴史的概要は、プログラマーの観点からコンピューターアーキテクチャーの主題を理解するための素晴らしい方法です。コンピューターの設計は、ほとんどすべてが以前の設計の改良です。

つまり、コンピューターサイエンスで得られる理論的な「コンピューターアーキテクチャ」の本を念頭に置いた、完全に機能する古いシステム設計を勉強することをお勧めします。システム設計を本当に理解し、ソフトウェアを書くのに本当に素晴らしい仕事をするため。コンピュータシステムのアーキテクチャを直感的に理解するには、多くの概念を熟知する必要があります。コンピュータアーキテクチャのサイズと範囲がより管理しやすくなった頃からやり直すと、より良いコードを書くという目標を達成できるかもしれません。

(ちなみに、別の男が言及した「すばらしいコードを書く」本シリーズはすばらしく見えます。私は質問を編集して、以前は本から学習する際に投げかけたあらしを取り除いています。 )

コンピュータアーキテクチャを非常によく教えてくれるもの:

  1. 私はコンピューターを使い始めたので、人々に物事を説明しデモンストレーションするための出発点として、1980年代の機械を選ぶのが好きです。私は、コモドール64プログラマーのリファレンスガイドを使用して、プログラミングの知識とコンピューターアーキテクチャの知識が互いに出会う場所を人々に示しました。このような本と、おそらくコモドール64エミュレーターをPCで実行しているので、いろいろ試してみることができます。コンピューターアーキテクチャーの1980年代の古典的な化身のコンピューターシステムが実際にどのように構築されているかを学びます。私の見解では、物事を機能させる実世界の詳細を欠いている数十の理論モデルよりも、1つの具体的な例が出発点として適しています。レジスタとは何か、ALUとは何か、バスとは何か、そしてクロックとは何かを知っているなら、また、1980年代の古いデザインで使用されている信号システムは、Intelの「砂のようなブリッジアーキテクチャ」など、最近のことを理解するために知っておく必要のある基礎を提供します。歴史的には、オリジナルを振り返ってください。たとえば、ウィキペディアで「Von neumann」アーキテクチャを検索してください。

  2. 最初のポイントから数年先に進みます。オリジナルのIBM PCアーキテクチャー、8086アセンブリー言語、およびISAバスについて学んでください。これとその制限から、「Intel COre i7」CPUに含まれるもの、PCIおよびPCI-eバスの機能、およびそれらが必要な理由をより自然に理解することができます。今日のPCアーキテクチャには、元のIBM PC設計からの「二日酔い」が少し残っています。初期プログラム(オペレーティングシステム)のロード(ブートアップ)が2011年のPCで行われる方法は、元のIBM PCとそのROM BIOS、および元のPCのCMOS設定の遺産に依拠しています。

  3. 一部の組み込み非PCデバイスで動作する事前構成済みのLinuxビルドを使用および変更します。技術的なアーキテクチャだけでなく、いくつかの機能がある理由について、組み込みコンピュータアーキテクチャについて多くを学びます。安価に入手できる良い例 TS-7200ですは、素敵なPC-104(元のPCと同様にISAバス)を備えたである。PC-104(IBM PC / AT 80286時代のPCとピン互換性のある埋め込み16ビットISAバス)コンピューターは、モジュールがスタック可能であるため、ボード設計者ではない組み込みシステムを構築するのに最適な方法です。追加のIOまたは周辺機器が必要ですか?いくつかのモジュールを積み重ねるだけです。TS-7200には、ビッグエンディアンまたはリトルエンディアンを実行できる非x86コア(ARM9 CPU)があります。まだアーキテクチャ学習の旅で「エンディアン」に遭遇していないなら、それは


0

アセンブリ言語に関するほとんどの本では、関連するアーキテクチャ機能について説明しますが、通常は本が対象としているアーキテクチャについてのみです。したがって、キャッシュスピルとMMUページマッピングテクニックに関する情報は得られますが、おそらくエンディアンに関する情報は得られません。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.