Fundamental of CS/: : Computer Architecture 9

x86-64 CPU 레지스터(Register) 종류, 32bit / 64bit 비교

1. 레지스터란?   CPU의 빠른 데이터 처리를 돕기 위해 사용되는 임시저장공간으로, 처리중인 데이터나 처리 결과를 담는다.  레지스터의 종류에는 범용 레지스터, 세그먼트 레지스터, 포인터 레지스터, 인덱스 레지스터, 플래그 레지스터가 있다.    32bit, 64bit 운영체제에서 32bit, 64bit 는 레지스터 및 데이터 경로의 크기 를 의미한다.  위 예시에서 AH 는 8bit 운영체제와 호환되는 레지스터라고 이해하면 된다.    운영체제의 발전에 따라, 수행해야할 기능이 많아지면서  많은 정보를 다룰 수 있도록 새로운 레지스터가 추가되고, 크기도 점점 커졌다. ※ E 는 Extended 의 약자. CPU의 아키텍쳐에 따라 레지스터의 종류가 다를 수 있다.     2. 범용 레지스터   범용 ..

The Stack : 인터럽트 메커니즘(Interrupt Mechanism)

0. Intro TRAP 명령어를 활용하면 운영체제의 코드에 해당하는 서비스 루틴을, JSR/JSRR 명령어를 활용하면 프로그래머가 직접 작성한 서브 루틴을 실행한 뒤 원래 프로그램의 실행 흐름으로 돌아온다. 그리고 둘 다 돌아올 때는 RET(= JMP R7) 명령어를 사용한다. 인터럽트 메커니즘도 어찌 보면 비슷할 수 있다. 외부 장치에 의해 인터럽트가 발생하면 그 장치가 요청한 인터럽트 서비스 루틴을 실행하러 잠시 어디론가 갔다가 다시 돌아오기 때문이다. 하지만 인터럽트 메커니즘은 TRAP 서비스 루틴 호출이나 JSR/JSRR 서브 루틴 호출과 그 방식이 아예 다르다. 인터럽트 메커니즘의 중요한 핵심은 해당 인터럽트 서비스 루틴에 갔다가 돌아왔다는 사실을 프로세서가 전혀 알지 못해야 한다는 것이며, ..

Trap Routines and Subroutines - 시스템 함수와 사용자 함수

0. Intro 인간의 뇌가 감당할 수 있는 복잡성에는 한계가 있기에, 인간은 여러 추상화 기법들을 발전시켜 나갔다. 대표적으로 데이터 추상화(Data Abstraction)와 함수 추상화(Functional Abstraction)가 있다. 데이터 추상화(Data Abstraction)는 현실에 존재하는 특정 객체의 복잡한 속성을 딱 필요한 것으로만 단순화하여 표현하는 것을 말한다. 가령 '학생'이라는 객체는 이름, 키, 나이, 학번 등의 속성으로 정의할 수 있다. 반면 함수 추상화(Functional Abstraction)는 자주 수행되는 특정 동작의 코드들을 하나의 뭉치(Segments)로 만들고, 필요할 때마다 그것을 재활용하는 것을 말한다. 그 코드 뭉치(Code Segments)를 컴퓨터 용어로..

IO - 입출력장치

0. Intro 우리는 지금까지 메모리에 올라가 있는 프로그램의 명령어들을 해석하고 실행하는 것과 관련한 내용들을 다루었다. 그러면 이제 다음 물음을 던져야 할 때이다. "메모리의 데이터는 어디에서 온 것일까??", "메모리의 데이터는 어떤 과정을 거쳐서 인간이 볼 수 있는 형태로 출력이 되는 것일까?" 이 물음에 대한 답은 바로 입출력(I/O) 장치에서 찾을 수 있다. 프로그램을 실행하는 것도 결국은 하드디스크라는 외부 장치로부터 프로그램 코드를 입력받아 메모리에 올리는 것으로 해석할 수 있다. 이번 포스팅에서는 그러한 입출력 장치에 대해 조금 더 자세히 알아보도록 할 것이다. 1. 입출력 장치 (Input and Output Device) 1-1. 장치의 분류 I/O 장치는 다음과 같이 대략 두 가지..

어셈블리어, 어셈블러 (Assembly Language)

