CSAPP/1장 5

[CSAPP] 1-5 캐시가 중요하다.

전에 쓴 예시를 계속해서 이어보자면 hello 프로그램의 기계어 인스트럭션들은 본래 하드디스크에 저장되어 있다는 것을 알 수 있다. 프로그램이 로딩될 때 이들은 메인 메모리에서 프로세서로 복사된다. 프로세서가 프로그램을 실행할 때 인스트럭션들은 메인 메모리에서 프로세서로 복사된다. 즉, 프로그램이 디스크에 저장되어 있었지만, 메인 메모리로 복사되었다가 디스플레이 장치로 복사된다. 프로그래머 관점에서 보면, 이러한 여러 복사 과정들이 프로그램의 "실제 작업"을 느리게 하는 오버헤드다. 물리학의 법칙 때문에 더 큰 저장장치들은 보다 작은 저장장치들보다 느린 속도를 갖는다. 프로세스와 메모리의 속도 격차도 똑같다. 하지만 이 격차가 시간이 갈수록 더 벌어지는데 그 이유는 메인 메모리를 더 빠르게 동작하도록 만..

CSAPP/1장 2025.03.27

[CSAPP] 1-4 프로세서는 메모리에 저장된 인스트럭션을 읽고 해석한다.

우리가 지금까지 hello.c라는 소스 프로그램을 작성하고 컴파일 시스템에 의해 hello라는 실행가능한 목적파일로 번역되어 디스크에 저장되었습니다. 이 실행 파일을 유닉스 스템에서 실행하기 위해서 쉘이라는 응용프로그램에 그 이름을 입력합니다. 쉘은  커맨드라인 인터프리터로 프롬포트를 출력하고 명령어 라인을 입력 받아 그 명령을 실행합니다. 만일 명령어 라인이 내장 쉘 명령어가 아니면 쉘은 실행파일의 이름으로 판단하고 그 파일을 로딩해서 실행해 줍니다. 그래서 이 경우 쉘은 hello 프로그램을 로딩하고 실행한 뒤에 종료를 기다립니다. hello 프로그램은 메세지를 화면에 출력하고 종료합니다. 쉘은 프롬포트를 출력해 주고 다음 명령어라인을 기다립니다. 1-4-1 시스템의 하드웨어 조직 e.g. 우리가 만..

CSAPP/1장 2025.03.25

[CSAPP] 1-3 컴파일 시스템이 어떻게 동작하는지 이해하는 것은 중요하다

프로그래머가 컴파일 시스템이 어떻게 동작하는지 아는 것은 매우 중요하다. 프로그램 성능 최적화 하기 : 최신 컴파일러들은 복잡한 도구로 대개 우수한 코드를 생성한다. 프로그래머로서 효율적인 코드를 작성하기 위해서 컴파일러의 내부 동작을 알 필요는 없다. 그렇지만 C 프로그램 작성 시 올바른 판단을 하기 위해서는 기계어 수준 코드에 대한 기본적인 이해를 할 필요가 있으며, 컴파일러가 어떻게 C 문장들을 기계어 코드로 번역하는지 알 필요가 있다. e.g. 'switch 문은 if-else 문을 연속해서 사용하는 것보다 언제나 더 효율적일까?', '함수 호출 시 발생하는 오버헤드는 얼마나 되는가?', 'while 루프는 for 루프보다 더 효율 적일까?', '포인터 참조가 배열 인덱스보다 효율적일까?', '합..

CSAPP/1장 2025.03.25

[CSAPP] 1-2 프로그램은 다른 프로그램에 의해 다른 형태로 변역된다.

우리가 c언어로 hello.c(소스 파일 또는 소스 코드)를 만들고 컴퓨터 시스템에서 실행시키려면 각 C 문장들은 다른 프로그램에 의해 저급 기계어 인스트럭션들로 번역되어야 한다. 이 인스트럭션들은 실행가능 목적 프로그램이라고 하는 형태로 합쳐져서 바이러니 디스크 파일로 저장됩니다. 목적프로그램은 실행가능 목적 파일이라고도 부른다.컴파일러 드라이버는 유닉스 시스템에서 다음과 같이 소스파일에서 오브젝트 파일로 번역한다. 위에 그림과 같이 우리가 쓴 hello.c를 컴퓨터가 읽으려면 4단계를 거칩니다. 이 4단계를 실행하는 프로그램들(전처리기, 컴파일러, 어셈블러, 링커)을 합쳐서 컴파일 시스템이라고 부릅니다.  전처리 단계 : 전처리기(cpp)는 본래 C 프로그램을 #문자로 시작하는 디렉티브(directi..

CSAPP/1장 2025.03.25

[CSAPP] 1-1 정보는 비트와 컨텍스트로 이루어진다.

우리가 c언어로 코드를 짤 때 소스프로그램(소스 파일)으로 생성 된다. 예를 들어 우리가 아주 쉽게 파일 명을 hello.c라는 텍스트 파일에 내용을#include stdio.h>int main(){printf("hello world\n")return 0} 이런 식으로 적었다고 가정합니다. 그럼 소스 프로그램은 0 or 1로 표시된 비트들의 연속이며, 바이트라는 8비트 단위로 구성됩니다. 각 바이트는 프로그램의 텍스트 문자를 나타냅니다. 이 컴퓨터 시스템은 텍스트 문자를 아스키(ASCII) 포준을 사용하여 표시합니다. 위에 hello.c의 아스키 텍스트 표시입니다.

CSAPP/1장 2025.03.25