정보는 비트와 컨텍스트로 이루어진다
ASCII
표준을 사용<aside>
C Lang
은 벨 연구소의 Dennis Ritchie에 의해 개발됨
당시 그는 C는 “변덕스럽고, 오류투성이고, 엄청난 성공”이라고 표현했음
Unix OS
와 밀접하게 연결되어 있음 → Unix
를 위한 시스템 언어로 개발되었기 때문
프로그램은 다른 프로그램에 의해 다른 형태로 번역된다.
C Lang
으로 작성된 프로그램은 high-level
언어에 속함
하지만, low-level
기계어로의 번역이 필요함
이럴 때 사용되는 것이 Compiler
(e.g., gcc
)
gcc -o hello hello.c
일반적으로 아래 사진과 같은 단계로 번역이 이루어짐
hello.c 가 번역이 이루어지는 과정, (출처 : CSAPP Fig. 1.3)
#include <stdio.h>
) 헤더를 전처리기에게 시스템 헤더파일인 stdio.h
를 프로그램 문장에 삽입하라고 지시한 이후, .i
로 끝나는 C 프로그램 생성hello.i
를 hello.s
로 번역하는데, 이 과정에서 어셈블리어 프로그램이 저장hello.s
를 기계어 인스트럭션으로 번역, relocatable object program 으로 만들어 hello.o
라는 목적 파일에 결과를 저장hello.o
는 main
함수의 명령을 인코딩하기 위한 17바이트를 포함hello.o
와 printf.o
(hello.c
에 들어있는 printf
함수의 이미 컴파일된 파일)를 결합하는 과정을 수행컴파일 시스템이 어떻게 동작하는지 이해하는 것은 중요하다.
프로세서는 메모리에 저장된 인스트럭션을 읽고 해석한다.
쉘은 커맨드라인 인터프리터로 프롬프트를 출력하고 명령어 라인을 입력받아 그 명령을 실행
시스템의 하드웨어 조직
전형적인 시스템의 하드웨어 구성, (출처 : CSAPP Fig. 1.4)
Buses
Word
)을 전송I/O Devices
Main Memory
Processor
CPU(Central Processing Unit) 또는 프로세서는 메인 메모리에 저장된 인스트럭션들을 해독하는 엔진
프로세서의 중심에는 워드 크기의 저장장치(or Register)인 프로그램 카운터(PC)가 있음
PC가 가르키는 곳의 instruction을 반복적으로 실행
PC값이 다음 instruction의 위치를 가르키도록 업데이트
이러한 단순한 동작이 메인 메모리, 레지스터, Arithmetic/Logic Unit(ALU) 주위를 순환
아래는 instruction의 요청에 의해 CPU가 실행하는 단순한 작업의 예시
캐시가 중요하다
또한, 더 큰 저장 장치는 더 작은 저장 장치보다 느린 속도를 가짐
이러한 프로세서 - 메모리 간의 속도 격차를 줄이기 위해 Cache memory 가 등장
캐시 메모리에 대한 그림, (출처 : CSAPP Fig. 1.8)
저장 장치들은 계층 구조를 이룬다.
메모리 계층 구조, (출처 : CSAPP Fig. 1.9)
운영체제는 하드웨어를 관리한다.
유저는 프로그램을 실행할 때, 직접 메모리 혹은 디스크에 접근하지 않음
OS의 목적
Process
프로세스의 컨텍스트 스위칭, (출처 : CSAPP Fig. 1.12)
Threads
Virtual Memory
Files
시스템은 네트워크를 사용하여 다른 시스템과 통신한다.
중요한 주제들