1. 컴퓨터 구조 학습의 중요성
- 왜 개발자가 컴퓨터 구조를 알아야 하는가?
- 프로그래밍 언어 문법 외에 컴퓨터의 기본 동작 원리를 이해해야 문제의 근본 원인을 파악할 수 있습니다.
- 컴퓨터 구조를 알면 얻을 수 있는 두 가지 주요 능력은 무엇인가?
- 문제 해결 능력: 코드 외부에서 발생하는 문제가 있을 때, 하드웨어나 시스템 차원에서 원인을 분석할 수 있습니다.
- 성능·용량·비용 고려 능력: 시스템 설계 시 적절한 컴퓨터 사양 및 리소스를 선택하고, 비용 효율적인 아키텍처를 설계할 수 있습니다.
- 컴퓨터의 내부 동작 방식을 이해하는 것이 문제 해결에 어떻게 도움이 되는가?
- 단순히 소스 코드상의 버그가 아닐 때, 컴퓨터를 “분석의 대상”으로 바라볼 줄 알아야 합니다.
- 예를 들어, 메모리 부족이나 캐시 미스, 디스크 I/O 병목 등의 하드웨어 이슈를 식별할 수 있습니다.
- 서버 컴퓨터 선택·클라우드 서비스 이용 시 성능·용량·비용 문제는 어떻게 발생하는가?
- 하드웨어 스펙(CPU 코어 수, 메모리 용량, 디스크 타입 등)에 따라 비용과 성능이 달라집니다.
- 컴퓨터 구조 지식이 있어야, 요구 사항에 맞춰 적절한 서버 사양을 선택하거나 클라우드 인스턴스를 최적화할 수 있습니다.
2. 컴퓨터 구조의 핵심 내용
- 컴퓨터 구조에서 배우는 두 가지 갈래
- 컴퓨터가 이해하는 정보
- 데이터(Data): 명령어가 처리할 재료
- 명령어(Instruction): 컴퓨터를 움직이는 동작 지시 정보
- 컴퓨터의 4가지 핵심 부품
- CPU(Central Processing Unit)
- 메모리(Main Memory / RAM)
- 보조기억장치(Secondary Storage / HDD·SSD·USB 등)
- 입출력장치(Input/Output Devices / 키보드, 모니터, 마우스 등)
- 컴퓨터가 이해하는 두 가지 정보
- 명령어: 프로그램의 동작을 정의하는 지시어(연산 종류, 피연산자 주소 등).
- 데이터: 명령어가 처리하는 실제 값(숫자, 문자, 기타 정보).
- → 명령어는 컴퓨터의 동작을 지시하고, 데이터는 그 동작을 수행하기 위한 입력 값 역할.
- 컴퓨터를 “명령어를 처리하는 기계”라고 정의하는 이유
- 모든 프로그램은 결국 명령어 집합으로 변환되어 CPU가 해석·실행되기 때문입니다.
- 실제 실행되는 명령어의 형태
- 기계어(Machine Code): 컴퓨터가 직접 이해하는 0과 1로 이루어진 코드.
- 어셈블리어(Assembly Language): 기계어를 사람이 읽기 쉬운 형태로 바꾼 저수준 언어.
- 기계어와 1:1 대응되므로, 하드웨어 차원의 동작을 더 쉽게 이해·디버깅할 수 있습니다.
- 컴퓨터의 4가지 핵심 부품 역할
- 메모리(Main Memory / RAM)
- 현재 실행 중인 프로그램의 명령어와 데이터를 저장
- ‘번지수(Address)’: 메모리에 저장된 값의 위치를 가리키는 고유 식별자
- CPU(Central Processing Unit)
- 메모리에 저장된 명령어를 Fetch(읽기) → Decode(해석) → Execute(실행)
하는 과정 반복
- 보조기억장치(Secondary Storage)
- 전원이 꺼져도 데이터가 사라지지 않는 비휘발성 저장 장치
- RAM보다 용량이 크고 비용이 저렴, 영구 저장 용도로 사용
- 예: HDD, SSD, USB
- 입출력장치(I/O Devices)
- 컴퓨터와 외부(사용자, 네트워크 등) 간의 데이터 교환 담당
- 예: 모니터, 키보드, 마우스, 프린터 등
- 컴퓨터 내부 부품 간 연결 방식
- 메인보드(Mainboard / Motherboard): 모든 주요 부품(CPU, 메모리, 확장 카드 등)을 장착·연결하는 회로 기판
- 시스템 버스(System Bus): 부품 간에 정보(주소, 데이터, 제어 신호) 전달 통로
- 주소 버스(Address Bus): 메모리 또는 I/O 장치의 특정 번지(주소)를 지정
- 데이터 버스(Data Bus): 실제 데이터를 전송
- 제어 버스(Control Bus): 읽기/쓰기, 인터럽트 등 제어 신호 전달
3. 운영체제 핵심 개념
- 운영체제(OS)란 무엇인가?
- 하드웨어 자원과 프로세스(실행 중인 프로그램)를 관리하는 특별한 시스템 소프트웨어
- 사용자 프로그램과 하드웨어 사이에서 중재자 역할 수행
- 컴퓨터 시스템에서 ‘자원(Resource)’이란 무엇인가?
- CPU, 메모리, 보조기억장치, 입출력장치 등 시스템의 구성 요소들
- 운영체제는 이러한 자원을 효율적으로 할당·관리해야 함
- 실행 중인 프로그램은 무엇이라고도 부르는가?
- 운영체제는 메모리의 어느 영역에 적재되어 실행되는가?
- 커널 영역(Kernel Space): 운영체제 핵심 코드 및 데이터가 위치
- 사용자 영역(User Space): 일반 애플리케이션(사용자 프로그램)이 실행되는 영역
- → 커널 영역은 높은 권한(특권 모드)을 가지며, 사용자 영역은 제한된 권한(일반 모드)으로 동작
- 운영체제가 수행하는 주요 역할
- 메모리 관리
- 프로그램 적재 위치 결정
- 프로세스별 메모리 영역 보호·분리
- 종료된 프로세스 메모리 해제
- 페이징(Paging)·스와핑(Swapping)을 통한 가상 메모리 구현
- CPU 관리
- CPU 스케줄링(CPU Scheduling): 어떤 프로세스를 언제, 얼마나 실행할지를 결정
- 멀티태스킹 환경에서 여러 프로세스가 번갈아가며 실행되도록 제어
- 프로세스 관리
- 프로세스 생성·소멸·제어
- 프로세스 간 통신(IPC) 및 동기화 관리
- 자원 보호
- 각 프로세스가 허용된 자원만 접근하도록 권한 제어
- 시스템 호출(System Call): 사용자 프로세스가 하드웨어 자원에 직접 접근하지 못하도록, 운영체제를 통해서만 요청하도록 함