심심해서 하는 블로그 :: 심심해서 하는 블로그

1. Bus

앞서 CPU와 메모리, I/O 장치 3가지의 요소에 대해 정리해보았다. 이제 이들의 "연결고리" BUS에 대하여 알아보자. 버스는 크게 데이터 버스, 주소 버스, 제어 버스로 나누어진다. 

 

데이터 버스

데이터 버스는 시스템 모듈들 간의 데이터 이동 경로를 제공한다. 주로 32, 64, 128 또는 그 이상의 분리된 선들로 구성되어 있으며 선의 수는 한 번에 전송할수 있는 비트 수를 결정지어 주는데 이것은 CPU가 수용할 수 있는 데이터의 크기, Word와 밀접한 관계가 있다.


주소 버스

주소 버스는 데이터의 근원지나 목적지의 일정한 메모리 주소를 전달하는 버스이다. 

주소 버스의 폭은 최대 기억장치의 용량을 결정지어 주는데 32개의 주소 버스를 지닌 컴퓨터 시스템은 2^32개의 메모리 위치를 할당할 수 있다. 또한 I/O포트를 지정하기 위해서도 사용되어진다.


제어 버스

제어 버스는 데이터 버스와 주소 버스를 제어하기위해 사용되어 진다. 데이터 버스와 주소 버스는 공유하는 선들의 집합이므로 이들을 제어하는 수단이 반드시 필요하기 때문에 사용한다. 


2. 동기식 버스 vs 비동기식 버스

동기식 버스

동기식 버스는 정해진 시간에 데이터를 전송하는 방법이다. 이 때 시간은 버스가 가지고 있는 Clock을 기준으로 하며 빠르고 인터페이스 논리회로가 간단하다는 장점이 있지만 느린 장비도 이 Clock에 맞춰야 한다는 점에서 시간 낭비가 발생할 수 있다. 


비동기식 버스

비동기식 버스는 동기식 버스와 달리 시간을 따로 정하지 않는다. 단지 서로 데이터를 주고 받을 준비가 되어있는지 확인하는 핸드쉐이킹 프로토콜을 사용하여 수신측에서 준비가 되었으면 바로 전송을 하는 방식이다.

장점은 따로 정해진 시간이 없기 때문에 시간 낭비가 적다는 점이고 단점은 회로 구성이 복잡하고 핸드쉐이킹하는 과정이 필요해서 속도도 동기식에 비해 느리다.


3. PCIe

버스의 특징이 공용 선이라는 것인데 이 특징덕분에 한 쪽이 데이터 선을 점령하면 다른 쪽에서는 신호 중첩을 유발 시킬수 있어서 사용을 하면 안된다. 이 점을 보완하기 위해 점대점 상호연결방식이 등장하였다.


QPI(Quick Path Interconnect)

다른 구성요소와 직접연결하는 점대점 상호방식중 하나로 레이어로 구성된 프로토콜 구조이므로 물리적으로 연결되어 있는 부분부터 오류의 존재 여부를 점검하는 등 각각의 레이어에서 하는 일을 구분되어 있다. 고속, 고효율의 패킷 기반의 전송방식을 사용하며 인텔의 i7 데스크톱 프로세서 이후로 사용되어지는 방식이다.


PCIe(Peripheral Component Interconnect Express)

버스를 1대 1로 연결해서 택시로 만들어 버렸다. 높은 용량덕분에 기가이더넷과 같은 빠른 데이터 속도의 I/O 디바이스를 지원하는데 사용되어지며 각각의 버스마다  독립적인 데이터 흐름을 제공하여 많이 사용되어진다. 또한 핀수가 적고 물리적 면적이 작으며 상세한 오류검출 및 보고구조 등의 장점을 가지고 있다.

최근엔 I/O 가상화도 지원한다.


 

,

1. Interrupt

집에서 열심히 라면을 끓이고 있다. (가난한 학생이니까 ㅠㅠ) 라면 물을 끓이고 스프를 넣고 면을 넣고 이제 대망의 계란을 넣을려고 냉장고로 갈려는 순간 갑자기 물이 끓어 넘칠려고 한다. 여러분의 아래의 두 개의 선택지 중에 어떤 것을 선택하겠습니까?


1. 나는 나의 길을 간다. 계란 꺼내고 불을 낮추러 간다.

2. 엄마한테 뒤지게 혼나기 싫다. 불부터 낮춘다. 


대다수의 사람들은 2번을 선택하였을 것이다. 엄마한테 뒤지게 혼나는건 둘째치고 잘못되서 화재라도 나면 살기 위해서 라면 하나 먹다가 인생 하직할순 있으니까..ㅜㅜ 



인터럽트의 개념은 방금 제시한 상황과 비슷하다. CPU가 열심히 프로그램을 수행하는 과정에서

