[윈도우 시스템 프로그래밍]

[윈도우즈 시스템 프로그래밍] 컴퓨터 구조 1

회색세계 2019. 4. 1. 22:52

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

 시스템 프로그래밍이란?

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

  - 하드웨어를 사용할 수 있도록 도와주는 프로그램

 

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

  CPU <=> 캐쉬(Cache) <=> 메인 메모리 <=> 하드 디스크

      [ 컴퓨터 구조]                         [ 운영 체제 ]

 

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

 

컴퓨터 하드웨어의 구성

CPU(Central Processing Unit)    : 중앙처리장치로 연산을 담당. 

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

입 출력 버스(Input/Output Bus) : 컴퓨터를 구성하는 구성 요소 사이에서 데이터를 주고 받기 위해 사용되는 경로

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

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

 - Control Bus  :  데이터를 보내거나 받는 것을 알리기 위한 버스.

 

3. CPU에 대한 이해

ALU : CPU 내에서 실제 연산을 수행하는 장치. 덧셈이나 뺄셈과 같은 산술 연산과 AND나 OR와 같은 논리 연산을 수행.

컨트롤 유닛 : CPU에 들어어온 명령어를 해석하고, 해석된 결과를 바탕으로 ALU가 이를 처리하게 함.

레지스터 : CPU 내에서 사용하는 아주 작은 메모리로 명령어 및 데이터를 저장하는 저장장치. 

버스 인터페이스 : CPU 내에서 I/O 버스의 프로토콜을 이해하는 장치.

클럭 신호(Clock Pulse) : CPU를 구성하는 요소는 아니지만 동기를 맞추기 위해 사용.

                               동기가 맞지 않을 시 버퍼를 덮어 쓰는 등의 문제가 발생. 

                               동기는 느린 장치의 속도에 맞춤.

 

4. 프로그램의 실행과정

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

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

      #include, #define과 같이 #으로 시작하는 지시자의 지시를 따라서 소스코드를 적절히 변경하는 작업

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

      소스코드는 컴파일러에 의해 어셈블리 코드로 번역된다. 어셈블리 코드는 이진 데이터를 조합해서 만들어진

      프로그램 코드를 의미

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

      바이너리 코드 : 1과 0으로만 구성되는 코드.

      컴퓨터는 오로지 1과 0만을 이해하기 때문에 어셈블리 코드는 바이너리코드로 번역되어야 함.

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

      프로그램 내에서 참조하는 함수나 라이브러리들을 하나로 묶는 작업. 이 과정이 끝나면 실제 실행 가능한 파일 생성

 

프로그램의 실행 과정

Fetch : 메모리상에 존재하는 명령어를 CPU로 가져오는 작업 (레지스터에 저장)

Decode : 가져다 놓은 명령어를 CPU가 해석하는 단계 (컨트롤 유닛)

Execution : 해석된 명령어의 명령대로 CPU가 실행하는 단계 (ALU)

 

출처: 뇌를 자극하는 윈도우즈 시스템 프로그래밍. 윤성우 저