[윈도우즈 시스템 프로그래밍] 컴퓨터 구조 1
1. 시스템 프로그래밍의 이해와 접근
시스템 프로그래밍이란?
- 컴퓨터 시스템을 동작시키는 프로그램
- 하드웨어를 사용할 수 있도록 도와주는 프로그램
컴퓨터 시스템의 주요 구성요소
CPU <=> 캐쉬(Cache) <=> 메인 메모리 <=> 하드 디스크
[ 컴퓨터 구조] [ 운영 체제 ]
2. 컴퓨터 하드웨어의 구성
CPU(Central Processing Unit) : 중앙처리장치로 연산을 담당.
메인 메모리(Main Memory) : 램(RAM)이라는 저장장치로 구성. 컴파일이 완료된 프로그램 코드가 실행되는 영역
입 출력 버스(Input/Output Bus) : 컴퓨터를 구성하는 구성 요소 사이에서 데이터를 주고 받기 위해 사용되는 경로
- Address Bus : 주소 값을 이동하기 위해 필요한 버스.
- Data Bus : 데이터를 이동하기 위해 필요한 버스.
- Control Bus : 데이터를 보내거나 받는 것을 알리기 위한 버스.
3. CPU에 대한 이해
ALU : CPU 내에서 실제 연산을 수행하는 장치. 덧셈이나 뺄셈과 같은 산술 연산과 AND나 OR와 같은 논리 연산을 수행.
컨트롤 유닛 : CPU에 들어어온 명령어를 해석하고, 해석된 결과를 바탕으로 ALU가 이를 처리하게 함.
레지스터 : CPU 내에서 사용하는 아주 작은 메모리로 명령어 및 데이터를 저장하는 저장장치.
버스 인터페이스 : CPU 내에서 I/O 버스의 프로토콜을 이해하는 장치.
클럭 신호(Clock Pulse) : CPU를 구성하는 요소는 아니지만 동기를 맞추기 위해 사용.
동기가 맞지 않을 시 버퍼를 덮어 쓰는 등의 문제가 발생.
동기는 느린 장치의 속도에 맞춤.
4. 프로그램의 실행과정
전처리기 => 컴파일러 => 어셈블러 => 링커
단계 1: 전처리기에 의한 치환 작업
#include, #define과 같이 #으로 시작하는 지시자의 지시를 따라서 소스코드를 적절히 변경하는 작업
단계 2: 컴파일러에 의한 번역
소스코드는 컴파일러에 의해 어셈블리 코드로 번역된다. 어셈블리 코드는 이진 데이터를 조합해서 만들어진
프로그램 코드를 의미
단계 3: 어셈블러에 의한 바이너리 코드 생성
바이너리 코드 : 1과 0으로만 구성되는 코드.
컴퓨터는 오로지 1과 0만을 이해하기 때문에 어셈블리 코드는 바이너리코드로 번역되어야 함.
단계 4: 링커에 의한 연결과 결합
프로그램 내에서 참조하는 함수나 라이브러리들을 하나로 묶는 작업. 이 과정이 끝나면 실제 실행 가능한 파일 생성
Fetch : 메모리상에 존재하는 명령어를 CPU로 가져오는 작업 (레지스터에 저장)
Decode : 가져다 놓은 명령어를 CPU가 해석하는 단계 (컨트롤 유닛)
Execution : 해석된 명령어의 명령대로 CPU가 실행하는 단계 (ALU)
출처: 뇌를 자극하는 윈도우즈 시스템 프로그래밍. 윤성우 저