이 단원에서는 CPU와 메모리의 속도 차이를 극복하기 위한 버퍼와 캐시 라는 것이 등장한다.
공부를 하며 처음 든 생각은 메모리의 속도를 매우 빠르게 만들어 CPU와 차이가 나지 않으면 버퍼와 캐시가 필요없지않을까 라는 생각을 해봤다.
하지만 다시한번 생각해보니 애초에 명령을 CPU에서 내리는데 메모리를 아무리 좋게 만들어도 메모리는 CPU보다 항상 늦을 수 밖에 없었다.
그래서 메모리를 CPU에 넣어놓으면 CPU와 속도가 같아지지 않을까 라는 생각을 했었지만, 그것도 그냥 레지스터나 캐시를 크게 만든거나 다름 없었다.
이런 생각들을 하며 그동안 나는 공부를 하는게 아니라 책을 읽는 것이라는 생각이 들었다. 책에 나오는 내용과 같은 내용임에도 말을 바꿔서 하면 모르는 것들이 많았고 스스로 생각해낸것도 결국 책에 나오는 내용이였다.
앞으로는 이렇게라도 짧은 생각이라도 하면서 책을 읽는것이 아니라 스스로 공부를 해야겠다.
컴퓨터 성능 향상 기술
버퍼
: 느린 입출력장치에서 일정량의 데이터를 모아서 한번에 옮김
→ 속도의 차이를 완화하기 위함 (CPU와 메모리)
스풀
: CPU와 입출력장치가 독립적으로 동작하도록 고안된 소프트웨어적인 버퍼
→ 버퍼는 프로그램끼리의 공유가 있지만 스풀은 프로그램간에 배타적
캐시
: 앞으로 쓸 것이라고 예상되는 데이터를 미리 메모리에서 CPU로 빼와 저장해두는 장치
→ 캐시는 CPU안에 있으며 CPU와 같은 속도로 작동
캐시의 적중률을 높히는 방법
- 캐시의 크기 늘리기
- 앞으로 많이 사용될 데이터를 가져오기 (지역성이론)
캐시에 있는 데이터가 변경되었을 때
- 즉시 쓰기 : 캐시에 있는 데이터가 변경되면 이를 즉시 메모리에 반영하는 방식
→ 성능이 느려짐
- 지연 쓰기 : 변경된 내용을 모아서 주기적으로 반영하는 방식
→ 메모리와 캐시 사이의 불일치가 발생할 수 있음
캐시의 종류
- 일반캐시 : 데이터의 구분 없이 모든 자료를 가져옴
→ L2캐시
- 특수캐시 : 명령과 데이터를 구분하여 가져옴
→ L1캐시
저장장치의 계층 구조
: 가격과 컴퓨터 성능 사이의 타협점
→ 속도가 빠른 저장장치를 CPU가까이 두고 값이 싸고 용량이 큰 저장장치를 먼 쪽에 위치시킴
인터럽트 (주방 보조)
: 입출력 관리자가 CPU에게 보내는 완료 신호
→ 기존에 CPU가 직접 저장장치에서 데이터를 뺴오는 방식은 작업 효율이 떨어져 독립적인 입출력 관리자를 생성
→ CPU의 작업과 저장장치의 데이터 이동을 독립적으로 운영
인터럽트 번호 : 수많은 주변장치중 어떤 것의 작업이 끝났는지 고유번호로 설정
→ 운영체제마다 다름
인터럽트 백터 : 여러개의 인터럽트를 하나의 배열로 설정
→ 동시에 완료되는 작업이 있기 때문
직접 메모리 접근
: 입출력 관리자에게 CPU의 메모리 접근 권한을 주는 것
→ 메모리 접근 권한은 CPU에게만 있어 입출력 관리자는 접근이 불가하기 때문
메모리 매핑 입출력
: CPU가 사용하는 메모리 공간과 입출력 관계자의 메모리 공간을 분리 시키는 것
→ 메모리 접근 권한을 받은 입출력 관계자가 메모리에 자꾸 데이터를 쌓으면 CPU의 공간과 입출력관계자의 공간이 섞이기 때문
사이클 훔치기
: CPU와 입출력 관계자가 동시에 메모리에 접근하려 할 때 CPU가 양보해주는 것
→ 입출력 장치의 속도가 CPU보다 느리기 때문
병렬처리
: 동시에 여러 개의 명령을 처리하여 작업의 능률을 올리는 방식
병렬 처리 시 고려할 사항
1. 상호 의존성이 없어야 함
→ 후행 작업이 준비가 되었더라도 선행작업이 끝나지 않았으면 병렬 처리를 못함
2. 각 단계의 시간을 거의 일정하게 맞춰야 함
→ 단계별로 2분, 18분, 6분등 처리 시간이 들쑥날쑥하면 앞의 작업이 먼저 끝났더라도 긴 시간이 걸리는 단계에서 병목현상이 발생
3. 전체 작업 시간을 몇 단계로 나눌지 잘 따져보아야 함
→ 작업을 N개로 쪼갰을 때 N을 병렬처리의 깊이 라고 한다.
→ N은 동시에 처리할 수 있는 작업의 개수
병렬 처리 단계 : 한 클록에 한 단계씩 이루어짐
1. 명령어 패치 (IF : Instruction Fetch) : 다음에 실행할 명령어를 명령어 레지스터에 저장
2. 명령어 해석 (ID : Instruction Decode) : 명령어 해석
3. 실행 (EX : EXecution) : 명령어 실행
4. 쓰기 (WB : Write Back) : 실행된 결과를 메모리에 저장
병렬처리 기법의 종류
1. 파이프라인 기법
: CPU의 사용을 극대화 하기 위해 명령을 겹쳐서 실행하는 방법
파이프라인의 위험
- 데이터 위험
: 데이터의 의존성 때문에 발생하는 문제
→ 명령어 단계를 지연하여 해결
- 제어 위험
: 프로그램 카운터 값을 갑자기 변화시켜 발생하는 문제
→ 분기 예측이나 분기 지연 방법으로 해결
- 구조 위험
: 서로 다른 명령어가 같은 자원에 접근하려 할 때 발생하는 문제
→ 해결하기 어려움
2. 슈퍼스칼라 기법
: 파이프라인과 동일하지만 동시에 실행되는 명령어가 2개이다.
3. 슈퍼파이프라인 기법
: 파이프라인의 각 단계를 세분하여 한 클록 내에 여러 명령어를 처리할 수 있다.
4. 슈퍼파이프라인 슈퍼스칼라 기법
: 모든 병렬 처리기법을 합쳐놓은 것
5. VLIW 기법
: 소프트웨어적으로 병렬 처리를 하는 방법
→ 동시에 수행할 수 있는 명령어의 개수가 적다.
용어정리
* 지역성 : 어느 한 순간에 특정 부분을 집중적으로 참조하는 특성
* 스레드 : CPU가 처리할 수 있는 작업의 단위
'OS > 쉽게 배우는 운영체제' 카테고리의 다른 글
프로세스 관리 (2) (0) | 2022.02.19 |
---|---|
프로세스 관리 (1) (0) | 2022.02.18 |
컴퓨터의 구조와 성능 향상 (1) (0) | 2022.02.14 |
운영체제의 개요 (2) (0) | 2022.02.13 |
운영체제의 개요 (1) (0) | 2022.02.12 |
댓글