[OS] 폰노이만구조, CPU와 성능개선

2020. 4. 4. 22:21Programming/CS

폰노이만 구조

오늘날의 대부분의 컴퓨터는 대부분 폰노이만 구조를 따르며, 이는 cpu, mem, i/o, 저장장치가 버스로 연결되어있는 구조를 말한다. 가장 중요한 특징은 모든 프로그램은 메모리에 올라와야 실행할 수 있다는 것이다.

그래서 컴퓨터구조 시간에 우리는 폰노이만 구조로 하는 MIPS 에 대해 배웠고, mem 과 cpu 간의 계산과 원리에 대하여 배웠다. 그때는 cpu에서 처리하는 과정을 위주로 배웠다.

하드웨어 사양과 관련된 단어

  • clock
    CPU속도와 관련된 단어. 클록이 일정 간격으로 clock tick(pulse)를 만들면, 거기에 맞추어 cpu 부품들이 작업을 한다.

  • Hz
    초당 클록 틱이 발생하는 속도를 나타내는 단위이다.

    • CPU : ex. 인텔코어 i7(4코어, 3.4GHz, 캐시 4MB) -> 1초에 3.4*10^9 번 clock tick 을 발생시켜, 3.4*10^9번의 연산이 가능
    • 메인보드 : 버스도 클록 틱에 맞추어 데이터를 전송하므로, 메인보드의 성능도 클록으로 표시 ex. FSB 1,333MHz -> 1초에 1,333*10^6 번 데이터 이동 가능
  • 시스템 버스(FSB)와 CPU 내부 버스(BSB)

    • FSB(Front Side Bus): systemBus는 메모리와 주변장치를 연결하는 버스로 보통 메인보드의 성능표시를 하는데 쓰인다.
      이떄 중요한 것은, 메인보드와 메모리는 같은 속도를 사용해주어야한다는 점이다. 메인보드 버스(FSB)의 속도가 빨라도 낮은 속도의 메모리를 사용한다면 메인보드가 그 낮은 메모리의 속도에 맞추어 작동하게 되므로 효율이 떨어진다.

    • BSB(Back Side Bus) : cpu 내부 버스로, cpu 내부에 있는 장치를 연결하는 버스다. cpu 내부버스는 cpu 클록과 같아서 시스템 버스보다 훨씬 빠르다.

CPU

  1. CPU의 기본 구성

    • ALU : AND, OR, ADD, ...
    • control unit
    • register : DR, AR, PC, IRE, MAR, MBR, flag reg, status reg ...
    • bus

이미지 출처 : https://t1.daumcdn.net/cfile/tistory/255D064952C8E86F04

 

cpu와 메모리, 주변 장치 간 데이터를 주고받을 때 사용하는 길이다. 이 중 메모리, 주변장치들과 대화하는 ㅇ버스를 FSB(시스템 버스)라고 하고, 시스템 버스에는

  • control bus : 다음에 어떤 작업을 할지 지시하는 제어신호가 오고간다. MEM - CPU의제어장치 와 연결되어있다.
  • address bus : 메모리의 데이터를 읽고 쓸 때 어느 위치에서 작업할 것인지 알려주는 주소정보가 오고간다. MEM - memory address register와 연결되어있다.
  • data bus : control bus가 다음에 어떤 작업을 할지 신호를 보내고 메모리 버퍼 레지스터와 연결된 버스로, 데이터 이동이 양방향으로 이루어진다.

특히나 버스의 bandwidth는 한번에 전달할 수 있는 데이터의 크기를 말하는데, 32bit CPU는 한번에 처리할 수 있는 데이터의 양이 32bit, 64bitCPU는 64bit이다. 이 경우 레지스터의 크기도 32bit/64bit로 버스의 대역폭, 레지스터의 크기, 메모리에 한번에 저장할 수 있는 데이터의 크기는 항상 같다.

CPU가 한번에 처리할 수 있는 데이터 최대 크기를 word라고 하며, 버스의 대역폭고 ㅏ메모리에 한번에 저장되는 단위도 워드이다. 그래서 32bit CPU에서 1워드는 32bit, 64bit CPU 에서 1워드는 64bit이다.

