[OS] Memory (RAM)

mquat·2022년 5월 4일
0
post-thumbnail

메모리란?

'주기억장치' 라고도 하며, 데이터(연산/명령/자료)를 기억하는 하드웨어 중 하나다. 크게 2가지 종류가 있다.

  • RAM (Random Access Memory)
    • 휘발성 메모리
    • 비휘발성 메모리
  • ROM (Read-Only Memory): 한번 저장하면 데이터를 바꿀 수 없음

사진 출처: 나무위키

메모리의 역할은 중요하다.
특히 현대 컴퓨터는 대부분 폰노이만 구조를 따르는데, 폰노이만 구조의 이론은 "모든 프로그램은 메모리에 올라와햐 실행될 수 있다" 는 것.

p.s.
폰노이만은 최연소(25세)로 대학 교수시험에 통과했고, 그가 주장한 이론 중에 하나가 '큰 폭탄에 의한 피해는 지상에 떨어지기 전에 폭발할 때 극대화된다'는 것인데, 히로시마/나가사키 원자폭탄 던질 때 이 이론이 적극 활용되었다고 한다 (...)


휘발성 메모리

전력이 끊기면 데이터가 사라진다는 특징이 있다.
휘발성 메모리는 다시 DRAM과 SRAM으로 나뉘는데, DRAM과 달리 SRAM은 전력이 공급되는 동안에는 데이터를 보관할 수 있다.
반면 DRAM은 일정 시간마다 데이터 재생이 필요하다.

이러한 특성 때문에, 메인 메모리는 휘발성 메모리를 사용한다.
얼핏 생각해보면 전력이 끊겨도 데이터가 남는 비휘발성 메모리가 더 좋아 보이지만, 그만큼 속도도 느리고 무거우며 가격도 비싼 단점이 있다.

따라서,

  • 메인 메모리는 휘발성 메모리를 주로 사용한다
    • 메인 메모리: DRAM 을 주로 사용
    • 캐시 등 고속 메모리: SRAM을 주로 사용

비휘발성 메모리

대표적으로 플래시 메모리, FRAM, PRAM이 있다.
전력이 없어도 데이터를 보관할 수 있다는 특징이 있으며, 이 중 플래시 메모리는 보통 USB, 디지털카메라, mp3 등의 저장장치로 사용된다.

특히 플래시 메모리는 많이 사용할 수록 기능이 떨어지기 때문에, USB 등을 사용할 때 주의해야 한다. (데이터가 날라갈 수도)


Memory protection: 경계 레지스터와 한계 레지스터

오늘날 컴퓨터는 시분할 기법을 사용하므로, 여러 프로그램이 동시에 운영된다. 각 작업이 서로의 영역을 침범하면 안되기에 메모리 보호를 위한 장치들이 존재한다.

CPU는, 메모리를 사용할 때 시작 주소를 경계 레지스터(bound register)에 저장한다. 그리고 마지막 주소까지의 gap을 계산해 한계 레지스터(limit register)에 저장한다.

사진 출처: https://talkingaboutme.tistory.com/entry/Memory-Memory-Consideration-in-OS
  • CPU는 데이터를 읽거나 쓸 때, bound - limit 사이에서 이뤄지는지 검사한다
  • range를 벗어나는 경우, CPU는 인터럽트가 발생했음을 OS에 알린다
  • OS는 프로그램을 강제 종료시킨다

'인터럽트' 란?

polling(CPU가 직접 입출력장치에서 데이터를 갖고오거나 내보내는 것)의 비효율성을 해결하기 위해 등장한 방식

  • 입출력 관리자에게 데이터 전송을 지시하는 방식
  • 데이터 이동이 완료되면, 입출력 관리자는 완료 신호를 CPU에 보냄
    • 원래 메모리는 CPU만 접근권한이 있음
    • 입출력 관리자는 DMA(Direct Memory Access)가 필요함
    • 따라서 Memory Mapping I/O의 개념이 생김 (CPU가 사용하는 메모리 공간과, DMA를 통해 사용되는 메모리 공간을 분리)
    • CPU와 DMA가 동시에 메모리에 접근할 경우, 작업 속도가 더 빠른 입출력장치에게 순서를 양보하는데 이를 cycle stealing이라고 함 (사이클 훔치기)

결국 입출력 관리자가 CPU에 보내는 완료 신호가 인터럽트다.
CPU는 인터럽트를 받으면 하던 일을 중단하고 인터럽트를 처리해야 한다.
인터럽트는 여러 번 발생할 수 있기에, interrupt vevtor를 사용한다
(여러 인터럽트를 배열화 한 것)


참고 자료
쉽게 배우는 운영체제, 조성호
https://namu.wiki/w/RAM#s-2.3
https://talkingaboutme.tistory.com/entry/Memory-Memory-Consideration-in-OS

profile
예비 개발자의 기술 블로그 | explore, explore and explore

0개의 댓글