Windows 시스템 프로그래밍 시작하기

2025. 2. 21. 12:20개발/Windows

이 글은 윤성우님의 '뇌를 자극하는 윈도우즈 시스템 프로그래밍'을 참고하여 공부한 내용입니다.


 

시스템 엔지니어로 2년간 일을 해었지만, 아직도 저에겐 시스템 엔지니어의 시스템은 추상적이기만 합니다. 소프트웨어, 미들웨어, 하드웨어가 서로 관계를 가진 구조를 시스템이라 하는 것인지, 단지 해당 서버 혹은 워크스테이션의 운영체제를 시스템이라 칭하는 것인지 말이죠. 

 

이 책에서는 처음부터 시스템 프로그래밍의 정확한 개념을 알려 줍니다. 컴퓨터 시스템을 동작시키는 프로그램 즉 운영체제를 뜻하죠. 이 운영체제에서 제공하는 라이브러리를 사용하여 개발을 하는 것을 시스템 프로그래밍이라 정의하였습니다. 그래서 윈도우즈 시스템 프로그래밍은 Windows 운영체제를 기반으로 한 컴퓨터에게 일을 시키기 위한 프로그램을 구현하는 것입니다.

 

그러면 Windows 시스템 프로그래밍을 배우려면 무엇을 공부해야 할까요. 우선 Windows에서 제공하는 함수의 기능을 이해해야 합니다. 그러기 위해서는 간단한 컴퓨터 시스템의 구조를 알아볼 필요가 있습니다.

 

컴퓨터 시스템

컴퓨터가 어떤 구조로 프로그램을 실행하는지, 운영체제를 공부해본 분들은 알고 있을것 입니다. 컴퓨터가 프로그램을 실행시키는 과정을 간단하게 구분하면, 하드디스크에 저장된 프로그램을 메모리에 로드하여, CPU를 통해 로드 된 프로그램을 실행시킵니다. 시스템 프로그램을 시작하기 위해서는 간단하게나마 컴퓨터 시스템의 구조를 이해하는 편이 좋습니다. Windows 시스템 콜 함수가 왜 그런 형태를 가지고 있는지, 같은 내용을 말이죠. 그래서 우선 프로그램을 실행하기 위한 시스템의 각 요소를 살펴 보겠습니다.

 

CPU

이 장치는 컴퓨터의 연산을 담당하고 있습니다. 따로 컴퓨터를 공부해 보신 분이 아니더라도 CPU가 컴퓨터에서 얼마나 중요한지 알고 있을것 입니다. CPU는 연산을 크게 3가지 장치로 나누어 처리합니다.

 

ALU, Arithmetic Logic Unit

CPU 내부의 장치로 실질적인 연산을 담당합니다. 크게 산술 연산과 논리 연산을 나누어 처리하며 프로그램의 대부분 동작이 이 두가지 형태로 작업됩니다. 이 과정을 Execution이라 하며 프로그램을 실행시키는 루틴의 마지막 단계를 뜻합니다. 하지만 이 장치는 들어온 데이터에 대한 해석은 불가능합니다. 들어온 데이터의 비트형식을 읽고 산술연산인지 논리연산인지 해석이 되지 않는 것 입니다. 그래서 이 해석에 대한 기능을 다음 장치가 대신 해석하여 ALU를 제어하게 됩니다.

 

Control Unit

이 장치는 앞서 말했듯 데이터를 해석하여 ALU에 신호를 보내 제어하는 기능을 합니다. 그 밖에도 CPU로 전달되는 데이터를 해석하여 적절한 신호를 CPU 내의 다른 유닛에 보내 CPU의 동작을 제어합니다. 이런 과정을 Decode라 하며 CPU에 들어온 데이터를 해석하는 과정을 뜻합니다.

 

Register Set

메모리의 데이터를 CPU로 전달 받았을 때 CPU가 유휴상태라면 전달 받은 데이터를 바로 처리할 수 있을 것입니다. 하지만 CPU는 굉장히 바쁜 장치이며 유휴상태인 경우는 거의 없을 것입니다. 그렇다면 전달 받은 데이터는 임시로 어딘가에 저장되어야 합니다. 그 저장공간 역할을 담당하는 CPU 장치를 Register Set 이라 합니다. 

 

그 밖에도 CPU가 자주 사용하는 데이터를 저장하는 기능(Register)들을 가지고 있습니다. 예를 들어 PC(Program Counter)라는 Register가 있습니다. 이 Register는 메모리 주소를 저장하는 공간이며, 계속해서 들어오는 데이터를 순차적으로 가져오기 위해 현재 사용한 데이터의 주소를 계속해서 저장하며 다음 주소의 데이터를 가져올 수 있는 역할을 하고 있습니다. 

 

Bus Interface

메모리 혹은 서로 다른 장치끼리 데이터를 송수신할 수 있게 해주는 매체로 Bus가 있습니다. Bus InterfaceBus의 통신방식을 사용하여 데이터를 송수신 해주는 기능을 담당합니다. 그래서 CPU는 내부 Bus Interface를 통해 메모리와 데이터를 주고 받으며 연산을 처리합니다. 이렇게 메모리에서 Bus Interface를 통해 데이터를 전달 받는 과정을 Fetch라고 합니다. 

 

또한 Bus Interface는 3가지 Bus를 사용하여 메모리와 통신합니다.

Data Bus

이름 그래도 데이터를 이동시키기 위한 Bus이며, 데이터는 명령, 연산에 필요한 피연산자 등이 될 수 있습니다. 이 Data Bus를 사용해 메모리에서 CPU로 데이터를 전달받을 수 있습니다.

Address Bus

메모리의 주소값을 이동시키기 위한 Bus입니다. 메모리는 순차적이 아닌 임의적으로 데이터를 접근합니다. 그렇기 때문에 특정 주소값의 데이터를 얻기 위해 CPU는 메모리에게 Address Bus를 이용해 주소값을 보내고, 메모리는 CPU에게 해당 주소의 특정 데이터를 Data Bus를 통해 보내게 되는 것 입니다.

Control Bus

이름 그대로 제어를 위한 Bus 이며, 메모리와 CPU는 이 Bus를 사용하여 신호를 주고 받습니다. 그 신호란 데이터의 송신에 대한 요청/응답 과 같은 상호간의 통신 메시지 입니다.

'개발 > Windows' 카테고리의 다른 글

커널 오브젝트와 오브젝트 핸들  (0) 2025.03.17
Windows 프로세스 생성과 소멸  (0) 2025.03.15
레지스터와 명령어 구조  (0) 2025.03.14
Windows 32/64비트 시스템  (0) 2025.02.26
Windows 유니코드  (0) 2025.02.21