minhui study

1부 1장 컴퓨터 구조에 대한 전반적인 이해 본문

컴퓨터 구조/Windows System Programming

1부 1장 컴퓨터 구조에 대한 전반적인 이해

minhui 2020. 1. 22. 10:30

[목차]

 

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

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

3. CPU에 대한 이해

4. 프로그래밍의 실행 과정

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


Section 01. 시스템 프로그래밍의 이해와 접근

 

> 시스템 프로그래밍(System Programming)이란?

 

     - 시스템 프로그램 = "컴퓨터 시스템을 동작시키는 프로그램"

           ex) Windows, Unix 와 같은 운영체제들

 

     - 시스템 프로그래밍 : Windows 운영체제 기반의 컴퓨터에게 일을 시키기 위한 프로그램을 구현하는 것

 

> 컴퓨터 시스템의 주요 구성요소(Main Components)

 

[1-1] 컴퓨터 시스템의 주요 구성요소

 

 


Section 02. 컴퓨터 하드웨어의 구성

 

> 컴퓨터 하드웨어의 구성

 

[1-2] 컴퓨터 하드에어의 구성

 - CPU(Central Processing Unit) : "중앙 처리 장치 " 연산을 담당한다.

 - 메인 메모리(Main Memory) : 램(RAM)이라는 저장장치로 구성이 되어 있으며 컴파일이 완료된 프로그램 코드가 올라가서 실행되는 영역(프로그램 실행을 위해 존재하는 메모리)

 - 입출력 버스(Input/Output Bus) : 컴퓨터를 구성하는 요소 사이에서 데이터를 주고 받기 위해 사용되는 경로로 그 데이터의 종류와 역할에 따라 Address Bus, Data Bus, Control Bus 이렇게 세 가지로 구분이 된다.

 


Section 03. CPU에 대한 이해

 

> CPU의 주요 구성요소

 : ALU(Arithmetic Logic Unit), Control Unit, CPU 내부 레지스터들(Register Set), Bus Interface, Clock Pulse(클럭 신호)

1) ALU(Arithmetic Logic Unit)

     : CPU 내부에서 실제 연산을 담당한다. 크게 두 가지 연산을 하는데 하나는 산술 연산이고 나머지 하나는 논리 연산         이다.

2) Control Unit 

     : ALU를 대신해서 명령어를 해석해준다. 즉, CPU가 처리해야 할 명렁어들을 해석하는 것이다.

3) CPU 내부 레지스터들(Register Set)

     : CPU 내부에 임시적으로 데이터를 저장하기 위한 메모리 공간이 필요한데  그 메모리가 바로 2진 데이터(binary data) 저장하는 레지스터이다. 이들은 CPU가 연산을 하기 위해서 반드시 필요하며 CPU의 종류에 따라서 그 개수와 형태가 다양하다.

4) Bus Interface

     : 서로 데이터를 주고 받기 위해서는 어떠한 매개체가 있어야 하는데 그게 바로 I/O BUS이다. CPU내에는 I/O BUS의 통신방식을 이해하고 있는 그 무엇인가가 있어야 하는데 그 역할을 해주는 것이 바로 버스 인터페이스이다.

5) Clock Pulse(클럭 신호)

    : CPU에 타이밍을 제공하기 위해서 필요한 것이다. 시스템들을 동기화시켜주는 역할을 한다.

 


Section 04. 프로그램의 실행과정

 

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

 

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

     -> #include 같이 #으로 시작하는 지시자의 지시에 따라서 소스코드를 적절히 변경하는 작업을 한다.

 

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

     -> 컴파일러에 의해서 어셈블리 코드로 변역된다.

 

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

     -> 어셈블리 코드는 컴퓨터에 의해 실행되기에 앞서서 바이너리 코드로 번역되어야 한다.

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

      -> 프로그램 내에서 참조하는 함수나 라이브러리들을 하나로 묶는 작업을 한다. 이 과정이 끝나면 바이너리 코드로            구성된 실제로 실행 가능한 실행파일이 생성되다.

 

이제 프로그램의 실행 과정을 전체적으로 이야기해보자

 

[1-4] 프로그램의 실행과정

그림에 대한 설명을 하자면 우선 실행파일을 보자. 이것은 링커에 의해서 만들어진 파일로서 바이너리 코드 형식의 명령어가 들어있다. 이것이 메모리 공간에 올라가고 난 다음 CPU에 의해서 실행되기 시작한다. 이 명령어들은 순차적으로 실행되는데 메모리상이 아닌 CPU내부로 하나씩 이동한 다음 실행하게 된다. 이 때 3단계의 과정이 있는데 다음과 같다.

        ① Fetch : 메모리상에서 존재하는 명령어를 CPU로 가져오는 작업이다.

        ② Decode : 가져다 놓은 명령어를 CPU가 해석하는 단계이다.

        ③ Execution : 해석된 명령어의 명령대로 CPU가 실행하는 단계이다.

 


Section 05. 하드웨어 구성의 재접근

 

지금까지 내용을 바탕으로 질문에 답해 보자

 

   하나 . 명령어 실행을 위해서 제일 먼저 하는 일이 Fetch인데 어떠한 이동 경로를 통해서 명령어의 Fetch가 진행되는  것인가?            버스 시스템

   . 명령어를 CPU안에 가져다 놓을 때 어디에 저장하는 것이가?     IR(Instruction Register) 레지스터

   . CPU안에 가져다 놓은 명령어는 Decode 단계에서 해석되는데 이는 CPU안에 존재하는 누구에 의해서 진행되는 것이가?                  Control Unit

   . 마지막 단계인 Execution은 누구에 의해서 진행되는가?     ALU(Arithmetic Logic Unit)

        

 

> 데이터 이동의 기반이 되는 버스 시스템

[1-5] 버스 시스템의 구성

① Data Bus : 데이터를 이동하기 위해 필요한 버스

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

③ Control Bus : CPU가 원하는 바를 메모리에 전달할 때 사용한다. CPU와 메모리 사이에 데이터를 보낼 것인지 받을 것인지에 대한 적절한 사인이 오고 가야 한다.

 

다음 그림은 지금까지 설명한 내용들을 구체화 한 것이다.

[1-6] 폰 노이만의 컴퓨터 구조 구체화

출처 : 윈도우즈시스템프로그래밍 (한빛미디어)

Comments