<aside>
🥕
Computer Systems - A Programmer’s Perspective
product.kyobobook.co.kr
</aside>
- 컴퓨터 시스템 = 하드웨어 + 시스템 소프트웨어
1.1 : 정보는 비트와 컨텍스트로 이루어진다
- 정보 = 비트 + 컨텍스트
- 비트 : 컴퓨터가 이해하는 최소 단위의 데이터
- 컨텍스트 : 비트들이 의미를 갖기 위해 어떻게 해석할 것인지에 대한 문맥
- 01000001 → 아스키코드 기준(문자 ‘A’), 정수(65), 이미지의 픽셀(색상 정보)
- 즉, 정보는 의미(컨텍스트)를 가진 데이터(비트)
- 대부분의 컴퓨터 시스템 : 텍스트 문자를 아스키 표준을 사용해 표시
- 아스키 표준은 각 문자를 바이트 길이의 정수 값으로 표현
- 소스 프로그램은 0 또는 1로 표시되는 비트들의 연속
- 텍스트 파일 : 오로지 아스키 문자들로만 이루어진 파일
- 사람이 읽을 수 있는 문자로 구성된 파일(.txt, .py, .csv)
- 소스 코드, 설정 파일, 로그 파일 등
- 바이너리 파일 : 텍스트 파일 외 다른 파일
- 사람이 읽기 어려운 이진 데이터로 구성(.exe, .png, .mp3, .pdf, .zip)
- 멀티미디어, 응용프로그램 실행 파일 등
추가 학습 내용
텍스트 파일과 이미지 파일도 결국 0과 1로 표현될텐데, 그럼 똑같은 비트 내용을 갖더라도 컨텍스트로 인해 다르게 해석되고 다르게 표현되는건가?
맞음. 같은 비트가 문자, 숫자, 픽셀 정보 등으로 표현될 수 있는 것처럼 비트 형태가 동일하다고 정보가 동일하다고 할 수 없음. 비트 형태가 동일해도 문맥(컨텍스트)가 다르기 때문에 다른 결과물로 여겨지는 것
1.2 : 프로그램은 다른 프로그램에 의해 다른 형태로 번역된다
- C언어로 작성된 프로그램의 경우,
시스템에서 실행하려면, 각 C문장들은 다른 프로그램들에 의해 저급 기계어 인스트럭션들로 번역됨
- 인스트럭션들은 **실행가능 목적 프로그램(실행가능 목적 파일)**이라는 형태로 합쳐짐 → 바이너리 디스크 파일로 저장
- 컴파일러 드라이버 : 소스파일에서 오브젝트 파일로 번역
- 4단계
- 전처리 단계 : 전처리기(ccp)가 C프로그램을 #문자로 시작하는 디렉티브에 따라 수정
- .i로 끝나는 새로운 C 프로그램(텍스트 파일) 생성
- 컴파일 단계 : 컴파일러(ccl)이 어셈블리어 프로그램(.s : 텍스트 파일) 저장
- 어셈블리 단계 : 어셈블러(as)가 기계어 인스트럭션으로 번역
- 재배치가능 목적 프로그램 형태로 묶어 목적파일에 저장(바이너리 파일)
- 링크 단계 : 링커 프로그램(ld)가 통합 작업을 수행
- 실행 가능 목적파일(실행파일)로 메모리에 적재되어 시스템에 의해 실행
1.3 : 컴파일 시스템이 어떻게 동작하는지 이해하는 것은 중요하다
프로그래머들이 어떻게 컴파일 시스템이 동작하는지 이해해야하는 중요한 이유들 :
- 프로그램 성능 최적화
- 링크 에러 이해
- 보안 약점 피하기 : 버퍼 오버플로우
1.4 : 프로세서는 메모리에 저장된 인스트럭션을 읽고 해석한다
- 소스 프로그램은 컴파일 시스템에 의해 실행 가능한 목적파일(실행파일)로 번역되어 디스크에 저장