본문 바로가기
개발자 도전기/[OS] 운영체제 개념 익히기

운영체제(Operating System) | 메모리(Memory)

by 답수 2021. 10. 26.
728x90
반응형

 

 

스레드까지 하다 갑자기 메모리까지 점프... 어쩔 수 없다. 지금 핀토스 virtual memory를 진행하고 있어서 일단 메모리 관련 OS부터 정리하려고 한다.

 

 

메모리 시스템은 여러 가지 용량, 비용, 접근 시간을 가지는 저장 장치들의 계층구조이다. 메모리 계층구조는 아래 사진 참조!

 

 

  • CPU 레지스터: 가장 자주 이용하는 데이터 보관(locality)
  • 캐시: SRAM. CPU부근에서 비교적 느린 메인메모리에 저장된 데이터와 인스트럭션들의 부분집합에 대한 준비장소
  • 메인메모리: DRAM. 크고 느린 디스크들에 저장된 데이터를 준비하는 데 사용, 이 디스크들은 네트워크로 연결된 다른 머신들의 디스크에 저장된 데이터를 위한 준비장소

 

 

1. RAM(랜덤-접근 메모리)

| SRAM (정적 RAM)

SRAM, 즉 정적 램은 동적 램보다 더 빠르고 훨씬 비싸다. 캐시메모리로 사용되며 CPU칩 내부 또는 외부에 장착된다. 일반적으로 테스크톱 시스템은 수십 메가바이트의 SRAM을 가진다.

 

SRAM은 각 비트를 이중안정(bistable) 메모리 셀에 저장한다. 이중안정 본성으로 인해 SRAM 메모리 셀은 자신의 값을 전원이 공급되는 한 무한히 유지한다. SRAM은 DRAM과 달리 리프레시가 필요 없고, 외란에 민감하지 않다. 대신 DRAM보다 트랜지스터를 더 많이 사용하며 더 낮은 밀도를 가지고 더 비싸고 전력을 많이 소모한다.

 

| DRAM (동적 RAM)

DRAM은 메인메모리와 그래픽 시스템의 프레임 버퍼로도 사용된다. 일반적으로 테스크톱 시스템은 수백 내지 수천 메가바이트의 DRAM을 가진다.

 

DRAM은 주기적으로 메모리의 모든 비트를 읽었다가 다시 써 주는 방식으로 리프레시(refresh)해야 한다. 또한 DRAM은 빛이나 전기적 잡음 같은 외란에 민감하다.

 

 

SRAM과 DRAM 모두 전원이 꺼지면 정보도 잃어버리는 휘발성 성질을 갖는다.

 

 

2. 메모리 공간의 종류

C 프로그램이 실행되면 두 가지 유형의 메모리 공간이 할당된다.

 

| STACK

스택 메모리는 할당과 반환은 프로그래머를 위해 컴파일러에 의해 암묵적으로 이루어진다. C 프로그램에서 스택에 메모리를 선언하는 것은 쉽다.

void func() {
	int x;	// 스택에 int형 선언
    ...
}

 

위의 코드를 예시로 볼 때, 컴파일러가 func() 함수가 호출될 때 스택에 x라 불리는 정수를 위한 공간을 확보한다. 함수에서 리턴하면 컴파일러는 프로그래머를 대신하여 메모리를 반환한다. 함수 리턴 이후에도 유지되어야 하는 정보는 스택에 저장하지 않는 것이 좋다.

 

| HEAP

오랫동안 값이 유지되어야 하는 변수를 위해 힙 메모리가 필요하다. 모든 할당과 반환이 프로그래머에 의해 명시적으로 처리된다. 

 

프로그래머에 의해 처리되기 때문에 많은 주의를 기울여야 한다.

(많은 버그의 원인. 특히 segment fault...)

 

힙과 관련된 동적 메모리 할당 관련 글 ↓

 

Malloc Lab | 동적 메모리 할당(1) - 개념 정리

동적 메모리 할당? C언어를 공부하면서 배열을 정할 때 배열의 크기도 명확하게 설정해야 하는 것이 파이썬과 달라 조금 낯설었다. 예를 들어 A대학교 B학과의 학년 별로 코로나 백신 접종을 얼

dapsu-startup.tistory.com

 

 

3. Address Binding

* Address binding
  - 프로그램의 논리 주소를 실제 메모리의 물리 주소로 매핑(mapping)하는 작업

 

User program processing steps

 

 

 

 

728x90
반응형

댓글