컴퓨터 시스템 : CSAPP 3장 정리 - 3.11 부동소수점 코드
·
크래프톤 정글 (컴퓨터 시스템: CSAPP)/3장 프로그램의 기계수준 표현
📘 3.11 Floating-Point Code부동소수점 연산은 일반적인 정수 연산과는 달리 복잡한 구조와 특별한 규칙을 따릅니다. 이 절의 도입부에서는 다음과 같은 핵심 요소들을 설명한다:1. 부동소수점 아키텍처란?부동소수점 아키텍처는 다음 네 가지 측면에서 프로그램이 부동소수점 데이터를 어떻게 다루는지를 규정한다:저장 및 접근 방법: 대부분 레지스터를 사용해 저장하고 접근함.작동하는 명령어 세트: 특정 명령어들이 부동소수점 데이터를 처리함.함수 호출 시 인자 및 반환값 처리 규칙: 예를 들어, 부동소수점 인자는 %xmm0~%xmm7에 저장됨.레지스터 저장 규칙: 어떤 레지스터가 caller-saved 또는 callee-saved인지 규정.2. 역사적 배경x86-64에서 부동소수점 연산은 SIMD (..
컴퓨터 시스템 : CSAPP 3장 정리 - 3.10 기계수준 프로그램에서 제어와 데이터의 결합
·
크래프톤 정글 (컴퓨터 시스템: CSAPP)/3장 프로그램의 기계수준 표현
📦 3.10 머신 수준 프로그램에서 제어와 데이터 결합하기Combining Control and Data in Machine-Level Programs이 장에서는 제어 흐름(control flow)과 데이터 구조(data structures)가 머신 수준에서 어떻게 상호작용하며 동작하는지를 탐구한다. 지금까지는 이를 별도로 배웠지만, 실제 프로그램에서는 두 요소가 복잡하게 얽혀 있다.주요 주제:포인터(pointer)의 심화 이해 – C 언어에서 가장 강력하면서도 혼란스러운 개념 중 하나.gdb 디버거 사용법 – 머신 수준 프로그램의 실행 과정을 자세히 들여다보는 도구.버퍼 오버플로우 – 보안 취약점의 주요 원인 중 하나.스택 프레임의 크기가 실행마다 달라지는 경우의 구현 방식.🧠 3.10.1 포인터 ..
컴퓨터 시스템 : CSAPP 3장 정리 - 3.9 이기종 자료구조
·
크래프톤 정글 (컴퓨터 시스템: CSAPP)/3장 프로그램의 기계수준 표현
🔷 3.9 이질적 자료구조 (Heterogeneous Data Structures)C 언어는 서로 다른 타입의 데이터를 하나의 단위로 묶는 두 가지 방법을 제공한다:struct (구조체) – 여러 타입의 객체를 연속된 메모리 공간에 저장하여 하나의 단위로 사용union (공용체) – 여러 타입의 객체가 동일한 메모리 공간을 공유하도록 함이러한 구조는 배열과 달리 단일 타입만을 반복하는 것이 아니라, 다양한 타입을 조합할 수 있게 해 준다. 객체지향 언어의 클래스(class)와는 다르지만, 구조체는 객체 정보를 캡슐화하는 데 가장 가까운 C의 수단이다​.🔹 3.9.1 구조체 (Structures)📌 기본 개념구조체(struct)는 다양한 타입의 필드를 하나의 단위로 묶는 데이터 타입이다.struct ..
컴퓨터 시스템 : CSAPP 3장 정리 - 3.8 배열의 할당과 접근 Part.2
·
크래프톤 정글 (컴퓨터 시스템: CSAPP)/3장 프로그램의 기계수준 표현
🔍 지금까지의 요약더보기🔹 3.8 도입: 배열과 주소 계산C 언어에서 배열은 연속적인 메모리 공간에 할당됨.배열 이름은 배열 시작 주소(포인터)처럼 동작.A[i]는 실제로 *(A + i)로 처리되며, 주소 계산은 xA + L*i로 단순화됨.이 단순한 구조는 어셈블리 주소 계산 명령어(D(Rb, Ri, S))와 자연스럽게 매핑됨.🔹 3.8.1 기본 원리 (Basic Principles)T A[N] 형태의 배열은 총 N * L 바이트를 연속적으로 할당.각 배열 요소 A[i]의 주소는 xA + i * L로 계산됨.배열 인덱싱은 어셈블리에서 스케일 인덱스를 활용한 주소 계산으로 구현됨 (예: movl (%rdx,%rcx,4), %eax).🔹 3.8.2 포인터 연산 (Pointer Arithmetic)포인..
컴퓨터 시스템 : CSAPP 3장 정리 - 3.8 배열의 할당과 접근 Part.1
·
크래프톤 정글 (컴퓨터 시스템: CSAPP)/3장 프로그램의 기계수준 표현
3.8 배열의 할당과 접근(Array Allocation and Access)이 절은 배열이 메모리에 어떻게 배치되고 접근되는지, 그리고 어셈블리 코드로 어떻게 변환되는지를 중점적으로 설명한다. 배열은 C 언어에서 스칼라 데이터를 모아 하나의 집합적인 자료형으로 만들 수 있는 수단이다. C는 배열을 아주 단순한 방식으로 구현하며, 이를 통해 기계어로의 변환도 간단해지는 장점이 있다.🔷 3.8.1 배열의 기본 원리 (Basic Principles)📌 핵심 아이디어배열은 C 언어에서 메모리를 연속적으로 할당받는 자료구조이다. 컴파일러가 배열을 다룰 때는 포인터 + 오프셋 방식으로 매우 단순하게 처리한다.배열은 포인터처럼 행동하지만, 실제로는 정적 메모리 블록을 가리키는 기준 주소(base address)..
컴퓨터 시스템 : CSAPP 3장 정리 - 3.7 프로시저 Part.2
·
크래프톤 정글 (컴퓨터 시스템: CSAPP)/3장 프로그램의 기계수준 표현
🔍 지금까지의 요약3.7 프로시저 도입: 프로시저는 제어 이동, 데이터 전달, 메모리 관리 등 세 가지 핵심 역할을 담당함.3.7.1 런타임 스택: 각 함수 호출 시 스택 프레임이 생성되며, 복귀 주소와 로컬 변수, 보존 레지스터 등을 저장.3.7.2 제어의 이동: call 명령어로 제어를 이동하고 ret 명령어로 원래 위치로 복귀. 복귀 주소는 스택에 저장됨.3.7.3 데이터 전송: 최대 6개의 인자는 레지스터로 전달되고, 초과분은 스택을 사용. 반환값은 %rax를 통해 전달됨.3.7.4 로컬 저장소(Local Storage on the Stack)지금까지 본 대부분의 프로시저 예제들은 로컬 저장소가 따로 필요하지 않았고, 모든 데이터가 레지스터만으로 처리될 수 있었다. 하지만 다음과 같은 경우에는 ..
컴퓨터 시스템 : CSAPP 3장 정리 - 3.7 프로시저 Part.1
·
크래프톤 정글 (컴퓨터 시스템: CSAPP)/3장 프로그램의 기계수준 표현
🌟 3.7장: 프로시저란 무엇인가?프로시저는 컴퓨터 프로그램에서 어떤 일을 "묶어서" 해주는 작은 기계 같은 것이다. 예를 들어, "사과 3개를 깎는 방법"을 한 번에 설명할 수 있으면, 그걸 다른 날에도 똑같이 쓸 수 있을 것이다. 그게 바로 프로시저다.💡 왜 좋은가?여러 번 같은 일을 하지 않도록 함.복잡한 내용을 숨기고, "무엇을 하는지"만 쉽게 보여줄 수 있음.예시로, 엄마가 "아침에 학교 갈 준비 해!"라고 할 때, 학교 갈 준비 안에는세수하기옷 갈아입기가방 챙기기밥 먹기등이 포함되어 있을 것인데 이렇게 많은 일을 하나의 명령으로 묶은 게 바로 프로시저다.프로시저는 소프트웨어에서 핵심적인 추상화(abstraction) 개념이다. 특정 기능을 수행하는 코드를 인수들과 함께 하나의 단위로 묶어놓..
컴퓨터 시스템 : CSAPP 3장 정리 - 3.6 장 제어문 Part.2
·
크래프톤 정글 (컴퓨터 시스템: CSAPP)/3장 프로그램의 기계수준 표현
3.6.5 - 조건부 분기를 조건 제어로 구현하기 (Implementing Conditional Branches with Conditional Control)🎯 조건부 분기를 조건 제어로 구현한다는 건?우리 눈에 보이는 C 코드에서는 if, else 같은 조건문이 있다. 컴퓨터는 이걸 어셈블리 코드에서 점프(jump) 명령어를 써서 구현한다.👨‍🏫 예시 C 코드long absdiff_se(long x, long y) { if (x 여기서 lt_cnt랑 ge_cnt는 "x가 y보다 작을 때"와 "크거나 같을 때"를 센다는 의미다.🧱 이걸 어셈블리로 바꾸면?컴파일러는 이렇게 바꾼다.cmpq %rsi, %rdi ; x = y면 .L2로 점프addq $1, lt_cnt(%rip); lt_c..
컴퓨터 시스템 : CSAPP 3장 정리 - 3.6 장 제어문 Part.1
·
크래프톤 정글 (컴퓨터 시스템: CSAPP)/3장 프로그램의 기계수준 표현
📘 3장 6절 도입부: "제어(컨트롤)"우리가 컴퓨터한테 “이거 해!” 하고 명령을 내릴 때, 컴퓨터는 순서대로 차례차례 그 명령들을 따라 한다. 그런데 어떤 때는 "만약 이 조건이 맞으면 이걸 하고, 아니면 저걸 해!"라고 조건을 걸 수도 있다. 마치 게임에서 “보스를 이기면 다음 스테이지로 가고, 아니면 다시 도전하기” 같은 것이다.이렇게 "조건에 따라 행동을 다르게 하기"를 제어 흐름(control flow)이라고 한다. 그리고 컴퓨터는 점프(jump)라는 특별한 명령을 써서 이 흐름을 바꾼다. “여기서 저기로 점프!”라고 말이다.🧠 3.6.1절 - 조건 코드 (Condition Codes): 컴퓨터가 생각하는 방법컴퓨터는 계산을 한 다음, 그 결과에 대해서 “이건 0인가?”, “음수인가?”, ..
컴퓨터 시스템 : CSAPP 3장 정리 - 3.5 장 산술 및 논리 연산
·
크래프톤 정글 (컴퓨터 시스템: CSAPP)/3장 프로그램의 기계수준 표현
📘 3.5장 도입: 산술 및 논리 연산🎯 이 장에서 무엇을 배우는가?이 장에서는 컴퓨터가 덧셈, 뺄셈, 곱셈 같은 산술 연산이나AND, OR, NOT 같은 논리 연산을 어떻게 수행하는지를 배운다.🧠 왜 중요한가?우리가 프로그램에서 a + b, x * 2, if (x > y) 같은 걸 사용한다. 컴퓨터는 이걸 아주 빠르게 계산하기 위해 레지스터, 비트 연산, 이진수 덧셈기 같은 도구를 사용한다. 이걸 어셈블리어에서 어떻게 처리하는지를 보면 컴퓨터가 똑똑하게 일하는 방식을 이해할 수 있다.📌 3.5.1 Load Effective Address (LEA, 유효 주소 적재)🤔 LEA란?leaq 명령어는 주소를 계산하지만, 메모리에서 값을 읽지는 않는다💡 예: leaq 7(%rdx, %rdx, 4), ..