컴퓨터 사이언스 (CS)/운영체제

06. [쉽배운 2장] 컴퓨터의 구조와 성능 향상

한소희DE 2021. 7. 2. 11:58

 

 

 

앞서, 운영체제의 개요를 공부해보았다.

https://eng-sohee.tistory.com/42?category=1026344 

 

05. [쉽배운 1장] 운영체제의 개요

쉽배운 = 쉽게배우는 운영체제 내가 이번에 산 책이다. 왜 내가 구글링을 이용해 운영체제를 공부하다가 책을 구매했는지, 그리고 책을 선정하게 된 기준 및 계기는 무엇인지느 아래 ※ 이전 포

eng-sohee.tistory.com

 

오늘은, 컴퓨터의 구조와 성능 향상에 대해 공부한 내용을 정리해볼 것이다.

 

 

목차

컴퓨터의 기본 구성

CPU와 메모리

컴퓨터 성능 향상 기술

병렬 처리

 


 

 

01. 컴퓨터의 기본 구성

 

1-1. 컴퓨터 하드웨어의 구성

1 중앙처리장치(CPU) 명령어를 해석해서 실행하는 장치. 인간의 두뇌와 같다.
2 메모리 메인메모리(제1저장장치):
작업에 필요한 프로그램과 데이터를 저장하는 장소. 분할 공간마다 주소로 구분한다.
제2저장장치:
일반적으로 이를 저장장치라고 부른다. 데이터를 영구적으로 저장할 수 있고 저렴하나 속도가 느리다.
👉🏻 ex: 하드디스크, CD 등
3 입력장치 외부 데이터를 컴퓨터에 입력하는 장치.
👉🏻 ex: 키보드, 마우스, 터치스크린 
4 출력장치 컴퓨터에서 처리한 결과를 사용자가 원하는 대로 출력하는 장치.
👉🏻 ex: 프린터, 모니터, 스피커 등

 

🔥 여기서 잠깐! 개별 부품은 무엇으로 연결되어 정보를 주고받을까?

메인보드에는 다양한 부품이 커다란 판으로 연결되어 있는데, 이 연결은 버스로 되어 있다.
버스란 데이터가 지나다니는 통로며, 일정 규칙에 따라 장치에 데이터를 전송한다.
그렇다면, 버스 규칙은 무엇으로 생성되는 것일까?

1. 클록 : CPU 작업 박자를 만들어내는 것. 클록은 일정 간격으로 틱(=펄스 or 클록틱)을 만든다. 메인보드의 클록이 틱을 보낼 때마다 데이터를 보내거나 받는다. 이 틱에 맞춰 CPU 내 모든 구성 부품이 작업을 한다.

2. 헤르츠: 틱이 발생하는 속도를 나타내는 단위다. 클 수록 1초 당 처리할 수 있는 횟수가 많다는 의미다.
버스의 종류는 무엇이 있을까?

1. 시스템 버스 : 메모리와 주변 장치 연결 버스.

2. 내부 버스 : CPU 내부 장치를 연결하는 버스. CPU 내부 버스 속도는 CPU 클록과 같아 시스템 버스보다 훨씬 빠르다. 그래서 두 버스 속도 차로 인해 작업 지연되는 문제가 있기도 한다.
시스템 버스의 종류
1 제어 버스 CPU가 제어 명령을 전달하는 버스. 메모리에서도 제어 명령이 수행되거나 오류 생기면 결과값을 반환하기 때문에 양방향.
2 주소 버스 메모리나 주변장치의 위치 정보 보낼 때 사용하므로 단방향.
3 데이터 버스 메모리 버퍼 레지스터와 연결되어 있는 버스. 데이터 이동이 양방향.

 

 

 

1-2. 컴퓨터의 구조

오늘날의 대부분 컴퓨터의 구조는 폰노이만 구조를 따른다.

폰노이만 구조의 핵심
모든 프로그램은 메모리에 올라와야 실행할 수 있다는 특징

 

1-2-1. 폰노이만 구조의 장점

이전에는 컴퓨터 사용 용도가 바뀔 때마다 전선 연결을 바꿔야만 했는데, 이젠 필요한 프로그램은 메모리로 올린다는 규칙이 있어 복잡한 처리가 필요하지 않아졌다.

 


 

02. CPU와 메모리

 

2-1. CPU

 

CPU란, 명령어를 해석해서 실행하는 장치로, 인간의 두뇌에 해당한다.


 

CPU의 기본 구성
산술논리 연산장치 논리연산을 수행한다. 요리사로 비유하자면, 요리를 하는 것과 같다.
제어장치 작업을 지시한다. 요리사로 비유하자면, 보조에게 명령하는 것과 같다.
레지스터 CPU 내 데이터를 임시로 보관하는 공간이다.

 

🔥 그렇다면, 이 구성이 어떻게 협업해 작업하는 것일까?

