'시스템 프로그래밍'에 해당되는 글 1건

  1. 2011.05.31 컴퓨터 구조 part_1
2011.05.31 10:04
 <출처 : 뇌자극 윈도우즈 프로그래밍>

Windows 시스템 프로그래밍 공부 시작!

시스템 프로그래밍이란?

컴퓨터 시스템의 범위는 하드웨어와 운영체제를 포함한다.
즉, 
시스템 = ( 하드웨어 + 운영체제 ).
의 구조가 성립한다.
운영체제는 하드웨어를 모르는 사용자가 컴퓨터를 쉽게 사용할 수 있도록 도와준다.
대표적인 운영체제로는 Windows, UNIX등이 있다.
이러한 운영체제(소프트웨어)를 포괄적인 의미로 "시스템 프로그램"이라고 한다.
결국 시스템 프로그이란 컴퓨터를 동작(파일 이동, 복사 등)시키기 위해 필요한 프로그램을 뜻한다.
따라서 운영체제는 시스템 프로그램의 범주에 속하고, 이러한 운영체제 개발자들을 가리켜 시스템 프로그래머라고 말할 수 있다.
또한 방금 위에서 말한 개발자( 어셈블리 언어나 C언어를 이용하여 하드웨어를 직접 컨트롤하는 개발자 )뿐만 아니라
Windows, UNIX등에서 제공하는 라이브러리(운영체제의 기능을 활용할 수 있는 시스템 함수들의 집합)를 활용하여 프로그램을 개발하는 개발자 역시 시스템 프로그래머라 부를 수 있다.

그럼 이제 시스템 프로그래에 대해 알 수 있겠다.
즉, 시스템 프로그래이란 Windows 운영체제 자체의 기능을 십분 활용하는 프로그래밍으로 이해 할 수 있다.

Windows 시스템 함수들을 정확히 이해하려면 운영체제에 대한 지식이 필요하다. 그리고 운영체제를 이해 하기 위해선
컴퓨터 구조를 공부해야한다.

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

- 컴퓨터 하드웨어 구조.
 CPU, 캐쉬.
- 운영체제.
메인 메모리 : 메모리 관리.
하드디스크 : 파일 I/O( 다양한 I/O포함 ).











컴퓨터 하드웨어의 구성.


메인 메모리(Main Memory).

램(RAM)이라는 저장 장치로 구성되있다.
프로그램 실행을 위해 존재하는 메모리이다. 
게임파일 exe를 실행하게 되면 그 게임에 사용되는 모든 리소드, 코드들이 메인 메모리에 올라가서 실행된다.
즉, 컴파일이 완료된 프로그램 코드가 올라가서 실행되는 영역이다.

CPU.

"중앙처리장치"이다. 주로 연산을 담당한다. 

ALU(Arithmetic Logic Unit).
CPU내부에서 실재로 연산을 담당한다. ALU가 처리하는 연산은 크게 산술연산(덧셈, 뺄셈)과 논리연산(AND, OR)이다.

컨트롤 유닛(Control Unit).
CPU내부로 흘러들어온 명령어를 해석해 ALU에게 어떤 처리를 하라고 신호를 보내준다.
덧셈을 할것인지 뺄셈을 할 것인지.

레지스터.
CPU내부에 존재하는 저장공간이다(CPU에 따라서 16비트, 32비트. 64비트 정도의 크기를 갖는다). 레지스터들은 여러개가 존재하는데 각각의 용도가 정해져 있다.
그럼 왜 CPU내부에 이런 저장공간이 필요할까?
ALU가 이미 어떠한 연산을 처리중이며 컨트롤유닛또한 어떤 명령어를 해석하는 중이라 해보자.
그러면 새롭게 들어온 명령어와 연산을 당장 처리할 수가 없을것이다.
그래서 레지스터에 임시로 저장해두어 앞의 처리가 끝나면 직접 레지스터에 저장된 데이터를 가져가 사용하게 된다.

