본문 바로가기

OS

[운영체제] 컴퓨터 구조와 성능 향상 (2)

 

 


03. 컴퓨터 성능 향상 기술

1 버퍼

1.1 버퍼의 개념

'버퍼buffer: 속도에 차이가 있는 두 장치 사이에서 그 차이를 완화하는 장치

'일정량의 데이터를 모아 옮김으로써 속도의 차이를 완화하는 역할을 한다.

 

NOTE_모니터 버퍼

C언어에서 '\n'은 줄 바꿈의 의미도 있지만 버퍼에 저장된 내용을 출력하라는 의미도 있다.

'\n' 붙이는 습관 들이기!

 

1.2 스풀

'스풀SPOOL: CPU와 입출력장치가 독립적으로 동작하도록 고안된 소프트웨어적인 버퍼

ex) 프린터에 사용되는 스풀러spooler: 인쇄할 내용을 순차적으로 출력하는 소프트웨어

기존의 버퍼와 차이점이 있을까? 기존 버퍼는 프로그램들이 버퍼를 공유하지만, 스풀러는 한 인쇄물이 완료될 때까지 다른 인쇄물이 끼어들 수 없으므로 프로그램 간에 배타적!

 

 

2 캐시

2.1 캐시의 개념

'캐시cache: 메모리와 CPU 간의 속도 차이를 완화하기 위해 메모리의 데이터를 미리 가져와 저장해두는 임시 장소

'캐시에서 원하는 데이터를 찾았다면 캐시 히트라고 하며(데이터 즉시 사용), 원하는 데이터가 캐시에 없으면 메모리로 가서 데이터를 찾는데 이를 캐시 미스라고 한다.

 캐시 히트가 되는 비율: 캐시 적중률, 일반 컴퓨터의 캐시 적중률 약 90%

 

2.2 즉시 쓰기와 지연 쓰기

'즉시 쓰기write through

-캐시에 있는 데이터 변경 시, 이를 즉시 메모리에 반영하는 방식

-빈번한 데이터 전송으로 인해 성능이 느려진다.

-메모리의 최신 값이 항상 유지되어 급작스러운 정전에도 데이터를 잃지 않는다.

'지연 쓰기write back

-캐시에 있는 데이터 변경 시, 변경된 내용을 모아서 주기적으로 반영하는 방식

 카피백copy back이라고도 한다.

-데이터 전송 횟수 감소로 시스템 성능 향상 가능

-메모리와 데이터 사이의 불일치가 발생할 수도 있다.

 

2.3 L1 캐시와 L2 캐시

'L1 캐시: CPU 레지스터에 직접 연결되는 명령어 캐시 데이터 캐시

'L2 캐시: 메모리와 연결되는 L2 캐시

 

 

3 저장장치의 계층 구조

'저장장치로 느린 하드디스크 대신 SSD같은 빠른 플래시 메모리 사용

'메모리를 하드디스크 크기만큼 확장

'캐시를 크게 늘려 캐시 적중률 높이기

 

 

4 인터럽트

4.1 인터럽트의 개념

'초기의 컴퓨터 시스템, 폴링polling방식: CPU가 직접 입출력장치에서 데이터를 가져오거나 내보내는 것

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

 

4.2 인터럽트 방식의 동작 과정

'CPU가 입출력 관리자에게 입출력 명령을 보낸다.

'입출력 관리자는 명령받은 데이터를 메모리에 가져다놓거나 메모리에 있는 데이터를 저장장치로 옮긴다.

'데이터 전송이 완료되면 입출력 관리자는 완료 신호를 CPU에 보낸다.

'입출력 요청 -> 데이터 전송 -> 인터럽트 발생

 

4.3 직접 메모리 접근Direct Memory Access, DMA

'입출력 관리자에게 CPU의 허락없이 메모리에 접근할 수 있는 권한이 주어지는 것

 

4.4 메모리 매핑 입출력Memory Mapped I/O, MMIO

