티스토리 뷰
인프런에 무료로 공개되어 있는 주니온님의 운영체제 공룡책 강의 내용을 정리한 글입니다. 수강해보시는 걸 추천드려용
메모리
메모리는 주소를 가진 바이트로 구성된 큰 배열이다. 메모리 주소 공간을 각 프로세스가 따로 관리하기 위해서 메모리 공간을 구분할 필요가 있는데, 이 구분을 base register와 limit register를 통해 정한다.
메모리 공간 보호 (Protection for memory space)
주소 할당 (Address Binding)
- source program - symbolic address
- object file - relocatable address
- executable file - logical address(논리적 주소)
- program in memory - physicla address (물리적 주소)
CPU에서는 프로세스에 접근하기 위해 논리적 주소를 사용한다. 물리적 주소에 접근하기 위해서, 논리적 주소와 물리적 주소를 매핑해주어야 하는데, 이 때 MMU(Memory Management Unit)가 이 역할을 한다.
relocation register 값을 통해서 논리적 주소를 물리적 주소로 바꿔준다.
Dynamic Loading
메모리 공간을 효율적으로 사용하기 위해서, 필요할 때만 루틴을 로드하는 것
Dynamic Linking & Shared Libraries
- DLLs(Dynamically Linked Libraries) - 어떤 라이브러리가 로딩되면, 실행되는 중에 링킹하는 것
- static linking - loader가 binary program code를 링킹하는 것
- dynamic linking - 링킹을 실행 시까지 연기하는 것
- shared library - dll이랑 비슷
Contiguous Memory Allocation (연속 메모리 할당)
한 프로세스를 메모리에 통째로 올리는 것이다.
메모리 할당 전략
메모리를 할당해주다 보면 hole이 발생한다. hole에 프로세스를 어떻게 로드할 것인지 고민해야 한다.
- First-Fit - 충분한 크기의 hole이 존재하면 바로 로드하는 것
- Best-Fit - 충분한 크기의 hole 중 가장 작은 공간에 로드하는 것- 우선순위 큐로 구현?
- Worst-Fit - 가장 큰 hole부터 로드하는 것
Fragmentation (단편화)
- 외부 단편화(external fragmentation) - 메모리 할당 및 해제 작업의 반복으로 hole이 발생하여 메모리 총공간은 충분하지만 할당할 수는 없는 상황
- 내부 단편화(internal fragmentation) - 프로세스가 필요한 양보다 더 큰 메모리가 할당되어 메모리 공간이 낭비되는 현상
댓글