Scribbling

운영체제 - 2 본문

Computer Science/Computer Knowledge

운영체제 - 2

focalpoint 2021. 9. 27. 22:29

 

1. 컴퓨터의 기본 구성

1.1 하드웨어

- 컴퓨터는 CPU, 메인메모리, 입력장치, 출력장치, 저장장치로 구성된다.

- 메인보드는 CPU와 메모리 등 다양한 부품을 연결하는 커다란 판이다. 메인보드에는 버스가 복잡하게 얽혀 있으며 전력이 공급되면 버스로 연결된 부품이 작동한다.

 

1.2 폰노이만 구조

오늘날의 컴퓨터는 대부분 폰노이만 구조를 따른다. 폰노이만 구조는 CPU, 메모리, 입출력장치, 저장장치가 버스로 연결되어 있는 구조를 말한다. 이는 메모리를 이용하여 프로그래밍이 가능한 컴퓨터 구조로, 하드웨어 변경 없이 프로그램만 교체하여 메모리에 올리는 방식이다.

폰노이만 구조의 핵심적인 특징은 '모든 프로그램은 메모리에 올라와야 실행 가능하다'는 것이다. 운영체제도 프로그램이기 때문에 메모리에 올라와야 실행 가능하다.

 

1.3 하드웨어 사양 관련 용어

- 클록 (Clock): CPU의 속도와 관련된 단위. 클록이 일정 간격으로 틱(tick)을 만들면 거기에 맞추어 CPU 안의 모든 구성 부품이 작업을 한다. 버스에는 여러 부품이 연걸되어 있는데, 메인보드의 클록이 틱을 보낼 때마다 데이터를 보내거나 받는다.

- 시스템 버스: 메모리와 주변 장치를 연결하는 버스이다.

- CPU 내부 버스: CPU 내부 장치를 연결하는 버스이다. CPU 내부 버스의 속도(CPU 클록과 동일)는 시스템 버스의 속도보다 훨씬 빠르다.

<하드웨어 사양의 예시>

- CPU 3.4GHz: CPU가 1초에 약 34억 번의 연산이 가능함을 의미한다.

- 메인보드 1,333MHz (1.3GHz): 초당 1.3억번의 데이터 이동이 가능함을 의미한다.

 

2. CPU와 메모리

2.1. CPU의 구성과 동작

A. CPU의 기본 구성

- 산술논리 연산장치 (ALU)

- 제어장치: 작업을 지시하는 부분로 명령어를 해석하여 제어 신호를 보내고 CPU 내의 데이터 흐름을 조절하는 역할을 수행

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

 

B. 레지스터의 종류

가시 레지스터(user-visible register): 데이터 레지스터와 주소 레지스터는 사용자 프로그램에 의해 변경되기 때문에 가시 레지스터라고 부른다.

- 데이터 레지스터: 메모리에서 가져온 데이터를 임시로 보관하는 레지스터

- 주소 레지스터: 데이터 또는 명령어가 저장된 메모리의 주소를 저장하는 레지스터

특수 레지스터/사용자 불가시 레지스터: 사용자가 임의로 변경할 수 없는 레지스터

- 프로그램 카운터: 다음에 실행할 명령어의 주소를 기억

- 명령어 레지스터: 현재 실행 중인 명령어을 저장

- 메모리 주소 레지스터: 메모리에서 데이터를 가져오거나 보낼 때 주소를 지정하기 위해 사용

- 메모리 버퍼 레지스터: 메모리에서 가져온 데이터를 임시 저장하는 레지스터

 

C. 버스의 종류

- 제어 버스(control bus): 작업을 지시하는 제어 신호가 오고 간다.

- 주소 버스(address bus): 메모리의 데이터를 읽거나 쓸 때 어느 위치에서 작업할 것인지 알려주는 위치 정보가 오고 간다. 주소 버스는 메모리 주소 레지스터와 연결되어 있으며 단방향이다. CPU에서 메모리나 주변장치로 나가는 주소 정보는 있지만 주소 버스를 통해 CPU로 전달되는 정보는 없다.

