본문 바로가기

Operating System/OS

Ⅱ 컴퓨터의 구조와 성능 향상

 

Part 01 운영체제와 컴퓨터

Chapter 02 컴퓨터의 구조와 성능 향상

 

1. 컴퓨터의 기본 구성

① 하드웨어의 구성

컴퓨터는 중앙처리장치(CPU), 메인메모리, 입력장치, 출력장치, 저장장치로 구성된다. 필수 장치인 CPU와 메인 메모리의 협업을 통해 컴퓨터가 동작한다. CPU와 메인메모리 외의 부품을 주변장치라고 한다. 주변장치는 입력장치(키보드, 마우스, 스캐너), 출력 장치(프린터, 모니터, 스피커), (보조)저장장치(CD, USB, SSD)가 있다. 여기서는 보조저장장치를 저장장치로 지칭하도록 한다. 이러한 다양한 부품을 연결하고 전원을 공급해주는 커다란 판을 메인보드 Main Board라고 한다. 이때, 메인보드에서 각 장치를 연결하여 데이터가 지나다니는 통로를 버스 Bus라고 한다.

 

② 폰 노이만 구조

폰 노이만 구조 Von Neumann Architecture : 모든 프로그램은 메모리에 올라와야 실행할 수 있다.

CPU, 메모리, 입출력장치, 저장장치가 버스로 연결된 구조를 말한다. 이전에는 전선을 연결하여 회로를 구성하는 하드와이어링 형태였기에 다른 용도로 사용하려면 전선의 연결을 바꾸어야 했다. 그런데 폰 노이만 구조가 등장하면서 메모리를 이용하여 프로그래밍이 가능한 컴퓨터 구조, 즉 하드웨어는 그대로 둔 채 작업을 위한 프로그램만 교체하여 메모리에 올리는 방식을 제안하였다. 이 구조 덕분에 오늘날에는 프로그래밍 기술을 이용하여 컴퓨터로 다양한 작업을 할 수 있게 되었다.

 

③ 요리사 모형

요리사 모형에서 요리사는 CPU, 도마는 메모리, 보관 창고는 저장장치에 비유된다. 보관 창고에 있는 재료를 도마로 옮겨주는 주방 보조, 채소를 다듬거나 고기를 손질하는 보조 요리사도 있다. 요리 방법을 결정하는 것은 CPU가 작업을 진행하는 것(프로세스 관리)에, 도마 위의 재료를 정리하는 것은 여러 프로그램이 사용하는 메모리를 관리하는 것(메모리 관리)에, 보관 창고의 재료를 정리하는 것은 저장장치 내의 데이터를 관리하는 것(저장장치 관리)에 비유된다. 결론적으로, 운영체제의 작업은 크게 프로세스 관리, 메모리 관리, 저장장치 관리로 나뉜다.

 

④ 기초 용어 정리

- 크기 단위

기본적으로 데이터의 표시 단위는 비트 bit 이며, 8비트를 묶어서 바이트 Byte라 부른다.

 

- 클록과 헤르츠

컴퓨터에서 CPU가 작업을 하거나 하드디스크에서 데이터를 메모리로 옮기는 작업이 일정한 박자에 맞추어 진행된다.

 

 

3GHz의 CPU가 있다면 해당 CPU는 1초 동안 약 3 × 10^9 ( = 3,000,000,000)번, 즉 약 30억 번의 작업이 가능한 CPU다. 메모리 속도가 1.6GHz라면 해당 메모리는 1초에 1.6 × 10^9의 속도로 데이터를 저장할 수 있다는 의미다.

 

- 시스템 버스와 CPU 버스

 

 

- 프로그래밍과 언어

 

 

- 필수 자료구조

 

 

 

2. CPU와 메모리

① CPU의 구성

CPU는 크게 3가지로 구성된다.

 ① 산술논리 연산장치 ALU (Arithmetic and Logic Unit) : 데이터의 산술연산, 논리 연산을 수행한다.

 ② 제어장치 CU (Control Unit) : 작업을 지시하는 부분

 ③ 레지스터 Register : 손질된 재료들을 임시로 모아 놓는 그릇과 같은 역할. CPU 내부에 작업에 필요한 데이터를 보관한다.

이들이 협업하여 작업을 수행한다.

 

- CPU의 명령어 처리 과정

Code 2-2

d2 = 2

d3 = 3

