운영체제(2) : 컴퓨터의 구조와 성능 향상

김두현·2024년 10월 23일
1
post-thumbnail

📍목차


  1. 컴퓨터의 기본 구성
  2. CPU와 메모리
  3. 컴퓨터 성능 향상 기술
  4. 멀티 프로세싱

1️⃣ 컴퓨터의 기본 구성


컴퓨터는 기본적으로 필수 장치인 CPU, 메인 메모리와 주변 장치인 입출력 장치, 저장 장치로 구성된다.

CPU는 명령어를 해석하고 실행하며, 메인 메모리는 작업에 필요한 프로그램과 데이터를 저장한다.

메모리는 속도가 빠르나 가격이 높고 용량이 작으며 휘발성이기 때문에, 저렴하고 용량이 크며 데이터를 반영구적으로 저장하는 저장 장치를 통해 이를 보완한다.

✔️ 메인보드

메인보드란, CPU와 메모리 등 다양한 부품을 연결하고 전원을 공급해주는 판이다.

  • 버스
    • 메인보드에서는 각 장치를 연결하여 데이터가 지나다니는 통로가 있는데, 이를 버스라고 한다.
    • 시스템 버스 : 메모리와 주변 장치를 연결하는 버스로, 메인보드의 동작 속도를 의미한다.
      FSB(Front Side Bus)라고도 칭한다.
    • CPU 내부 버스 : CPU 내부의 장치들을 연결하는 버스로, 시스템 버스보다 빠르며 BSB(Back Side Bus)라고도 칭한다.

✔️ 폰노이만 구조

현대 컴퓨터는 대부분 폰노이만 구조를 갖추고 있는데,

폰노이만 구조란 CPU, 메모리 등의 장치가 버스로 연결된 구조를 말한다.

폰노이만은 기존의 하드와이어링 방식에서, 하드웨어를 그대로 둔 채 프로그래밍을 통해 프로그램만 교체하여 메모리에 올리는 방식으로 발전시켰다.

폰노이만 구조의 핵심은, "모든 프로그램은 메모리에 올라와야 실행할 수 있다." 라는 것이다.

2️⃣ CPU와 메모리


✔️ CPU 구성

CPU는 명령어를 해석하여 실행하는 장치로, 산술논리 연산장치, 제어장치, 레지스터로 구성된다.
이들의 협업을 통해 작업을 처리하며, 각 구성 요소에 대해 살펴보자.

  • 산술논리 연산장치
    ALU(Arithmetic and Logic Unit)라고도 불리며, CPU에서 데이터를 연산하는 장치이다.
    덧셈, 뺄셈, 곱셈, 나눗셈 등의 산술 연산과 AND, OR 등의 논리 연산을 수행한다.

  • 제어장치
    CPU에서 작업을 지시하는 부분으로,
    "메모리 100번지의 값을 어느 레지스터1로 옮겨라.", "레지스터1과 레지스터2의 값을 더해라." 등의 명령을 내린다.

  • 레지스터
    작업에 필요한 데이터를 CPU 내부에 보관하는 곳으로, 계산을 위해 가져온 데이터/계산 중간 값을 보관하거나, 작업을 진행하기 위해 필요한 정보를 보관하는데 사용한다.

✔️ 레지스터 종류

CPU는 데이터를 메모리에서 가져와 레지스터에 저장하고, 산술논리 연산장치를 이용해 연산한 결과를 다시 레지스터에 저장했다가 메모리로 옮긴다. 이때 데이터 레지스터주소 레지스터를 이용한다.

레지스터는 사용자 프로그램에 의해 변경되는 가시 레지스터(Visible Register)와 사용자가 변경할 수 없는 불가시 레지스터(Unvisible Register)로 나뉜다.

가시 레지스터

  • 데이터 레지스터
    • 메모리에서 가져온 데이터를 임시로 보관한다. CPU 내 대부분의 레지스터는 데이터 레지스터이다.
  • 주소 레지스터
    • 데이터 또는 명령어가 저장된 메모리 주소는 주소 레지스터에 저장된다.