- 데이터 버스: 데이터가 양방향으로 오고 간다.

* 대역폭(bandwidth): 한 번에 전달 가능한 데이터의 최대 크기

* 32bit / 64bit CPU: 32bit CPU는 한 번에 처리할 수 있는 데이터의 최대 크기가 32bit이다. 따라서 메모리에서 데이터를 읽거나 쓸 때 한 번에 최대 32bit를 처리할 수 있다.

 

2.2 메모리 종류와 부팅

A. 메모리의 종류

<휘발성>

- DRAM (Dynamic RAM): DRAM은 0과 1의 데이터가 일정 시간이 지나면 사라지므로 일정 시간마다 다시 재생시켜야 한다.

- SDRAM (Synchronous DRAM): SDRAM은 동기식 DRAM이다. 즉, 제어장치의 클록틱마다 1개의 워드를 저장한다.

* DDR SDRAM / DDR2 SDRAM: DDR SDRAM은 클록틱 한 번에 2개의 워드를, DDR2 SDRAM은 클록틱 한 번에 4개의 워드를 저장한다.

- SRAM (Static RAM): SRAM은 전력이 공급되는 동안 데이터를 보관할 수 있어 재생할 필요가 없다. 따라서 속도는 빠르나 가격이 비싸다.

- 일반적으로 메인 메모리에 DRAM을, 캐시 같은 고속 메모리에 SRAM을 사용한다. 

- 메인 메모리 혹은 캐시에 이러한 휘발성 메모리를 사용하는 이유는 속도가 빠르기 때문이다. (비휘발성 메모리는 전력이 끊겨도 데이터를 보관해야 하므로 메모리 내부가 복잡하고 속도가 느리다)

<비휘발성>

- 플래시 메모리: 디지털 카메라, USB 드라이버 같이 전력이 없어도 데이터를 보관하는 저장장치로 많이 사용된다. 다만 플래시 메모리는의 각 소자는 최대 사용 횟수가 제한되어 있어서 오래 사용하면 제 기능을 잃는다.

 

B. 부팅

컴퓨터를 켰을 때 운영체제를 메모리에 올리는 과정을 부팅(booting)이라고 한다.

컴퓨터의 전원을 켜면 롬에 저장된 바이오스가 실행된다. 바이오스는 CPU, 메모리 등 주요 하드웨어가 제대로 작동하는지 확인한다. 이상이 없으면 하드디스크의 마스터 부트 레코드 (Master Boot Record)에 저장된 작은 프로그램을 메모리로 가져와 실행한다. 마스터 부트 레코드에는 부트스트랩(bootstrap)이 저장되어 있다. 부트스트랩 코드는 운영체제를 메모리로 가져와 실행하는 역할을 한다.

 

3. 컴퓨터 성능 향상 기술

현대 컴퓨터 구조의 가장 큰 문제는 CPU와 메모리, 주변장치의 작업 속도가 다르다는 것이다. CPU 내부 버스의 속도가 시스템 버스의 속도보다 빠르기 때문에 메모리를 비롯한 주변 장치의 속도는 CPU의 속도를 따라가지 못한다.

3.1. 버퍼와 스풀

- 버퍼(buffer): 일정량의 데이터를 모아 옮김으로써 속도의 차이를 완화하는 장치

- 스풀(spool): 소트웨어적 버퍼로, CPU와 입출력장치가 독립적으로 동작하도록 고안되었음.

* 하드웨어 안전 제거: USB 등으로 파일 이동 시, 버퍼가 다 차지 않아 버퍼에 남아 있는 데이터가 옮겨지지 않은 상태로 꺼버리는 것을 방지.

 

 

3.2. 캐시

캐시(Cache)는 메모리와 CPU간의 속도 차이를 완화하기 위해 메모리의 데이터를 미리 가져와 저장해 두는 임시 장소이다. 핵심은 CPU가 앞으로 사용할 가능성이 높은 데이터를 미리 가져다 놓는 것이다. CPU는 메모리에 접근해야 할 때, 캐시에 먼저 방문하여 원하는 데이터가 있는지 찾아본다. 이 때 데이터를 찾으면 '캐시 히트(cache hit)'라고 하며, 반대의 경우를 '캐시 미스(cache miss)'라고 한다.