'메모리의 일정 공간을 입출력에 할당하는 기법

 

4.5 사이클 훔치기

'CPU의 작업 속도보다 입출력장치의 속도가 느리기 때문에 직접 메모리 접근에 양보하는 것

 


04. 병렬 처리

1 병렬 처리의 개념

'동시 여러 개의 명령을 처리하여 작업의 능률을 올리는 방식

'코어가 여러개인 CPU는 물론, 코어가 하나인 CPU에서도 작동 가능

'스레드: CPU가 처리할 수 있는 작업의 단위

'CPU 멀티스레드: 여러 개의 스레드를 동시에 처리하는 방법

NOTE_ CPU 멀티스레드

참고한 책에서는 CPU가 여러 개의 스레드를 동시에 작업하는 방식을 'CPU 멀티스레드', 운영체제가 사용하는 프로그래밍 기법을 '멀티스레드'라고 했다.

쉽게 배우는 운영체제, 조성호

 

 

2 병렬 처리 시 고려 사항

'상호 의존성이 없어야 병렬 처리가 가능하다.

'각 단계의 시간을 거의 일정하게 맞춰야 병렬 처리가 원만하게 이루어진다.

'전체 작업 시간을 몇 단계로 나눌지 잘 따져보아야 한다.

 

 

3 병렬 처리 기법

*명령어 처리 기법

'1.명령어 패치IF: 다음에 실행할 명령어를 명령어 레지스터에 저장, 인출

'2.명령어 해석ID: 명령어 해석

'3.실행EX: 해석한 결과를 토대로 명령어 실행

'4.쓰기WB: 실행된 결과를 메모리에 저장

 

3.1 파이프라인 기법

'CPU 사용을 극대화하기 위해 명령을 겹쳐서 실행하는 방법

'CPU의 사양과 연관지어 볼 시, 하나의 코어에 여러 개의 스레드를 사용하는 것

'파이프라인의 위험

-데이터 위험: 데이터의 의존성 때문에 발생, 파이프라인의 명령어 단계를 지연하여 해결

-제어 위험: 분기를 하는 if문 혹은 바로가깅의 goto 문 같은 명령에서 발생, 분기 예측이나 분기 지연 방법으로 해결

-구조 위험: 서로 다른 명령어가 같은 자원에 접근하려 할 때 발생, 해결하기 어렵다.

 

3.2 슈퍼스칼라 기법

'파이프라인을 처리할 수 있는 코어를 여러 개 구성하여 복수의 명령어가 동시에 실행되도록 하는 방식

존재하지 않는 이미지입니다.

 

3.3 슈퍼파이프라인 기법

'파이프라인의 각 단계를 세분하여 한 클록 내에 여러 명령어를 처리 가능

존재하지 않는 이미지입니다.

 

3.4 슈퍼파이프라인 슈퍼스칼라 기법

'슈퍼파이프라인 기법을 여러 개의 코어에서 동시에 수행

존재하지 않는 이미지입니다.

 

3.5 VLIWVery Long Instruction Word 기법

'동시에 수행할 수 있는 명령어들을 컴파일러가 추출하고 하나의 명령어로 압축하여 실행

'이전의 병렬 처리 기법들은 하드웨어적인 방법이지만, VLIW 기법은 CPU가 병렬 처리를 지원하지 않을 경우 소프트웨적으로 병렬 처리를 하는 방법

'이전 병렬 처리 기법들은 명령어 실행 시, VLIW 기법은 컴파일 시 병렬 처리가 이루어진다.

 

 

 

참고 자료

쉽게 배우는 운영체제, 조성호

http://blog.skby.net/%ED%8C%8C%EC%9D%B4%ED%94%84%EB%9D%BC%EC%9D%B8-pipeline/

https://www.futurebridge.com/industry/perspectives-mobility/quantum-computing-a-key-to-autonomous-vehicle-industry-success/