컴퓨터 시스템 개론
-
Chapter 8 : Machine-Level Programming 4 (Data)컴퓨터 시스템 개론 2022. 4. 25. 16:45
Array Allocation T A[L] 이라고 하면 T는 데이터 type이고 L은 배열의 길이입니다. 메모리에 L * sizeof(T) byte를 연속적으로 할당함으로써 구현됩니다. 배열의 index의 접근은 배열의 첫번째 요소를 가리키는 포인터인 A의 특정 index 값을 더한 주소에 접근하는 방식으로 구현됩니다. A는 배열의 첫번째 요소를 가리키는 자료형이 T*인 포인터입니다. Array Access EX) Allocate (할당) 다음 예시는 배열들이 연속적인 20 byte 씩 할당 받았습니다. Access (접근) z[digit]의 값을 얻는 함수입니다. 레지스터 %rdi에는 배열의 시작 주소가 들어갑니다. 레지스터 %rsi에는 배열의 index가 들어갑니다. 우리가 원하는 주소값은 %rdi ..
-
Chapter 7 : Machine-Level Programming 3 (Procedure)컴퓨터 시스템 개론 2022. 4. 25. 12:31
Mechanisms in Procedures 프로시저 P가 프로시저 Q를 호출하고, Q가 실행되고 P로 다시 return됩니다. 1. Passing control PC는 Q의 코드의 시작 주소로 설정되고, Q를 호출한 후에 P의 명령어로 설정합니다. 2. Passing Data P는 하나 이상의 인자를 Q에게 제공하고, Q는 P에게 값을 다시 return합니다. 3. Memory management Q는 지역변수에 대한 공간을 할당할 필요가 있습니다. x86-64 Stack x86-64에서는 %rsp 레지스터가 현재 stack의 가장 낮은 주소 (Top의 주소)를 저장합니다. stack의 데이터가 쌓일 때는 낮은 주소 방향으로 쌓이도록 되어있습니다. 따라서 데이터를 Push할 때 %rsp의 값을 8만큼 ..
-
Chapter 6 : Machine-Level Programming 2 (Control)컴퓨터 시스템 개론 2022. 4. 6. 21:30
Processor State (x86-64) 실행 중인 프로그램에 대한 정보는 크게 4개로 분리할 수 있습니다. 1. Temporary data(임시 데이터) %rax, %rbx 등 범용 레지스터에 저장되있습니다. 2. Location of runtime stack (런타임 스택의 포인터 저장) %rsp 레지스터 3. Location of current code control point (다음 실행할 명령어의 메모리주소를 저장함으로써 현재의 제어위치) %rip 레지스터 (PC 레지스터) 4. Status of recent tests (조건 분기/이동 에 사용되는 상태값을 저장) condition code(컨디션 코드) (CF, ZF, SF, OF) 레지스터 Condition Codes : Implicit..
-
Chapter 5 : Machine-Level Programming 1 (Basis)컴퓨터 시스템 개론 2022. 3. 30. 21:06
Compilation System C(high-level)로 작성된 프로그램이 CPU가 읽을 수 있는 binary cord로 변환되는 과정입니다. Turning C into Object Code 파일 p1.c와 p2.c를 리눅스 쉘에서 컴파일한다고 가정해보자 리눅스 명령어에 gcc -Og -o p p1.c p2.c 를 입력합니다. gcc는 gcc 컴파일러를 가리킵니다. -Og는 최적화의 단계를 적용하는 컴파일러를 가리킵니다. -O1, -O2, -O3 까지 있으며 각각 최적화 LEVEL 1, 2, 3를 의미합니다. LEVEL이 높아질 수 록 최적화의 정도가 높아집니다. 하지만 O3 정도되면 최종 실행파일이 더빠르게 실행되지만 source code와 machine code의 관계를 이해하기 어렵습니다. 따라..
-
Chapter 3 : Float컴퓨터 시스템 개론 2022. 3. 27. 18:24
1011(Integer part).101(Decimal part) 소수점 기준으로 왼쪽은 정부부분, 오른쪽은 실수부분입니다. ex) 5 + 3/4 = 101.11(2) 2 + 7/8 = 10.111(2) 1 + 7/16 = 1.0111(2) Floating Point(부동 소수점) Representation 좀더 정확한 수를 표현하기 위함입니다. 부동소수점 표현 방식 실수형 (부동 소수점) 실수형 float를 공부하다 부동소수점 개념이 나와서 한번 이해하는대로 정리해 보려합니다. 먼저 예를 들어 실수 263.3을 2진수로 나타내 보면 정수 부분 263 = 100000111 실수 부분 0.3 = 0.01(0011)(0011)(001 riveroilstone.tistory.com 맨 위에 있는 것이 보통 f..
-
Chapter 2 (Bits, Bytes, and Integers)컴퓨터 시스템 개론 2022. 3. 22. 01:02
Binary Representation Bit : 두가지 형태로 나타냅니다 (0 or 1) Representing Information ... Encoding Byte Values Byte = 8 bits Binary : 00000000(2) to 11111111(2) Decimal : 0(10) to 255(10) Hexadecimal : 00(16) to FF(16) 우리가 C언어 에서 보는 0x 또는 0X로 시작하는 수들은 Hexadecimal 표기법입니다. 0xFA1D378B = 0Xfa1d37b 즉 대소문자 구분이 없습니다. 예를들어 10진수 314156을 16진법 표기법으로 나타내면 314156 = 19634 * 16 + 12 (C) 19634 = 1227 * 16 + 2 (2) 1227 = ..
-
chapter 1컴퓨터 시스템 개론 2022. 3. 5. 16:19
모든 작성물은 "Computer system : A programmer's perspective", 3rd edition, Randal E. Bryant and David R. O'Hallaron 책을 참조하여 작성했습니다. 컴퓨터 시스템은 응용프로그램을 실행시키기 위해 하드웨어와 시스템 소프트웨어에 의해 구성됩니다. hello.c의 표현으로 다음과 같은 근본적인 아이디어를 얻을 수 있습니다. 모든 시스템에 있는 정보(디스크 파일, 메모리에 저장된 사용자 데이터, 네트워크를 통해 전달된 데이터)들은 bit묶음으로 표시 됩니다. 서로 다른 데이터 개체를 구별하는 유일한 것은 우리가 보는 것입니다. 예를 들어 다른 개체에서 동일한 일련의 byte들은 정수, 부동소수점 숫자, 문자열 또는 기계명령어(machi..