일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | ||
6 | 7 | 8 | 9 | 10 | 11 | 12 |
13 | 14 | 15 | 16 | 17 | 18 | 19 |
20 | 21 | 22 | 23 | 24 | 25 | 26 |
27 | 28 | 29 | 30 |
- Clean code
- 코드 컴플릿
- addressing mode
- CPU
- Sector
- 리펙토링
- interrupt
- float
- Code complete
- L3 Router
- register
- 공인 IP
- refactoring
- page
- ALU
- floating point
- cache
- L2 switch
- 사설 IP
- ack
- Public IP
- osi 7
- private ip
- MMU
- physical address
- 클린 코드
- TCP
- network
- 가독성
- 명령어
- Today
- Total
목록컴퓨터 구조 (45)
Software Lab

① Copy : 메인 메모리에 있는 데이터를 GPU 메모리 공간으로 복사한다. ② Instruct : CPU는 GPU에 연산을 요청하는 명령을 보낸다. ③ Execute : GPU는 메모리의 데이터를 연산하고 결과를 다시 메모리에 저장한다. ④ Copy : GPU 메모리에 저장된 결과를 메인 메모리에 복사한다. 이러한 처리 절차를 API로 제공하는 것이 바로 Cuda 이다.

현재 GPU는 빅데이터, 딥러닝, 블록체인, 이미지 처리, 게임 등에서 많이 활용된다. 이런 프로그램들의 공통점은 다차원 배열의 실수 연산이 많다는 것이다. CPU는 성능 좋은 ALU가 적게 들어가는 반면 GPU는 성능 낮은 ALU가 많이 들어가 있다. 또한 CPU는 모든 연산의 성능을 고루 좋도록 설계되지만, GPU는 실수 연산 성능을 높이는 것을 우선으로 하여 최적화 설계 된다. 다음과 같이 배열의 실수 덧셈이 있다. CPU는 하나의 ALU를 통해서 차례대로 하나씩 연산한다면 GPU는 다수의 ALU를 통해서 병렬적으로 동시에 연산한다. 그러므로 다차원 배열의 실수 연산은 CPU보다 GPU가 더 빠르다. GPU는 그래픽 카드에 설치되어있다. 그래픽 카드의 본래 목적은 이미지를 디스플레이 장치로 출력하는..

아날로그 신호는 표본화, 양자화, 부호화 단계를 거쳐서 디지털 신호로 변환된다. 표본화 : 신호를 시간 축으로 등분하는 작업이다. 녹음 시 설정하는 샘플 레이트(Sample rate)가 있다. 이것은 표본화에서 1초를 몇 등분 할 것인가를 나타낸다. 샘플 레이트가 클수록 음질은 좋지만 데이터양은 커진다. 양자화 : 표본화로 구해진 값을 대푯값으로 변환한다. 예를 들어 표본화로 구해진 값이 1.1156 라면 이것을 정확히 1로 정수화한다. 녹음 시 설정하는 비트 값이 있다. 이것은 몇 비트의 대푯값인가를 의미한다. 비트가 클수록 음질은 좋지만 데이터양은 커진다. 부호화 : 양자화에서 구해진 정숫값을 2진수의 bit로 변환한다.

인간이 인식할 수 있는 신호는 파동 행태의 아날로그 신호이다. 가령 소리는 음파, 화면은 빛의 광파이다. 컴퓨터는 bit로 이루어진 디지털 신호를 처리한다. 컴퓨터에서 입력 장치들은 아날로그 신호를 디지털 신호로 바꾸어 주는 변환 회로가 있다. 그것을 ADC(Analog to digital converter)라고 한다. 반대로 출력 장치들은 디지털 신호를 아날로그 신호로 바꾸어 주는 변환 회로가 있다. 그것을 DAC(Digital to analog converter)라고 한다. 메모리와 I/O Decvices 간에 데이터를 전송하는 방식은 PIO, DMA 두가지가 있다

HDD에서 Sector와 Track은 각각 SSD의 Page와 Block에 매칭된다. HDD는 Sector와 Track으로 구성된 원판 Disk를 여러 개 쌓아 놓은 형이기 때문에 CHS 주소 방식을 사용한다. SSD의 구조는 HDD와 다르다. 그런데도 이미 HDD의 CHS 주소 방식에 맞게 개발된 기존 SW와의 호환성을 위해 SSD에서도 CHS 주소 방식을 사용한다. 그 때문에 SSD 내부에는 CHS 주소를 Page, Block 주소로 변환하는 장치가 있다. HDD는 Header가 회전하는 Disk에 접근하는 순차 접근(Sequential access) 방식이다. 반면 SSD는 특정 위치에 바로 접근하는 임의 접근 (Random access) 방식이다. 그 때문에 SSD의 속도가 더 빠르다. 또한 SS..

Disk에는 데이터들이 다음과 같은 구조로 저장된다. MBR(Master Boot Recorder) : 0번 섹터에 저장되고 부팅 시 Disk에서 제일 처음 읽어 들여 실행되는 영역이다. 각 파티션 위치들을 식별하고 Kernel을 읽어 들여 실행하는 역할을 한다. Kernel : 운영체제에서 코어 프로그램에 해당한다. FAT(File Allocation Table) : Windows 계열에서 사용하고 디스크에서 파일들의 저장 위치, 크기 등의 정보를 가지고 있다. Linux에는 비슷한 역할을 하는 Super-Block이 있다. Files(a.txt, b.jpg, d.png ...) : File들이 크기에 따라 여러 Cluster에 걸쳐서 저장된다. 그런데 b.jpg 를 자세히 보면 연속되지 않은 여러 C..

파일은 Cluster 단위로 저장되므로 사용 못 하는 나머지 공간이 생기게 된다. 이것을 Gap 이라고 한다. 아래 조건에서 2300 byte 파일을 저장해보자. 그렇다면 2개의 Cluster가 필요하고 1796 byte의 Gap이 발생한다. Bytes/Sector = 512 Sector/Cluster= 4 Cluster size = 512 * 4 = 2048 Gap = (512 * 4) * 2 - 2300 = 1796 byte Cluster의 크기가 커질수록 한 번에 처리 할 수 있는 데이터양이 많아지므로 처리 속도가 빠르다. 대신 Gap이 커지므로 사용 못 하는 공간이 많이 생긴다. 아래는 Windows에서 디스크 포맷 시에 Cluster의 크기를 설정할 수 있다.

Cylinder : 각 플래터(Platters)에서 z축으로 동일 위치에 있는 Track 들을 모아 놓은 것이다. 원통 모양이 된다. 원통 제일 바깥쪽이 0번이고 안쪽으로 갈수록 1씩 증가한다. Track : 플래터에 있는 동심원이다. 보통 양면을 사용하므로 플래터가 4개라면 Track은 8개가 있게 된다. HDD(Hard disk drive)에는 Track별로 접근하는 각각의 Header가 있다. Sector : Track은 Sector로 나뉘게 된다. Disk는 Sector 단위로 데이터를 저장하고 읽어 들인다. 보통 한 Sector의 크기는 512 bytes이다. Cluster : 연속된 Sector 여러 개가 모여서 하나의 Custer가 된다. OS는 Cluster 단위로 파일을 저장하고 읽어 들..