본문 바로가기
우테코 자유테크 스터디/쉽게 배우는 운영체제

[OS] Ch.2 컴퓨터의 구조와 성능 향상

by ♡˖GYURI˖♡ 2024. 2. 2.

1. 컴퓨터의 기본 구성

하드웨어의 구성

  • 컴퓨터는 중앙처리장치(CPU), 메인메모리, 입력장치, 출력장치, 저장장치로 구성
    • 중앙처리장치와 메인메모리는 필수 장치로 분류됨
  • 메인메모리는 전력이 끊기면 데이터를 잃어버리기 때문에 하드디스크나 USB 메모리가 필요
  • 메인메모리를 제1 저장장치, 하드디스크나 USB메모리를 제2 저장장치 또는 보조 저장장치라고 부름

 

  • CPU : 명령어를 해석하여 실행하는 장치
  • 메모리 : 작업이 필요한 프로그램과 데이터를 저장하는 장소
  • 입출력 장치 : 입출력 장치를 통해 데이터를 입력/출력
  • 저장장치의 경우 메모리는 전자의 이동으로 빠르지만 하드디스크나 CD 같은 경우 물리적인 동작으로 속도가 느림
    • 메모리는 빠르지만 비싸고 용량이 적음 / 휘발성 데이터
    • 보조저장장치는 느리지만 싸고 용량이 큼 / 비휘발성 데이터
  • 메인보드는 다양한 부품을 연결하는 커다란 판이며 메인보드로 가는 선들은 '버스'라고 부름
    • 버스 : 데이터, 주소 및 제어 신호를 전달하는 통로 또는 통신 경로를 의미하며 각 장치를 연결하는 선의 집합

 

폰노이만 구조

  • 오늘날의 컴퓨터는 대부분 폰노이만 구조를 따름
  • CPU, 메모리, 입출력장치, 저장장치가 버스로 연결되어 있는 구조를 말함
    • 이전의 컴퓨터는 전선을 연결하여 회로를 구성하는 하드와이어링 형태로 다른 용도로 사용하려면 전선의 연결을 바꾸어야 했음
  • 존 폰노이만은 메모리를 이용하여 프로그래밍이 가능한 컴퓨터 구조, 하드웨어는 그대로 둔채 작업을 위한 프로그램만 교체하여 메모리에 올리는 방식을 제안하고 현재까지 사용
  • '모든 프로그램은 메모리에 올라와야 실행할 수 있다'
  • 운영체제도 프로그램이기 때문에 메모리에 올라와야 실행이 가능함

 

요리사 모형

  • 모든 프로그램은 메모리에 올라와야 실행할 수 있는데 해당 책은 요리사를 빗대어 표현하였음
  • CPU는 요리사, 도마는 메모리, 보관장치는 저장장치, 재료를 옮겨주는 주방보조, 채소나 고기를 다듬는 보조 요리사가 존재
  • 요리를 하기 위해서는 우선 음식을 도마로 올려야 함 저장장치에서 메모리로
  • 요리 방법을 결정하는 것은 요리사 CPU가 작업을 진행 (프로세스 관리)
  • 도마 위의 재료를 정리하는 것 여러 프로그램이 사용하는 메모리를 관리하는 것
  • 보관 장고의 재료를 정리하는 것 저장장치 관리
  • 도마가 클수록 한번에 요리할 수 있는 재료가 많아 빠름 메모리가 클수록 많은 데이터 배치 가능. 적으면 데이터 이동 시간에 시간 소요. 하지만 너무 큰 경우는 작업 속도 크게 차이 나지 않음

 

하드웨어 사양 관련 용어

  • 클록 (clock) : CPU 속도와 관련된 단위. 클록이 일정 간격으로 틱을 만듬. 틱은 펄스 또는 클록틱이라고도 부르며 메인 보드의 클록이 틱을 보낼 때마다 데이터를 보내거나 받음
  • 헤르츠 (Hz) : 클록틱이 발생하는 속도를 나타내는 단위. 1초에 클록틱이 몇 번 발생하는 지를 나타냄
  • 시스템 버스 : 메모리와 주변 장치를 연결하는 버스로 FSB(Front Side Bus : 전면 버스)라고도 함
  • CPU 내부 버스 : CPU 내부에 있는 장치를 연결하는 버스로 BSB(Back Side Bus : 후면 버스)라고도 함
    • CPU는 CPU 내부 버스의 속도로 작동하고 메모리는 시스템 버스의 속도로 작동하기 때문에 두 버스의 속도 차이로 인해 작업이 지연되는 문제가 있음
    • CPU 내부 버스의 속도가 시스템 버스의 속도보다 훨씬 빠름

 