* 브라우저 캐시: 소프트웨어적으로도 캐시의 개념이 사용된다. 웹에서 사용하는 캐시는 '앞으로 다시 방문할 것을 예상하여 남겨두는 데이터'이다. 네이버의 로고와 같은 일부 데이터는 자주 바뀌지 않는다. 이러한 데이터를 캐시에 보관하고 있다가 사이트 재방문시 캐시에 있는 데이터를 사용하는 방식으로 속도를 높인다.

 

3.3 메모리의 계층 구조

CPU와 가까운 저장장치일수록 속도가 빠른 메모리를 사용한다. 이는 가격-성능간의 trade-off 때문이다.

 

3.4 인터럽트

A. 인터럽트

현대 컴퓨터는 많은 주변장치가 있다. CPU가 모든 주변장치(입출력장치)에 관여한다면 작업 효율이 현저히 떨어진다. 이러한 문제를 해결하기 위한 메커니즘이 바로 인터럽트(interrupt) 방식이다. 인터럽트 방식은 CPU의 작업과 저장장치의 데이터 이동을 독립적으로 운영함으로써 CPU의 운영률을 높인다.

 

B. 인터럽트 방식

CPU가 입출력 명령을 보냄 -> 입출력 관리자가 데이터를 메모리 혹은 저장장치로 이동 -> 데이터 전송 완료 후 완료 신호를 CPU에 보냄

여기서 입출력 관리자가 CPU에 보내는 완료 신호를 인터럽트라고 한다. 인터럽트 신호를 받으면 CPU는 하던 작업을 일시 중지하고 입출력 관리자에게 작업 지시를 내린다.

각각의 주변 장치는 인터럽트 번호(interrupt number)가 부여되어 있다. 이는 CPU가 어떤 장치에서 인터럽트 신호가 왔는지를 파악하는데 사용된다.

CPU는 인터럽트 벡터(interrupt vector)를 통하여 어떤 인터럽트가 완료되었는지를 체크하고, 해당 작업을 처리한다.

 

C. 직접 메모리 접근 (Direct Memory Access)

앞서 언급하였듯이, CPU 가동 효율을 높이기 위해 입출력 관리자가 데이터의 입출력을 맡게 되었다. 입출력 관리자는 CPU의 허락을 받아야만 메모리에 접근 가능한데, 이러한 권한을 '직접 메모리 접근'이라고 한다.

 

D. 메모리 매핑 입출력

입출력 관리자가 '직접 메모리 접근(DMA)'를 통해 메모리를 접근하는 경우, CPU가 현재 작업하는 메모리와 섞일 경우 곤란할 수 있다. 이를 방지하기 위해 CPU가 사용하는 메모리 공간과 DMA 작업 공간을 분리하는 방식을 '메모리 매핑 입출력(Memory Mapped I/O)라고 한다.

 

4. 병렬처리

CPU의 성능을 향상시키는 가장 좋은 방법은 CPU 클록을 높이고 캐시의 용량을 늘리는 것이다. 그러나 클록을 높이는 문제는 발열 문제가 걸림돌이되며, 캐시의 크기를 늘리는 것은 비용 문제가 발목을 잡는다. 때문에 최근 추세는 CPU의 코어 개수를 늘리거나, 동시에 실행 가능한 명령의 개수를 늘리는 방법을 사용한다.

스레드(thread)는 CPU의 작업 단위로, 한 번에 여러 개의 스레드를 처리하는 방식을 멀티스레드(multi thread)라고 한다.

 

 

'Computer Science > Computer Knowledge' 카테고리의 다른 글

운영체제 - 4  (0) 2021.10.05
운영체제 - 3  (0) 2021.10.03
운영체제 - 1  (2) 2021.09.17
컴퓨터의 구조 - 9  (0) 2021.09.10
컴퓨터의 구조 - 8  (0) 2021.09.07