ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • 컴퓨터 시스템 딥 다이브 : C 언어부터 어셈블리, 아키텍처, OS까지 한 꺼풀씩 벗겨보는 컴퓨터 시스템
    코딩_Coding_Dev책_정리/C++&_C언어_Coding_Book 2023. 12. 27. 16:17
    728x90

    eBook)
    컴퓨터 시스템 딥 다이브 : C 언어부터 어셈블리, 아키텍처, OS까지 한 꺼풀씩 벗겨보는 컴퓨터 시스템 [ PDF ]
    수잰 J. 매슈스,티아 뉴홀,케빈 C. 웹 저 / 김모세,권성환 역 | 한빛미디어 | 2024년 01월 08일  
    https://m.yes24.com/p/124429581

    [전자책] 컴퓨터 시스템 딥 다이브 - 예스24

    코드 아래 숨겨진 아름답고 놀라운 컴퓨터 아키텍처 대탐험컴퓨터 시스템은 바다와 비슷합니다. 현대 생명의 기원이 원시 바다 깊은 곳에서 시작됐다고 여겨지듯, 현대의 프로그래밍도 초기 컴

    m.yes24.com








    종이책
    컴퓨터 시스템 딥 다이브 : C 언어부터 어셈블리, 아키텍처, OS까지 한 꺼풀씩 벗겨보는 컴퓨터 시스템
    수잰 J. 매슈스,티아 뉴홀,케빈 C. 웹 저 / 김모세,권성환 역 | 한빛미디어 | 2023년 12월 30일  
    https://m.yes24.com/Goods/Detail/124301248

    컴퓨터 시스템 딥 다이브 - 예스24

    코드 아래 숨겨진 아름답고 놀라운 컴퓨터 아키텍처 대탐험컴퓨터 시스템은 바다와 비슷합니다. 현대 생명의 기원이 원시 바다 깊은 곳에서 시작됐다고 여겨지듯, 현대의 프로그래밍도 초기 컴

    m.yes24.com



    • 목차
    Chapter 0 시작하며
    
    _0.1 컴퓨터 시스템이란 무엇인가?
    _0.2 현대의 컴퓨터 시스템은 어떤 모습일까?
    _0.3 이 책에서 배울 내용
    _0.4 이 책을 시작하기에 앞서
    __0.4.1 리눅스, C 및 GNU 컴파일러
    __0.4.2 기타 표기법과 설명선
    
    PART I C 프로그래밍 언어
    
    Chapter 1 C 프로그래밍 기초
    
    _1.1 C 프로그래밍 시작하기
    __1.1.1 C 프로그램의 컴파일과 실행
    __1.1.2 변수와 C의 숫자 타입
    __1.1.3 C의 데이터 타입
    _1.2 입력과 출력
    __1.2.1 printf
    __1.2.2 scanf
    _1.3 조건문과 반복문
    __1.3.1 C의 부울값
    __1.3.2 C의 반복문
    _1.4 함수
    __1.4.1 스택
    _1.5 배열과 문자열
    __1.5.1 배열 소개
    __1.5.2 배열 접근 방법
    __1.5.3 배열과 함수
    __1.5.4 문자열과 C 문자열 라이브러리 소개
    _1.6 구조체
    __1.6.1 구조체 타입의 정의
    __1.6.2 구조체 타입의 변수 선언
    __1.6.3 필드 값 접근
    __1.6.4 함수에 구조체 전달
    _1.7 정리
    
    Chapter 2 C 프로그래밍 심화
    
    _2.1 프로그램 메모리와 범위
    _2.2 C의 포인터 변수
    __2.2.1 포인터 변수
    _2.3 포인터와 함수
    _2.4 동적 메모리 할당
    __2.4.1 힙 메모리
    __2.4.2 malloc과 free
    __2.4.3 동적 할당된 배열과 문자열
    __2.4.4 힙 메모리와 함수를 위한 포인터
    _2.5 C의 배열
    __2.5.1 1차원 배열
    __2.5.2 2차원 배열
    _2.6 문자열과 문자열 라이브러리
    __2.6.1 정적으로 할당된 문자열(문자 배열)
    __2.6.2 동적으로 문자열 할당
    __2.6.3 C 문자열과 문자를 조작하기 위한 라이브러리
    _2.7 C 구조체
    __2.7.1 C struct 타입 리뷰
    __2.7.2 포인터와 구조체
    __2.7.3 구조체의 포인터 필드
    __2.7.4 구조체 배열
    __2.7.5 자기 참조 구조체
    _2.8 C의 입출력(표준 및 파일)
    __2.8.1 표준 입출력
    __2.8.2 파일 입출력
    __2.8.3 C에서 텍스트 파일 사용
    __2.8.4 stdio.h의 표준 및 파일 I/O 함수
    _2.9 일부 고급 C 기능
    __2.9.1 switch 구문
    __2.9.2 커맨드 라인 인수
    __2.9.3 void * 타입과 타입 리캐스팅
    __2.9.4 포인터 산술
    __2.9.5 C 라이브러리: 사용, 컴파일, 연결
    __2.9.6 나만의 C 라이브러리 작성 및 사용
    __2.9.7 C를 어셈블리로 컴파일
    _2.10 정리
    
    Chapter 3 C 디버깅 도구
    
    _3.1 GDB로 디버깅
    __3.1.1 GDB 시작하기
    __3.1.2 GDB 예시
    _3.2 GDB 명령어의 세부 사항
    __3.2.1 GDB의 키보드 단축키
    __3.2.2 자주 쓰는 GDB 명령어
    _3.3 발그린드로 메모리 디버깅
    __3.3.1 힙 메모리 접근 오류가 있는 예시 프로그램
    __3.3.2 Memcheck를 사용하는 방법
    _3.4 고급 GDB 기능
    __3.4.1 GDB와 make
    __3.4.2 실행 중인 프로세스에 GDB 연결
    __3.4.3 포크에서 프로세스 따라가기
    __3.4.4 시그널 제어
    __3.4.5 DDD 설정 및 버그 수정
    _3.5 어셈블리 코드 디버깅
    __3.5.1 GDB를 사용한 바이너리 코드 검사
    __3.5.2 DDD를 사용한 어셈블리 디버깅
    __3.5.3 GDB 어셈블리 디버깅 명령어 및 예시
    __3.5.4 어셈블리 디버깅에서 자주 사용하는 명령어 요약
    _3.6 GDB로 멀티스레드 프로그램 디버깅
    __3.6.1 GDB와 Pthreads
    __3.6.2 GDB 스레드 관련 명령어
    __3.6.3 예시
    _3.7 정리
    
    PART II 컴퓨터 시스템 기초
    
    Chapter 4 바이너리와 데이터 표현
    
    _4.1 숫자의 밑과 부호가 없는 정수
    __4.1.1 10진수
    __4.1.2 부호가 없는 2진수
    __4.1.3 16진수
    __4.1.4 저장 공간 제한
    _4.2 진수 변환
    __4.2.1 2진수와 16진수 변환
    __4.2.2 10진수로 변환
    __4.2.3 10진수를 변환
    _4.3 부호가 있는 2진수 정수
    __4.3.1 부호가 있는 수
    __4.3.2 2의 보수
    _4.4 2진 정수 산술 연산
    __4.4.1 덧셈
    __4.4.2 뺄셈
    __4.4.3 곱셈과 나눗셈
    _4.5 정수 오버플로
    __4.5.1 총 주행 거리계 비유
    __4.5.2 2진수 정수 오버플로
    __4.5.3 오버플로 요약
    __4.5.4 오버플로에 따른 결과
    _4.6 비트와이즈 연산자
    __4.6.1 비트와이즈 AND
    __4.6.2 비트와이즈 OR
    __4.6.3 비트와이즈 XOR
    __4.6.4 비트와이즈 NOT
    __4.6.5 비트 시프트
    _4.7 정수 바이트 오더
    _4.8 2진수에서의 실수
    __4.8.1 고정 소수점 표현
    __4.8.2 부동 소수점 표현
    __4.8.3 올림의 영향
    _4.9 정리
    
    Chapter 5 컴퓨터 아키텍처
    
    _5.1 현대 컴퓨팅 아키텍처의 기원
    __5.1.1 튜링 머신
    __5.1.2 초기의 전기 컴퓨터
    __5.1.3 그래서 폰 노이만은 무엇을 알았나?
    _5.2 폰 노이만 아키텍처
    __5.2.1 CPU
    __5.2.2 처리 장치
    __5.2.3 제어 장치
    __5.2.4 기억 장치
    __5.2.5 입력 및 출력(I/O) 장치
    __5.2.6 폰 노이만 머신
    _5.3 논리 게이트
    __5.3.1 기본 논리 게이트
    __5.3.2 그 외 논리 게이트
    _5.4 회로
    __5.4.1 산술 및 논리 회로
    __5.4.2 제어 회로
    __5.4.3 저장 회로
    _5.5 프로세서 만들기: 종합하기
    __5.5.1 ALU
    __5.5.2 레지스터 파일
    __5.5.3 CPU
    _5.6 프로세서의 프로그램 명령 실행
    __5.6.1 클럭 주도 실행
    __5.6.2 정리: 완전한 컴퓨터에서의 CPU
    _5.7 파이프라이닝: CPU를 더 빠르게
    _5.8 고급 파이프라인 명령 고려 사항
    __5.8.1 데이터 해저드
    __5.8.2 제어 해저드
    _5.9 미래를 내다보기: 오늘날의 CPU
    __5.9.1 명령 수준 병렬화
    __5.9.2 멀티코어 및 하드웨어 멀티스레딩
    __5.9.3 예시 프로세서
    _5.10 정리
    
    PART III 어셈블리 프로그래밍
    
    Chapter 6 C 아래로: 어셈블리에 뛰어들기
    
    _6.1 어셈블리 학습의 이점
    __6.1.1 가치 있는 프로그램의 세부 사항을 감추는 고수준의 추상화
    __6.1.2 리소스가 제한돼 컴파일러를 사용할 수 없는 컴퓨팅 시스템
    __6.1.3 취약점 분석
    __6.1.4 시스템 수준 소프트웨어에서 중요한 코드 순서
    _6.2 후속 장들에서 학습할 내용
    
    Chapter 7 64비트 X86 어셈블리(X86-64)
    
    _7.1 어셈블리 살펴보기: 기본
    __7.1.1 레지스터
    __7.1.2 고급 레지스터 표기
    __7.1.3 명령 구조
    __7.1.4 피연산자가 포함된 예시
    __7.1.5 명령 접미사
    _7.2 흔히 사용하는 명령
    __7.2.1 한층 구체적인 예시
    _7.3 산술 명령
    __7.3.1 비트 시프트 명령
    __7.3.2 비트와이즈 명령
    __7.3.3 부하 효과 주소 명령
    _7.4 조건부 제어와 반복문
    __7.4.1 사전 준비
    __7.4.2 어셈블리에서의 if 구문
    __7.4.3 어셈블리에서의 for 반복문
    _7.5 어셈블리에서의 함수
    __7.5.1 함수 매개변수
    __7.5.2 예시 추적
    __7.5.3 main 추적
    _7.6 재귀
    __7.6.1 애니메이션: 콜 스택 변화
    _7.7 배열
    _7.8 행렬
    __7.8.1 연속적인 2차원 배열
    __7.8.2 비연속적 행렬
    _7.9 어셈블리에서의 구조체
    __7.9.1 데이터 정렬과 구조체
    _7.10 실제 사례: 버퍼 오버플로
    __7.10.1 유명한 버퍼 오버플로 악용 사례
    __7.10.2 살펴보기: 추측 게임
    __7.10.3 자세히 살펴보기
    __7.10.4 버퍼 오버플로: 첫 번째 시도
    __7.10.5 현명한 버퍼 오버플로: 두 번째 시도
    __7.10.6 버퍼 오버플로에서 보호하기
    
    Chapter 8 32비트 X86 어셈블리(Ia32)
    
    Chapter 9 ARM 어셈블리
    
    Chapter 10 어셈블리 핵심 교훈
    
    _10.1 공통 특징
    _10.2 더 읽어보기
    
    PART IV 성능 최적화 및 관리
    
    Chapter 11 저장소와 메모리 계층
    
    _11.1 메모리 계층
    _11.2 저장소
    __11.2.1 1차 저장소
    __11.2.2 2차 저장소
    _11.3 지역성
    __11.3.1 코드에서의 지역성 예
    __11.3.2 지역성부터 캐시까지
    __11.3.3 시간적 지역성
    __11.3.4 공간적 지역성
    _11.4 CPU 캐시
    __11.4.1 다이렉트 맵트 캐시
    __11.4.2 캐시 실패 및 어소시에이티브 설계
    __11.4.3 셋 어소시에이티브 캐시
    _11.5 캐시 분석과 발그린드
    __11.5.1 이론적 분석과 벤치마킹
    __11.5.2 실세계에서의 캐시 분석: 캐시그린드
    _11.6 예측하기: 멀티코어 프로세서에서의 캐싱
    __11.6.1 캐시 일관성
    __11.6.2 MSI 프로토콜
    __11.6.3 캐시 일관성 프로토콜 구현
    __11.6.4 멀티코어 캐싱과 관련된 더 많은 정보
    _11.7 정리
    
    Chapter 12 코드 최적화
    
    _12.1 코드 최적화 첫 단계: 코드 프로파일링
    __12.1.1 콜그린드를 사용한 프로파일링
    __12.1.2 루프 불변 코드 이동
    _12.2 그 외 컴파일러 최적화
    __12.2.1 함수 인라이닝
    __12.2.2 루프 언롤링
    _12.3 메모리 고려 사항
    __12.3.1 루프 상호 교환
    __12.3.2 지역성을 개선하는 컴파일러 최적화: 분열과 융합
    __12.3.3 massif를 사용한 메모리 프로파일링
    _12.4 핵심 교훈
    __12.4.1 좋은 데이터 구조와 알고리즘 선택하기
    __12.4.2 가능한 표준 라이브러리 함수 사용하기
    __12.4.3 느낌이 아닌 데이터에 기반한 최적화
    __12.4.4 복잡한 코드는 여러 함수로 분할하기
    __12.4.5 코드 가독성을 우선시하기
    __12.4.6 메모리 사용에 주의하기
    __12.4.7 컴파일러는 계속해서 개선되고 있다
    
    Chapter 13 운영 체제
    
    _13.1 OS의 동작과 실행
    __13.1.1 OS 부팅
    __13.1.2 인터럽트와 트랩
    _13.2 프로세스
    __13.2.1 멀티프로그래밍과 컨텍스트 스위칭
    __13.2.2 프로세스 상태
    __13.2.3 프로세스 생성 및 파기
    __13.2.4 fork
    __13.2.5 exec
    __13.2.6 exit와 wait
    _13.3 가상 메모리
    __13.3.1 메모리 주소
    __13.3.2 가상 주소를 물리 주소로 변환
    __13.3.3 페이징
    __13.3.4 메모리 효율성
    _13.4 프로세스 간 통신
    __13.4.1 시그널
    __13.4.2 메시지 전달
    __13.4.3 공유 메모리
    _13.5 정리 및 기타 OS 기능
    
    PART V 병렬 프로그래밍
    
    Chapter 14 멀티코어 시대의 공유 메모리 활용
    
    _14.1 멀티코어 시스템 프로그래밍
    __14.1.1 멀티코어 시스템이 프로세스 실행에 미치는 영향
    __14.1.2 스레드를 사용한 프로세스 실행 가속화
    _14.2 첫 번째 멀티스레드 프로그램 작성
    __14.2.1 스레드 생성과 조인
    __14.2.2 스레드 함수
    __14.2.3 코드 실행
    __14.2.4 스칼라 곱셈 다시 살펴보기
    __14.2.5 스칼라 곱셈 계산: 다중 인수
    _14.3 스레드 동기화
    __14.3.1 상호 배제
    __14.3.2 세마포어
    __14.3.3 기타 동기화 구조체
    _14.4 병렬 프로그램의 성능 측정
    __14.4.1 병렬 프로그램의 성능
    __14.4.2 더 살펴볼 주제
    _14.5 캐시 일관성과 거짓 공유
    __14.5.1 멀티코어 시스템에서의 캐시
    __14.5.2 거짓 공유
    __14.5.3 거짓 공유 수정
    _14.6 스레드 안전성
    __14.6.1 스레드 안전성 문제 해결
    _14.7 OpenMP를 사용한 암시적 스레딩
    __14.7.1 프라그마
    __12.7.2 헬로 스레딩: OpenMP 버전
    __14.7.3 더 복잡한 예시: OpenMP에서의 CountSort
    __14.7.4 OpenMP에 대해 자세히 알아보기
    _14.8 정리
    __14.8.1 주요 요점
    __14.8.2 더 읽어보기
    
    Chapter 15 기타 병렬 시스템 및 병렬 프로그래밍 모델
    
    _15.1 이종 컴퓨팅: 하드웨어 가속기, 범용 GPU 컴퓨팅, CUDA
    __15.1.1 하드웨어 가속기
    __15.1.2 GPU 아키텍처 개요
    __15.1.3 GPGPU 컴퓨팅
    __15.1.4 CUDA
    __15.1.5 기타 GPGPU 프로그래밍 언어
    _15.2 분산 메모리 시스템, 메시지 전달 및 MPI
    __15.2.1 병렬 및 분산 처리 모델
    __15.2.2 통신 프로토콜
    __15.2.3 메시지 전달 인터페이스
    __15.2.4 MPI 헬로 월드
    __15.2.5 MPI 스칼라 곱셈
    __15.2.6 분산 시스템의 과제
    _15.3 엑사스케일 그 이상: 클라우드 컴퓨팅, 빅 데이터, 그리고 컴퓨팅의 미래
    __15.3.1 클라우드 컴퓨팅
    __15.3.2 맵리듀스
    __15.3.3 미래를 바라보며: 기회와 도전






    해외원서
    Suzanne J. Matthews 및 2개 추가
    Dive Into Systems: A Gentle Introduction to Computer Systems
    https://www.amazon.com/-/ko/gp/aw/d/B09B1MM2SS/ref=tmm_kin_swatch_0?ie=UTF8&qid=&sr=

    Dive Into Systems: A Gentle Introduction to Computer Systems

    Dive Into Systems: A Gentle Introduction to Computer Systems

    www.amazon.com












    반응형
Designed by Tistory.