교재: 컴퓨터 시스템 (Computer Systems - A Programmer's Perspective, Randal E. Bryant, David R. O'Hallaron, 제3판, 김형신 옮김, PEARSON, 2016.08.31)
컴퓨터 시스템은 하드웨어(HW)와 시스템 소프트웨어(SW)로 구성되며, 이들이 함께 작동하여 응용프로그램을 실행한다. 이 책은 HW와 SW의 요소들이 어떻게 동작하고 프로그램의 성능과 정확성에 어떤 영향을 주는지 이해하여 프로그램을 더 잘 개발할 수 있도록 하기 위해 쓰여졌다.
1.1 정보는 비트와 컨텍스트로 이루어진다
대부분의 컴퓨터 시스템은 텍스트 문자를 아스키(ASCII) 표준을 사용하여 표시한다. 아래 hello.c처럼 오로지 아스키 문자들로만 이루어진 파일들은 텍스트 파일이라고 부른다. 다른 모든 파일들은 바이너리 파일이라고 한다.
// hello.c 코드
#include <stdio.h>
int main() {
printf("Hello, World!\n");
return 0;
}
모든 시스템 내부의 정보(디스크 파일, 메모리상의 프로그램, 데이터, 네트워크를 통해 전송되는 데이터)는 비트(역자 주: 컴퓨터에서 정보를 표현하는 가장 작은 단위. 0과 1, 즉 두 가지 상태를 가질 수 있는 단순한 데이터 단위)들로 표시된다. 서로 다른 객체들을 구분하는 유일한 방법은 이들을 바라보는 컨텍스트(역자 주: 비트들의 의미를 결정하는 맥락)에 의해서다.
1.2 프로그램은 다른 프로그램에 의해 다른 형태로 번역된다
hello.c를 시스템에서 실행시키려면, 각 C 문장들은 다른 프로그램들에 의해 저급 기계어 인스트럭션들로 변역되어야 한다. 그림 1.3과 같이 소스파일 hello.c를 읽어서 실행파일인 hello로 변역하기 위한 네 단계를 실행하는 프로그램들(전처리기, 컴파일러, 어셈블러, 링커)을 합쳐서 컴파일 시스템이라고 부른다.
- 전처리 단계: 전처리기(cpp)는 본래의 C 프로그램을 #문자로 시작하는 디렉티브(directive)에 따라 수정한다.
- 컴파일 단계: 컴파일러(C Compiler Pass 1, cc1)는 텍스트 파일 hello.i를 텍스트 파일 hello.s로 번역하며, 이 파일에는 어셈블리어 프로그램이 저장된다.
- 어셈블리 단계: 어셈블러(as)가 hello.s를 기계어 인스트럭션으로 번역하고, 이들을 재배치가능 목적 프로그램 형태로 묶어서 hello.o라는 목적 파일에 그 결과를 저장한다.
- 링크 단계: printf 함수는 이미 컴파일된 별도의 목적파일인 printf.o에 들어 있으며, 이 팡리은 hello.o 파일과 어떤 형태로든 결합되어야 한다. 링커 프로그램(ld)이 이 통합작업을 수행한다.
1.4 프로세서는 메모리에 저장된 인스트럭션을 읽고 해석한다
hello 실행 파일을 유닉스 시스템에서 실행하기 위해서 쉘이라는 응용프로그램에 그 이름을 입력한다.
linux> ./hello
hello, world
linux>
쉘은 커맨드라인 인터프리터로 프롬프트를 출력하고 명령어 라인을 입력 받아 그 명령을 실행한다.
1.4.1 시스템의 하드웨어 조직
hello 프로그램을 실행할 때 무슨 일이 일어나는지 설명하기 위해서는 그림 1.4d와 같은 전형적인 시스템에서의 하드웨어 조직을 이해할 필요가 있다.
- 버스(bus): 시스템 내를 관통하는 전기적 배선군을 버스 bus라고 하며, 요소들 간에 바이트 정보들을 전송한다. 버스는 일반적으로 워드 word라고 하는 고정 크기의 바이트 단위로 데이터를 전송하도록 설계된다.
- 입출력 장치: 입출력 장치는 시스템과 외부세계와의 연결을 담당한다.
- 메인 메모리: 메인 메모리는 프로세서가 프로그램을 실행하는 동안 데이터와 프로그램을 모두 저장하는 임시 저장장치이다. 물리적으로 메인 메모리는 DRAM Dynamic Random Access Memory 칩들로 구성되어 있다.
- 프로세서: 주처리장치(CPU) 또는 간단히 프로세서는 메인 메모리에 저장된 인스트럭션들을 해독(실행)하는 엔진이다. 프로세서의 중심에는 워드 크기의 저장장치(또는 레지스터)인 프로그램 카운터(PC)가 있다. PC는 메인 메모리의 기계어 인스트럭션을 가리킨다.
1.5 캐시가 중요하다
물리학의 법칙 때문에 더 큰 저장장치들은 보다 작은 저장장치들보다 느린 속도를 갖는다. 프로세서-메모리 간 격차에 대응하기 위해 시스템 설계자는 보다 작고 빠른 캐시 메모리(간단히 캐시)라고 부르는 저장장치를 고안하여 프로세서가 단기간에 필요로 할 가능성이 높은 정보를 임시로 저장할 목적으로 사용한다.
1.6 저장장치들은 계층 구조를 이룬다
모든 컴퓨터 시스템의 저장장치들은 그림 1.9와 같은 메모리 계층구조로 구성되어 있다. 계층의 꼭대기에서부터 맨 밑바달까지 이동할수록 저장장치들은 더 느리고, 더 크고, 바이트 당 가격이 싸진다.
1.7 운영체제는 하드웨어를 관리한다
운영체제는 두 가지 주요 목적을 가지고 있다.
- 제멋대로 동작하는 잉용프로그램들이 하드웨어를 잘못 사용하는 것을 막기 위해
- 응용프로그램들이 단순하고 균일한 메커니즘을 사용하여 복잡하고 매우 다른 저수준 하드웨어 장치들을 조작할 수 있도록 하기 위해
운영체저는 이 두 가지 목표를 그림 1.11에서와 같이 근본적인 추상화를 통해 달성하고 있다.
'CS과목 > 시스템소프트웨어' 카테고리의 다른 글
[시스템소프트웨어] 02. 정보의 표현과 처리 (0) | 2025.02.12 |
---|