프로세스와 메모리
주 기억장치 (메모리)
- RAM (Random-Access-Memory)
: 전력 공급이 끊길 경우 데이터가 소거되는 휘발성 메모리
- ROM (Read-Only-Memory)
: 메모리 내의 데이터에 대해 읽기만 가능한 비휘발성 메모리
프로세스의 메모리영역
- 코드 (code)
: 프로세스가 실행할 코드와 매크로 상수가 기계어 형태로 저장된 공간
: 컴파일 타임에 결정되며 중간에 코드를 바꿀 수 없도록 Read-Only로 지정
- 데이터 (data)
: 코드에서 선언한 전역변수 또는 static 변수 등이 저장된 공간
- 힙 (heap)
: 프로그래머가 필요할 때마다 사용하는 메모리 영역
: 컴파일 타임에 생성되는 code, data, stack와 달리 런타임 때 생성
: malloc나 calloc 으로 heap 영역 사용 가능
: 스택보다 할당 가능한 메모리 공간이 많으나 포인터로 메모리 영역을 접근해야하기
때문에 다른 자료구조에 비해 읽고 쓰는 속도가 느림
: memory leak
=> 힙 영역을 할당하고 나서 해제 하지 않았을 때 발생하는 문제
- 스택 (stack)
: 함수 내에서 선언된 지역변수, 매개변수, 리턴 값, 돌아올 주소 등이 저장된 공간
: 함수 호출시 할당되며 종료시 반납 (LIFO 방식으로 기록과 종료 진행)
: Stack Overflow
=> 재귀함수의 깊은 호출이나 함수내에 지역변수가 너무 많아 stack 영역이 초과되는 현상
=> 스택은 컴파일 타임에 크기가 결정되기 때문에 무한한 할당이 불가하기 때문
논리 메모리와 물리 메모리
- 메모리 영역
: 각 프로세스 별로 0x00000000 ~ 0xFFFFFFFF 범위의 메모리 영역 사용
- 논리 메모리
: 프로세스가 가진 주소 (ex) 0x1234AF56
- 물리 메모리
: 프로세스가 위치하는 실제 메모리 주소
=> 각 프로세스별로 가지고 있는 논리 메모리와 물리 메모리 매핑 테이블을 통해 할당
가상메모리
- 메모리 부족 현상을 방지하기 위해 디스크 공간을 주 기억장치로 활용하는 것
- 운영체제의 메모리 관리
: 프로세스에서 필요한 부분만 메모리로 적재하고
나머지 부분은 디스크에 생성된 가상메모리 영역에 적재
- page
: 가상메모리를 사용하는 단위 (windows 기준 4kb )
: 데이터의 크기를 정량화하여 빈공간이 발생하지 않게 하기 위함
- Demand-Paging
: 페이지 테이블을 통해 논리 메모리 주소를 물리 메모리 주소로 변환하는 것
'Computer Science > OS' 카테고리의 다른 글
CPU의 구조와 명령어 수행 과정 (0) | 2021.02.05 |
---|---|
프로세스와 운영체제 (0) | 2021.02.03 |
스레드 (0) | 2021.02.03 |
프로세스와 CPU (0) | 2021.02.03 |
프로세스 (0) | 2021.01.19 |