본문 바로가기
운영체제

메모리

by LaTale 2020. 7. 6.

저장 공간의 구조 그러니까 다시 말해서 메모리에 관해 조금 더 자세히 알아보도록 하겠다. 이 부분은 뭐.. 솔직히 필요한가 싶긴 하다만 그래도 나름 열심히 수업을 들었으니 아까워서라도 올린다..


일반적으로 우리가 여태까지 알고 있던 바로는 CPU가 직접 접근할 수 있는 유일한 메모리는 메인 메모리이다. 조금 더 정확하게 말하자면 CPU가 직접 접근할 수 있는 유일한 메모리는 캐시 메모리이고, 메모리는 cache controller에 접근하는 것이지만 캐시는 논외로 하니까 저렇게 말하겠다.


즉, 메인 메모리와 CPU 사이에는 명령어와 데이터가 왔다갔다 한다. 앞서 컴퓨터 시스템의 구성 요소에서 메모리 계층 구조와 load, store에 대해 설명한 바 있는데 그 얘기다.


당연한 사실이지만 명령어는 read-only이고, data는 writable or read-write이다. 따라서 명령어는 load만 가능하고, data는 load와 store 둘 다 가능하다.


그런데 이 때 메인 메모리는 너무 작고 휘발성이 있기에 영구적으로 저장되지 않는다. 따라서 HDD나 SSD 등이 필요하다.


뿐만 아니라 사용자 입장에서는 메인 메모리가 CPU만큼 빨랐으면 좋겠지만 너무 느리다.. 이유는 잠시 뒤에 설명한다. 어쨌거나 그래서 캐시나 레지스터를 사용한다.



기본 상식으로 CPU가 가장 빠르다는 것은 알고 있다. 뭐 CMOS로 만들어지기 때문에 가장 빠르다곤 하는데 이거까진 안궁금하다.


자, 그럼 캐시는 CPU보다 느리다고 했다. 왜 ??

-> 메모리는 항상 디코더가 있어야 한다. 한 번에 하나의 data만 access 하기 위해서다. 캐시 "메모리"에도 당연히 디코더가 있다. 태그(tag)라는 이름으로 존재하는데 어쨌거나 이 태그가 돌아가는 시간만큼 느려진다.


메인 메모리는 캐시보다도 더 느리다고 했다. 왜 ??

-> 메인 메모리의 1bit는 capacitor(축전기)로 이뤄진다. 이름도 생소한 얘가 전기가 채워지면 1, 방전되면 0을 의미한다. 따라서 충전 및 방전에 걸리는 시간이 메인 메모리가 느린 이유다.

(레지스터나 캐시는 반도체로 만들어서 충전 및 방전에 걸리는 시간이 없다.)



메모리에 대해서 조금 더 자세하게 알아보자.


전체적인 구조를 표현하면 위 그림과 같다.


우선 메모리 array는 배열이니까 당연히 셀로 이뤄져 있다.

또 당연하게도 data input buffer와 data output buffer를 통해서 데이터가 들어오고 나간다.


나머지 부분이 조금 새로운 부분인데 우선 sense amplifier(증폭기)는 메모리의 셀에 있는 capacitor는 너무 작다. [각주:1] 그래서 전하도 적다. 그러니 증폭시켜야한다.


메모리 셀은 2차원 배열이기에 row와 column이 필요하다. address는 각 row와 column 디코더를 통해 확인한다.


이 과정은 다음과 같이 진행된다.

1. row 디코더가 한 row를 다 읽어서 amplifier에 떨어뜨린다.

2. 해당 row를 증폭시킨다.

3. column을 찾는다.


refresh counter는 capacitor가 사용하다보면 방전이 되기에 주기적으로 보충해주는 역할을 한다.


amplifier와 refresh 모두 row단위로 한다는 점이 특이하다.


여태까지 상식으로 알고 있기로는 32bit computer의 경우 최대 메모리 크기는 232word = 4Gwords = 16GBytes이다. 그런데 요즘 CPU들은 주소에 2~4bit를 extra address로 지원한다. 그래서 32bit computer이지만 34~36bit로 사용할 수 있다고 한다.



캐시나 메인 메모리의 속도 차이에 대해 궁금하긴 했었는데 알게 되서 나름 재미있었다.

메모리 부분도 뭐 알아두면 좋은 상식인 것 같고..

사실 이렇게까지 자세히 궁금하진 않았다.

  1. 메모리를 작게 만들어야하니까.. [본문으로]

'운영체제' 카테고리의 다른 글

시스템 콜  (0) 2020.07.07
OS Structure, Hardware Protection  (0) 2020.07.07
interrupt의 도착 이후  (0) 2020.04.13
OS의 가동 및 interrupt  (0) 2020.04.06
CPU 명령 실행 과정  (0) 2020.03.29