일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | ||
6 | 7 | 8 | 9 | 10 | 11 | 12 |
13 | 14 | 15 | 16 | 17 | 18 | 19 |
20 | 21 | 22 | 23 | 24 | 25 | 26 |
27 | 28 | 29 | 30 |
- 쓰레드
- 백준
- 그리디 알고리즘
- Direct12
- 렌더링 파이프라인
- 파일시스템 구현
- 다이나믹 프로그래밍
- codility
- 멀티쓰레드
- DirectX12
- 디자인패턴
- 알고리즘
- 타입 객체
- 병행성
- 자료구조
- 컨디션 변수
- 그리디알고리즘
- directx
- 멀티프로세서
- 운영체제
- 영속성
- OS
- 병행성 관련 오류
- I/O장치
- 락
- 스케줄링
- DirectX 12
- 프로그래머스
- 다이나믹프로그래밍
- 동적계획법
- Today
- Total
목록OS (14)
기록공간

빈 메모리 공간이 거의 없는 경우 운영체제는 메모리 압박을 해소하기 위해 다른 페이지들을 강제적으로 페이징 아웃(paging out)하여 활발히 사용 중인 페이지들을 위한 공간을 확보한다. 내보낼 페이지 선택은 운영체제의 교체 정책(replacement policy) 안에 집약되어 있다. 과거의 시스템들은 물리 메모리의 크기가 작았기 때문에 초기 가상 메모리 시스템의 가장 중요한 역할 중 하나가 교체 정책이었다. 다양한 교체 정책들을 통해 내보낼 페이지는 어떻게 결정하는지에 대해 알아보도록 하겠다. 캐시 관리 정책에 대해 설명하기에 앞서서 해결하고자 하는 문제에 대해서 좀 더 상세히 알아보자. 전체 페이지들 중 일부만이 메인 메모리에 존재하는 경우, 메인 메모리는 시스템의 가상 메모리 페이지를 가져다 놓..

지금까지 살펴보았던 내용들은 가상 주소 공간이 비현실적으로 작아서 모두 물리 메모리에 탑재가 가능했다. 만약 가상 주소 공간이 큰 프로세스들 여러 개를 실행한다면 물리 메모리는 더 이상 할당을 받을 수 없으므로 문제가 생길 것이다. 이 문제를 완화하기 위해서 메모리 계층의 추가가 필요하다. 느리지만 매우 큰 용량의 메모리를 사용하는 것이다. 시스템에서 이 역할을 하드 디스크 드라이브가 담당한다. 이제 메모리 계층에서 크고 느린 하드 디스크 드라이브가 가장 하부에 위치하고, 그 위에 메모리가 있다. 왜 굳이 "큰" 주소 공간이 필요한 것일까? 이에 대한 답은 편리함과 사용 용이성이다. 주소 공간이 충분히 크면, 충분한 메모리 공간이 있는지 걱정하지 않아도 된다. 그냥 운영체제에게 요청하기만 하면 된다. 스..

앞서 봤던 페이징은 상당한 성능 저하를 가져올 수 있다. 큰 메모리 공간이 요구되며 작업은 엄청난 성능 저하를 유발한다. 운영체제의 실행 속도를 개선하려면, 도움이 필요하다. 대부분의 경우 하드웨어로부터 도움을 받는다. 주소 변환을 빠르게 하기 위해서 변환-색인 버퍼(Translation-lookaside buffer) 또는 TLB 부르는 것을 도입한다. TLB는 칩의 메모리 관리부(MMU)의 일부다. 자주 참조되는 가상 주소-실주소 변환 정보를 저장하는 하드웨어 캐시이다. 주소-변환 캐시(Address-translation cache)가 좀 더 적합한 명칭이다. 가상 메모리 참조 시, 하드웨어는 먼저 TLB에 원하는 변환 정보가 있는지를 확인한다. 만약 있다면 페이지 테이블을 통하지 않고 변환을 빠르게..

우리는 앞에서 공간 관리 문제를 해결하기 위해 세그멘테이션을 이용하여, 가변 크기의 조각들로 분할하는 방법을 사용한다는 것을 살펴봤다. 하지만 이것은 태생적인 문제를 가지고 있다. 공간을 다양한 크기의 청크로 분할할 때 공간 자체가 단편화(Fragmented) 될 수 있고, 할당은 점점 더 어려워진다. 이러한 문제점을 해결하기 위해서 공간을 동일한 크기의 조각으로 분할하는 것을 고려해 볼 필요가 있다. 가상 메모리에서 이를 페이징(Paging)이라 부른다. 프로세스의 주소 공간을 몇개의 가변 크기의 논리 세그멘트(힙, 스택, 코드)로 나누는 것이 아니라 고정 크기의 단위로 나눈다. 이 각각의 고정 크기 단위를 페이지(Page)라고 부른다. 물리 메모리도 페이지 프레임(Page frame)이라고 불리는 고..

이 장에서는 구체적으로 빈 공간 관리에 관련된 문제를 논의할 것이다. 빈 공간 관리가 어려운 이유는 관리하는 공간이 변할 수 있는 가변적인 특성을 가진다는 점이다. malloc() 과 free() 에서처럼 사용자 수준 메모리 할당 라이브러리나 세그멘테이션으로 물리 메모리를 관리하는 운영체제가 이런 특성을 가지는 대표적인 예이다. 빈공간은 다양한 크기의 작은 조각으로 분할되어 결국 단편화된다. 빈 공간들의 전체 크기가 요청된 것보다 크더라도 하나의 연속된 영역이 존재하지 않으면 요청을 실패할 수 있다. 다음 그림은 이러한 문제의 예를 보여 준다. 이 경우 빈 공간의 전체 크기는 20바이트이다. 불행히도, 10바이트 짜리 두 조각으로 나누어져 있다. 그 결과, 20바이트의 빈 공간이 있지만 15바이트의 요청..

앞에서 살펴봤던 형태의 주소 공간에 대해 재미있는 사실을 발견했을 것이다. 스택과 힙 사이에 사용되지 않는 큰 공간이 존재한다. 스택과 힙 사이의 공간은 사용되지 않더라도 주소 공간을 물리 메모리에 재배치할 때 물리 메모리를 차지한다. 베이스와 바운드 레지스터 방식은 메모리 낭비가 심하다. 또한, 주소 공간이 물리 메모리보다 큰 경우 실행이 매우 어렵다. 이런 측면에서 볼 때 베이스와 바운드 방식은 유연성이 없다. 세그멘테이션 : 세그멘트의 주소변환 이 문제를 해결하기 위한 아이디어가 탄생했으니, 바로 세그멘테이션(Segmentation)이다. 상당히 오래된 아이디어이다. 아이디어는 간단하다. MMU(Memory Management Unit : 메모리 관리 장치) 안에 오직 하나의 베이스와 바운드 쌍만 ..