안녕하세요. IT 엘도라도 에 오신 것을 환영합니다.
글을 쓰는 것은 귀찮지만 다시 찾아보는 것은 더 귀찮습니다.
완전한 나만의 것으로 만들기 위해 지식을 차곡차곡 저장해 보아요.   포스팅 둘러보기 ▼

컴퓨터 구조 (Architecture)/컴퓨터의 개념 및 실습 (15)

[Chapter 14] Functions - 함수

우리는 앞서 어셈블리어 수준에서 서브 루틴이라는 것이 무엇이고, 어떻게 구현하는지 알아본 바 있다. 그러한 서브 루틴을 프로그래머가 쉽게 구현하고 사용할 수 있도록 고급 언어가 제공하는 기능이 바로 함수(Function)이다. 함수는 이전 포스팅에서 말했듯, 빈번히 사용되는 코드들의 뭉치를 추상화하여 그 활용성을 높인 것이다. 따라서 프로그래머는 함수라는 고급 언어의 기능을 활용하면 더욱더 직관적이고 효율적으로 프로그래밍을 할 수 있다. 그리고 고급 언어의 함수는 컴파일러에 의해 어셈블리어 수준의 서브 루틴으로 번역이 되는데, 그 구체적인 번역 과정에 대해서도 이번 포스팅에서 다룰 것이다. 고급 언어의 함수가 내부적으로 어떻게 구현이 되는지를 이해하는 것은 상당히 중요하므로 이번 포스팅은 꼼꼼히 읽어보기..

[Chapter 13] Control Structures - 조건문, 반복문

이번 포스팅에서는 C 언어가 제공하는 조건문과 반복문이 어떻게 어셈블리어로 번역이 되는지를 한 번 다뤄볼 것이다. 물론 이는 C 언어 강좌 포스팅이 아니기 때문에 C 언어가 제공하는 조건문 및 반복문의 문법에 대한 내용은 따로 설명하지 않을 것이다. 문법은 이미 어느 정도 알고 있다는 가정 하에, 그러한 조건문과 반복문이 어떤 방식으로 번역이 되는지에 초점을 맞춰보도록 하자. 1. 조건문 계산되는 Expression의 값에 따라 실행할 코드를 선택하게 하는 구문이다. C 언어는 조건문으로서 if 문, if-else 문, switch 문을 제공한다. 각각에 대해 알아보도록 하자. 1-1. if 문 condition은 C 언어 Expression에 해당하며, 0으로 계산되면 거짓, 0이 아닌 값으로 계산되면..

[Chapter 12] Variables and Operators - 변수와 연산자

앞선 포스팅에서 고급 언어에 대한 기본적인 개념을 알아보았다면, 이제는 본격적으로 C 언어를 파헤쳐볼 시간이다. 먼저 C 언어의 가장 기본적인 구성 요소에 해당하는 변수, 연산자의 개념을 살펴보고, LC-3를 기준으로 각 변수가 하드웨어 수준에서 어떤 원리로 할당과 접근이 이뤄지는지 알아보도록 할 것이다. 1. 변수 1-1. 변수 (Variables) 변수란 값이 위치하는 공간을 나타내며, 변수의 이름은 곧 그 공간에 붙여진 이름이다. 변수의 값은 언제든 바꿀 수 있는 가변적인 값이다. 반면 상수란 바꿀 수 없는 고정적인 값을 의미한다. 변수와 상수는 둘 다 값이기 때문에 자료형을 반드시 가진다. 1-2. 자료형 (Data Type) 이전 포스팅에서 설명했듯이, 자료형이란 해당 데이터가 어떤 유형의 데이..

[Chapter 11] Introduction to Programming in C - 고급 언어의 세계로

이제 우리는 어셈블리어로 작성된 프로그램이 어떠한 원리로 CPU에 의해 실행이 되는지 이해할 수 있는 수준이 되었다. 그러나 실제로 프로그래밍을 할 때 어셈블리어를 쓰는 사람은 거의 없다. 대부분의 프로그래머는 C 언어나 파이썬과 같은 고급 언어를 사용하여 프로그래밍을 한다. 따라서 이번 포스팅에서는 어셈블리어보다 한층 더 추상화된 고급 언어에 대한 기본 개념을 알아보고, 대표적인 고급 언어에 해당하는 C 언어와 관련한 내용도 간단하게 살펴볼 것이다. 우리의 최종 목표는 C 언어로 작성된 프로그램이 어떻게 어셈블리어로 번역이 되어 실행으로까지 이어지는지 이해하는 것이다. 1. 고급 언어의 특징 C 언어와 같은 고급 언어들은 어셈블리어나 ISA와 비교했을 때 어떠한 특징을 가지고 있을까? 몇 가지만 간단하..

[Chapter 10] And, Finally... The Stack - 인터럽트 메커니즘

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

[Chapter 9] Trap Routines and Subroutines - 시스템 함수와 사용자 함수

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

[Chapter 8] IO - 입력 및 출력 장치

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

[Chapter 7] Assembly Language - 어셈블리어, 어셈블러

* [Chapter 6]은 컴퓨터 구조 개념과는 다소 거리가 먼 프로그래밍 방법론에 대해 설명하는 챕터이기 때문에 과감하게 생략하였다. 지금까지 우리는 ISA에 대해 공부했고, 그 규칙을 이해해서 기계어를 코딩하면 CPU에게 원하는 동작을 수행시킬 수 있음을 알게 되었다. 그러나 0과 1만으로 직접 코딩을 하는 건 너무 불편했다. 그래서 인간에게 조금 더 친숙한 형태로 어셈블리어(Assembly Language)가 고안이 되었고, 그 결과 프로그램 개발 속도가 혁신적으로 향상되었다. 어셈블리어는 저급 언어(Low-level Language)라고 부르기도 한다. 저급 언어로 작성된 프로그램을 CPU가 이해해서 실행하려면 변환 과정이 필요하다. 저급 언어로 작성된 코드는 어셈블러(Assembler)라는 프로..

[Chapter 5] The LC-3 - ISA를 이해하는 첫 걸음

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

[Chapter 4] The Von Neumann Model - 현대 컴퓨터의 기본 구조

인류 역사 상 위대한 천재 중 한 명으로 꼽히는 폰 노이만(Von Neumann)이라는 인물에 관해 들어본 적이 있는가? 그는 미국에서 수학자 및 물리학자로서 넓은 분야에 걸쳐 활동하던 인물인데, 컴퓨터 분야에서도 지금까지 회자될 만큼의 위대한 업적을 남겼다. 바로 현대 컴퓨터의 기본 구조를 확립한 것이다. EDVAC이라는 컴퓨터에 대한 보고서의 최초 초안에서 메모리에 프로그램이 저장되는 방식을 소개하며 훗날 '폰 노이만 모델(Von Neumann Model)'이라 불리는 컴퓨터 아키텍처를 제안했는데, 그 방식이 지금까지도 컴퓨터를 만드는 기본 구조로 채택되고 있다. 그렇다면 폰 노이만 모델이라는 게 무엇인지 이번 포스팅에서 한 번 알아보도록 하자. 1. 폰 노이만 모델 (Von Neumann Model..