CPU는 0, 1로 이루어진 기계어만 인식하므로 어셈블리어로 작성한 후 컴파일 하여 기계어로 바꾸어 전달한다.

  1. Memory
  • RAM : Random Access Memory, 읽고 쓰기 가능. 램은 무작위로 데이터를 읽어도 저장된 위치와 상관없이 같은 속도로 데이터를 읽을 수 있다는 의미에서 붙은 이름이다.

    • 휘발성 메모리

      • DRAM(Dynamic RAM) : 시간이 지나면 데이터가 사라지기 때문에 다시 재생시켜야함. 겁나 바부팅 1초도아니고 1/100 초 에 한번씩 잊어먹기도 함.
      • SRAM(Static RAM) : 속도는 빠르지만(디램보다 시간오래유지) 가격이 비싸서, 메인메모리에는 DRAM을 사용하고 캐시같은 고속메모리에는 SRAM을 사용한다.
      • SDRAM(Synchronous Dynamic RAM) : DRAM이 발전된 형태로, SRAM과는 완전히 다르다. 이는 clock tick이 발생할 때 마다 데이터를 저장하는 동기 DRAM이다.
      • ✨ DDR SDRAM
        cpu의 속도는 매우 빠르지만 SDRAM은 속도가 굉장히 느리므로, 속도차이를 완화하기 위하여 SDRAM의 bandwidth를 늘려 데이터 입출력 속도를 빠르게 한것이 DDR SDRAM(Double Data Rate SDRAM)이다.
        기존에 SDRAM이 clock tick 한번에 1개의 워드를 저장하는 반면에 DDR${n} SDRAN은 한번에 2^n배 큰 bandwidth를 사용하여 더 빨리 데이터를 저장한다.
        ex. DDR3 : SDRAM의 bandwidth _ 2^3
        DDR4 : SDRAM의 bandwidth _ 2^4
    메인메모리를 비휘발성 메모리로 만들면 전력이 끊겨도 내용이 남아 편리할 수도 있지만, 비 휘발성 메모리는 메모리 내부가 복잡하며 속도가 느리고, 가격도 비싸다. 그래서 메인메모리의 속도가 더 중요하기 때문에 휘발성 메모리를사용한다.
  • ROM
    비휘발성 메모리(non-volatility memory)
    • 플래쉬 메모리 : 특히나 플래쉬메모리의 각 소자는 최대 사용횟수가 제한되어있어 보통 소자 하나당 몇 천번에서 몇만번정도 사용하면 제 기능을 잃는다. 따라서 sd 카드나 usb를 오래 사용하면 성능이 저하되거나 데이터를 잃어버릴수있으니 주의하자.
    • FRAM(Ferroelectric RAM)
    • PRAM(Phase change RAM)
    • ROM: 데이터를 한번만 저장할 수 있어서 BIOS (Basic Input/Ouptput System)은 롬에 저장한다.

컴퓨터 성능 개선 기술

cpu는 매우 빠른데 ram은 비교적 느리고, 그보다 hdd 는 더더욱 느리고.. 이렇게 부품에 따라 성능이 크게 차이나는데 이 성능 차이를 조금이라도 개선하자는데에서 비롯된 개념들이다.

  1. Buffer
    : 필요한 데이터보다 더 많이 가져와 가져오는데 걸리는 속도차이를 개선하자.

    • HW측면에서의 Buffer
      ex. 하드디스크의 사양이 1TB, 7200rpm, 32MB -> 용량은 1TB, 디스크 회전속도가 7200rpm, 버퍼크기 32MB.

      같은 사양의 하드디스크라면 버퍼의 용량이 큰 것이 더 빠르다.

    • SW측면에서의 Buffer
      네트워크환경탓에, 데이터가 들어오는 시간과 플레이어가 재생되는 시간의 속도 차이가 발생한다. 그래서 리얼타임이나 스트리밍 서비스에서는 이러한 현상을 방지하기 위해 동영상 데이터의 일정부분을 buffer 에 넣은 후 실행한다.

    • 모니터 buffer
      \n는 줄바꿈의 의미도 있지만 버퍼에 저장된 내용을 출력하라는 의미도 있다. 그래서 출력을 사용할 때 \n을 붙이는 습관을 들이는 것이 좋다.

    • 하드웨어 안전 제거
      버퍼를 사용하면 버퍼가 다 채워질 때 까지 저장장치간에 데이터 전송이 지연된다. 그래서 저장이 완료된 것 처럼 보여도 그렇지 않은 경우가 많다. 그래서 하드웨어안전제거 기능을 이용하면 버퍼가 저장장치에 반영되지 않는 문제가 해결된다. 완전히 저장장치에 버퍼까지 저장된 이후에 제거하기 떄문이다.

  2. SPOOL(Simultaneous Peripheral Operation On-Line)
    : CPU와 i/o가 독립적으로 동작하도록 고안된 sw적인 버퍼이다.
    ex. 프린터에 사용되는 spooler. 프린트할 내용을 HDD의 스풀러 공간에 저장하고 워드프로세서는 다른 작업을 할 수 있도록, 문서작업과 프린터 출력 작업을 독립적으로 진행할 수 있도록 해주는 개념이다. TSS 를 고안한 OS시스템에서 HDD 에 Swap Device를 저장해두는 것과 비슷한 개념이다.

  3. 캐시
    cpu와 메모리 간 속도차이를 완화하기 위해, 메모리의 데이터를 prefetch(미리 가져옴). 캐시는 cpu 안에 있으며 cpu 내부버스의 속도로 작동한다.

    1. 캐시가 메모리 내용중 일부를 미리 가져옴
    2. cpu는 메모리에 접근해야할 때 캐시를 먼저 방문하여 look up
    3. cache hit ? 바로사용 : cache miss
    4. cache miss : 메모리로 가서 데이터 look up

이러한 프로세스로 동작하고, 일반적인 컴퓨터의 캐시 적중률은 90%이다.

컴퓨터의 성능을 향상시키려면 캐시 적중률이 높아야한다. 그 적중률ㄹ을 높이려면

  1. 캐시의 크기를 늘린다 ex. 클록이 같은 cpu라도 저가형 intel i7은 캐시메모리가 4MB이지만, 고가형 intel i7는 캐시메모리가 8MB이상.
  2. 앞으로 많이 사용될 데이터를 가져온다. : locality

병렬 처리

Parallel processing은 동시에 여러개의 명령을 처리하여 작업의 능률을 처리하는 방식이다. CPU 클락을 높이거나, 캐시의 크기를 늘리는 것에는 한계가 있어 코어를 병렬처리하여 그 효율을 높인다. 물론 정비례하게 능률이 증가하지는 않지만(암달의 법칙) 비교적 경제적으로 효율이 증가하므로 다중코어 CPU를 사용한다.

명령어 병렬처리의 방식에는 우리가 아쥬 재밌게 배웠던 pipelining, 쓰레드(작업단위)방식에는 multiThread 방식등이 있다.