운영체제/쉽게 배우는 운영체제

[OS] 2. 컴퓨터의 구조와 성능향상 기술 (쉽게배우는 운영체제 2장)

민돌v 2022. 5. 7. 00:32
쉽게배우는 운영체제, 한빛미디어 - 요약 및 공부한 내용입니다.
  1. 하드웨어의 구성
  2. 폰노이만 구조
  3. CPU와 메모리
    1. CPU 구성
    2. 레지스터의 종류
    3. 운영체제 버스
    4. 메모리 보안
  4. 컴퓨터 성능 향상 기술
  5. 인터럽트
  6. 운영체제 병렬 처리

 


컴퓨터의 기본구성

1.하드웨어의 구성

- 필수장치 : 중앙처리장치(CPU), 메인메모리(RAM)

- 주변장치 : 입력장치, 출력장치, 저장장치

1) CPU와 메모리

CPU : 명령어를 해석하여 실행하는 장치(두뇌)

메모리 : 작업에 필요한 프로그램과 데이터를 저장하는 장소

2) 입출력 장치

: 외부의 데이터를 컴퓨터에 입력하는 장치

3) 저장장치

: 속도가 느리지만 가격이 저렴

4) 메인보드

- cpu와 메모리등 다양한 부품을 연결하는 커다란 판

- 각 부품은 버스로 데이터를 이동


2. 폰노이만 구조

(중요) 모든 프로그램은 메모리에 올라와야만 실행 할 수 있다.


3. CPU와 메모리

1) CPU의 기본구성 3가지

1. 산술논리 연산장치

: 데이터 덧셈, 뺄셈 등 산술연산/ and, or 같은 논리연산을 수행

 

2. 제어장치

: cpu에서 작업을 지시하는 부분 ( "이거 가져가", "여기로 가져와")

3. 레지스터

: CPU내에 데이터를 임시로 보관하는 곳

2) 레지스터의 종류 (크게)

가. 데이터 레지스터 (DR)

: 메모리에서 가져온 데이터를 임시로 보관할 때 사용

⇒cpu에 있는 대부분의 레지스터가 DR, 따라서 일반레지스터라고도 함

나. 주소 레지스터 (AR)

:메모리의 주소가 저장된 레지스터

3) 특수 레지스터

⇒ 특별한 용도로 사용되는 레지스터

: 사용자가 임의로 변경할 수 없다. (사용자 불가시 레지스터)

  • 프로그램 카운터(PC) - 다음에 실행할 명령어의 주소를 기억하는 역할
  • ​명령어 레지스터(IR - instruction register) - 현재 실행중인 명령어 저장
  • 메모리 주소 레지스터(MAR) - 메모리를 가져오거나 보낼 때 주소를 지정하기 위해 사용 (다시 제자리로 보내야하기 때문에 필요)
  • ​메모리 버퍼 레지스터 (MBR) - 데이터를 임시저장, MAR과 항상 함께 동작

4) 버스의 종류

1. 제어버스 (양방향)

: 다음에 어떤 작업을 할지 지시하는 제어신호가 오고감

⇒ 제어버스는 cpu와 제어장치와 연결

2. 주소버스 (단방향)

: 메모리의 데이터를 일거나 쓸 때 어느 위치에서 작업할 것인지 알려주는 위치정보가 오고간다.

⇒주소버스는 "메모리 주소 레지스터"와 연결

3. 데이터 버스 (양방향)

: 데이터가 데이터 버스에 실려이동 (명령어 + 데이터)

⇒메모리 버퍼 레지스터에 연결

* 버스의 대역폭 : 한번에 전달 할 수 있는 데이터의 최대 크기를 말한다.

5) 메모리의 보호(보안)

- OS가 구동되는 메모리와 일반 사용자가 사용하는 메모리가 서로 침범되지 않기 위해,

혹은 각각의 메모리 범위를 지정하여서 보호하기 위해

경계 레지스터와, 한계 레지스터를 사용한다.

인터럽트

: 두 레지스터의 값을 벗어나면 인터럽트가 발생하고, 인터럽트가 발행하면 모든 작업을 중단한다.(OS에서 해당 프로그램 강제 종료)

부트 스트랩

: 운영체제 또한 프로그램이기 때문에 메모리위에 올라와야 실행이 된다.

이렇게 운영체제를 메모리위에 올리는 과정을 부팅 이라하며,

이러한 일을 하는 프로그램을 부트 스트랩이라고 한다.


4. 컴퓨터 성능 향상 기술

1) 버퍼

- 버퍼란, 속도에 차이가 있는 두 장치 사이에서 그 차이를 완화하는 역할을 한다.

- 일정량의 데이터를 모아서 처리

2) 스풀

- 입출력 장치와 cpu가 독립적인 것.

ex) 프린터

: 프린터는 스플러에 담아서 전송한다.(스풀링)

3) 캐시

- 메모리와 CPU간의 속도차이를 완하하기 위한 것

- 메모리의 데이터를 미리 가져와 저장해두는 임시 저장소.

<캐시의 과정>

가. cpu는 메모리에 저근해야 할 때 캐시를 먼저 방문한다.

나. 캐시에서 원하는 데이터를 찾았다면, 캐시 히트라 한다.

