> - 폰 노이만 아키텍쳐 > - The Fetch-Execute Cycle > - 주기억장치와 보조기억장치 <br> ## 폰 노이만 아키텍쳐 ![center|350](The_von_Neumann_Architecture.png) #### 특징 - 정보를 처리하는 부분과 정보를 저장하는 부분이 분리되어 있음 <br>![[Data_flow_through_a_von_Neumann_machine.png]] > 컴퓨터는 정보를 저장하고, 검색하고, 처리할 수 있는 장치 > 그러므로 컴퓨터에게 주는 모든 명령어는 이런 일들과 관련이 있음 <br> #### 다섯가지 구성 요소 - **memory** (기억장치) : 데이터 및 명령어를 저장 - 메모리는 **셀(cell)**을 모아둔 것으로, 각 셀은 고유한 **물리 주소**가 있음 - addressability(주소지정 능력) - = 메모리에서 주소 지정이 가능한 셀에 저장된 비트의 수 - 주소가 지정되는 위치의 비트의 수가 기계에 따라 다름 - 요즘 대부분의 컴퓨터는 매 **바이트**마다 주소가 지정됨 - 예를 들어, addressability가 8이고 메모리에 256개의 셀이 있다면 다음 그림과 같이 주소가 지정됨 <br>![[memeory_address.png]] - 바이트나 워드에 들어 있는 비트를 가리킬 때, 비트는 오른쪽에서 왼쪽 방향으로 0부터 시작하여 번호가 부여됨 <br>![[bit_position.png]] <br> - **ALU**, arithmetic/logic unit (산술/논리 연산 장치) : 데이터에 대한 산술 및 논리 연산을 수행 - 기본적인 산술 연산 및 논리 연산을 수행함 - **워드(words)** 단위로 처리됨 → 역사적으로 하나의 컴퓨터의 워드 길이는 ALU에 의해서 한 번에 처리되는 비트의 수였음 - **레지스터(Register)** - 레지스터들은 하나의 워드를 갖고 있음 - 곧 다시 쓰이게 될 정보를 임시로 저장하는 데 쓰임 → 메모리 위치에 접근하는 것보다 레지스터에 접근하는 게 훨씬 빠름 <br> - **input unit** : 컴퓨터 외부로부터 내부로 데이터를 이동시키는 입력 장치 - 키보드, 마우스 등 - **output unit** : 컴퓨터의 내부에서 외부로 결과를 이동시키는 출력 장치 - 모니터, 프린터기 등 <br> - **control unit** (제어 장치) : 다른 모든 구성 요소가 유기적으로 작동하도록 관리 - fetch-execute cycle을 담당함 - 특별한 레지스터 2개를 가지고 있음 - instruction register (IR) : 실행 중인 명령어를 가지고 있음 - program counter (PC) : 다음에 실행될 명령어의 주소를 가지고 있음 <br> #### Stored-Program 개념 (내장 프로그램) - 폰 노이만이 1944-1945에 **데이터와 데이터를 조작하는 명령어가 논리적으로 같다**는 것을 밝힘 → 즉 데이터와 명령어를 함께 저장할 수 있음 <br> ## The Fetch-Execute Cycle (인출-실행 주기) ✨ > 폰 노이만 아키텍쳐에 따르면 데이터와 명령어는 논리적으로 비슷해서 같은 방식으로 다룸 > 즉, 둘 다 주소가 지정된다는 것을 의미함 > → 명령어(코드)는 연속적인 메모리 공간에 저장됨 > → 처리할 데이터는 메모리의 다른 구역에 저장됨 <br> #### 프로세싱 주기 단계 - 처음 fetch-execure cycle을 시작하기 위해서는 **프로그램의 첫 번째 명령어의 주소를 PC에 로드한다** - 다음 명령어를 가져온다 (Fetch) - PC에 로드된 메모리 주소로 접근해서 워드의 내용(명령어)를 복사해 IR에 저장 - PC에 현재 명령어의 길이(바이트 수)를 더해서 다음 명령어의 주소를 저장 - 가져온 명령어를 디코드한다 (Decode) - IR에 있는 명령어를 실행하기 위해 무슨 명령인지 해독해야 함 - CPU 안의 회로 논리에 따라 어떤 연산을 실행할 지 결정함 - 필요하다면 데이터를 가져온다 - 명령어를 실행한다 (Execute) - 명령어가 해독되고 필요한 operand(data)가 CPU로 불러들여지면 명령 실행할 준비가 끝남 - ALU에 처리를 요구하는 신호를 전송함 <br>![[fetch-execute_cycle.png]] ![[how_ALU_works.png]] ![[fetch-execute_cycle_example.png]] <br> ## RAM과 ROM (주 기억장치) - **RAM**: random-access memory - RAM 안에 있는 각 셀(보통 바이트)에 직접적으로 접근할 수 있는 메모리 - 각 셀에 다른 종류의 비트 패턴을 저장함으로써 각 셀의 비트 패턴을 변경할 수 있음 (데이터 변경 가능 - 휘발성 메모리 : 전원 꺼지면 즉시 비트 패턴을 잃어버림 - ROM: read-only memory - ROM에 있는 데이터는 변경할 수 없음 - burning : ROM에 비트 패턴을 저장하는 작업 (ROM이 최초로 만들어질 때 구워짐) - 영구적 메모리 : 전원이 꺼져도 비트 패턴 유지됨 → 컴퓨터 부팅할 때 필요한 명령어들을 저장하는 데 사용함 <br> ## 보조 기억장치(Secondary Storage Devices) - 주 기억장치의 대부분은 휘발성이고 그 크기가 제한적이기 때문에, 전원이 꺼지거나 프로그램/데이터를 더이상 처리하고 있지 않을 때도 계속 유지 저장할 수 있는 다른 종류의 저장 장치가 필요함 - 마그네틱 테이프 - 마그네틱 디스크 (하드 디스크 드라이브, HDDs) - CD 랑 DVD - Flash 드라이브 (USB나 SSD) <br> ## 임베디드(Embedded) 시스템 - 임베디드 시스템 = 일부로 제한적인 기능만을 수행하도록 설계된 컴퓨터, 특장한 목적을 가진 컴퓨터 - 보통 한 개의 마이크로세스프로세서의 칩에 들어있고, 프로그램은 ROM에 저장하고 있음 - 시계, 전자레인지, 자동차 등 디지털 인터페이스를 가진 모든 제품들이 임베디드 시스템을 사용함 - 어디에나 있음 (유비쿼터스) - 범용 컴퓨터(universal computer)와는 반대되는 개념 <br> ## 병렬(Parallel) 컴퓨팅 - 물리적인 CPU, 프로세서를 여러개 두고 프로세스를 처리하는 컴퓨팅 방법 - bit level, instruction level, data level, task level 의 네 가지 형태가 있음 - 명령어 수준 : 서로 관련성이 없는 데이터를 연산하려고 할때, 이 연산들을 동시에 수행 가능 - 데이터 수준 : 하나의 명령어 조합이 동시에 다른 데이터 조합에 대해 병렬로 실행될 수 있다는 생각에 기초함 - SIMD(single instruction, multiple data)라고 불림 - 많은 양의 데이터 집합에 동일한 처리과정을 적용할 필요가 있을 때 효과적 e.g. 이미지 밝기 증가 - **작업 수준** : 여러 개의 프로세서들이 동일하거나 다른 데이터에 대하여 서로 다른 작업을 실행할 수 있다는 생각에 기초함 - 폰 노이만 머신의 **파이프라이닝(pipelining)** 개념과 비슷함 - 파이프라이닝 = 각 명령어를 중복해서 실행할 수 있도록 좀 더 작은 단계로 명령어를 분할하는 기술 - 각 프로세서가 이전 단계로부터 데이터를 받아다가 처리하고 각각 다음 단계로 작업을 넘김 e.g. 머지 정렬 <br> <br> <br> <br>