Computer Science/Operating System(20)
-
페이지 교체 알고리즘
페이지 교체 페이지의 부재가 발생했을 때 새로운 페이지를 할당해야 한다. 이때 현재 할당된 페이지 중에서 어떤 것을 교체할 지 결정하는 방법이 페이지 교체 알고리즘이다. 교체 알고리즘 가상 메모리는 필요한 페이지만 메모리에 올리고 사용하지 않는 페이지는 그대로 둔다. 하지만 필요한 부분만 올린다 하더라도 결국 가득 차게 된다. 따라서 메모리가 가득 차면 추가로 페이지를 가져오기 위해 기존의 것들 중 안 쓰는 페이지를 out하고 필요한 페이지를 in 해야 한다. 이때 out하는 페이지를 victim page라고 한다. 여기서 어떤 페이지를 out 시킬 지 선택하는 방법이 페이지 교체 알고리즘으로 다양하게 존재한다. 웬만하면 잘 사용하지 않는 페이지를 버리는 것이 좋다. FIFO, First-in First..
2024.04.17 -
페이지 테이블의 세 가지 구조
페이지 테이블 앞선 포스팅에서 살펴본 페이지 테이블은 연속적이다. 용량이 다양한 메모리가 연속적으로 할당되는 것에 대해 외부 단편화라는 문제점이 있어서 페이징 기법을 도입하였다. 하지만 페이지 테이블이 연속적이면 모순되는 것이다. 하지만 말로만 들었을 때는 뭐가 문제이지?라는 생각을 할 수 있다. 그럼 먼저 페이지 테이블이 연속적일 경우에 어떤 문제가 발생하는 지부터 살펴보자. 연속적인 페이지 테이블 일반적으로 페이지의 크기는 4KB(=2^12Byte)로 잡는다. 32비트 주소 체계와 64비트 주소 체계의 경우 페이지 테이블의 용량이 어떻게 되는 지 살펴보자. 우선 아래는 가상 메모리 주소를 나타낸다. 가상 메모리 주소는 다음과 같이 page number와 offset으로 구성되어 있다. page num..
2024.04.17 -
외부 단편화와 페이징, External Fragmentation and Paging
앞선 포스팅을 통해 메모리의 논리적 주소와 물리적 주소의 개념, 필요성, 매핑에 대해 알아보았다. 오늘은 논리적 주소를 물리적 주소로 mapping할 때, 연속적으로 mapping하면 어떤 문제가 발생하는지, 이에 대한 해결책은 무엇인지 알아보자. 연속 할당의 문제점, 외부 단편화 연속 할당이란 무엇일까? 연속 할당은 한 프로세스의 모든 논리적 주소에 동일한 Base Register를 더해주는 것을 말한다. 이 과정은 MMU에 의해 이루어지며, 주소는 Execution time에 바인딩 된다. 모든 프로세스는 논리적 주소가 0번지부터 시작해서 차례대로 증가하기 때문에, 물리적 주소도 시작 주소만 다르지 연속적으로 배치되어 있다. 그림으로 보면 아래와 같다. 이때 새로운 용어 Partition과 Hole이..
2024.04.17 -
CPU 주소 체계와 가상메모리
CPU 주소 체계 CPU마다 주소 체계가 다른 이유는 프로세서가 한 번에 처리할 수 있는 데이터의 크기가 다르기 때문이다. 64 bit CPU vs 32 bit CPU 64bit CPU와 32bit CPU의 차이는 뭘까? 전자는 프로세서가 한 번에 처리할 수 있는 데이터의 양이 64bit라는 뜻이고, 후자는 32bit라는 뜻이다. 이렇게 프로세서가 한 번에 처리할 수 있는 데이터의 양을 word라 한다. 64bit CPU의 경우 1 word의 크기는 8byte(=64bit)이고, 메인 메모리에서 한 번에 8줄을 읽을 수 있다는 뜻이다. word 크기는 CPU의 데이터 단위라고 생각하면 되고, word의 크기는 CPU Register의 크기와 같다. 그러면 CPU Register의 크기에 따라 할당할 수 ..
2024.04.17 -
메모리의 주소 공간, 물리적 주소와 논리적 주소
메모리를 관리하며 가장 중요한 점은 무엇일까? 다음 질문에 대해 고민해 보자. ❓ 한정된 메모리 공간을 어떻게 하면 효율적으로 관리할 수 있을까? CPU가 직접적으로 접근할 수 있는 저장 장치는 메모리이지만, 메모리의 공간은 한정적이다. 여러 개의 프로그램을 실행해야 하는 운영체제에서는, 협소한 메모리 공간을 최대한 효율적으로 관리해서 CPU가 필요한 데이터를 빨리 끌어올 수 있도록 하는 것이 목표이다. CPU는 메모리에 접근할 때 ‘주소값’을 이용한다. 메모리의 주소 공간에 대해 살펴보자. 주소 공간, Address Space 메모리의 주소 공간은 아래와 같이 표현한다. 위 그림에서 오른쪽 박스는 메모리 공간을 나타내고, 각 칸마다 왼쪽에 해당 칸의 메모리 주소값이 적혀있다. CPU는 이 주소값을 통해..
2024.04.17 -
컴파일(Compile), 링킹(Linking), 로딩(Loading), 런타임(Runtime)
메모리 주소 바인딩에 대해 공부하기 전 알아야 하는 개념들에 대해 먼저 살펴보자. 컴파일, 링킹, 런타임, 로딩에 대해 하나 하나 살펴볼 것이다. 컴파일, Compile 컴파일이란 원시 코드를 컴퓨터가 이해할 수 있는 언어로 번역하는 과정을 말한다. 컴퓨터는 0과 1만 이해할 수 있다. 우리가 흔히 사용하는 Java, C++은 고급 프로그래밍 언어로, 컴퓨터 입장에서는 외계어와 같다. 따라서 우리가 짠 소스코드를 컴퓨터가 이해할 수 있는 언어로 번역하는 과정이 필요한데, 그 과정을 컴파일이라 한다. 단계별 역할 컴파일을 단계별로 정리하면 다음과 같다. 위 과정에 대해 하나씩 정리해보자. Preprocessor, 전처리기 ‘#’으로 시작하는 부분, 즉 #include, #define과 같은 부분을 소스 코..
2024.04.17