스레드까지 하다 갑자기 메모리까지 점프... 어쩔 수 없다. 지금 핀토스 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...)
3. Address Binding
* Address binding
- 프로그램의 논리 주소를 실제 메모리의 물리 주소로 매핑(mapping)하는 작업
'개발자 도전기 > [OS] 운영체제 개념 익히기' 카테고리의 다른 글
운영체제(Operating System) | 스레드(Thread) (0) | 2021.09.28 |
---|---|
운영체제(Operating System) | 프로세스 관리 (0) | 2021.09.28 |
운영체제(Operating System) | 운영체제 개요 (0) | 2021.09.28 |
댓글