불가시 레지스터

  • 프로그램 카운터
    • 다음에 실행할 명령어의 주소를 저장하다가 제어장치에 알려준다. 실행할 명령어의 주소를 가리키기 때문에 명령어 포인터라고도 부른다.
  • 명령어 레지스터
    • 현재 실행 중인 명령어를 저장한다. 제어장치는 명령어 레지스터에 있는 명령을 해석한 후 외부 장치에 작업을 지시한다.
  • 메모리 주소 레지스터(MAR)
    • 메모리에서 데이터를 가져오거나, 메모리로 데이터를 보낼 때 주소를 지정하는 데 사용한다.
      명령을 처리하는 데 필요한 메모리 주소를 메모리 주소 레지스터에 넣으면, 메모리 관리자가 인식하여 해당 위치에서 데이터를 가져오거나 저장한다.
  • 메모리 버퍼 레지스터(MBR)
    • 메모리에서 가져온 데이터나 메모리에 보낼 데이터를 임시로 저장한다.
      메모리 주소 레지스터와 항상 함께 동작한다.
  • 프로그램 상태 레지스터(PSR)
    • 조건 결과에 따라 다른 코드가 실행되는 곳에 이용된다.
      if (a - b > 0) goto 100; 과 같은 곳에서 a - b의 값을 저장하고 있다가 어느 명령을 실행할지 결정한다.

✔️ 시스템 버스의 종류

CPU와 메모리, 주변장치 간에 데이터를 주고받을 때 시스템 버스를 이용한다.
시스템 버스는 제어 버스, 주소 버스, 데이터 버스로 나뉜다.

제어 버스

제어 버스에는 다음에 어떤 작업을 할지 지시하는 제어 신호를 주고받는다.

메모리에서 데이터를 가져올 때는 읽기 신호, 메모리로 옮길 때는 쓰기 신호를 보내는 식이다.
하드디스크에 저장을 하거나 사운드 카드에 소리를 내라는 명령을 할 때도 마찬가지로 제어 버스를 통해 전달된다.
메모리에서 오류가 나거나 네트워크 카드에 데이터가 모두 도착했다는 신호 역시 동일하다.

제어 버스는 CPU의 제어 장치와 연결되어 있으며, CPU, 메모리, 주변장치와 양방향으로 오고 간다.

주소 버스

주소 버스에는 메모리의 데이터를 읽거나 쓸 때 메모리의 어느 위치에서 작업할 것인지 알려주는 위치 정보가 담긴다.

주소 버스는 메모리 주소 레지스터와 연결되어 있으며, CPU에서 주소 버스로 위치 정보를 전달하는 단방향이다.
즉, 주소 버스를 통해 CPU로 전달되는 정보는 없다.

데이터 버스

데이터 버스는 제어 버스가 어떤 작업을 할지 전달하고, 주소 버스가 위치 정보를 전달하면 데이터가 데이터 버스에 담겨 목적지까지 이동한다.

데이터 버스는 메모리 버퍼 레지스터와 연결되어 있으며 양방향이다.

✔️ 버스의 대역폭

버스의 대역폭이란, 버스가 한 번에 전달할 수 있는 데이터의 최대 크기이다.

32bit CPU 64bit CPU에서의 비트 값이 버스의 대역폭이 되며,
64bit CPU의 경우 메모리에서 데이터를 읽고 쓸 때 한 번에 최대 64bit를 처리할 수 있고, 레지스터의 크기도 64bit임을 의미한다.
따라서 메모리에 한 번에 저장할 수 있는 데이터의 크기또한 64bit가 된다.

✔️ 메모리 보호

시분할 기법이 등장한 이후, 사용자 영역이 여러 개로 나뉘며 다른 영역의 작업이 침범하지 않도록하는 메모리 보호의 중요성이 부각되었다.

운영체제도 소프트웨어이기 때문에, 사용자 프로세스사 CPU를 차지하면 작업이 운영체제의 작업이 중단되어 메모리 보호에 어려움이 생긴다.

이를 위해 CPU는 현재 진행 중인 작업의 메모리 시작 주소를 경계 레지스터에 저장하고, 마지막 주소까지의 차이를 한계 레지스터에 저장한다.

이후 하드웨어 측면에서 두 레지스터의 주소 범위를 벗어나는지 점검하여 메모리를 보호한다.
만약 메모리 정상 작업 범위에서 벗어난다면, 인터럽트를 통해 운영체제로 하여금 프로그램을 강제 종료시킨다.

✔️ 부팅

