프로그래머로서 컴퓨터 아키텍처 학습 [폐쇄]


12

나는 일반적으로 SO 및 다른 장소 (강사, 책 저자 등)에서 선을 따라 "This will cause alignment issues"가거나 줄을 따라 무언가를 말할 것 입니다.

나는 relevant프로그래밍 에 관한 모든 tidbit에 대해 배우고 싶다 . 일반적으로 저수준의 서적 (예 : 컴퓨터 아키텍처 서적)을 볼 때 그것들은 너무 낮아서 소프트웨어 디자인이 아닌 컴퓨터 아키텍처가 주요 관심 분야 인 사람들을 대상으로합니다.

프로그래머와 관련된 저수준의 내용을 다루는 책에 대한 권장 사항이 있습니까?


4
"낮은 수준의 내용을 다루는 책"을 원하지만 너무 "낮은 수준"인 책을 원하지 않습니까? 일부 프로그래머를위한 학습 아키텍처는 매우 유리할 수 있습니다. TCP / IP 스택을 이해하는 웹 개발자와 유사합니다. 정말 필요할 때까지 유용한 것은 아닙니다. \
Chris

1
@Chris : 제가 의미하는 것은 "프로그래머를위한 저수준"이었습니다 ... 기술적으로 우리는 CPU 아키텍처를 한 단계 발전시킬 수 있으며, 언젠가는 유용 할 것입니다. 모든 프로그래머 가 알아야 할 저수준의 내용을 완벽하게 가르칩니다 .
Samaursa

이 경우, 어떤 입문 서적도 올바른 방향으로 안내 할 것이며, 그 후에 필요한 부분이나 필요에 따라 선택하는 것이 좋습니다.
Chris

자동 변속기를 사용하여 자동차를 운전하는 사람은 운전 중에 자동차의 상태와 작동 방식을 알면 도움이됩니다. 나는 당신이 "스틱 구동"을 배울 때 당신이 더 나은 드라이버가된다고 생각하는 것과 같은 방식으로 적어도 어셈블리 언어로 프로그래밍하는 법을 배워서 더 나은 프로그래머가되었다고 생각합니다.
Warren P

답변:


16

Randall Hyde의 "Write Great Code"시리즈 ( Vol.1 Vol.2 ) : 고급 언어로 효율적인 코드를 작성하기 위해 알아야 할 사항의 관점에서 기계 아키텍처에 대한 설명 .


어떤 고급 언어가 적용됩니까? 예를 들어 Python, JavaScript, C #, Scala가 포함됩니까?
Job

@ Job-나는 책을 읽지 못했지만 멀티 스레딩 및 64 비트 처리와 같은 것을 활용할 수있는 모든 것에 적용 될 것이라고 말하고 싶습니다. 언급 한 언어를 실행하면 해당 지식이 유용 할 것입니다 (특히 서버 관리자이거나 웹 환경 외부에서 해당 언어를 실행하는 경우).
Shauna

하이드는 어셈블리 언어 전문가이므로 "고수준"은 대부분 C를 의미합니다. 그러나 그의 내용은 더 높은 언어 사용자에게도 중요합니다. 문자열, 프로 시저 호출 등은 실제로 C 또는 Python으로 선언 되든 하드웨어 수준에서 그다지 다르지 않습니다.
Kilian Foth

나는 약간의 어셈블리 언어를 허용하는 네이티브 컴파일 언어 (C, C ++, Pascal, Objective-C) 가이 책에서 가장 유익 할 것이라고 생각합니다. 그러나 Python을 사용하고 C로 확장을 작성하거나 Java를 사용하고 기본 메소드를 전혀 사용하지 않는 사람들은 자신이하는 일의 비용에 대해 조금 더 생각할 수 있습니다. 사용중인 플랫폼 내에서 효율적으로 작업을 수행하는 방법
Warren P

책을 아직 읽지 않았지만 책의 리뷰 / 요약에 따라이 답변을 올바른 것으로 선택하겠습니다.
Samaursa

6

슬프게도 나는 마이크로 프로세서와 동등한 현대적인 것을 모른다 : R. Dewar의 프로그래머의 견해. 내가 아는 가장 가까운 것은 컴퓨터 구성 및 디자인, 제 4 판 : David A. Patterson과 John L. Hennessy의 하드웨어 / 소프트웨어 인터페이스입니다. 다른 접근 방식 인 컴퓨터 아키텍처, 정량적 접근 방식에 대해서도 그렇게 할 것입니다.

온라인으로,이 http://www-uxsup.csx.cam.ac.uk/courses/Architecture/course.pdf 는 아마도 당신이 원하는 것을 줄 것입니다.


PDF에 대한 링크가 죽었습니다.
ajay

5

x86 플랫폼의 경우 인텔의 IA-32 및 인텔 64 프로세서 설명서 사본을 확보하십시오 . 최적화 참조 매뉴얼에서는 인텔 x86 CPU에 대한 저수준 관점에서 이러한 많은 문제에 대해 설명합니다. AMD는 또한 동일한 문제를 다루는 유사한 매뉴얼 을 가지고 있습니다.

대부분의 다른 CPU 아키텍처에는 성능 문제에 대해 설명하는 유사한 매뉴얼이 있습니다. ( 예 : ARMPowerPC )


3