int D2=2, D3=3, sum;
sum = D2+D3

위의 문제를 해결하기 위해, PC는 컴퓨터가 쉽게 이해할 수 있는 어셈블리어로 변환한다.
어셈블리어 처리 순서는 아래와 같다.

1. 제어장치가 메모리 100번지에 있는 D2를 레지스터 2에 가져온다.
2. 제어장치가 메모리 120번지에 있는 D3를 레지스터 3에 가져온다.
3. 레지스터 2와 레지스터 3에 저장된 값을 연산장치로 sum 한다.
4. sum 한 결과값을 레지스터 5에 저장한다.
5. 레지스터 5를 이제 메모리 160번지로 옮겨준다.

 

🔥 레지스터의 종류?

매우 많다. 이들은 크게 사용자 프로그램에 의해 변경되는 사용자 가시 레지스터와, 사용자가 임의로 변경할 수 없는 사용자 불가시 레지스터로 구분된다.


사용자 가시 레지스터: 메모리에서 가져온 데이터를 임시로 보관하거나, 데이터가 저장된 메모리 주소를 저장하는 공간 등을 말한다.

사용자 불가시 레지스터: 실행중인 명령어를 저장한다거나, 프로그램 카운터(다음 실행할 명령어의 주소를 알고 있다가 추후 반환) 하는 레지스터 등이 이에 해당한다.

 

 

 

2-2. 메인메모리의 종류

읽거나 쓸 수 있는 램(RAM)과, 읽기만 가능한 롬(ROM)이 있다.

 

 

2-2-1. 램(RAM)

읽거나 쓸 수 있는 저장장치다. 램은 전력이 끊기면 사라지는 휘발성 메모리전력이 끊겨도 데이터를 보관하는 비휘발성 메모리가 존재한다.

휘발성 메모리 DRAM(동적 램): 0과 1로 저장된 데이터가 일정 시간이 지나면 사라지므로 일정 시간마다 부팅 필요.

SRAM(정적 램): 전력이 공급되는 동안엔 데이터 보관 가능해 재생 필요 없고 속도도 빠르지만 비용이 큼.

SDRAM: DRAM 이 발전한 형태. 클록틱(펄스)이 발생할 때마다 데이터를 저장하는 동기 DRAM.
비휘발성 메모리 플래시 메모리, FRAM, PRAM 등

 

🔥 메인메모리는 왜 휘발성 메모리를 사용할까?
비휘발성 메모리는 메모리 내부가 복잡하고 속도가 느리며 가격이 비싸기 때문이다.
🔥 메모리 보안 방법?

사용자 영역의 메모리 작업이 운영체제 영역을 침범하지 못하도록 막아야 한다. 안그러면 바이러스가 발생할 수 있다.

CPU가 현재 작업 중인 메모리의 시작 주소를 경계 레지스터에, 메모리 마지막 주소까지를 한계 레지스터에 저장한다. 작업 중 이 주소를 벗어나면 인터럽트가 발생하도록 설계했다.
🔥 메모리에 운영체제는 어떻게 올리는가?

이 작업을 부팅이라고 한다. 전원을 켜면, 롬에 저장된 바이오스가 실행된다. 바이오스는 주요 하드웨어가 제대로 작동하는지 확인한다. 그후, 이상이 없으면 하드디스크의 마스터부트 레코드(하드디스크의 첫 번째 섹터)에 저장된 운영체제를 실행하기 위한 부트스트랩 코드를 실행한다.

 

03. 컴퓨터 성능 향상 기술

 

3-1. 버퍼

시스템 버스와 내부 버스 속도가 다르기 때문에, 처리하는 차이를 완화하는 방법이 버퍼다.

 

버퍼의 원리?

계란을 한 개씩 가져가지 않고, 바구니에 한 번에 가져가는 것이 효율적이듯, 데이터를 읽거나 가져오는 작업을 한 번에 모아 옮긴다. 버퍼의 용량은 클 수록 빠르다는 특징이 있다.


버퍼의 예시?

동영상 스트리밍 시, 데이터를 조금씩 가져오면 끊기지만 한 번에 데이터 일정 부분을 버퍼에 넣어 실행함으로써 유연한 스트리밍을 구현한다.

 

 

 

3-2. 스풀

CPU와 입출력장치가 독립적으로 동작하도록 만든 것이며, 대표적인 예로 프린터가 있다.

 

🔥 버퍼와 스풀의 차이점?

버퍼는 이전 작업의 데이터가 차면 이동 즉 프로그램 간 버퍼를 공유하지만, 스풀은 독립적이어서 프린터 실행 시 한 인쇄물 완료될 때까지 다른 인쇄물이 끼어들 수 없다.

 

 

 

3-3. 캐시