sum = d2 + d3;

sum = 5

 

이 과정에서 CPU가 연산을 어떻게 수행하는지 자세히 살펴보자.

 

 

계산을 위해 BSB에서는 2와 3을 가져온 뒤에 계산을 수행한다. 2를 데려온 후, Register에 잠시 보관한다. 이후 3을 데려온다. 실제 결과값을 SUM을 옮겨 넣음으로써 연산이 종료된다. 이러한 과정을 계속 반복하는 것이 프로그램이 하는 일이다.

 

 

Code 2-2 (어셈블리어) (p.89)

C언어를 기계어로 바꿔 놓은 버전

(1) 메모리 100번지에 있는 것을 레지스터 2로 옮기라

(2) 메모리 120번지에 있는 것을 레지스터 3번으로 옮기라

(3) 레지스터 2와 3을 더해서 레지스터 5에 놓아라

(4) 레지스터 5번에 있는 값을 메모리의 160번지로 옮겨라 (Move)

이러한 기계어는 작업 자체에 관심을 가지고 어느 메모리에 옮길 것인지 등의 세세한 항목에 주목한다. 생각보다 CPU는 하는 일이 많다. (p.90) 따라서 CPU 안에는 여러가지 레지스터가 존재한다.

 

 

- 레지스터의 종류

 

 

- 버스의 종류

BUS는 크게 3종류가 있다.

 ① 제어버스: CPU의 CU와 연결되어 있다. (양방향)

 ② 주소버스: 메모리 어느 곳에서 작업할 건지 위치 정보를 전송, MAR과 연결되어 있다.

그러나 무조건 MAR에서 전달만 받는다. (단방향)

 ③ 데이터 버스: 실제 데이터가 옮겨 다니는 버스, MBR과 연결되어 있다.

모든 버스는 이 3개의 버스와 모두 연결되어 있다. 정리하면 다음과 같다.

 

 

 

② 메모리의 종류와 부팅


- 휘발성 메모리와 비휘발성 메모리 

DRAM: 전기가 있는 동안에도 계속 리마인드 시켜줘야 한다. 시간이 갈수록 기억이 희미해진다. 계속 상기시켜줘야 한다.
SRAM: 전기가 있는 동안 그 내용물을 계속 기억하고 있는 램이다.
SDRM: 전기가 나가면 모든 내용물이 사라진다.
flash: 전기가 나가도 데이터를 기억한다. 그러나 복잡한 회로를 필요로 한다. 다시 말해, 속도가 느리다는 것을 의미한다. 

SD램은 구조가 단순하고 더 빠르다.
DDR: 두 개를 같이 저장한다. SDRM보다 2배 빠르다.
DDR2: 2^2배 빠르다.
DDR3: 2^3배 빠르다.
DDR4: 2^4배 빠르다.
현재 많이 사용하는 DDR5는 2^5배 빠르다.
다음은 메모리의 종류를 나타내는 표다.

DDR4: 2^4배 빠르다.
현재 많이 사용하는 DDR5는 2^5배 빠르다.


다음은 메모리의 종류를 나타내는 표다.

 

 

램은 전력이 끊기면 데이터가 사라지는 휘발성 메모리와 전력이 끊겨도 데이터를 보관할 수 있는 비휘발성 메모리로 나뉜다. 램과 달리 롬은 전력이 끊겨도 데이터를 보관할 수 있다는 것이 장점이지만 데이터를 한 번 저장하면 바꿀 수 없다. 이러한 특성 때문에 BIOS: Basic Input / Output System 를 롬에 저장한다.

 

 

- 메모리 보호

운영체제 영역이나 다른 프로그램 영역으로 침범하려는 악성 소프트웨어를 바이러스라고 한다. 이와 같은 악성 프로그램의 개입을 막기 위해서는 메모리 보호가 필요하다. 메모리 보호를 위해 CPU는 현재 진행 중인 작업의 메모리 시작 주소를 경계 레지스터 Bound Register에 저장한 후 작업한다. 그리고 현재 진행 중인 작업이 차지하고 있는 메모리의 크기, 즉 마지막 주소까지의 차이를 한계 레지스터 Limit Register에 저장한다. 사용자 작업이 진행되는 동안 이 두 레지스터의 주소 범위를 벗어나는지 하드웨어 측면에서 점검함으로써 메모리를 보호한다. 메모리 영역을 벗어나 발생한 신호(인터럽트)가 나타날 경우, 운영체제가 해당 프로그램을 강제종료시킨다. 이처럼 모든 메모리 영역은 하드웨어와 운영체제의 협업에 의해 보호받는다.

 

 