2. CPU와 메모리

CPU의 구성과 동작

  • CPU는 명령어를 해석하여 실행하는 장치로 요리사에 해당하며 산술논리 연산장치, 제어장치, 레지스터로 구성
    • 산술논리 연산장치(ALU) : 요리사가 재료를 삶거나 찌거나 볶듯이 데이터를 연산하는 장치가 산술논리 연산장치(ALU)로 산술 연산과 AND, OR 같은 논리 연산 수행
    • 제어장치 : 요리사의 지시에 따라 요리가 만들어지는데 이처럼 CPU에서 작업을 지시하는 부분을 제어장치라고 함
    • 레지스터 : 재료를 미리 손질해두었다면 요리를 할 때 필요한 만큼 넣는데 재료를 필요한 만큼 쥐고 있는 것처럼 CPU 내에 데이터를 임시로 보관하는 곳을 레지스터라고 함
  • CPU는 필요한 데이터를 메모리에서 가져와 레지스터에 저장하고 산술논리 연산장치를 이용하여 연산한 후 결과를 레지스터로 저장했다가 메모리로 옮기는데 이떄 사용되는 레지스터는 데이터 레지스터와 주소레지스터를 사용하며 해당 레지스터들은 사용자 프로그램에 의해 변경되어 사용자 가시 레지스터라고 부름
    • 데이터 레지스터 (DR) : 메모리에서 가져온 데이터를 임시로 보관할 때 사용
    • 주소 레지스터 (AR) : 데이터 또는 명령어가 저장된 메모리의 주소를 저장
  • 그 외 특별한 용도로 사용되는 레지스터도 있는데 이를 특수 레지스터라고 하며 사용자 임의로 변경할 수 없어 사용자 불가시 레지스터라고 부름
    • 프로그램 카운터 (PC) : CPU는 다음에 어떤 명령어를 처리해야 할지 알아야 함. 프로그램 카운터는 다음에 실행할 명령어의 주소를 기억하고 있다가 제어장치에 알려주는데 실행할 명령어의 주소를 가르켜 프로그램 카운터를 명령어 포인터라고도 함
    • 명령어 레지스터 (IR) : 현재 실행 중인 명령어를 저장. 제어장치는 명령어 레지스터에 있는 명령을 해석한 후 외부 장치에 적절한 제어 신호를 보냄
    • 메모리 주소 레지스터 (MAR) : 메모리에서 데이터를 가져오거나 반대로 메모리로 데이터를 보낼 때 주소를 지정하기 위해 사용
    • 메모리 버퍼 레지스터 (MBR) : 메모리에서 가져온 데이터나 메모리로 옮겨 갈 데이터를 임시로 저장. 항상 메모리 주소 레지스터와 함께 동작함
    • 그 외에도 CPU에는 다양한 레지스터가 존재
  • 버스는 CPU와 메모리, 주변장치 간에 데이터를 주고받을 때 사용한다고 했는데 제어 버스, 주소 버스, 데이터 버스가 존재
    • 제어 버스 : 다음에 어떤 작업을 할지 지시하는 제어 신호가 오고 감. 메모리에서 데이터를 가져올지, 처리한 데이터를 옮겨놓을지 등으로 모두 제어 버스를 통해 CPU로 전달되므로 제어 버스의 신호는 CPU, 메모리, 주변장치와 양방향으로 오고감
    • 주소 버스 : 메모리의 데이터를 읽거나 쓸 때 어느 위치에서 작업할 것인지 알려주는 위치 정보가 오고 감. 주소 버스는 메모리 주소 레지스터와 연결되어 있으며 단반향으로 감
    • 데이터 버스 : 데이터를 목적지까지 이동시킴. 데이터 버스는 메모리 버퍼 레지스터와 연결되어 있으며 양방향으로 오고감

 

메모리의 종류

  • 컴퓨터가 발전함에 따라 많은 종류의 메모리가 개발되었음. 메모리는 읽거나 쓸 수 있는 램(RAM : Random Access Memory)와 읽기만 가능한 롬(ROM: Read Only Memory)로 구분
    • 램은 무작위로 데이터를 읽어도 저장된 위치와 상관없이 같은 속도로 데이터를 읽을 수 있다는 의미에서 붙은 이름이라고 함
  • 램은 전력이 끊기면 데이터가 사라지는 휘발성 메모리와 데이터를 보관할 수 있는 비휘발성 메모리로 나뉨
  • 롬은 전력이 끊겨도 데이터를 보관하는 것이 장점이지만 데이터를 한 번 저장하면 바꿀 수 없음. 이러한 특성 때문에 바이오스를 롬에 저장함

 

