지식 공유

컴퓨터과학 총론 요약 - 2.데이터 조작

한상규 2020. 10. 23. 14:56

1 컴퓨터 구조

1.1 CPU 기초

연산장치 : 덧셈, 뺄셈과 같은 연산

제어장치 : 컴퓨터의 동작을 조정하는 회로

레지스터 : CPU 내에서 정보를 임의로 저장

  ∟범용 레지스터 : 연산장치 회로의 입력들을 저장하거나 연산된 결과를 저장하는 공간

  ∟용도 지정 레지스터

    ∟명령 레지스터 : 실행할 명령어 저장

    ∟프로그램 카운터 : 다음에 실행할 명령어 저장, 현재 프로그램이 어디까지 실행됐는지 확인하는 용도

버스 : CPU와 주기억장치 사이를 오가는 전기 신호의 통로

1.2프로그램 내장

초창기 컴퓨터는 CPU자체가 프로그램이었다. 프로그램은 CPU의 회로를 변경하여 만들어졌다.

ENIAC

전화선 같이 생긴 선을 다른 구멍에 끼우면 다른 연산을 처리하게 된다. 즉 프로그램을 만드는 과정이 구멍에 선을 끼우는 행위었다.

프로그램 내장 개념 : ****주기억장치에 프로그램을 저장하고 CPU가 주기억장치에서 프로그램 실행 명령어를 읽어서 프로그램을 실행하는 방식. 이 개념의 도입으로 선을 구멍에 바꿔낄 필요없이 주기억장치에 저장 되는 프로그램만 바꿔주면 다른 프로그램을 실행할 수 있게 되었다.

2 기계어

2.1 명령어의 종류

몇개의 기계어만 있으면 CPU의 모든 동작을 구현할 수 있다. 일정 수준 이상의 기계어는 편의성을 높여줄 수는 있겠지만 그 자체로 연산 속도를 높여주지 않는다.

  ∟RISC : CPU를 최소한의 기계어만 처리할 수 있게 만들자 → CPU의 구조를 단순하게 만들고 제작 비용을 낮춘다.

  ∟CISC : CPU를 복잡한 명령을 처리하게 만들자(*복잡한 명령도 어차피 최소한의 기계어의 집합이다) → 점차 복잡해지는 소프트웨어를 좀 더 잘 처리할 수 있을 것이다.

 

ARM이 대표적인 RISC 제조 회사이다.

인텔, AMD 가 대표적인 CISC 제조 회사이다.

 

데이터 전송

COPY : 데이터를 옮긴다고 하지만 실제로 원데이터가 있는 자리에 데이터를 지우는 경우는 드물다. 복사라고 표현하는 것이 적절하다.

LOAD : 주기억장치의 데이터를 범용 레지스터로 복사한다.

STORE : 범용 레지스터의 데이터를 주기억장치로 복사한다.

 

연산

AND, OR, XOR

SHIFT : 비트른 단순 왼쪽 또는 오른쪽으로 이동한다.

ROTATE : 왼쪽 SHIFT시 왼쪽 끝의 비트는 밖으로 나가게 된다. 밖으로 나간 비트를 오른쪽 끝으로 옮긴다.

 

제어

JUMP : '5번 단계로 건너뛰어라' 같은 명령

2.2 가상적인 기계어의 예

(생략)

3 프로그램의 실행

기계 주기

  ∟인출 : 프로그램 카운터가 가리키는 메모리에서 다음 명령을 가져온다.

  ∟해석 : 명령 레지스터 안의 비트 패턴을 해석한다.

  ∟실행 : 명령 레지스터 안의 명령이 요구하는 동작을 수행한다.

3.1 프로그램 실행의 예

(생략)

3.2 프로그램과 데이터

프로그램도 비트 형태로 저장되고 데이터로 비트 형태로 저장 된다. 다시 말해 비트만 보고 그 비트패턴들이 프로그램을 나타내는지 데이터를 나타내는지 판단할 수 없다는 것이다. 하지만 이것이 더 좋을 수 있다. 프로그램이 다른 프로그램의 데이터가 될 수 있다는 것은 장점이다. 심지어 한 프로그램이 자기 자신을 데이터로 사용할 수 있다.

4 연산 명령 ( 생략 )

4.1 논리 연산

4.2 회전 및 자리 이동 연산

4.3 산술 연산

5 다른 장치와의 통신

대용량 저장장치, 프린터, 키보드, 마우스, 디스플레이 화면, 디지털 카메라 등의 주변장치나 또는 다른 컴퓨터와 어떻게 통신하는지를 살펴본다.

