Memory Management(1)
이번시간에는 운영체제에서 메모리 관리에 대한 개념을 간략하게 공부해 보겠습니다. 우선, 메모리 관리의 goals
- To provide isolation between processes
- To allocate scarce memory resources among competing processes to maximize performance with minimal overhead.
메모리는 주소를 통해 접근 가능한 저장장치로 여기서 주소란 서로 다른 위치를 구분하기 위해 사용하는 일련의 숫자이다. 컴퓨터는 이진수를 사용하므로 메모리 주소는 이진수로 매겨진다. 우리가 흔히 사용하는 컴퓨터 시스템은 32비트 혹은 64비트의 주소체계를 사용하고 있다. 32비트 주소체계를 사용 할 경우 2^32가지의 서로 다른 메모리 위치를 구분할 수 있다. 컴퓨터에서는 byte단위로 메모리 주소를 부여하기 때문에 32비트 주소체계를 사용하면 2^32 바이트만큼의 메모리 공간에 서로다른 주소를 할당 할 수 있다.
하지만 컴퓨터상의 주소는 32비트를 그대로 사용하지 않고 효율적인 운영을 위해 연속된 일련의 영역을 사용한다. 보통은 4KB(=2^12byte) 단위로 묶어서 페이지(page)라는 하나의 영역을 만든다. 페이지 하나의 크기가 2^12 byte이므로 페이지 내에서 바이트별 위치 구분을 위해 12비트가 필요하다. 따라서 총 32비트의 주소 중 하위 12비트는 페이지 내에서 주소를 나타내게 되는 것.
Memory Management (1)
Multiprogramming이란 컴퓨터 시스템에서 여러 개의 프로그램이 동시에 메모리에 적재되어 실행되는 것(메모리에 적재되어 CPU를 할당 받아 실행되면 -> process)을 말합니다. 즉, Need multiple processes in memory at once. 이는 컴퓨터 자원을 효율적으로 활용하여 CPU를 지속적으로 작업에 유지하는 방식(CPU를 쉬지 않고 계속해서 사용하는게 효율적으로 활용하는 것)입니다. 즉, CPU 스케줄러가 시분할(Time-sharing) 방식으로 각 프로그램에 CPU 시간을 할당하여 번갈아가며 실행됩니다.
하지만 Multiprogramming은 메모리 공간의 제약이 있으며, 각 프로그램이 서로 메모리를 침범하는 등의 문제도 있을 수 있습니다. 따라서 메모리 관리와 보호 메커니즘을 효과적으로 구현해야 합니다.(Updating memory hardware (for protection and translation) should be quick)
Memory management는 메인 메모리에 여러프로세스들이 수용될수 있도록 OS와 하드웨어에 의해 수행되는 테스크이다.( The task that is carried out by the “OS and hardware” to accommodate multiple processes in main memory.)
Memory Management (2)
Issues
- Support for multiple processes: 각 프로세스는 logically 연속된 공간을 가져야한다. 그리고 각 공간은의 크기는 variable하다.
- Enable a process to be larger than the amount of memory allocated to it: 할당받은 모든 메모리 공간이 동시에 사용되는 것은 아니다.
- Support for multiple regions per process (segments)
- Protection & Sharing
- Performance
Address Spaces(주소 공간)
프로그램이 실행을 위해 메모리에 적재되면 그 프로세스를 위한 독자적인 주소 공간이 생성된다. 이 주소를 논리적 주소 혹은 가상 주소라고 한다. CPU는 이렇게 프로세스마다 독자적으로 갖는 논리적 주소에 근거해 명령을 실행한다. 논리적 주소는 각 프로세스마다 독립적으로 할당되며 0번지 부터 시작된다. 반면 물리적 주소는 물리적 메모리에 실제로 올라가는 위치를 말한다. 보통 물리적 메모리의 낮은 주소 영역에는 운영체제가 올라가고, 높은 주소 영역에는 사용자 프로세스가 올라간다. 또한 CPU가 기계어 명령을 수행하기 위해 논리적 주소를 통해 메모리 참조를 하게 되면 해당 논리적 주소가 물리적 메모리의 어느 위치에 매핑되는지 확인해야한다.
이렇게 프로세스의 논리적 주소를 물리적 주소로 연결시켜주는 작업을 주소 바인딩(address binding)이라고 한다.
프로세스는 logical address를 사용하고 OS+Hardware가 logical address를 physical address로 trainslates한다. 그리고 프로세스가 실행되기 위해서는 해당 프로그램이 물리적 메모리에 올라가 있어야한다.
- Physical address space: 하드웨어로부터 지원되고 "절대적 공간"이라고도 부른다. 주소는 0부터 시작한다.
- Logical address space: 프로세스가 메모리에서 사용하는 주소 범위를 의미합니다. 이는 프로세스가 자신의 실행 중에 사용하는 주소들을 가상적으로 표현한 것. 프로세스 자체 메모리 관점이다.(A process’s view of its own memory.), 주소는 0부터 시작한다. 사용자 프로그램은 논리적 주소를 다루고 프로세스는 실제 물리적 주소를 보지 않는다.(It never sees the real physical addresses). CPU에의해 실행되는 명령어들은 논리적 주소들을 다룬다. (Instructions executed by the CPU issue “logical addresses”.)
Swapping
프로세스는 일시적으로 메인 메모리에서 벗어나 backing store(Fast 디스크)로 스왑됐다가 다시 실행을 이어가기 위해 메모리로 돌아 올 수 있다. (A process can be swapped temporarily out of memory to a backing store, and then brought back into memory for continued execution.) 즉, 메모리에 올라온 프로세스의 주소공간 전체를 디스크의 스왑 영역에 일시적으로 내려놓는 것. 이때 스왑 영역을 백킹스토어라고 부르며, 디스크내의 파일시스템과는 별도로 존재하는 일정 영역이다. 파일 시스템은 전원이 나가더라도 그 내용이 유지되는 비휘발성 저장공간이지만 스왑 영역은 프로세스가 수행중인 동안에만 디스크에 일시적으로 저장하는 공간이다.
backing store는 빠른 Disk이고 모든 메모리 images의 copies들을 수용할 수 있는 충분히 큰 공간을 갖고 있다. -> 다수의 사용자 프로세스를 담을 수 있는 충분히 큰 공간이어야한다. 그리고 이런 메모리 이미지들에 직접 접근을 제공해야 한다. (must provide direct access to these memory images.)
*스와핑이라는 개념은 프로세스의 수행이 종료되어 그 주소 공간을 디스크로 내쫓는것이 아니라, 특정한 이유로 실행중인 프로세스의 주소 공간을 일시적으로 메모리에서 디스크로 내려놓는 것을 말한다. 이때, 스와핑의 가장 중요한 역할은 메모리에 존재하는 프로세스의 수를 조절하는 것이다. 쉽게말해, 스와핑을 통해 멀티프로그래밍의 정도(degree of multiprogramming)를 조절할 수 있다.
멀티프로그래밍으로 인해 너무 많은 프로그램이 메모리에 동시에 올라오게 되면 프로세스당 할당되는 메모리의 양이 지나치게 적어져 시스템 전체의 성능이 크게 떨어진다. 스와핑은 이런 문제를 해결하기 위해 몇몇 프로그램을 통째로 디스크의 스왑 영역으로 내쫓아 메모리에 남아 있는 프로그램들에게 실행에 필요한 적절한 메모리 공간을 보장한다. 지금 메모리에 있는 프로그램이 충분히 실행되고 나면, 이제 이 프로그램을 메모리에서 내보내고 그 자리에 스왑 아웃되었던 프로그램을 다시 올리게 되는 것.
예를들어, 물리적 메모리에 엑셀 프로그램이 올라가 있다고 해보자. 이때 사용자가 웹 브라우저 프로그램을 사용하고자 하는데 이를 실행하기 위한 메모리 공간이 충분하지 않을경우, 운영체제는 메모리 내에 이미 존재하는 엑셀 프로그램에 할당된 메모리 공간을 통째로 빼앗아 디스크의 스왑 영역으로 아웃시키고 이로 인해 생긴 여유 공간에 웹 브라우저 프로그램의 주소 공간을 스왑 인 시킬 수 있게 된다.