메모리 보호

  • 사용자 영역의 작업이 운여체제 영역으로 침범하지 못하도로 막는 것
  • 현대의 운영체제는 시분할 기법을 사용하여 여러 프로그램을 동시에 실행하므로 사용자 영역이 여러 개의 작업 공간으로 나뉘어 있음. 이러한 상황에서 메모리 보호는 중요한 문제
  • 운영 체제도 소프트웨어 중 하나로 사용자 작업이 진행되는 동안 운영체제의 작업이 잠시 중단되는데 중단된 상태에서 사용자의 작업으로부터 메모리를 보호하려면 하드웨어의 도움이 필요
  • 메모리를 보호하기 위해 CPU는 현재 진행 중인 작업의 메모리 시작 주소를 경계 레지스터에 저장한 후 작업을 함. 또한 현재 진행 중인 작업이 차지하고 있는 메모리의 크기, 즉 마지막 주소까지의 차이를 한계 레지스터에 저장함
    • 경계 레지스터 : 레지스터 시작 주소값
    • 한계 레지스터 : 메모리의 크기 (레지스터 마지막 주소 값 - 레지스터 시작 주소 값)

 

부팅

  • 운영체제도 소프트웨어이기 때문에 메모리에 올려서 실행해야 함
  • 컴퓨터를 켰을 때 운영체제를 메모리에 올리는 과정을 부팅이라고 하며 과정은 다음과 같음

 

 

3. 컴퓨터 성능 향상 기술

버퍼

  • 속도가 차이가 있는 두 장치 사이에서 그 차이를 완화하는 역할
  • 도마에 재료를 하나씩 가져오는 것이아니라 재료를 바구니에 담아 여러개를 가지고 옴
  • 위의 예시처럼 일정량의 데이터를 모아 한꺼번에 전송하면 적은 노력으로도 많은 양의 데이터를 옮길 수 있음
  • 하드디스크에도 버퍼가 있지만 소프트웨어적으로도 버퍼가 존재. 대표적인 버퍼의 예는 동영상 스트리밍

 

스풀

  • 버퍼와 유사한 개념으로 스풀(SPOOL)은 CPU와 입출력장치가 독립적으로 동작하도록 고안된 소프트웨어적인 버퍼로 출력 명령을 내린 프로그램과 독립적으로 동작
    • 워드에서 작업하고 프린터로 출력하는 경우 스풀러가 없다면 모든 출력을 알아서 처리해야하지만 스풀러를 사용하면 인쇄할 내용을 하드디스크의 스풀러 공간에 저장하고 워드는 다른 작업을 할 수 있음
    • 스풀러는 버퍼의 일종이지만 버퍼의 경우 어떤 프로그램이 사용하는 데이터든 버퍼가 차면 이동이 시작하지만 (프로그램들이 버퍼를 공유) 스풀러는 한 인쇄물이 완료될 때 까지 다른 인쇄물이 끼어들수 없으므로 프로그램 간에 배타적

 

캐시

  • 캐시는 메모리와 CPU 간의 속도 차이를 완화하기 위해 메모리의 데이터를 미리 가져와 저장해두는 임시 저장소
  • 캐시는 필요한 데이터를 모아 한꺼번에 전달하는 버퍼의 일종으로 CPU가 앞으로 사용할 것으로 예상되는 데이터를 미리 가져다 놓음
    • 이렇게 미리 가져오는 작업을 '미리 가져오기(prefetch)'라고 함
  • 캐시는 메모리의 내용 중 일부를 미리 가져오고 CPU는 메모리에 접근하기 전에 캐시를 먼저 방문하여 원하는 데이터가 있는지 확인함
    • 원하는 데이터를 찾았다면 캐시 히트(cache hit)
    • 원하는 데이터를 찾지못했다면 캐시 미스(cache miss)
  • 컴퓨터의 성능을 향상시키려면 캐시 적중률이 높아야 하는데 캐시의 경우 가격이 매우 비싸 적중률을 높이는 방법으로 '지역성 이론'이 있음
    • 지역성 이론 (locality) : 현재 위치에 가까운 데이터가 멀리 있는 데이터보다 사용될 확률이 높다는 이론
    • 지역성 이론에 따르면 goto문을 사용하지 않는 것이 좋음 (미리 가져온 데이터가 쓸모없어지기 때문)
  • 캐시에 있는 데이터가 변경되는 경우 변경사항을 반영해야 하는데 캐시의 변경된 데이터를 메모리에 반영하는 데에는 즉시 쓰기 방식과 지연 쓰기 방식이 있음
    • 즉시 쓰기 : 캐시에 있는 데이터가 변경되면 즉시 메모리에 반영하는 방식. 메모리와의 빈번한 데이터 전송으로 성능이 느려지지만 메모리에는 항상 최신값이 유지
    • 지연 쓰기 : 캐시에 있는 데이터가 변경되면 변경된 내용을 모아서 주기적으로 반영하는 방식으로 '카피백'이라고도 함. 성능을 향상할 수 있으나 메모리와 캐시 데이터 사이 불일치가 발생할 수 있음

 

