본문 바로가기

C, C++/뇌를 자극하는 윈도우즈 시스템 프로그래밍

[뇌를 자극하는 윈도우즈 시스템 프로그래밍] 1장. 컴구조(1)

개요

시스템 프로그램은 컴퓨터 시스템을 동작시키는 프로그램이다.

https://ko.wikipedia.org/wiki/%EC%8B%9C%EC%8A%A4%ED%85%9C_%EC%86%8C%ED%94%84%ED%8A%B8%EC%9B%A8%EC%96%B4

 

시스템 소프트웨어 - 위키백과, 우리 모두의 백과사전

위키백과, 우리 모두의 백과사전. 시스템 소프트웨어(system software, 문화어: 체계소프트웨어)는 응용 소프트웨어를 실행하기 위한 플랫폼을 제공하고 컴퓨터 하드웨어를 동작, 접근할 수 있도록

ko.wikipedia.org

Windows UNIX같은 OS가 대표적이다.

 

Windows 시스템 프로그래밍이란 폭넓게 보면 Windows OS 기반의 컴퓨터에게 일을 시키기 위한 프로그램을 구현하는 것이다.

 

컴퓨터 시스템의 주요 구성요소

CPU, 캐시, 메인 메모리, 하드디스크가 주요 요소라고 할 수 있다.

CPU, 캐시는 컴퓨터구조

메인 메모리, 하드 디스크는 운영체제 과목에서 다룬다.

 

컴퓨터 구조, 운영체제 이해를 통해 효율적인 프로그램 구현이 가능해진다.


 

컴퓨터 하드웨어의 구성

 

컴퓨터 하드웨어는 크게 CPU, Main Memory, IO Bus로 이루어져있다.

 

CPU

먼저 CPU의 구성요소들에 대해 간단히 살펴보자

 

ALU

CPU 내에서 실제 연산을 담당하는 하드웨어이다.

기본적인 산술 연산(정수 연산)과, 논리 연산을 담당한다.

그 외에도 FPU 등 특정 연산을 주로 담당하는 유닛이 있다.

 

Control Unit(제어 유닛)

Control Unit은 CPU Cycle 전반적으로 영향을 미친다.

1. Fetch: 제어 유닛이 다음에 실행할 명령어를 메모리에서 가져오도록 한다.

2. Decode: 가져온 명령어를 해석해서 어떤 동작을 해야 하는지 판단한다.

3. Execute: 해석한 내용을 바탕으로 필요한 유닛에 제어 신호를 보내 연산을 하도록 한다.

 

Register Set

컴퓨터 아키텍쳐의 설계에 따라 레지스터의 구성이 달라질 수 있다.

책에서는 ARM 아키텍쳐의 구성을 축소해서 사용한다.

PC에서는 x86-64의 구성을 주로 사용한다.

 

Bus Interface

CPU, RAM, 하드디스크 등 물리적으로 떨어져 있기 때문에 데이터를 주고 받을 매개체가 필요하다.

이를 Bus라고 한다.

Bus를 교통 수단이라고 한다면 교통 수단의 종류와 이용 방식이 있을 것이다.

이러한 이용 방식, 통신 방식을 알고있는 것이 버스 인터페이스다.

 

Clock Pulse

컴퓨터 부품의 동작은 클럭 신호 주기에 맞게 동작한다.

이를 통해 각 부품이 데이터를 도착 전에 읽거나, 중복 실행하는 경우를 막는다.

 


프로그램의 실행과정

프로그램은 폰노이만 아키텍처 = Stored Program Concept 를 기반으로 실행된다.

이는 프로그램이 컴퓨터 내부의 메모리에 저장되어 순차적으로 실행된다는 개념이다.

https://ko.wikipedia.org/wiki/%ED%8F%B0_%EB%85%B8%EC%9D%B4%EB%A7%8C_%EA%B5%AC%EC%A1%B0

 

 

실행파일 생성과정

1. 전처리기에 의한 과정: #include, #define, #pragma 등 #뒤에 있는 지시에 따라 소스코드를 삽입한다.

2. 컴파일러에 의한 번역: 고급언어를 어셈블리로 바꾼다.

3. 어셈블러에 의한 바이너리 코드 생성: 컴퓨터가 이해할 수 있도록 어셈블리를 기계어로 변환한다.

4. 링커에 의한 연결과 결합: 여러 파일 간 존재하는 의존관계(주소가 확정되지 않은 심볼(함수, 라이브러리))를 해소하고 실행파일을 생성시킨다.

 

프로그램 실행과정

1. Fetch: 메모리에 있는 명령어를 CPU로 가져온다.(버스를 통해)

2. Decode: 가져온 명령어를 CPU가 해석한다. (Control Unit)

3. Execute: 해석된 명령어의 명령을 CPU가 실행한다.(ALU 등 연산 유닛)


버스 시스템

CPU와 메모리 사이 Fetch 시에 이동하는 경로를 전체적으로 버스 시스템이라고 한다.

버스 시스템은 Address Bus, Data Bus, Control Bus로 구성된다.

 

Data Bus: 명령어 또는 피연산자 등의 데이터를 이동하기 위한 버스

Address Bus: 주소 값을 이동하기 위해 필요한 버스

Control Bus: 특정한 사인을 주고받기 위해 사용한다.