예외나 I/O 장치등 우선순위가 높은 사건이 발생하면 하던 걸 잠시 멈추고 접수받은 내용을 처리하는 과정을 인터럽트라고 한다. 이 때 예외라고 한다면 오버플로우, 0으로 나누기 등등이며 I/O 장치는 하드 디스크, 키보드, 마우스 등등을 의미한다. 컴퓨터 구조 과목에서는 I/O 장치에 대하여 더욱 중점을 둔다.


2. I/O 장치

하드디스크와 같은 I/O 장치들은  프로세서와 직접 데이터를 교환할 수 있고 프로세서는 I/O 모듈에 대하여 쓰기 또는 읽기를 할 수 있다. 프로세서는 I/O들을 구별하기 위해 주소를 사용한다. 

인터럽트가 발생하게 되면 I/O 장비의 상태를 점검하고 준비가 되면 전송하게끔 하는데 인터럽트를 신속 정확하게 처리하고 멈춘 프로그램을 다시 수행해야 하는 CPU에게는 기나긴 시간 낭비이다. 따라서 CPU는 이러한 과정을 I/O 장치에게 시킨다. "그냥 니가 점검해"


I/O 장치가 또 CPU에게 부담을 주는 것은 I/O 장치의 많은 데이터이다.

이 데이터들이 직접 CPU를 거치게 된다면 I/O 인터럽트가 많이 발생해서 CPU는 다른 일은 할 수가 없다.

따라서 CPU의 효율적인 운영을 위해서 DMA(직접 메모리 접근) 기법을 사용한다. 이 방법에서는 I/O장치들이 메인 메모리에 직접 접근하여 입출력을 할 때 CPU에게 시작 인터럽트, 데이터를 Block단위로 쓰고 읽으며 작업이 끝난 후에 CPU에게 종료를 알리는 인터럽트만 보내주면서 CPU의 부담을 확 줄였다.

더나아가 입출력 과정에서 CPU의 부담을 최소로 하면서 병렬적으로 입출력과 연산과정이 동시에 진행할 방법이 필요해지면서 입출력 프로세서(I/O Processor)가 등장하였다. 




,

1. 인덱스(index)

사전에서 APPLE의 뜻을 찾고자 할 때 두 가지의 방법을 사용할 수 있다.

첫번째는 처음부터 하나하나씩 단어를 훑으면서 찾는 방법

두번째는 사전 옆에 붙어있는 A -> P ->.. 순서로 찾는 방법

둘 중에 탐색하는 속도는 두 번쨰의 경우가 더욱 빠르게 탐색이 가능하다.

이처럼 인덱스는 데이터 베이스에서 데이터 탐색 속도를 향상시켜주는 자료 구조이다.

만일 Search Key가 Primary Key를 포함한다면 Primary Index라고 하며, Unique Key를 포함한다면 

Unique Index라고 한다.


2. Clustered vs Unclustered Index



Clustered index와 Unclustered Index의 큰 차이점은 Sorting의 여부이다.

Clustered index는 Date Record가 Key 값을 기반으로 정렬하여 정렬하여 저장한다.

따라서 여러 개가 있으면 데이터 정렬의 순서가 꼬이므로 단 하나만 생성할 수 있다.

또한 정렬이 되어있는 특징 덕분에 전반적으로 불러오기 속도를 엄청나게 향상시키는 효과가 있다.


반면 Unclustered index의 경우 Date Record의 정렬을 하지 않고 저장한다. 

그리고 index 테이블에는 논리적으로 정렬하고 데이터가 있는 페이지 번호와 위치를 표기한다.

따라서 index 테이블은 논리적 정렬을 위해 여러 개가 존재해도 무관하고 덕분에 파일의 크기도 증가한다.


3. Hash-Based Index


해시 인덱스는 검색하고자하는 값을 해시함수에 입력한 후 그 결과와 Bucket의 내용과 비교하여

해당 데이터 레코드의 위치를 찾을 수 있는 인덱스 기법이다. 이 기법의 장점은 Equality 연산에는 좋은 성능을 보인다는 점, 그리고 해시 함수를 특징상 입력 값에 비해 출력 값의 크기는 줄여 Bucket에 저장한다는 점이다. 반면에 단점은 범위를 탐색하는 경우에 매우 비효율적인 성능을 보여준다는 점이다. 


4. B+ Tree Index


B+ Trees는 관계형 데이터 베이스에서 가장 일반적으로 사용되는 인덱스이다.

자료구조때 이진 트리처럼 가운데 키 값과 작거나 같으면 왼쪽 크면 오른쪽으로 트리를 구성한다.

다만 다른 점은 Leaf 노드 간 이동이 가능하다는 점이다. 

Leaf 단계에서 데이터 엔트리들이 포함되어 있기 때문에 B+ Tree의 성능은 트리의 깊이에 의하여 좌우된다.

범위 탐색의 경우에는 Root에서 시작하여 최소 경계값을 찾고 다음 리프 노드로 넘어가는 방식으로 연산을 수행한다. 삽입의 경우에는 필요에 따라 부모 노드가 조정될 수 있다. 마지막 리프 노드가 꽉 차있다면 다시 쪼개서 트리구조를 유지하기 떄문이다.




,