앞서 살펴본 폰노이만 구조의 핵심에 따르면, 모든 프로그램은 메모리에 올라와 실행되어야한다.
운영체제 또한 프로그램인데, 운영체제가 메모리에 올리는 응용 프로그램과 달리 운영체제는 누가 메모리에 올릴까?

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

  1. 사용자가 컴퓨터를 켜면 메모리의 한 종류인 에 저장된 바이오스가 실행된다.
    바이오스는 CPU, 메모리, 주변 장치 등 주요 하드웨어가 제대로 작동하는지 확인한다.

    하드웨어 작업을 마치면, 하드디스크의 마스터 부트 레코드에 저장된 작은 프로그램을 메모리로 가져와 실행한다.

  2. 마스터 부트 레코드란, 하드디스크의 첫 번째 섹터를 가리키며, 이곳에는 운영체제를 실행하기 위한 코드인 부트스트랩이 저장되어 있다.

    운영체제를 메모리로 가져와 실행시키는 프로그램인 부트스트랩이 실행되면 운영체제 프로세스가 실행된다.

3️⃣ 컴퓨터 성능 향상 기술


CPU와 메모리, 주변 장치 간의 작업 속도 차이는 효율성 저하의 원인이 된다.

CPU 내부 버스의 속도가 시스템 버스의 속도보다 빠르기 때문에, 메모리와 주변 장치의 속도가 CPU 속도를 따라가지 못한다.
이러한 문제점을 개선하는 방안에 대해 알아보자.

✔️ 버퍼

버퍼는 한 번에 하나씩 옮기는 것이 아닌, 한 번에 여러 개를 옮긴다는 원리에 착안한다.
버퍼는 임의의 두 장치 간의 속도 차이를 완화하는 역할을 맡는다.

데이터를 읽을 때마다 전송하면 작업량에 비해 전송량이 매우 작으므로,

일정량의 데이터를 모아 한꺼번에 전송하여 속도 차이를 완화한다.

이 개념은 동영상을 볼 때 버퍼에 일정량의 동영상 데이터가 쌓인 후 재생되는 것과 동일하다.

✔️ 캐시

캐시메모리와 CPU 간의 속도 차이를 완화하기 위해 메모리의 데이터를 미리 저장해두는 장소이다.

이는 버퍼의 일종으로, CPU가 사용할 것으로 예상되는 데이터를 미리 가져오는 개념이다.

캐시는 메모리 내용의 일부를 미리 가져오고, CPU는 메모리에 접근하기 전에 캐시를 방문해 원하는 데이터를 탐색한다.
캐시에서 데이터를 찾은 경우를 캐시 히트, 그렇지 못한 경우를 캐시 미스라 칭한다.

따라서 캐시 적중률이 높을수록 컴퓨터의 성능이 향상되며, 캐시 적중률을 높이는 방법은 크게 두 가지이다.

  1. 캐시의 크기를 늘린다.
    더 많인 데이터를 미리 가져올 수 있어 적중률이 높아지나, 캐시는 가격이 비싸 한계가 있다.

  2. 지역성에 기반한 데이터 가져오기
    현재 프로그램의 10행이 실행되고 있다면, 다음에 11행이 실행될 확률이 높다는 지역성에 기반하여 가까운 데이터를 가져온다.

즉시 쓰기, 지연 쓰기

캐시 내의 데이터가 변경되면, 이를 메모리에도 반영해야한다.
이때 즉시 쓰기 방식 혹은 지연 쓰기 방식을 활용한다.

  • 즉시 쓰기 방식
    데이터 변경 후 즉시 메모리에 반영하는 방식이다.
    메모리와의 잦은 데이터 전송으로 인해 성능이 저하된다는 단점과, 데이터 안전성 측면에서 이점을 지닌다.

  • 지연 쓰기 방식
    캐시의 변경된 내용을 모아서 주기적으로 반영하는 방식이다. Copy Back이라고도 한다.
    데이터 전송 횟수가 줄어 성능상의 이점이 있으나, 캐시와 메모리 간의 데이터 불일치가 발생할 수 있다.

✔️ 저장장치의 계층 구조

저장장치는 속도가 빠를수록 용량이 작고, 가격이 비싸다.
이를 이용해 CPU와 가까운 쪽에 속도가 빠른 저장장치를 위치시키고, 용량이 큰 저장장치를 CPU와 먼 쪽에 위치시켜 고성능 컴퓨터를 구성한다.