메모리와 CPU 간 속도 차이를 완화하는 두 번째 방법이다. 예상되는 데이터를 메모리에서 임시로 가져와 저장하는 장소다. 이는 CPU 내부에 존재한다.

 

  • 캐시에서 원하는 데이터를 찾은 것: 캐시 히트
  • 캐시에서 원하는 데이터를 찾지 못한 것: 캐시 미스

 

캐시의 용량을 늘릴 수록 적중률은 올라가며, 평균 적중률은 90%다. 

 

캐시의 종류
L1 캐시 (레벨1 캐시) 명령어와 데이터를 구분한 캐시. 메인 메모리와 연결되어 있음.
L2 캐시 (레벨2 캐시) 명령어, 데이터 구분 없이 모든 자료를 가져오는 일. CPU 레지스터와 직접 연결되어 있음.

 

 

 

3-4. 저장장치의 계층 구조

즉, 데이터 저장하는 공간은 속도가 빠를 수록 금액이 높아진다. 

PC는 적당히 빠른 속도와 적당히 큰 용량을 동시에 얻기 위해, 저장장치를 계층 구조로써 만들어 사용한다.

 

레지스터
캐시

메모리


저장장치




 

 

 

 

3-5. 인터럽트

 

컴퓨터 성능 향상 기술에서 빼 놓을 수 없는 개념이다.

 

CPU는 입출력 관리자에게 작업 지시를 내리고 다른 일을 하다가 완료 신호를 받으면, 하던 일을 중단하고 옮겨진 데이터를 처리한다. 이때 입출력 관리자가 CPU에 보내는 완료 신호가 인터럽트다.

인터럽트 방식은 CPU의 작업과 저장장치의 데이터 이동을 독립적으로 운영함으로써 시스템의 효율을 높인다는 장점이 있다.

 

마치, 주방에서 돼지고기를 가져와야 하는데 요리가 밀려 있는 상황을 떠올리자. CPU는 해야 할 업무가 많다보니 시간이 오래걸리는 입출력까지 직접 할 여력이 되지 않는다. 따라서 돼지고기를 가져다 줄 주방보조(입출력 관리자)를 채용하여 사용한다고 보면 된다.

인터럽트가 없던 시절, 즉 폴링 방식일 때는 얼마나 느렸을지...💦

 

 

따라서, 입출력 관리자는 메모리에 접근할 수 있는 권한이 존재한다. 즉, 입출력 관리자는 직접 메모리 접근이 가능하다.

그렇다면, 만약 입출력 관리자와 CPU가 메모리에 동시에 접근하려고 한다면 어떻게 될까?

이때는 입출력 장치의 속도가 느리기 때문에 CPU가 메모리 사용권한을 양보한다. 이를 사이클 훔치기라고 한다.

 


04. 병렬 처리

 

CPU 성능 향상 방법CPU 클록을 높이면 된다. 하지만 이는 발열 문제가 있다.

그래서, 병렬 처리(동시에 여러 개 명령을 처리해 작업 능률 올리는 방법)로 CPU 성능을 향상시킨다.

즉, 동시에 여러 개의 스레드를 처리해 작업 능률을 올리는 방식이다. 코어가 여러개든, 한 개든 병렬처리는 가능하다.

🔥 스레드란?
CPU 작업 단위. 한 클록에 한 번씩 스레드 단계 명령이 처리된다.
한 번에 여러 스레드를 처리하는 방식은 멀티스레드라고 한다.

🔥 명령어 처리 단계
명령어 패치 - 명령어 해석 - 실행 - 쓰기. 이를 계속 반복한다.

 

 

병렬처리는 4가지 종류로 구성돼 있다.

 

1. 파이프라인 기법
병렬 처리 기법에서는 CPU 사용 극대화를 위해 명령어 처리 단계를 겹쳐서 실행한다.

2. 슈퍼스칼라 기법
파이프라인 기법을 실행할 수 있는 CPU 코어를 여러 개 구성해 복수 명령어가 동시에 실행되도록 한다. 오늘날은 대부분 슈퍼스칼라 기법을 사용한다.

3. 슈퍼파이프라인 기법
한 클록 내에 여러 명령어를 처리할 수 있도록 한다. 

4. 슈퍼파이프라인 슈퍼스칼라 기법
슈퍼파이프라인 기법을 실행할 수 있는 CPU 코어를 여러 개 구성해 복수 명령어가 동시에 실행되도록 한다. 

 

 

병렬 처리 시 고려해야 할 것은?

1. 상호 의존성이 없어야 한다.
2. 각 단계의 시간이 일정해야 병목이 발생하지 않는다.
3. 작업을 적당히 쪼개야 한다.
👉🏻 작업을 많이 쪼개면 동시 작업 개수 많아져 성능이 높아진다. 하지만 작업 세팅/처리에 오랜 시간이 든다. 작업을 덜 쪼개면 병렬의 의미가 없어진다. 따라서 적당히 쪼개야 한다. 보통은 10-20의 깊이로 병렬 처리를 한다.