버스 인터페이스(Bus Interface).
CPU, 하드디스크, RAM, 사운드 카드, 그래픽 카드 들은 서도 독립적으로 동작하는 것이 아니라 서로 데이터를 주고 받으면서 동작한다. 
여기서 이 장치들이 서로 데이터를 주고 받기 위한 매개체가 되는것이 "I/O 버스" 이다.
그럼 여기서 '버스 인터페이스'의 역할은 무엇인가?
바로 "I/O 버스"의 통신방식을 이해하는 데이터를 주고받는 출입구라 생각할 수 있다.
즉, 버스가 어떻게 데이터를 전송하는지, 그에 대한 프로토콜 혹은 통신방식을 알고 있는 인터페이스이다.
CPU뿐만 아니라 I/O버스에 연결되는 장치들은 모두 이러한 인터페이스(컨트롤러 혹은 어댑터)를 갖는다.


클럭신호(Clock Pulse).
CPU의 구성 요소는 아니지만, 구성 요소에 제공되야 하는 신호로서 중요한 의미를 지닌다.
(클럭발생기는 메인보드에 포함되어있다.)
CPU의 클럭이 1.6Mhz이면 CPU는 1초당 1백6십만번의 연산을 처리한다.
하지만 CPU가 1백6십만번의 일을 모두 하는 것은 아니다.
클럭발생기에서 발생되는 클럭신호에 맞춰서 연산을 수행하게 된다.

즉, 클럭신호가 1백만번이라면 CPU도 1초에 1백만번의 일만을 수행하게 된다.
이는 컴퓨터 시스템의 동기화를 맞춰줘하야는 이유때문인데,  만약 연산 장치와 출력장치중 하나의 처리 속도가 더 빠르다면 두 장치가 맞물려 돌아가는데 많은 어려움이 발생한다. 
그래서 클럭발생기는 느린 장치의 클럭에 맞게 신호를 발생시켜 준다.


·출력 버스(Input/Output Bus).

컴퓨터 구성요소 사이에서 데이터를 주고 받기 위한 경로이다.
주고받는 데이터 종류에 따라서 3가지로 나뉜다.

데이터 버스(Data Bus) : 명령어, 피연자와 같은 데이터를 이동하기 위한 버스.
어드레스 버스(Address Bus) : 메모리의 주소값을 이동하기 위한 버스
컨트롤 버스(Control Bus) : CPU가 원하는 바(송신 할 것인가? 수신할 것인가?)를 메모리에 전달할 때 사용.

프로그램의 실행 과정.

1단계 : 전처리기에 의한 치환작업.
'#'으로 시작하는 지시자의 지시에 따라 소스 코드를 적절히 변경.

2단계 : 컴파일러에 의한 번역.
CPU의 명령어(어셈블리 코드)로 번역.

3단계 : 어셈블러에 의한 바이너리 코드 생성.
명령어를 1과 0으로 구성되는 바이너리(이진)코드로 번역.
ex) ADD -> 0011

4단계 : 링커에 의한 연결과 결합.
프로그램 내에서 참조하는 함수나 라이브러리들을 하나로 연결시켜주는 작업을 한다.
이 과정이 끝나면 실제로 실행 가능한 실행파일이 생성된다.

Stored Program Concept(폰 노이만 아키텍쳐)

위의 링커단계에서 생성된 실행파일(바이너리 코드)으 실행 과정을 보자. 
(위의 "컴퓨터 하드웨어의 구성"바로 아래의 그림을 보자.)

1단계 Fetch : 버스 인터페이스를 통해 메모리 상에 존재하는 명렁어를 CPU로 가져온다.
2단계 Decode : 컨트롤 유닛에의해 가져다 놓은 명령어를 CPU가 해석한다.
3단계 Execution : ALU에의해 해석된 명령어의 명령대로 CPU가 실행하는 단계이다.
신고
Posted by 우엉 여왕님!! ghostkyow

티스토리 툴바