5.1 제어기의 역할

  • 제어기 : 메모리 회로와 간단한 CPU로 구성됨. 메시지와 데이터를 각 장치가 인식하기 좋은 형태로 변환한다. 보통 메인보드에 부착해서 쓴다. 포트 또는 단자(HDMI, DP, VGA, SATA, USB 등)라고 말하는 것들을 이용해서 제어기를 컴퓨터에 연결한다.
  • 옛날에는 하나의 주변장치를 사면 그에 맞는 제어기를 따로 구매해야 했다. 하지만 USB라는 표준이 등장하므로 하나의 제어기가 여러 주변장치의 제어기 역할을 하게 됐다.
  • 제어기는 버스(CPU와 주기억장치의 데이터 통로)에 데이터를 감시하여 사용할 수 있고, 제어기에 있는 데이터를 버스상에 올릴 수도 있다.
  • 이로 인해 CPU는 데이터를 제어기로 부터 받을 수도 있고 주기억장치로 부터 받을 수도 있다. 이것을 메모리 사상 I/O라고 부른다.

5.2 직접 메모리 접근

  • 주기억장치를 CPU만이 접근할 수 있는 것이 아니다. 제어기도 주기억장치에 접근할 수 있다. 이를 직접 메모리 접근이라고 한다.
  • 직접 메모리 접근은 컴퓨터 성능을 올려주는 효과를 낸다. 주기억장치에 데이터를 하드디스크에 저장하려는 명령어를 수행시 CPU가 하드디스크 제어기에 주기억장치의 데이터를 저장하라는 신호를 보내면 이 후부터는 하드디스크 제어기와 주기억장치끼리만 신호를 주고 받으면서 데이터를 저장하면 된다. 그동안 CPU는 다른 작업을 수행할 수 있게 된다.
  • 직접 메모리 접근이 무조건 좋은 것은 아니다. 제어기의 등장으로 버스에는 복잡한 통신 구조가 형성된다. CPU와 주기억장치만 사용하던 버스에 CPU-제어기, 제어기-주기억장치, 주기억장치-CPU 통신이 생기게 된다. 결국 버스 사용권한에 문제가 발생하고 이를 폰노이만 병목 현상이라고 한다.

5.3 핸드셰이킹

쉽게 말해 양방향 통신을 핸드셰이킹이라고 한다. 프린터에 데이터를 한없이 보내기만하면 앞 작업이 완료되지 않았는데도 데이터를 보내서 데이터가 유실되는 경우가 발생한다. 그래서 프린터기가 출력 가능 상태임을 알려주는 과정이 필요하다. 프린터는 상태 단어라는 것을 만들어서 프린터 사용 가능 상태를 제어기를 통해서 알린다.

5.4 많이 쓰이는 통신 매체

직렬 통신 : 여러개의 신호를 여러 회선을 통해 동시에 전송

병렬 통신 : 한 회선을 이용하여 한번에 한개씩 신호를 전송

5.5 통신 속도

대역폭 : 최대 전송 속도, MP3를 재생하려면 64Kbps 대역폭을 지원해야 한다.

6 데이터 조작에 관한 프로그래밍( 생략 )

6.1 논리 연산과 자리 이동 연산

6.2 제어구조

6.3 입력과 출력

7 기타 구조

7.1 파이프라이닝

 

하나의 명령어를 처리하는 과정을 5부분으로 나눈다. 각 부분을 처리하는 CPU 동작이 정해져있다. 만약 한 동작을 수행하고 있다면 나머지 동작을 처리하는 부분은 유휴 상태가 된다. 이 유휴상태를 최소한으로 만들기 위해서(처리율을 높이기 위해서) 사용하는 기술이 파이프라이닝이다.

위 이미지를 보면 명령어 5개를 파이프라이닝을 이용해서 처리하고 있다. 한 명령어를 5단계로 나눠서 처리하여 9만에 처리하게 됐다. 5개를 파이프라이닝 없이 처리했다면 5*5=25가 걸린다.

7.2 다중프로세서 컴퓨터

다중 코어를 이용해서 병렬처리한다.

MIMD : 큰 작업을 처리하는 프로세서와 큰 작업에 속해있는 작은 작업을 처리하는 프로세서가 존재하여 처리한다.

SISD : 전통적인 방식 병렬처리가 아니다. 한 작업을 한 프로세스가 전담한다.

SIMD : 여러 프로세서가 비슷한 데이터에 동일한 작업을 적용해야 할 때 , 동일한 일련의 명령들을 일제히 실행한다.