L1 캐시와 L2 캐시

  • 프로그램 명령어는 크게 명령어 부분과 데이터 부분으로 나뉘는데 캐시는 구분 없이 모든 자료를 가져오는 일반 캐시, 데이터를 구분하는 특수 캐시라는 두 가지 레벌로 구분됨
  • 명령어 캐시나 데이터 캐시는 CPU 레지스터에 직접 연결되기 때문에 L1 캐시라고 부름
  • 일반 캐시는 메모리와 연결되기 때문에 L2 캐시라고 부름

 

저장장치의 계층 구조

  • 가격과 컴퓨터 성능 사이의 타협적으로 저장장치의 계층 구조가 존재하는데 저장장치의 계층 구조는 속도가 빠르고 값이 비싼 저장장치를 CPU에 가까운 쪽으로 두고 값이 싸고 용량이 큰 저장장치를 반대쪽에 배치하여 빠른속도와 큰 용량을 얻는 방법
  • 한편 저장장치의 계층 구조는 중복되는 데이터의 일관성을 유지하는 것이 문제가 될 수 있음 (지연 쓰기나 협업 중이나 전원 종료로 인한 데이터를 유실)

 

인터럽트

  • 초반 컴퓨터의 경우 주변장치가 많지 않아 CPU가 직접 입출력장치에서 데이터를 가져오거나 내보냈는데 이러한 방식을 '폴링(polling)'이라고 함
  • 폴링 방식은 CPU가 명령어 해석과 실행이라는 본래 역할 외에 모든 입출력 까지 관여하게 되어 작업 효율이 떨어짐
  • 오늘날의 컴퓨터는 많은 주변장치가 있는데 작업효율이 떨어지는 문제를 해결하기 위해 등장한 것이 '인터럽트' 방식
    • 맨 처음 이야기했던 주방 보조의 역할으로 CPU의 지시를 받아 데이터를 메모리로 이동시키고 준비 되었다고 CPU에게 알려주어 데이터 이동이 독립적이고 입출력이 이루어지는 동안 CPU가 다른 작업을 할 수 있어 작업 효율이 좋음
  • 인터럽트 방식의 동작과정은 다음과 같으며 CPU에 보내는 완료 신호를 인터럽트라고 함
    • CPU가 입출력 관리자에게 입출력 명령을 보냄
    • 입출력 관리자는 명령받은 데이터를 메모리에 가져다 놓거나 메모리에 있는 데이터를 저장장치로 옮김
    • 데이터 전송이 완료되면 완료신호를 CPU에 보냄
  • 인터럽트 방식에는 많은 주변장치 중 어떤 것의 작업이 끝났는지 CPU에 알려주기 위해 '인터럽트 번호'를 사용하고 인터럽트 번호는 장치의 고유번호로 운영체제마다 다름
  • CPU는 입출력 관리자에게 여러 개의 입출력 작업을 동시에 시킬 수 있는데 그 때마다 인터럽트를 사용하는 것은 매우 비효율적으로 여러 개의 인터럽트를 하나의 배열로 만든 '인터럽트 벡터'를 사용함

 

 

직접 메모리 접근

  • 과거 운영체제는 CPU가 메모리나 주변장치에 대한 모든 권한을 가지고 있었으나 현재 메모리는 CPU만 접근 권한을 가진 작업 공간으로 접근이 불가능함
  • 이를 위해 입출력 관리자에게는 CPU 허락 없이 메모리에 접근할 수 있는 권한이 필요한데 이러한 권한을 '직접 메모리 접근(DMA)'이라고 함
  • 직접 메모리 접근은 인터럽트 방식의 시스템을 구성하는데 필수적이나 그러나 사용하면 메모리가 복잡해짐. 메모리에는 CPU가 사용하는 데이터와 입출력 장치가 사용하는 데이터가 섞여있기 때문

 

