목록CS/OS (18)
S E P H ' S
가상 메모리는 물리 메모리 크기 한계를 극복하기 위해 나온 기술이다. 물리 메모리보다 큰 프로세스를 수행하기 위해 가상 메모리를 사용한다. 예를 들어 100MB의 메모리에서 200MB의 프로세스를 수행할 수 있도록 하는 것이다. 앞서 메모리 낭비 방지의 동적 할당에서도 봤듯이, 필요한 부분만 메모리에 적재하는 것이다. 프로세스를 실행할 때, 실행에 필요한 부분만 메모리에 올리는 것이다. 이러한 프로세스의 일부분은 페이지 단위일 수도 있고, 세그먼트 단위일 수도 있지만 현재 대부분은 페이지 단위를 사용한다. 이처럼 현재 필요한 페이지만 메모리에 올리는 것을 Demanding Paging(요구 페이징)이라고 한다. Demanding Paging 위 그림은 요구 페이징의 그림이다. 두 프로세스 P1, P2는 ..
페이징은 프로세스를 물리적으로 일정한 크기로 나눠 메모리에 할당하는 기법이었다. 세그멘테이션은 프로세스를 논리적 내용을 기반으로 나눠 메모리에 배치하는 것을 말한다. 세그멘테이션은 프로세스를 세그먼트(segment)의 집합으로 만들고 각 세그먼트의 크기는 일반적으로 같지 않다. 프로세스를 code + data + stack 으로 나누는 것 역시 세그멘테이션의 모습이다. 물론 code, data, stack 각각 내부에서 더 작은 세그먼트로 나눌 수 있다. 세그먼트를 메모리에 할당할 때는 페이지를 할당하는 것과 동일하다. 하지만 테이블은 조금 다르다. 세그먼테이션을 위한 테이블은 세그먼트 테이블이라고 한다. 그리고 세그먼트 테이블은 세그먼트 번호와 시작 주소(base), 세그먼트 크기(limit)을 엔트리..
페이징 외부 단편화로 인한 메모리 낭비는 매우 심하다는 것을 이전 포스트에서 살펴보았다. Compaction을 사용하면 단편화는 해결할 수 있지만 그로인해 발생하는 오버헤드와 비효율적인 성능으로 사용하기는 어렵다. 그래서 등장한 것이 페이징이다. 페이징은 hole을 가지고 해결하는 것이 아닌 프로세스를 작은 크기로 나눠 외부 단편화를 해결하려 했다. 페이징은 프로세스를 일정한 작은 크기로 나누는데, 프로세스 뿐 아니라 hole도 같은 크기로 나눈다. 이러한 작은 조각들의 크기를 맞춰 메모리에 할당한다. 하지만 하나의 프로세스는 연속적 동작을 수행하는데 이를 작은 조각으로 나눈다면 정상적으로 작동할까? 메모리상에 여러 곳에 흩어진 프로세스를 수행하기 위해 CPU를 속여야 한다. 이전 다중 프로그래밍을 살펴..
메모리는 CPU 자원만큼 컴퓨터를 사용하는데 매우 중요한 자원 중 하나이다. 이전에는 운영체제에서 CPU 자원을 관리하는 프로세스 관리에 대해 살펴보았고, 지금부터는 메인 메모리를 관리하는 기능에 대해 살펴볼 것이다. 특히 과거에는 메모리가 매우 비싼 자원이었고 크기 또한 작아 운영체제에서 메모리에 대한 관리가 지금보다 더 중요했었다. 현재는 과거보다 훨씬 큰 메모리를 저렴하게 사용하지만, 지금도 메모리는 부족하다. 메모리가 커진 만큼 프로그램의 크기와 처리하는 데이터의 크기는 그보다 더욱 빠른 속도로 커져왔다. 그러므로 현재에도 여전히 메모리를 최대한 효율적으로 사용하기 위해 여러 방법들이 연구되고 있고, 운영체제 기능에서도 매우 중요한 위치를 차지하고 있다. 1. 메모리에 프로그램 할당하기 메모리는 ..