1장 컴퓨터 구조

1. 시스템 프로그램이의 이해와 접근

    • windows 시스템 프로그래밍이란?
      • windows 운영체제 기반의 컴퓨터에게 일을 시키기 위한 프로그램을 구현하는 것
      • 이를 위해서는 windows가 제공하는 라이브러리를 이해해야하고, 이를 이해하기 위해서는 운영체제, 컴퓨터 구조에대한 기본지식이필요하다.
      •  따라서 하드웨어적인 이해부터 공부해보자.
    • 컴퓨터 시스템의 주요 구성요소
      • CPU-Cache : 컴퓨터 구조 과목에서 다룸
      • main memory - hard disk : 운영체제 과목에서 다룸

2. 컴퓨터 하드웨어의 구성

* CPU

: 중앙처리 장치로써 연산을 담당한다.

: 컴퓨터의 머리

* Main Memory

: RAM이라는 저장장치로 구성되는 메인 메모리는 컴파일이 완료된 프로그램 코드가 올라가서 실행되는 영역이다.

: 프로그램 실행을 위해 존재하는 메모리

* input/output Bus (입출력 버스)

: 컴퓨터를 구성하는 구성요소 사이에서 데이터를 주고 받기 위해 사용되는 경로

: Address Bus, Data Bus, Control Bus 세가지로 구분된다.

: 하드디스크, CPU, 메인메모리등 모두가 버스에 연결되어있어 전송, 입출력을 가능하게 한다.


3. CPU에 대한 이해

* ALU(Arithmetic Logic Unit)

: CPU에서 연산을 담당하는 블록

: 산술연산(덧셈, 뺄셈...)과 논리연산(AND, OR...)의 처리를 담당

* Control Unit

: CPU가 처리해야할 명령어들을 해석

: ALU가 동작할 수 있도록 실행파일의 명령어를 해석해주는 블록

- ALU는 단순해서 명령어를 해석할 수 없고 명령에 따른 연산만 담당한다.

: CPU의 총 사령관

* Register Set

: Control Unit이나 ALU가 필요로 하는 명령어 및 데이터들을 저장해두는 공간

: 임시적으로 저장하는 아주 작은 메모리

: CPU에 따라서 16bit, 32bit, 64bit 정도의 크기를 가지게 되고, CPU 내부에 여러개가 존재하며, 각각의 레지스터의 용도는 일반적으로 정해져있다.

* Bus Interface

: I/O BUS

:컴퓨터 안에는 CPU, Hard Disk, RAM, Sound Card, GPU 등등이 있는데, 이들이 서로 데이터를 주고받으면서 동작할 수 있도록 하는 통로

: Bus Interface는 I/O 버스가 어떻게 데이터를 전송하는지에 대한 프로토콜 혹은 통신방식을 알고 있는 블록

: I/O버스와 연결되는 각각의 기기들은 연결하기위한 자신만의 Interface가 필요하다.

* Clock Pulse (클럭)

: CPU를 구성하는 요소는 아니지만, Timing 을 제공하기 위해서 필요하다. 

: 1.6Mhz인 CPU는 1초에 1백 6십만번의 연산을 하게 된다. 즉, CPU의 클럭속도가 높으면 초당 처리하는 명령어의 개수가 많아지므로 컴퓨터의 전체적인 성능은 좋아지게된다.

: 왜? 클럭신호에 맞추어서 CPU는 동작해야하는가?

: 다른 장치, 블록과의 동기화를 위해서 필요하다. 뒤처지거나 밀리는 작업이 없도록 가장 느린 장치의 속도에 맞추어 진행하면 밀리지 않는다.


4. 프로그램의 실행과정

* 위대한 수학자 폰 노이만

: 오늘날 우리가 사용하고 있는 컴퓨터의 기본 모델을 제시한 사람

: 이전까지 프로그램이란 단순히 진공관 회로의 스위치 구성을 의미하는 것이었다. 하지만, 폰 노이만은 프로그램이 컴퓨터 내부에 저장되는 구조를 생각해내었다.

: CPU <-> Memory  <== LOAD == Program

: 폰 노이만 구조의 가장 큰 특징은 '실행되어야 할 프로그램이 컴퓨터 내부에 저장된다는 것'

: 그래서 Stored Program Concept이라고 불리기도 한다.

* 프로그램 실행과정

- 실행파일의 생성단계

: 전처리기 => 컴파일러 => 어셈블리 => 링커             


1단계 : 전처리기에 의한 치환 작업

: #include나 #define과 같은 #지시자에 따라 소스코드를 적절히 변경한다

2단계 : 컴파일러에 의한 번역

: 여전히 C언어로된 소스코드가 컴파일러에 의해 어셈블리 코드로 번역된다.

: 어셈블리 코드란, CPU에 일을 시키기 위한 명령어를 조합해 만들어진 프로그램 코드이다.

: 이게 없다면 직접 명령어체계를 익혀서 명령해야했을 것이다.

3단계 : 어셈블러에 의한 바이너리 코드 생성

: 1과 0으로만 구성되는 코드, 어셈블리와 매칭되는 바이너리 코드로 변환된다.

4단계 : 링커에 의한 연결과 결합

: 프로그램 내에서 참조하는 함수나 라이브러리들을 하나로 묶는 작업

: 이 작업이 끝나면 실행파일이 생겨난다. (실행파일은 바이너리 코드로 구성된다.)

- 시나리오

: 실행파일에는 컴퓨터에게 일을 시키기위한 바이너리 코드 형식의 명령어가 있다.

: 이를 실행시키면 메모리 공간에 올라간 다음 CPU에 의해서 순차적으로 CPU내부에서 실행되기 시작한다

단계 1. Fetch

: 메모리상의 명령어를 CPU로 가져오는 작업

단계 2. Decode

: 가져온 명령어를 CPU가 해석하는 단계

: 그림을 참조하면, 명령어 A가 덧셈!으로 해석되어지는 것을 볼 수 있다,

단계 3. Execution

: 해석된 명령어대로 CPU가 실행하는 단계


: Fetch > Decode > Execution 으로 실행되어지고 있다. 이는 중요한 개념이다.

5. 하드웨어 구성의 재접근

* 폰노이만의 컴퓨터 구조 vs 오늘날의 컴퓨터 구조

: Fetch 는 어떠한 이동경로를 통해 이루어지는가? 

- I/O BUS

: 명령어를 CPU 내부로 가져다 놓을 때 어디에 저장되는가?

- Register Set

: Decode는 누구에 의해 실행되어지는가?

- Control Unit

: Execution은 누구에 의해 실행되어지는가?

- ALU

이는 다음과 같은 그림으로 요약된다.


* 데이터 이동의 기반이 되는 버스(BUS) 시스템

: 데이터를 이동하는데 있어서 사용되는 전송 경로를 가리켜 버스 시스템이라고 한다.

- Data Bus

: 데이터를 이동시키기 위한 버스

: 명령어, 피연산자 등이 속한다.

- Address Bus

: 주소값을 이동하기 위한 버스

: 주소값을 통해 해당 주소에 있는 데이터를 반환할 수 있다.

- Control Bus

: CPU가 원하는 바를 메모리에 전달할 때 사용한다


ex) 

CPU : 데이터 보내! (contorl bus)

메모리 : 알았어 어디 있는걸 줄까?

CPU : 0x1200 에 있는거 (Address Bus)

메모리 : 자 데이터 받아! (Data Bus)



총 정리




뇌를 자극하는 윈도우즈 시스템 프로그래밍
국내도서
저자 : 윤성우
출판 : 한빛미디어 2007.03.30
상세보기














        + Recent posts