다. 찾지 못하였다면 메모리로 가서 데이터를 찾는다 (캐시 미스)

4) 저장장치의 계층구조

비싸고 속도가 빠른 저장장치를 cpu 가까운곳에 배치하여 성능을 향상시키는 구조이다.

보통 아래의 순서와 같다.

"레지스터" > "캐시" > "메모리" > "저장장치"

5) 인터 럽트

* CPU와 메모리와 달리, 주변장치나 입출력 장치는 "인터럽트"를 통해 관리된다.

가. 인터럽트란

- CPU가 프로그램을 실행하고 있을 때, 입출력 하드웨어 등의 장치나 예외상황이 발생하여 처리가 필요할 경우에 마이크로프로세서에게 알려 처리할 수 있도록 하는 것을 말한다.

- 인터럽트는 크게 하드웨어 인터럽트와 소프트웨어 인터럽트로 나뉜다.

즉, 인터럽트란 입출력 관리자가 CPU에게 보내는 완료신호 이다.

나. 인터럽트 동작과정

1) cpu가 입출력 관리자에게 입출력 명령 보냄

2) 입출력 관리자는, 데이터를 메모리에 가져다놓고나서 저장장치에 옮김

3) 데이터 전송 완료시, 완료신호를 CPU에 보냄(인터럽트)

4) CPU가 신호를 받으면 하던일을 중단하고 데이터를 처리

다. 하드웨어 인터럽트

하드웨어가 발생시키는 인터럽트로, CPU가 아닌 다른 하드웨어 장치가 cpu에 어떤 사실을 알려주거나 cpu 서비스를 요청해야 할 경우 발생시킨다.

라. 소프트웨어 인터럽트

소프트웨어가 발생시키는 인터럽트이다. 소프트웨어(사용자 프로그램)가 스스로 인터럽트 라인을 세팅한다.

종류: 예외 상황, system call

인터럽트를 발생시키기 위해 하드웨어/소프트웨어는 cpu내에 있는 인터럽트 라인을 세팅하여 인터럽트를 발생시킨다.

cpu는 매번 명령을 수행하기 전에 인터럽트라인이 세팅되어있는지를 검사한다.


5. 병렬 처리

1) 병렬 처리의 개념

- 병렬처리란, 동시에 여러개의 명령을 처리하는 것이다. (듀얼 코어, 쿼드 코어)

- 하나의 코어(cpu)에 여래개의 스레드를 이용하는 방식이을 파이프라인이라 한다.

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

2) 병렬처리 고려사항

가. 상호 의존성이 없어야 한다.

:각 명령이 서로 독립적이어야 한다.

나. 각 단계의 시간이 거의 일정해야 한다.

: 그렇지 않다면 뒤에 오는 프로세스들이 기다려야하거나,

시간이 오래걸리는 단계에서 "병목 현상" 이 일어날 수 있다.

 

다. 전체 작업시간(명령어)를 몇 단계로 나눌지 고려해야한다.

- 작업을 N개로 쪼개면, 병렬처리의 깊이는 N이다.

- N(깊이) 는 동시에 처리할 수 있는 작업의 개수 이다.

3) 병렬처리 기법

1. 파이프라인 : 하나의 코어에 여러개의 스레드를 사용하는 것이다.

(명령을 겹쳐서 실행)

파이프라인의 위험

① 데이터 위험(Data Hazard)

- 데이터의 의존성 때문에 발생하는 문제

- 데이터 A를 필요로 하는 두 번째 명령어는 앞의 명령어가 끝날 때까지 동시에 실행되어서는 안 됨

- 데이터 위험은 파이프라인의 명령어 단계를 지연하여 해결

데이터 위험의 예

[A = C + D]

[E = A * 2]

② 제어 위험(Control Hazard)

- 프로그램 카운터 값을 갑자기 변화시켜 발생하는 위험

- 첫 명령어를 실행하고 보니 goto 문이어서 다음 문장이 아니라 다른 문장으로 이동하게 되면 현재 동시에 처리되고 있는 명령어들이 쓸모없어짐

- 제어 위험은 분기 예측이나 분기 지연 방법으로 해결

제어 위험의 예

[Goto line 10]

[E = A * 2]

③ 구조 위험(Structural Hazard)

- 서로 다른 명령어가 같은 자원에 접근하려 할 때 발생하는 문제

- 명령어 A가 레지스터 RX를 사용하고 있는데 병렬 처리되는 명령어 B도 레지스터 RX를 사용해야 한다면 서로 충돌

- 구조 위험은 해결하기 어렵다고 알려져 있음

구조 위험의 예

[ADD RX + 3]

[Move RX]

슈퍼 스칼라

코어가 여러개( 각 코어당 파이프라인을 실행)인 것

2. 슈퍼 파이프라인

파이프란인은 한 클럭에 한 명령어를 수행하는데, 슈퍼 파이프라인 기법은 한 클럭내에 여러 명령어를 실행할 수 있다.

3. 슈퍼 파이프라인 스칼라

코어가 여러개인 슈퍼 파이프라인 기법

4. VLIW (Very Long Instruction Word)

: 소프트웨어적으로 병렬 처리를 하는 방법을 VLIW 라 한다.