CS

CS/자료구조

[자료구조 및 프로그래밍] 3. Queue (Circular Queue) - 2

지난 포스팅에서는 배열을 이용한 큐를 구현해보았다. front, back 변수를 모두 0으로 초기화 하였을 때, push: back 변수가 가리키는 인덱스에 데이터 추가, back >= size 이면 오버플로우 pop: front 변수가 가리키는 인덱스의 데이터를 제거, front >= back 이면 언더플로우 와 같이 구현할 수 있었다. 그러나 이렇게 구현하면 push 를 최대 N번, pop은 push 횟수 이하로만 할 수 있다는 문제가 있었다. 이번에는 Size N 이라는 메모리 공간에 중간중간 여유가 생긴다면 그 여유공간까지 활용하여 push 를 더 많이 할 수 있도록 기존의 큐를 개선하여 보겠다. 그림과 같이 사이즈 5인 큐에 모든 값이 다 들어있는 상황을 생각해보자. 현재 front 는 2이고,..

CS/어셈블리

[SPARC] 10. SPARC에서 사용하는 메모리 종류

지난 포스팅에서는 어셈블리 언어의 명령어 타입 3가지를 정리해보았다. 의사 명령어 / 기계 명렁어 / 합성 명령어 이렇게 3가지 종류의 명령어가 있었으며, 의사 명령어 = 기계어 번역 x, 어셈블러에게 추가 정보 전달 기계 명령어 = 기계어로 1:1 번역 합성 명령어 = 기계 명령어 형태로 바뀐 뒤 기계어로 번역 이렇게 정리할 수 있었다. 이번에는 SPARC에서 사용하는 메모리 종류에 대해 정리해보겠다. 프로그램에서 사용하는 메모리의 종류 프로그램에서 사용하는 변수는 크게 3가지가 있다. 1. 전역 변수 (Global Variable) 2. 지역 변수 (Local Variable) 3. 동적 할당 변수 (Heap) 전역 변수는 말 그대로 global 한 범위에서 사용이 가능한 변수이다. 전역 변수는 전역..

CS/자료구조

[자료구조 및 프로그래밍] 2. Queue (implement with Array) - 1

이번에는 큐를 배열을 통해 구현하는 과정을 정리하고자 한다. 구현에 앞서 '큐'의 개념을 살펴보자. 큐의 개념 이번에도 구글 번역기로한번 번역부터 해 보았다. 이번에는 번역기가 번역을 해준다! 번역의 결과가 큐를 말 그대로 설명해주고 있다. 큐는 '대기줄' 이다. 대기줄의 특성을 생각해보자. 식당에 (학교에서는 교수님이 '하카타분코' 라는 라멘집을 예시로 들어주신다 ㅋㅋ) 손님이 많아서 대기줄이 길게 있다고 할 때, 신규로 오는 손님은 대기줄의 '뒤'에 서게 되고, (push) 식당에 빈자리가 생기면 대기줄 맨 앞에 있던 사람이 들어가게 된다. (pop) 큐는 이를 그대로 표방하는 자료구조이다. 먼저 들어왔던 데이터가 먼저 나가는 First In First Out (FIFO) 방식의 자료구조이다. 큐는 ..

CS/어셈블리

[SPARC] 9. Assembly Language Programming

지난 포스팅에서는 SPARC 에서 사용하는 레지스터의 종류 4가지와, 레지스터 윈도우에 대하여 정리하였다. 이번에는 어셈블리 언어 프로그래밍의 기본 문법과 어셈블리 언어 명령어의 분류를 정리한다. 어셈블리 언어 기본 문법 - 각 줄의 코드는 명령어 또는 데이터 정의이다. - 매 줄 끝마다 세미콜론은 사용하지 않는다. - 콜론(:) 으로 끝나는 문자열을 '레이블' 이라고 한다. 이는 프로그램의 지표가 된다. - /* */ 를 를 이용해 다중 라인 주석을 적거나 ! 을 이용해 한 줄 주석을 적을 수 있다. - 어셈블리 언어의 명령어는 크게 3가지로 나뉜다. 1. Pseudo-operation (의사 명령어) 2. Synthetic instruction (합성 명령어) 3. Machine instruction..

CS/어셈블리

[SPARC] 8. SPARC Regsiter Window & Assembly Instruction Format

지난 포스팅에서는 SPARC 라는 ISA의 특징과 SPARC가 사용하는 레지스터의 종류에 대해 정리하였다. 이번에는 SPARC 만의 특징인 Register Window 와 일반적으로 어셈블리 언어에서 사용하는 명령어의 포맷을 정리하고자 한다. 1. Register Window 레지스터 윈도우는 알고리즘 기법 중 하나인 Sliding Window 와 유사한 느낌이다. Sliding Window 는 보통 덱을 활용해 정해진 메모리 크기 안에서 데이터를 넣고 빼면서 마치 창문을 옆으로 옮기듯이 메모리 사용 공간을 옆으로 옮겨가며 사용함으로서 전체 메모리 사용량을 줄이는 메모리 최적화 기법이다. SPRAC도 유사하게, 한번에 32byte 라는 레지스터만을 사용 가능한데 이 32byte 라는 레지스터 공간을 전체..