CPU와 가까운 쪽에 레지스터와 캐시를 배치하고, 메모리에서 작업한 내용을 하드디스크에 저장하는 원리이다.

✔️ 인터럽트

초기 컴퓨터는 CPU가 입출력장치에서 직접 데이터를 가져오는 폴링 방식을 이용했다.
그러나 현대 컴퓨터는 주변 장치가 많아 CPU가 입출력에 관여하면 작업 효율이 저하되는 문제가 있다.

이를 해결하기 위해 인터럽트 방식이 도입됐다.

인터럽트 방식이란, CPU가 입출력 관리자에게 입출력 명령을 내리고, 입출력 관리자가 데이터를 가져오면 CPU에게 완료 신호를 보내는 방식이다.

이때 입출력 관리자가 CPU에게 보내는 완료 신호를 인터럽트라고 한다.
하드디스크, 마우스, 키보드 등 다양한 입출력장치는 장치의 고유 번호를 통해 어떤 장치의 작업이 끝났는지 CPU에게 알리게 된다.

인터럽트 종류는 입출력 작업 외에도 다양하다.

직접 메모리 접근(DMA)

인터럽트를 통해 살펴봤듯, CPU가 아닌 입출력 관리자가 입출력을 담당하게 된다.
이 경우, 메모리 접근 권한은 CPU만 갖기 때문에 입출력 관리자가 접근이 불가하다.

따라서 CPU의 허락 없이 메모리에 접근할 수 있는 권한이 필요한데, 이를 직접 메모리 접근이라고 한다.
이는 인터럽트 방식의 필수 요소이다.

메모리 맵 입출력

인터럽트 방식으로 메모리에 입출력장치가 사용하는 데이터를 담게되면, CPU가 사용하는 데이터와 섞여 관리하기 어렵다는 단점이 존재했다.

메모리의 일정 공간을 입출력에 할당하는 메모리 맵 입출력 기법을 통해 이를 해결했다.

사이클 훔치기

CPU 작업 속도보다 입출력 장치의 속도가 느려 CPU는 직접 메모리 접근에게 순서를 양보하게 되는데, 이를 사이클 훔치기라고 한다.

4️⃣ 멀티 프로세싱


✔️ 멀티코어 시스템

과거에는 컴퓨터 한 대에 CPU가 하나가 달려있어 한 번에 하나의 작업을 처리할 수 있었다.

CPU 성능을 향상하기 위해 프로세서(CPU)를 여러 개 설치하여 사용할 수 있는데, 이를 멀티 프로세서 시스템이라고 한다.
그러나 이는 메인 보드를 비롯한 설계 방식의 변화가 필요하다.

이에 대한 대안으로 CPU의 핵심이 되는 코어를 여러 개 만들어 여러 작업을 동시에 처리하는 방식을 고안했다.
이를 멀티코어 시스템이라 부른다.

CPU 사양의 듀얼코어, 쿼드코어가 그 예이다.

✔️ CPU 멀티스레드

하나의 코어에서 2개 이상의 명령을 병렬 처리하는 방법도 있다.
스레드란 CPU가 처리할 수 있는 작업의 단위를 의미하는데,

여러 개의 스레드를 동시에 처리하는 방법을 CPU 멀티스레드라고 한다.

멀티스레드를 통해 위와 같이 여러 작업을 병렬 처리할 수 있으며,
현대 CPU는 멀티코어 시스템과 멀티스레드를 함께 구현해 컴퓨터 성능을 높인다.

👏 마무리


CPU와 메모리의 개념과 컴퓨터 성능 향상 기법에 대해 알아보았다.
다음 장에서는 운영체제가 프로세스를 관리하는 방법에 대해 알아보자.

글을 좀 더 재밌게, 재밌지만 경박하지는 않게 써보고싶으나.. 내용에 집중하느라 쉽지 않다.🥲


참고 자료

쉽게 배우는 운영체제


💕오류 지적 및 피드백은 언제든 환영입니다. 복제시 출처 남겨주세요!💕
💕좋아요와 댓글은 큰 힘이 됩니다.💕
profile
I AM WHO I AM

0개의 댓글

관련 채용 정보