- 부팅 Booting : 컴퓨터를 켰을 때 운영체제를 메모리에 올리는 과정

사용자가 컴퓨터의 전원을 켜면 롬에 저장된 BIOS가 실행된다. BIOS는 CPU, 메모리, 하드디스크, 키보드, 마우스와 같은 주요 하드웨어가 제대로 작동하는지 확인하고 이상이 있으면 경고음과 함께 오류 메시지를 출력한다. 하드웨어 점검이 완료되면 BIOS의 맨 마지막 작업은 하드디스크의 마스터 부트 레코드 MBR: Master Boot Record 에 저장된 작은 프로그램을 메모리로 가져와 실행하는 것이다.

 

MBR은 하드디스크의 첫 번째 섹터를 가리키며 운영체제를 실행하기 위한 코드인 부트스트랩 Bootstrap이 저장되어 있다. 부트스트랩 코드(로더 Loader)는 하드디스크에 저장된 운영체제를 메모리로 가져와 실행하는 역할을 하는 작은 프로그램이다. 예를 들어 유닉스용 부트스트랩 코드가 실행되면 유닉스 운영체제가 메모리에 올라오고 윈도우용 부트스트랩코드가 실행되면 윈도우 운영체제가 메모리에 올라온다.

 

[부가설명]

OS도 소프트웨어이므로 메모리로 올라와야지만 실행된다. 이후 OS가 다른 프로그램들을 메모리로 직접 끌어다 올려놓는다. 그런데 처음 OS를 끄집어 올려주는 과정을 ‘부팅’이라고 한다. 우리가 처음 컴퓨터를 키면 메인보드의 롬 안에 조그마한 소프트웨어가 존재한다. 이 소프트웨어는 ‘BIOS’로, OS를 끄집어 올릴 때 모든 내용을 점검하는 역할을 수행한다. 가장 먼저, 스마트폰을 재부팅할 때 무언가 돈 다음에 켜지는데 이것이 BIOS과정을 밟고 있는 것이다. MBR은.. 하드디스크나 SSD의 가장 첫번째 영역이 있는데 그 영역에는 아주 작은 소프트웨어 하나가 달려있다. 이는 OS를 끌어당기는 역할을 한다. 이 소프트웨어를 BootStrap이라고 한다. 나머지를 잡아당기는 맨 앞단이라는 뜻을 담고 있다. BIOS 입장에서는 BootStrap 안에 윈도우가 깔려 있는지 유닉스가 깔려 있는지 알지 못한다. 윈도우 화면에 원이 돌기 시작한 것이 BIOS가 올라가 올라가 하여 메모리 위에 올라가는 것이다. OS가 올라오는 전체 과정을 부팅이라고 부른다.

 

 

 

 

 

 

 

 

 

 

 

 

 

3. 컴퓨터 성능 향상 기술

① 버퍼

- 버퍼 Buffer : 두 장치 사이의 속도 차이를 완화하는 역할

컴퓨터의 속도 향상을 위해 사용하는 개념이 ‘버퍼’다. 예를 들면, 큰 바구니에 귤을 잔뜩 담아서 한꺼번에 옮기는 것과 같다. 속도 차이가 나는 두 곳 사이에 끼어서 속도 차이를 완화시켜주는 작업을 총칭하여 ‘버퍼’라고 부른다. 많은 곳에 쓰이면서 이름들이 살짝살짝 다르다. 버퍼는 버퍼인데 특수한 버퍼를 설명하자면 ‘Spool’이라는 버퍼가 있다. 아래아 한글이 프린트와 100페이지를 출력하기 위한 작업을 수행할 때 다른 작업을 수행할 수 없다. 출력은 출력대로, 작업은 작업대로 할 수 있도록 하는 장치를 스풀러라고 한다. 프린터와 출력 소프트웨어 사이에 끼어서 출력만 담당해주는 버퍼에 해당한다.

 

- 스풀 SPOOL(Simultaneous Peripheral Operation On-Line) : CPU와 입출력장치가 독립적으로 동작하도록 고안된 소프트웨어적인 버퍼

