쉽게 배우는 OS Chapter02

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

1. 컴퓨터의 기본 구성

1.2 폰노이만구조

폰노이만 구조 이미지 출처 : 위키피디아

CPU, IO장치, 메모리가 버스를 통해 연결되어있는 구조. 오늘날의 컴퓨터는 대부분 폰노이만 구조를 따른다. 하드웨어는 그대로 두고 프로그램만을 메모리에 올려 다양한 작업을 할 수 있게 한 구조이다. 이러한 폰노이만 구조의 가장 중요한 특징은 모든 프로그램은 메모리에 올라와야 실행할 수 있다는 것이다.

1.4 하드웨어 사양 관련 용어

2. CPU와 메모리

2.1 CPU의 구성과 동작

2.1.1 CPU의 기본 구성

아래의 장치들은 CPU 내부의 것들이다.

2.1.4 버스의 종류

img 이미지 출처 : 위키피디아

(시스템)버스는 CPU, 메모리, 주변장치간 데이터를 주고 받을 때 사용한다.

버스의 대역폭은 한번에 전달할수 있는 최대 데이터의 크기를 말한다. 이는 CPU가 한번에 처리되는(움직이는) 데이터의 최대 크기를 말한다. CPU 사양중에서 32bit 64bit가 이 뜻이다. 이와 관련된 데이터 크기는 워드이다. 1워드는 한번에 처리 가능한 데이터의 최대크기이며, 64bit cpu의 1워드는 64bit이다.

2.2 메모리의 종류와 부팅

2.2.2 메모리 보호

메모리보호는 각 프로세스의 메모리 영역을 침범하지 않게 하는 것이다. 특히 운영체제 또한 하나의 프로그램이므로, CPU가 다른 프로그램을 처리하는 동안엔 운영체제는 정지된 상태이다. 이때 하드웨어의 도움을 받는다. 동작중인 프로세스가 지정된 레지스터/메모리의 주소범위를 넘어가는 경우 하드웨어는 인터럽트를 발생시켜 CPU에 전달한다. 그러면 CPU는 운영체제를 깨워 해당 프로세스를 강제종료시키면서 인터럽트를 처리한다.

2.2.3 부팅

컴퓨터가 켜지면 운영체제는 메모리에 올라간다. 이것을 부팅이라고한다. 사용자가 컴퓨터를 키면 롬의 바이오스가 실행되며, CPU/메모리/보조기억장치/IO등 주요하드웨어의 동작을 확인한다. 이상이 없으면 바이오스는 보조기억장치의 마스터부트레코드가 가르키는 프로그램을 메모리로 올려서 실행한다. 이 프로그램이이 부트스트랩이며, 보조기억장치 가장 첫번째 섹터(주소?)에 저장되어있다. 메모리에 탑제된 부트스트랩은 운영체제를 메모리로 올리는 작업을 한다.₩

윈도우 부팅 전용 USB를 만드는것은, USB드라이어에 마스터부트레코드를 탭제하는 것이다.

3. 컴퓨터 성능 향상 기술

3.1 버퍼

3.1.1 버퍼란

버퍼는 속도의 차이가 있는 두 장치 사이에서 그 차이를 완화하는 역할을 하는 장치/기술이다. 속도가 다른 다른 장치(CPU->메모리, 입력장치->CPU…)간 데이터를 일정량의 데이터를 모아서 한번에 전송한다. 이 경우 데이터를 한번에 보내므로 비용이 감소하고 보낼때마다 드는 비용을 최소화할 수 있고, 빠른 장치는 느린 장치의 입력을 더 적게 기다릴수 있다.

버퍼와 ‘하드웨어 안전제거’ : USB등에 데이터를 전송할때도 그냥 뽑아버리면 버퍼가 다 차지않아서 문제가 될 수 있다. 따라서 하드웨어 안전제거(flush동작을 함)를 통해 안전하게 남은 데이터를 전송해야한다.

3.1.2 스풀

속도의 차이가 많이 나는 CPU와 입출력장치가 독립적으로 동작하도록 만든 소프트웨어적인 버퍼. 대표적으로 프린터기가 있다. -> 출력시 출력할 문서를 프린터기의 스풀러 공간에 저장하고 이를 인쇄하게 하면 CPU는 속도가 느린 프린터기를 기다릴 필요가 없어진다.

스풀과 버퍼의 차이 : 버퍼는 프로그램들간 공유된다(입출력 버퍼등). 스풀러는 메타적으로, 하나의 스풀러(인쇄물)를 처리중에는 다른 것들은 간섭할 수 없다.

