CS/운영 체제

[운영체제] 컴퓨터 구조 간단하게 정리해보기(부제. 왜 스왑 메모리가 느렸을까?)

장아장 2024. 3. 15. 21:20

컴퓨터 구조부터 시작해서 점점 깊이있게 파보려고 한다. 

 

기본적으로 컴퓨터의 구조를 이야기해보라고 하면 넓게

CPU, 주기억장치, 보조기억장치, 입출력장치, 메인보드로 분류를 한다고 한다. 

 

CPU에서 연산과 명령들이 나오고

이걸 주기억 장치에 담아두거나 데이터를 가져오고, 

보조기억장치에는 데이터를 저장, 삭제등을 진행하고

 

입출력 장치로 키보드 뚜따뚜따(?)하거나

마우스 딸깍하거나(그래서 내가하던 마비X기라는 게임에서 딸각충이라는 말들이 많았다. 키보드 안쓰고 마우스만 한번 누르면 된다고..)

해서 입력하고 

 

모니터로 보거나 스피커등으로 듣는 입출력 장치가 있고

 

조립식 컴퓨터 사면 맨날 뭐 하나 잘못꽂아넣는 메인보드가 있다. 

 

이정도는 나도 대충은 들어봤었다. 

그렇다면 이들은 실질적으로 어떻게 맞물릴까?

 

내가 들은대로 이게 기계라면, 

이 모든 동작들이 유기적으로 연결되어야 할것이다. 

어떤 연결점을 가지고 동작들이 이어질까?


연결다리 메인보드(도로)위에 버스

메인보드에는 다양한 버스가 존재한다.

우리가 타고 이동하는 버스처럼, 

여러가지 신호들이 이 버스를 타고 목적지로 이동한다. 

 

이러한 버스에는

크게 6가지 정도가 있다고 한다. (여기는 컴퓨터 구조에 대한 찍먹버전이므로 나중에 더 자세하게 정리해보자)

  • 시스템 버스 : CPU와 주변 장치간의 통신에 이용한다. 
    • 메모리 버스 : 데이터 전송을 담당한다. 
    • 주소 버스 : 메모리나 입출력 장치의 주소를 담당한다.
    • 제어 버스 : 제어신호를 담당한다.
  • 프론트 사이드 버스 : 메모리 컨트롤러, 그래픽카드등과 통신에 이용한다. 
  • 백 사이드 버스 : CPU와 캐시 메모리간에 통신에 사용한다.

이런 버스를 타고 데이터들이 주고받아진다. 


대가리 CPU

중앙에서 데이터를 읽고 쓰고 실행하고 등등의 명령을 모두 진행시키며

계산을 실질적으로 수행한다. 

레지스터를 가지고 있어, 해석해야 할 명령을 가지고 있거나, 연산을 위한 데이터들을 메모리로 보내기 위해 임시로 담아둘 수 있다. 

제어장치가 있어 위의 버스에서 말한 제어신호를 쏴주는 역할을 한다. 

더 자세한건 CPU를 자세하게 공부할 때 정리해보자. 


사실 그래픽카드건 인텔칩이건, 메모리부터 우리는 떠든다. 

맨날 램 16기가니, 뭐니 하면서 컴퓨터의 성능을 이야기할 때 가장 먼저 이야기하는 친구다. 

사실 코어, 메모리, 그래픽, 저장공간등 모든게 중요하지만, 

우리가 게임을 할 때 특히 가장 먼저 이게 문제다! 싶은건 항상 램이었다. 

 

이 램은 메모리 혹은 주 기억장치라고 부르며, 

주소를 이용해 데이터를 접근하는 방식으로 사용된다. 

또한, 전원이 끄면 사라지는 방식으로

실질적인 저장공간이라기보단, 주 기억장치에서 사용하는 데이터들을 빠르게 접근하기 위해 담아두는 공간이다. 

전원이 없을 때 데이터가 사라지는 이런 메모리를 휘발성 메모리라고 한다. 


보조기억장치(그놈의 SSD는 겁나 비싸고 HDD는 느리다고 다들 비추박죠?)

컴퓨터 설정등에서 보는 저장공간은 바로 보조기억장치를 일컫는 말이다. 

보조기억장치는 데이터를 진짜 말 그대로 저장하는 공간이다. 

우리가 자바 코드를 짜고 파일을 저장해두면

이런 코드들이 저장되는 공간이다. 

전원이 없어도 데이터가 저장되는 이런 메모리를 비휘발성 메모리라고 한다. 


진짜 쓱빡하고 찍먹을 해봤는데...

여기까지 보고서는 도대체 왜 스왑 메모리가 주기억장치보다 느릴까라는 것이 아직 이해가 되지 않았다. 

조금 더 딥다이빙을 해본 결과, 버스의 존재휘발성 메모리와 비휘발성 메모리의 속도 차 때문이라는 것을 알 수 있었다. 

 

스왑메모리를 사용할 때, 보조기억장치의 데이터를 바로 CPU로 가져오지 않는다. 

버스를 통해 보조기억장치의 데이터를 주기억장치로 가져오고, 이걸 CPU가 가져와 사용하는 방식이다. 

즉, 메모리에서 바로 가져가는 방식에서 한다리 더 지나가야 한다는 문제가 존재한다. 

(CPU기준 보조기억장치는 메모리보다 멀다!)

 

또한, 

휘발성 메모리의 읽기/쓰기 속도는 비휘발성 메모리보다 빠르다. 

휘발성 메모리를 CPU에서 읽기까지 속도를 a라고, 비휘발성 메모리를 A라고해보자. 

 

주기억장치-보조기억장치 간의 버스를 이동하는 시간까지 bus라고 할 때, 

주기억장치의 메모리에서 CPU가 읽어오는 시간은 단순히 a이다. 

 

하지만, 보조기억장치에서 주기억장치까지 버스를 통해 이동하고 이걸 다시 주기억장치에서 CPU에서 읽을 때 까지 기다리는 시간까지 잡는다면

총 소요시간은 a + A + bus의 시간이 소요된다. 

이래서 더 느린거구나 싶었다. 

 

사실 CPU에 대해서 하나씩 공부해보고 있는데, 이런식으로 궁금해지는 점이 상당히 많았다. 

마지막에 주석 작성하듯이 하나씩 넣어야 겠다. 

 

그럼...twenty thousand...🔥