Be myself :: 폰노이만 구조

달력

32024  이전 다음

  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31

 

개요

앞서 폰 노이만의 구조에 대해 살펴 보았고, 이제 그러한 구조(Stored program concept) 속에서 프로그램이 어떻게 동작하는지 알아보겠다.

 


테스트 환경 (해당 될시에만)

 

 운영 체제 (OS) : Windows 7

 


 

상세 분석

 

 

 

필자의 그림이 마음에 안들더라도 참고 봐 주었으면 한다.(그림판으로 처음 그린다..) 위의 그림은 컴퓨터 내부 구조를 간략하게 표현한 것이다. 프로그램이 실행 되는 과정에 따라 살펴보자. 

1. 첫번째, fetch

메인 메모리에서 명령어가 순차적으로 I/O bus(address Bus, Data Bus, control Bus로 구성 되어 있다.) 에서 Data Bus를 통해 cpu의 bus interface에 전달된다. 사실 이 과정이 일어나기 전에 가상메모리 기법(페이징 기법)을 통해 프로세스 별로 4G의 메모리를 할당 받고, HDD에 있는 데이터(명령어)들을 가상메모리에 위치 시키는 과정 (windows 에서는 PE구조등의 원리를 통해, linux 에서는 elf[Executable and Linkable Format]를 통해) 이 이루어 진다. 이러한 과정은 다음에 설명 하도록 하자. 

 

2. 둘째, Decode

bus interface에 전달된 명령어는 먼저 레지스터(eip레지스터)에 전달되고, 이 명령어는control unit을 통해 어떤 명령어 인지 해석하는 과정이 일어난다.

 

3, 셋째, Excution

컨트롤 유닛을 통해 해석된 명령어를 실행되는 과정이다. 이 과정은 명령의 종류에 따라 다르다. 산술 처리 명령(사칙연산 등)은 레지스터를 통해 연산하는 과정을 거치고, 명령 흐름 변경 명령(jmp명령등. 이러한 상황은 함수가 리턴 되거나 조건 분기 문(if,while,for문 등)을 통해 일어난다.) 은 pc레지스터에 다음에 실행될 명령어를 넣는 작업을 하고, 데이터를 주고받는 명령의 경우 레지스터와 데이터를 주고 받거나 I/O bus를 통해 데이터를 메인 메모리와 주고 받는다. 

 

4. 클럭

정리하자면, 전체적인 프로그램의 실행 단계는 위의 3단계를 거친다. 하지만 부가적으로 위의 그림에서도 보이듯이, 모니터나 그래픽카드, 마우스, 키보드 등.. 여러가지 장치들이 IO bus에 연결되어 있는 것이 보인다. 이것이 뜻하는 바는 cpu가 메인메모리에서 프로그램의 실행 명령을 읽어 각 모니터에 화면의 픽셀 정보를 뿌려주고나 마우스의 동작을 읽어 변수에 저장하여 프로그램의 흐름을 바꾸거나 하는 등의 과정이 일어나는 것을 의미한다. 하지만 이러한 과정이 오류없이 잘 일어나게 하기 위해선 각 장치간 속도를 맞춰주어야 하는데, 이 때, '클럭'이라는 기법을 도입하게 된다. 

예를 들어

연산장치 -----> BUFFER -----> 출력장치 

이러한 과정이 일어난다고 해보자. 

이때, 연산장치의 속도가 출력장치의 속도보다 더 빠르다고 가정해보자.

그렇게 되면, 출력장치는 버퍼의 데이터를 받아 가져가게 되는데 속도가 연산장치보다 느리기 때문에 buffer가 넘치게 되고 buffer에 들어 오는 데이터는 중첩되어 데이터 손실이 일어나 문제가 발생한다.

출력장치의 속도가 연산장치보다 빠르다고 할 경우 출력장치는 버퍼의 내용을 다시한번 가져가 같은 내용을 두번 출력하는 문제가 발생한다. 이 문제를 해결하기 위해 , CPU는 클럭 신호에 맞추어 연산을 한다.(이러한 원리는 조합 논리회로의 특성을 이용한 것인데 이에 대해선 논리회로 관련 책이나 사이트를 참고하자.)

 

참고 URL 및 도서

뇌를 자극하는 윈도우즈 시스템 프로그래밍 -윤성우

- windows 구조와 원리 -정덕영 

- 뇌를 자극하는 프로그래밍 원리 -한세경

 

Posted by flack3r
|