3.2 캐시

3.2.1 캐시의 개념

cache 이미지 출처 : https://cpuninja.com/cpu-cache/ 캐시는 CPU와 메모리 사이에서, 필요한 데이터를 모아서 CPU에 한번에 전송하는 데이터의 일종이다. 캐시는 빠를 CPU와 (시스템 버스 속도의)레모리의 속도 차이를 완화한다.

캐시는 메모리내용중 일부를 미리 가져오고, CPU는 메모리에 접근하기전 캐시에 먼저 방문하여 원하는 내용이 있는지 확인한다. 있으면 캐시 히트, 없으면 캐시 미스라고 한다. 이 히트 비율을 캐시 적중률 이라고 하며, 일반적 컴퓨터의 적중률읜 90%정도라고 한다.

캐시의 적중률을 높이는 방법은

  1. 캐시의 크기를 키운다 : 적중률 증가와 직결되지만, 캐쉬는 고가의 저장장치이므로 몇 메가바이트만 주로 사용한다.
  2. 앞으로 많이 사용될 데이터를 가져온다 : 현재 실행되는 명령에서 가까운(다음)명령이 사용될 확률이 높다(지역성 이론). 이러한 데이터를 캐시에 가져오면 적중률이 올라간다. -> 이러한 관점으로 볼 때 goto 문은 캐시의 적중률을 떨어트리므로 쓰지 않는 것이 좋다.

3.2.2 즉시쓰기와 지연쓰기

img 이미지 출처 : student-circuit 캐시에 있는 데이터는 메모리의 있는 데이터를 임시로 가져온것이다. 그러므로 연산을 통해 캐시의 데이터가 바뀌면 원본(메모리)의 것도 바꿔주어야한다.

3.2.3 L1캐시와 L2캐시

3.2.1의 이미지 참고. 캐시에도 level이 있어서 레지스터와 ㅂ자로 연결된 것을 L1캐시(캐시중 가장 빠름), L1과 메모리(혹은 L3)캐시와 연결된것을 L2캐시(덜 빠름)으로 구분된다.

3.3 저장장치의 계층구조

Memory Hierarchy 이미지 출처 : diveintosystems 저장장치의 계층구조를 통해 사용자는 저장용량은 보조기억장치처럼, 작업속도는 레지스터처럼 작업할수 있게 된다. 하지만, 이러한 구조로 인해 데이터의 일관성유지, 각 저장장치에 접근 비용이라는 추가적인 비용이 발생하게 된다.

데이터 일관성 : CPU가 캐시의 데이터를 변경하면 메모리의 데이터 또한 바꾸어야 일관성이 유지됨, 보조기억장치간 버퍼…

3.4 인터럽트

3.4.1 인터럽트의 개념

과거에는 CPU에서 직접 입출력장치에 직접관여하여 데이터를 가져오고나 보냈다. 이를 폴링방식이라고 한다. 그러나 폴링방식은 CPU의 효율에 악영향을 미친다. 이러한 악영향을 최소화하기 위해서 인터럽트 방식이 만들어졌다.

인터럽트방식에서는 CPU에 지시만 내리고, 해당 행동이 완료될때 까지 CPU는 다른 행동을 한다. 이후 지시가 완료되면 입출력관리자는 완료 신호를 인터럽트로 CPU에게 보낸다.

3.4.2 인터럽트의 동작과정

  1. CPU는 입출력관리자에게 입출력 명령을 보낸다.
  2. 입출력 관리자는 명령받은 동작을 수행한다.
  3. 동작이 완료되면 입출력관리자는 완료신호를 CPU에 보낸다.
  4. CPU는 하던일을 멈추고 인터럽트를 처리한다.

4. 병렬처리

4.1 병렬처리의 개념

현재 CPU의 클럭은 특정 속도(5GHz)를 넘기 힘들다. 이후 CPU의 성능을 늘리기 위해 동시에 실행가능한 명령의 개수를 늘리거나, 코어를 여러개 만드는 방법으로 성능을 향상시켰다.

병렬처리는 동시에 여러개의 명령을 처리할 수 있게 하여 성능을 향상시키는 방법이다. 이러한 병렬처리는 코어가 하나뿐인 CPU에서도 가능하다.

4.2 병렬처리시 고려할사항

4.2 병렬처리 기법

정의 출처 : 위키피디아