Hennessy and Patterson ( Amazon link )의 "컴퓨터 아키텍처 : 정량적 접근"은 컴퓨터 아키텍처에 대한 매우 강력하고 견고한 접근 방식이며 프로그래밍과 직접 관련된 몇 가지 사례 연구가 있습니다.

미국의 여러 학부 및 대학원 수준의 CS 아키텍처 과정에서 다양한 범위로 사용됩니다.

또한 Ars Technica에 대한 훌륭한 리뷰를 받았습니다 .


1
나는이 책이 마음에 들지만 (네 개의 에디션을 소유하고 있음) 프로그래머가 아닌 컴퓨터 아키텍트를 대상으로한다.
AProgrammer

3

이것이 제가 Computer Systems 클래스에서 지금 사용하고있는 것 Computer Systems : A Programmer 's Perspective (2nd Edition) 입니다.

이 책의 설명은 다음과 같습니다.

컴퓨터 과학이나 컴퓨터 공학을 공부하는 학생들은 컴퓨터 시스템을 구축 할 기회를 갖지 못할 것입니다. 반면, 대부분의 학생들은 거의 매일 컴퓨터를 사용하고 프로그래밍해야합니다. 컴퓨터 시스템 : 프로그래머의 관점은 이러한 아이디어가 응용 프로그램의 정확성, 성능 및 유틸리티에 어떻게 영향을 미치는지를 보여줌으로써 컴퓨터 시스템의 기초가되는 중요하고 지속적인 개념을 소개합니다. 텍스트의 실습 접근법 (포괄적 인 실습 세트 포함)은 학생들이 최신 컴퓨터 시스템의“실제”작동을 이해하고 컴파일러, 컴퓨터 아키텍처, 운영 체제, 그리고 네트워킹.


그것은 놀라운 책이다!!
Armando 2016 년

2

많은 작업이지만 Programming Language Pragmatics 가 바로 당신이 찾고있는 것일 수 있습니다. 이 책은 이론적으로는 주로 파싱과 컴파일 ( 프로그래밍을 실제로 배우고 싶은 사람들에게 필수적인 지식 )에 관한 것이며, 언어 개념이 저수준에서 진행되는 상황으로 어떻게 번역되는지 학습하게됩니다. 더 나은 방법은 한 번에 여러 언어에 대해 배우고 다른 언어가 실제로 어떻게 작동하는지 지능적으로 비교하고 대조 할 수 있다는 것입니다.

실제로 자료를 배우는 데 몇 달을 바칠 수 없다면 권유 할 수 없습니다. 그것은 단지 당신이 탈지하고 갑자기 깨달은 종류의 물건이 아닙니다. 그러나 당신이 진지하다면 나는 그것을 강력히 추천합니다.


2

생물학에서는 틀릴 지 모르지만 컴퓨터 과학에서는 "온톨 로니가 계통 발생을 되풀이합니다". 첫 번째 컴퓨터 이후 컴퓨터 아키텍처의 역사적 개요는 프로그래머의 관점에서 컴퓨터 아키텍처의 주제를 이해하는 좋은 방법입니다. 컴퓨터 디자인은 초기 디자인의 거의 모든 개선 사항입니다.

즉, 컴퓨터 과학 분야에서 제공하는 이론적 인 "컴퓨터 아키텍처"서적과 함께 오래된 시스템 설계를 완벽하게 연구하는 것이 좋습니다. 시스템 설계를 실제로 이해하고 소프트웨어를 작성하는 데 큰 도움이됩니다. 컴퓨터 시스템 아키텍처의 직관적 이해에는 많은 개념의 숙달이 필요합니다. 컴퓨터 아키텍처가 크기와 범위에서 관리하기 쉬울 때 다시 시작하면 더 나은 코드를 작성하려는 목표를 달성 할 수 있습니다.

(다른 사람이 언급 한 "위대한 코드 작성"책 시리즈는 훌륭해 보였으며, 이전에 한 권의 책에서 배웠던 aspersion을 제거하기 위해 내 질문을 편집했습니다. )

컴퓨터 아키텍처를 정말 잘 가르치는 것들 :

  1. 컴퓨터를 사용하기 시작한 이래 1980 년대부터 기계를 사람들에게 설명하고 시연하기위한 출발점으로 선택하고 싶습니다. 나는 commodore 64 프로그래머 용 레퍼런스 가이드를 사용하여 사람들에게 프로그래밍 지식과 컴퓨터 아키텍처 지식이 서로 만나는 곳을 보여주었습니다. 그러한 책과 PC에서 실행되는 commodore 64 에뮬레이터를 사용하여 물건을 시험해 볼 수 있습니다. 1980 년대의 고전적인 컴퓨터 아키텍처의 컴퓨터 시스템이 실제로 어떻게 구축되었는지에 대해 배우게됩니다. 필자의 견해로는, 실제 사례를 제대로 구현하지 못한 12 가지 이론적 모델보다 하나의 구체적인 예가 시작하기에 더 좋은 곳이다. 레지스터가 무엇인지, ALU가 무엇인지, 버스가 무엇인지, 시계가 무엇인지 알고 있다면, 1980 년대 이전 설계에서 사용 된 신호 시스템을 통해 인텔의 "샌디 브리지 아키텍처"와 같은 최근의 내용을 이해하는 데 필요한 기본 사항을 제공합니다. 역사적으로, 위키 백과에서 원본을 살펴보십시오 (예 : "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.