- 캐시 Cache : 메모리와 CPU 간의 속도 차이를 완화하기 위해 메모리의 데이터를 미리 가져와 저장해 두는 임시 장소[장치/버퍼] 이때 CPU가 앞으로 사용할 것으로 예상되는 데이터를 미리 가져다 놓는 작업을 미리 가져오기 Prefetch 라고 한다. (원하는 데이터가 있으면 Cache Hit, 없으면 Cache Miss)

 

메모리의 속도는 FSB로 돌아간다. CPU는 BSB 속도로 돌아간다. 아무리 FSB가 빨라져도 BSB의 2분의 1 속도밖에 안 된다. 이는 CPU입장에서 메모리는 느린 장치라는 것을 의미한다. 따라서 메모리의 일정 영역을 Cache라고 하는 영역에 미리 데려온다. 그래서 데이터를 찾을 때 가장 먼저 Cache부터 찾아본다. 이때, Cache에 원하는 데이터가 있을 때를 hit라고 하며 원하는 데이터가 없을 때를 miss라고 한다.

 

넷플릭스와 유튜브가 SK와 다투는 문제가 있다. 넷플릭스는 미국에서 오므로 통신사 요금을 내지 않기 때문이다. 넷플릭스가 주장하는 바는 한국에 Cache 서버를 설치하여 제공한다는 것이다. 앞으로 볼 것이라 예측되는 컨텐츠를 가져다 놓았으므로 Cache서버라고 일컫는 것이다. 쉽게 말해, Prefetch 앞으로 쓸 것이라 예상되는 것을 미리 가져다 놓는다는 개념이다.

 

어느 사이트를 방문하든 처음 방문했을 때는 매우 느리지만 2번째 방문할 때는 빨라진다. 왜냐하면 캐시에서 전에 썼던 데이터를 보관해놓았기 때문이다. 그런데, 그 파일들이 계속 쌓이면 하드디스크 용량을 잡아먹을 뿐만 아니라 검색을 할 때도 느려진다. 그렇기에 가끔씩 지워주는 작업이 별도로 필요하다.

 

 

- 좋은 성능의 조건

하드디스크에 버퍼가 달려있다. 빠른 하드디스크에는 항상 좋은 버퍼가 달려있다. 저가형 CPU와 고가형 CPU의 차이는 코어 차이도 있지만 Cache 용량의 차이가 가장 크다. 그만큼 Cache 메모리의 크기가 커질수록 CPU의 성능이 올라간다.

 

 

 

② 저장장치의 계층구조

저장장치의 계층구조는 CPU 가까이 고속의 메모리를 배치하는 방법이다. 적당한 가격으로 빠른 속도와 큰 용량을 동시에 얻을 수 있다.

 

만수르가 전세계에서 가장 빠른 컴퓨터를 갖고자 하여 인텔에 1TB Cache를 별도 주문한다 가정하자. 이렇게 되면 극도로 빨라진다. 그러나 인텔에서는 CPU 값으로만 1억원을 요구할 것이다. 따라서 저장장치에 가장 중요한 것은 가격 대비 효용성이다. 같은 돈을 지불했을 때 그 돈만큼 빠르게 만들 수 있는 시스템을 구축하기 위해서 저장장치를 계층구조로 만드는 것이 가장 이상적이다.

 

 

 

③ 인터럽트

오늘의 핵심적인 내용은 ‘인터럽트’다.

- 인터럽트 방식: CPU 작업과 입출력 작업을 분리하여 효율을 높이는 방식이다. CPU는 입출력 관리자에게 작업을 지시하고, 입출력 관리자는 입출력이 끝나면 CPU에 인터럽트를 보낸다.

옛날에 주변장치가 몇 개 없었던 시절에는 CPU가 계산 외에 입출력까지 모두 혼자 작업했어야만 했다. 이때를 콜링이라고 부른다. 현재는 주변장치가 많아졌다. 입출력을 관리하는 별도 관리자들이 생겼다. 그렇기에 CPU는 더 이상 입출력을 모두 관리할 필요가 없어졌다. CPU는 명령만 내린 뒤, 자신의 작업에 집중할 수 있게 된 것이다. 이 상태에서 하드디스크한테 데이터를 가져오라고 하는 명령의 작업이 끝났다. 네트워크에서 데이터를 받아달라는 요청이 끝났다. 그런데, 계속 작업을 수행하는 CPU에게 다음 작업을 할 수 있도록 작업이 끝났다고 이야기해줘야 한다. 이것을 인터럽트라고 한다. CPU의 작업을 방해한다는 의미이다. 