CS/어셈블리

[SPARC] 7. SPARC Architecture & Registers

지난 포스팅에서는 프로세서가 각 명령어들을 빠르게 처리하기 위해 파이프라이닝을 사용할 경우 발생할 수 있는 해저드의 종류와 해결 방법을 정리하였다. 이번 포스팅에서는 SPARC 라는 ISA 의 아키텍처와 레지스터 종류에 대해 정리하여 본다. 우리 학교는 어셈블리 실습으로 SPARC를 사용한다. 이 SPARC 라는 ISA의 주요 특징은 다음과 같다. 1. RISC 타입이다. 2. 명령어와 데이터의 크기가 모두 32bits 이다. 따라서 레지스터 하나의 사이즈도 32bit 이다. .3. 한번에 사용 가능한 레지스터의 개수가 32개이다. 하드웨어적으로는 더 많은 레지스터가 있지만, 한번에 32개씩만 쓸 수 있다. (Register Window System) SPARC 의 레지스터는 4가지 타입이 있다. 그리고..

CS/자료구조

[자료구조 및 프로그래밍] 1. Stack (implement with Array)

Stack ( 스택 ) 이란 스택이라는 자료구조는 매우 직관적으로 이해할 수 있는 자료구조이다. 스택이라는 말 자체가 이미 이 자료구조에 대해 모든 걸 설명하고 있다. 보통 스택이라고 하면 어떤 것들이 쌓여있는 형태를 의미하는데, 스택이라는 자료구조도 무언가를 쌓는 형태를 자료구조화 한 것이다. 가령 책이 한 무더기 쌓여있다고 해보자. 중간에 있는 원하는 책을 찾아 꺼내려면 어떻게 해야할까? 가장 당연하게 떠오르는 방법은 맨 위에 있는 책부터 하나씩 하나씩 확인하면서 찾을 것이다. 중간 어디에 있는지도 모르는데 책을 무더기로 들춰가면서 찾는 것은 너무 힘들지 않을까 그 책 무더기에 새로운 책을 여러권 놓는다고 해보자. 그러면 가장 먼저 놓은 책이 제일 밑에 놓이고, 가장 나중에 놓은 책이 맨 위에 놓이는..

CS/어셈블리

[SPARC] 6. Pipelining Hazard

지난 포스팅에서 하나의 명령어를 처리하는 과정을 여러 단계 (Stage) 로 나누어서 처리함으로서 여러 명령어를 처리하는 전체 시간을 줄이는 '파이프라이닝' 에 대하여 정리하였다. 이번에는 이 '파이프라이닝'을 사용하였을 때 발생할 수 있는 위험, Hazard, 에는 어떤 것들이 있는지, 그리고 각 Hazard를 어떻게 해결할 수 있는지 정리하고자 한다. 0. Hazard 각 명령어의 처리 단계 (F, E, M, W) 하나 하나는 클럭 사이클마다 진행된다. 이때 특정 클럭사이클에서 실행되어야 하는 다음 명령어가 실행되지 못하는 상황을 Hazard 라고 한다. Hazard는 크게 3가지 종류가 있다. 이제부터 하나씩 정리해보자 1. Structural Hazard (구조적 해저드) 구조적 해저드는 어떤 클..

CS/어셈블리

[SPARC] 5. Pipelining Analogy & SPARC Pipeline Stage Example

지난 포스팅까지 각 CPU 타입마다 주어진 연산을 어떤 과정과 명령어들로 처리하는지 정리하여보았다. 이번에는 이 각각의 명령어 하나하나를 어떤 과정으로 처리하는지 정리하고자 한다. 1. 명령어 처리 하나의 명령어를 실행하는 과정을 Instruction Cycle 이라고 한다. (실행주기 or 실행과정) 이를 간단하게 수도코드로 표현하면 아래와 같다. pc = 0; // pc => program counter do { instruction = memory[pc++]; // Instruction fetch (명령어 인출) decode(instruction); // Instruction decoding (명령어 해석) fetch(operands); // Operand fetch (피연산자 인출) execute..

CS/자료구조

[자료구조 및 프로그래밍] 0. 주소록 프로그램과 array (배열)

3글자의 알파벳으로 이루어진 이름과, 4글자의 숫자로 이루어진 번호 쌍을 저장하는 주소록 프로그램이 있다고 해보자. 이 프로그램에서 이름과 번호쌍을 어떻게 관리할 수 있을까? 대부분의 언어에서 기본으로 제공하는 '배열' 자료구조를 이용하여 구현한다면 아래와 같이 구현할 수 있을 것이다. 1. 두 배열을 이용하여 데이터를 저장하기 첫 번째 방법은 두 배열을 이용해서 이름과 번호를 저장하는 방법이 있다. 이름과 번호를 연결짓는 기준은 '배열의 인덱스' 가 된다. 이렇게 저장한 자료에서 이름을 기준으로 번호를 찾는다고 하면 아래와 같이 코드를 짤 수 있다. #include char name[10][3]; char number[10][4]; char find_name[3]; int main() { printf(..

에버듀
'CS' 카테고리의 글 목록 (24 Page)