메모리 매핑 입출력

  • 이를 해결하기 위해 CPU가 사용하는 메모리 공간과 직접 메모리 접근을 통한 데이터 공간을 분리하는 방식을 사용하는데 해당 기법을 '메모리 매핑 입출력(MMIO)' 라고 함

 

사이클 훔치

  • CPU와 직접 메모리 접근이 동시에 접근한다면 누군가 양보해야 하는데 입출력 장치의 속도가 느리기 때문에 직접 메모리 방식에 양보하는데 이를 '사이클 훔치기' 라고 부름

 

4. 병렬 처리

병렬 처리의 개념

  • 병렬 처리는 동시에 여러 개의 명령을 처리하여 작업의 능률을 올리는 방식
  • 한 주방에서 여러 개의 볶음밥을 동시에 조리하는 것은 하나의 코어에 여러 개의 '스레드'를 이용하는 방식과 같음
  • 여기서 스레드는 CPU가 처리할 수 있는 작업의 단위를 나타내며 여러 개의 스레드를 동시에 처리하는 방법을 'CPU 멀티스레드' 라고 함
  • 병렬 처리는 파이프라인 기법, 슈퍼스칼라 기법이 있음
    • 파이프라인 기법 : 여러개의 스레드를 이용하는 방식
    • 슈퍼스칼라 기법 : 여러개의 시설을 갖추어 동시에 처리하는 방식

 

병렬 처리 시 고려 사항

  • 상호 의존성이 없어야 병렬 처리가 가능
    • 각 명령이 서로 독립적이고 앞의 결과가 뒤의 명령에 미치지 않아야 함
  • 각 단계의 시간을 거의 일정하게 맞춰야 병렬 처리가 원만하게 이루어짐
    • 각 단계의 처리 시간이 다르면 앞의 작업이 먼저 끝나도 가장 긴 시간이 걸리는 단계에서 병목 현상 발생
  • 전체 작업 시간을 몇 단계로 나눌지 잘 따져보아야 함
    • 병렬 처리에서 작업을 N개로 쪼갰을 때 N을 병렬 처리의 깊이라고 하는데 N에 따라 동시에 처리할 수 있는 작업의 개수를 의미

 

병렬 처리 기법

  • CPU에서 명령어가 실행되는 과정은 4단계로 나뉘는데 병렬 처리 기법은 이를 하나의 코어에서 작업을 나누어 병렬로 처리하는 파이프라인 기법과 여러 개의 코어를 사용하여 동시에 작업하는 슈퍼 스칼라 기법으로 나뉨
    1. 명령어 패치 : 다음에 실행할 명령어를 명령어 레지스터에 저장
    2. 명령어 해석 : 명령어를 해석
    3. 실행 : 해석된 결과를 토대로 명령어를 실행
    4. 쓰기 : 실행된 결과를 메모리에 저장

 

파이프라인 기법

하나의 코어에 여러 개의 스레드를 이용하는 방식

 

슈퍼스칼라 기법

파이프라인을 처리할 수 있는 코어를 여러개 구성하여 복수의 명령어가 동시에 실행되도록 하는 방식으로 코어를 2개 구성하여 각 단계에서 동시에 실행하는 명령어가 2개

 

슈퍼 파이프라인 기법

파이프라인의 각 단계를 세분하여 한 클록 내에 여러 명령어를 처리

 

슈퍼 파이프라인 슈퍼스칼라 기법

슈퍼파이프라인 기법을 여러 개의 코어에서 동시에 수행하는 방식

 

VLIW 기법

CPU가 병렬 처리를 지원하지 않을 경우 소프트웨어 적으로 병렬 처리를 하는 방법

 

 

 

 

 

무어의 법칙 : CPU의 속도가 24개월 마다 2배씩 빨라진다는 주장으로 현재는 그렇지 않음
암달의 법칙 : 컴퓨터 시스템의 일부를 개선할 때 전체 시스템에 미치는 영향과 관계로 주변 장치의 향상 없이 CPU 속도가 2배가 되더라도 컴퓨터의 성능이 2배가 되진 않음
기억 용량 단위
바이트는 저장장치의 기억 용량을 나타내는 단위 가운데 하나

바이트는 정확히 2¹⁰씩 단위가 올라감
- 1B(1바이트) = 1byte
- 1KB(1킬로바이트) =2¹⁰byte
- 1MB(1메가바이트) =2²⁰byte
- 1GB(1기가바이트) =2³⁰byte
- 1TB(1테바이트) =2⁴⁰byte