이전엔 ISA에 대해 공부했고, 그 규칙을 이해하여 기계어를 코딩하면 CPU에게 원하는 동작을 수행시킬 수 있음을 알게 되었다. 그러나 0과 1만으로 직접 코딩을 하는 건 너무 불편했다. (오래 전 전산학 전공하신 분께서 천공 뚫는게 지겨워 그만두셨다는걸 힘껏 이해할 수 있었다.) 그래서 인간에게 조금 더 친숙한 형태로 어셈블리어(Assembly Language)가 고안이 되었고, 그 결과 프로그램 개발 속도가 혁신적으로 향상되었다. 어셈블리어는 저급 언어(Low-level Language)라고 부르기도 한다. CPU가 저급 언어로 작성된 프로그램을 이해해서 실행하려면 변환 과정이 필요하다. 저급 언어로 작성된 코드는 어셈블러(Assembler)라는 프로그램에 의해 CPU의 ISA 체계에 맞게 기계어로 ..

ISA (Instruction Set Architecture - by The LC-3)

0. Intro 지금까지 언급한 ISA(Instruction Set Architecture)의 정체는 무엇일까? ISA도 결국 특정 규칙과 체계를 가지고 있는 하나의 언어이다. 다만, 한국말이나 영어와 같은 자연어가 아니고, C 언어나 자바와 같은 고급 언어도 아니며, CPU가 이해할 수 있는 0과 1로 이뤄진 기계어일 뿐이다. 이번 포스팅에서는 ISA의 개념에 대해 명확히 이해해 보고, 우리가 공부해볼 LC-3라는 교육용 ISA의 명령어 체계에 대해 구체적으로 한 번 알아볼 것이다. 1. ISA (Instruction Set Architecture) ISA는 해당 CPU가 어떤 데이터들을 대상으로 어떤 연산들을 수행할 수 있는지, 어떤 종류의 레지스터들을 몇 개 사용하는지, 어떤 구조의 메모리와 호환이..

Von Neumann Model (폰 노이만 구조)

1940년대 말에 폰 노이만(Von Neumann)이 제시한 아이디어로, 그는 인류 역사상 위대한 천재 중 한 명으로 꼽힌다. 미국에서 수학자&물리학자로서 넓은 분야에서 활동하던 인물로, 컴퓨터 분야에서도 지금까지 언급될 만큼 위대한 업적을 남겼다. 바로 현대 컴퓨터의 기본 구조를 확립한 것이다. 0. Stored-Program Computer (프로그램 내장식 컴퓨터) - 현대 컴퓨터의 기본 구조 폰 노이만은 EDVAC이라는 컴퓨터에 대한 보고서의 초안에서 메모리에 프로그램이 저장되는 방식을 소개하며, 훗날 폰 노이만 구조라 불리는 컴퓨터 아키텍쳐를 제안하였다. 전자식 기억장치에 프로그램 명령어를 저장하는 전산기이다. 폰 노이만 구조는, 프로그램 데이터와 명령어 데이터를 같은 메모리에 저장하는 프로그램..

CPU & System BUS

명령어 처리 절차 (Instruction Processing) 1. FETCH 메모리에 저장된 명령어를 읽어오는 과정이다. PC에 저장된 메모리 주소를 MAR에 저장하여 명령어를 MDR로 읽어 들이고, MDR에 저장된 명령어를 IR로 옮기면 된다. 그리고 PC의 값을 1만큼 증가시켜서 다음 FETCH를 수행할 때는 바로 다음에 위치한 명령어를 읽을 수 있게 한다. 2. DECODE 명령어가 어떤 종류의 명령인지 파악하는 과정이다. 명령어의 opcode에 해당하는 부분을 CPU 내 Decoder에 입력하여 어떤 명령인지 파악하고, 그것에 따라 opcode를 제외한 나머지 비트를 해석하는 방법을 결정하게 된다. 예를 들어 ADD 명령어는 opcode를 제외한 하위 비트 중 어떤 부분은 첫 번째 피연산자에 해..

컴퓨터 구조를 이해해야 하는 이유

동일한 코드로 작성했는데, 내 컴퓨터에서는 정상동작 하지만 특정 컴퓨터에서는 제대로 동작하지 않는다면? 사실 이러한 일은 생각보다 빈번히 발생합니다. 하지만, 컴퓨터 구조를 모른 체 프로그래밍 문법 학습에만 치중한다면, 위와 같은 문제가 발생했을 때 해결하기 어렵겠죠. 반면, 컴퓨터가 동작하는 원리를 근본적으로 이해한다면 문제 해결의 실마리를 다양한 측면에서 찾을 수 있고, 문제 상황을 빠르게 파악할 수 있을 겁니다. 또한, 사용자가 많은 프로그램을 개발할 때에는 성능/용량/비용을 고려하여 개발할 수 있습니다. 컴퓨터 구조의 내용은 결국 성능/용량/비용과 깊은 연관이 있기 때문입니다. 컴퓨터 구조를 이해해야 하는 이유 문제 상황을 빠르게 파악할 수 있고, 문제 해결의 실마리를 다양한 측면에서 찾을 수 있..