[운영체제] 메모리 관리
1. 메모리 구조
- 주소(Address) + 데이터(Data)
2. 프로그램 개발단계의 파일 종류
- 원천파일(Source file) : 고수준 언어 또는 어셈블리언어로 작성된 파일
(컴파일러, 어셈블러)
- 목적파일(Object file) : 컴파일 또는 어셈블 결과
(링커 )
- 실행파일(Executable file) : 링크(라이브러리와 목적파일의 연결) 결과
(실행파일을 로더를 통해 메인메모리에 올림)
3. 프로그램 실행단계의 메모리 영역
- code(기계어로 된 로직이 있는 영역) + data(연산을 위한 데이터가 있는 영역) + stack(지역변수, 돌아올 지점 저장)
4. MMU(Memory Management Unit)
- base register
- limit register
- relocation register
cpu가 지정한 주소(logical address)에 mmu가 숫자를 더해서 만든 주소(physical address)에 할당(address translation)
-> 실행파일이 어떤 번지에 있더라도 상관없게 해준다.
5. 메모리 낭비 방지
1) Dynamic Loading(동적 적재)
- 프로그램 실행에 반드시 필요한 루틴 / 데이터만 적재한다.
ex) 소스코드에 쓰여진 오류처리 루틴은 오류가 발생할 때만 필요하므로 오류가 발생할 때 메모리에 로드하는게 경제적임
2) Dynamic Linking(동적 연결)
- 공통 라이브러리 루틴이 메모리에 중복으로 올라오는 것은 메모리 낭비를 초래하므로 실행파일을 만들면서 연결을 하지 않고 하나의 라이브러리 루틴만 메모리에 올려놓은 상태로 어플리케이션 실행 시 루틴과 연결하게 한다.
(리눅스에서는 shared library, 윈도우에서는 Dynamic Linking Library 이라고 부름)
3) Swapping
- swap out
메모리에 적재되어 있으나 현재 사용되지 않고 있는 프로세스 이미지를 사용 중이던 상태로 하드디스크의
특정부분(backing store) 으로 내린다. (이미 존재하던 .exe 파일과는 구분된다.)
- swap in
swap out 된 이미지를 다시 메인메모리로 올린다.(프로세스의 크기가 클수록 하드디스크에 써야하는 크기가 커져서
입출력에 따른 부담이 있음.)
'Today I Leaned' 카테고리의 다른 글
[Go] 1. Hello world (0) | 2019.10.14 |
---|---|
[운영체제] 페이징(Paging) (0) | 2019.09.23 |
[운영체제] 교착상태(Deadlock) (0) | 2019.09.19 |
[네트워크] OSI 모델의 계층별 역할 (0) | 2019.09.16 |
[네트워크] OSI 모델 기본개념 정리 (0) | 2019.09.05 |