인터럽트를 할 때는 번호로 이야기해 준다. ‘1번 작업 끝났어요, 50번 작업 끝났어요.’ 그런데, 동시에 작업 처리가 끝날 수 있으므로 인터럽트 벡터라고 해서 인터럽트 번호로 구성된 배열을 하나 만든다. 간헐적으로 인터럽트 벡터를 받아서 작업이 끝난 것에 대한 후속 조치를 취하게 된다. 그게 바로 인터럽트 시스템이다. 이름이 방해하는 시스템이라고 되어 있으므로 좀 낯설었겠지만 현대의 모든 컴퓨터와 핸드폰은 인터럽트 시스템으로 작동한다. 따라서 현대 컴퓨터 시스템의 가장 핵심이다.

 

 

④ 직접 메모리 접근

- 직접 메모리 접근 DMA(Direct Memory Access) : 입출력 관리자에게 CPU의 허락 없이 메모리에 접근할 수 있게 권한을 주는 것

원래 메모리는 CPU의 것이었다. 메모리가 CPU 것이라는 것은 누군가 메모리를 사용하기 위해 CPU에게 양해를 구해야 한다는 것을 의미한다. 그런데 인터럽트 시스템에서 하드디스크, 네트워크에서 가져온 데이터는 당연히 메모리에 갖다 놓아야 한다. 그런데 메모리에 둘 때마다 CPU에게 써도 되냐고 물어보는 것은 비효율적이다. 원래 메모리를 CPU 것이었지만 CPU의 메모리를 각자의 권한에 따라 사용할 수 있도록 하는 것이 바로 ‘직접 메모리 접근 DMA’다. p.111를 보자. DMA 장치가 붙어서 CPU의 허락 없이도 메모리에 직접 데이터를 접근할 수 있게 되었다.

 

 

 

⑤ 메모리 맵 입출력

- 메모리 맵 입출력 MMIO(Memory Mapped I/O) : 메모리의 일정 공간을 입출력에 할당하여 CPU가 사용하는 데이터와 입출력장치가 사용하는 데이터가 섞이지 않게 관리하는 기법

인터럽트 시스템에 의해 생긴 여러가지 중 하나. 고기를 칼질하고 있는데 거기다 귤바구니의 귤을 막 쏟아 부으면 싸우게 된다. 이제 CPU와 IO장치가 공동으로 작업하는 영역이 된 메모리가 되었기 때문이다. 그래서 분리하는 작업을 수행하는데 이를 MMIO(Memory Mapped I/O) 라고 부른다. p.112 그림을 보자. CPU의 메모리 작업과 IO의 메모리 작업을 분리시켰다는 의미이다.

 

 

 

⑥ 사이클 훔치기

- 사이클 훔치기 Cycle Stealing : 메모리에 동시에 접근했을 때 CPU가 메모리 사용 권한을 장치 관리자에게 양보하는 것

마지막, 둘이서 작업을 하다 보면 동시에 메모리에 접근하는 경우가 발생한다. 그렇다면 원래 메모리가 CPU의 것이므로 CPU가 먼저 작업을 하는 것이 맞다. 그러나, CPU는 빠르고 IO는 느리므로, CPU가 양보하여 작업을 넘겨준다. 그래 놓고는 사이클을 훔쳐갔다고 이야기하는 것을 Cycle Stealing이라고 부른다.

 

 

 

4. 멀티 프로세싱

최신 CPU는 멀티코어와 병렬 처리 기법을 사용하여 CPU 성능을 높인다. 멀티코어 시스템에서는 하나의 칩 Chip에 CPU의 핵심이 되는 코어 Core를 여러 개 만들어 여러 작업을 동시에 처리할 수 있다. 하나의 코어에서 여러 개의 스레드를 동시에 처리하는 방법을 CPU 멀티스레드 Multi-thread라고 한다.

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

'Operating System > OS' 카테고리의 다른 글

Ⅶ 물리 메모리 관리  (0) 2023.11.28
Ⅵ 교착 상태  (0) 2023.11.28
Ⅴ 프로세스 동기화  (0) 2023.11.28
Ⅳ CPU 스케줄링  (0) 2023.11.28
Ⅰ 운영체제의 개요  (0) 2023.11.28