전체 글 178

[CSAPP] Ch 2. 정보의 표현과 처리 : (2) 정수의 표시

2.0 Intro 이 절에선 정수를 인코딩하기 위해 사용할 수 있는 두 가지 방법 (양수만 표시할 수 있는 방법과, 음수, 0, 양수 모두를 표시할 수 있는 방법) 에 대해 설명한다. 나중에 이들이 수학적 특성, Low-Level 수준을 볼 때 매우 연관되어있음을 알게 될 것이다. 그리고 인코딩된 정수를 다른 길이의 표현에 맞도록 조절하기 위해 확장하거나 축소하는 효과에 대해서도 살펴본다. 2.1 정수형 데이터 타입 2.1.1 C의 다양한 정수형 데이터 타입 아래 두 그림에는 전형적인 32bit와 64bit 프로그램들에서 이들이 갖는 값의 범위를 나타내었다. 각 타입은 unsigned로 선언되어 표시된 숫자가 모두 양수인지, 아니면 기본타입으로 음수도 나타낼 수 있는지 뿐만 아니라 키워드 char, sh..

[CSAPP] Ch 2. 정보의 표현과 처리 : (1) 정보의 저장

Ⅱ. 정보의 표현과 처리   2.0. Intro   현대의 컴퓨터는 두 개의 값을 갖는 신호로 표현되는 정보를 저장하고 처리한다. 이진수인 비트는 디지털 혁명의 근원인다. 이 비트들을 묶어서 가능한 다른 비트 패턴에 의미를 부여하도록 특정 해석방법을 적용하면(PCM), 어떤 유한집합의 원소들을 표시할 수 있게 된다.   이 장에서는 세 개의 가장 중요한 숫자 표현에 대해 살펴본다.    비부호형 인코딩 : 어떤 연산의 경우에는 그 결과값이 표시할 수 없을 정도로 커서 오버플로우를 발생시킬 수 있다.   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 체계에 맞게 기계어로 ..

Sampling & Quantization

표본화(Sampling) 소리는 연속적인 데이터이다. 소리 데이터를 컴퓨터에 저장하기 위해서는 Sampling과 Quantization을 통해 discrete하게 표현해야 한다. 먼저, 실수형태인 시간을 저장하기 위해 sampling을 진행한다. □ Sampling이란 시간을 이산적인 구간으로 나누는 것이다. 즉, 샘플링 간격에 따라 amplitude를 측정하는 것이다. 1초의 연속적인 신호를 몇개의 숫자들의 sequence로 표현할 것인가를 sampling ratefs​이다. sampling rate가 클수록 즉, 자주 sampling할 수록 원본 데이터와 비슷할 것이다. 그러나 그만큼 저장해야 하는 데이터의 양이 늘어나게 된다. sampling rate가 작게 되면 아래와 같이 aliasing이 일어..

해시(Hash)

1. 해싱을 이용한 탐색 다양한 방법으로 구현한 맵의 최고성능은 시간 복잡도 O(logn)이다.그러나, 이보다 더 빠른 탐색시간을 갖는 해싱으로 맵을 구현하면 탐색 연산의 이론적인 시간 복잡도가 O(1)이 된다.   1.1 해싱이란?  해싱은 하나의 문자열을 보다 빨리 찾을 수 있도록 해시 함수에 문자열 입력값을 넣어, 주소에 직접 접근할 수 있는 짧은 길이의 값이나 키 특정한 값으로 추출하는 것을 의미한다.    문자열을 찾을 때, 키값의 문자를 일일이 비교하는 것이 아니라, 문자열에 산술적인 연산으로 해시 키를 계산하여 인덱스(항목이 저장된 위치)에 직접 문자열을 저장해 둔다면, 찾을 때는 한 번의 해시 키 계산만으로 도 쉽게 찾을 수 있게된다.이렇게 키값의 연산에 의해 직접 접근이 가능한 구조를 H..

빅 오(Big O) : N개의 원소일 때, 몇 단계가 필요한가?

빅 오(Big O) Computer Scientist들은 서로간에 시간 복잡도를 쉽게 소통할 목적으로 자료구조와 알고리즘의 효율성을 간결하고 일관된 언어로 설명하기 위해 수학적 개념을 차용했다. 이러한 개념이 빅 오(Big O) 표기법이다. 빅 오(Big O)가 의미하는 것 - 데이터 원소가 N개일 때, 알고리즘에 몇 단계가 필요한가? [배열 읽기에 필요한 단계 수] : O(1) → (N과 무관하게) 배열에 원소가 몇 개든 배열에서 읽기는 항상 한 단계면 된다. [N개 배열의 선형 검색 단계 ] : O(N) → 배열의 선형 검색에는 N단계가 필요하다 [이중 배열의 선형 검색 단계] : O(N^2) → 이중 for문을 사용하므로 N의 2승 단계가 필요하다. 빅 오(Big O)가 나타내는 또다른 깊은 의미 ..