컴퓨터 과학에 대한 지식을 습득하고 정리하는 기록용 포스팅입니다.
예외를 판단하는 사고를 기르고, 효율적인 코드를 작성하기 위해
컴퓨터 과학 지식을 활용하는 것을 목표로 합니다.
CPU의 비트 : 한 번에 다룰 수 있는 데이터의 최대 크기를 의미한다.
즉, 32bit CPU는 한 번에 다룰 수 있는 데이터의 최대 크기가 32bit이다.
CPU의 비트는 메모리 주소 공간(address space)
의 크기와도 연관이 있다.
32bit CPU의 경우 메모리 주소를 지정하는 레지스터인 메모리 주소 레지터(MAR)
의 크기가 32bit이므로 메모리 주소의 범위가 0~2^32-1
이다.
이를 16진수로 나타내면 00000000
~FFFFFFFF
이며 총크기는 2^32B, 약 4GB가 된다.
64bit CPU는 레지스터의 크기, 버스의 대역폭, 한 번에 처리되는 데이터의 최대 크기 등이 32bit CPU의 2배이다. 한번에 다룰 수 있는 데이터의 크기가 2^64로 거의 무한대에 가까운 메모리를 사용 할 수 있다.
실제 물리 주소(pysical address)
를 가르키며, 메모리 관리자 입장
에서 바라본 주소이다. 즉, 메모리 주소 레지스터
가 사용하는 주소로, 컴퓨터에 꽂힌 램 메모리의 실제 주소를 말한다.
메모리 관리자
는 절대 주소를 사용하지만 사용자 입장에서는 절대 주소는 불편하고 위험하다. 절대 주소를 사용하면 매번 운영체제 영역을 확인해야하기 때문이다.
또한 운영체제 영역의 주소가 사용자에게 노출되면 실수나 고의적인 조작으로 운영체제 영역을 침범할 수 있다.
물리 주소를 사용하는 주소 공간을 물리 주소 공간이라고 한다.
사용자 영역이 시작되는 번지를 0번지로 변경하여 사용하는 주소 지정 방식이다.
사용자 프로세스 입장
에서 바라본 주소이며, 절대 주소와 관계없이 항상 0번지부터 시작된다.
물리 주소와 관계없이 항상 0번지부터 시작하기 때문에 편리하다.
상대 주소를 사용하는 주소 공간을 논리 주소 공간이라고 한다.
프로그램의 크기가 실제 메모리보다 클 때 전체 프로그램을 메모리에 가져오는 대신 적당한 크기로 잘라서 가져오는 기법을 메모리 오버레이
라고한다.
메모리 오버레이의 경우 프로그램을 몇 개의 모듈로 나누고 필요할 때마다 모듈을 메모리에 가져와 사용한다.
한정된 메모리에서 메모리보다 큰 프로그램의 실행이 가능해지며, 프로그램 전체가 아니라 일부만 메모리에 올라와도 실행이 가능하다.
메모리가 모자라서 좇겨난 프로세스는 저장장치의 특별한 공간에 모아두는 이러한 영역을 스왑 영역(swap space)
라고 한다.
스왑 인
: 스왑 영역에서 메모리로 데이터를 가져오는 작업.
스왑 아웃
: 스왑 영역으로 데이터를 내보내는 작업.
스왑 영역은 메모리 관리자
가 관리한다.
메모리에서 쫓겨났다가 다시 돌아가는 데이터가 머무는 곳이기 때문이다.
가변 분할 방식
: 프로세스의 크기에 다라 메모리를 나누는 방식.
가변 분할 방식
: 프로세스의 크기와 상관없이 메모리를 고정된 크기로 나누는 방식.
프로세스의 크기에 맞게 메모리가 분할되므로 메모리의 영역이 각각 다르다.
한 프로세스가 연속된 공간에 배치되기 때문에 연속 메모리 할당
이라고 한다.
프로세스를 한 덩어리로 처리하여 하나의 프로세스를 연속된 공간에 배치한다.
메모리 통합 등의 부가적인 작업이 필요하기 때문에, 메모리 관리가 복잡하다.
가상 메모리 시스템에서는 세그먼테이션 기법이라고 불린다.
가변 분할 방식은 프로세스의 바깥쪽에 작은 메모리 공간 조각이 발생하는 외부 단편화
가 발생한다.
외부 단편화를 해결하기 위해 메모리 배치 방식
이나 조각 모음
을 사용한다.
최초 배치 방식
: 단편화를 고려하지 않는 것으로, 프로세스를 메모리의 빈 공간에 배치 할 때 메모리에서 적재 가능한 공간을 순서대로 찾다가 첫 번째로 발견한 공간에 프로세스를 배치하는 방법이다.
최적 배치 방식
: 메모리의 빈 공간을 모두 확인한 후 적당한 크기 가운데 가장 작은 공간에 프로세스를 배치하는 방법이다.
최적 배치 방식
은 빈 공간을 모두 확인하는 부가적인 작업이 있지만 딱 맞는 공간을 찾을 경우 단편화가 일어나지 않는다. 하지만 딱 맞는 공간이 없을 때는 아주 작은 조각을 만들어 낸다.
최악 배치 방식
: 최적 배치와 정반대인 최악 배치는 빈 공간을 모두 확인한 후 가장 큰 공간에 프로세스를 배치하는 방식이다.
최적 배치 방식
에서는 프로세스를 배치하고 남은 공간이 작아 쓸데 없지만, 최악 배치 방식
은 프로세스를 배치하고 남은 공간이 크기 때문에 쓸모가 있다. 하지만 빈 공간의 크기가 클 때는 효과적이지만, 빈 공간의 크기가 점점 줄어들면 최적 배치 방식
처럼 작은 조각을 만들어 낸다.
앞선 메모리 배치 방식을 사용해도 단편화 현상이 발생한다. 이렇게 단편화 현상이 발생하면 이미 배치된 프로세스를 옆으로 옮겨 빈 공간들을 하나의 큰 덩어리로 만들어야 하는데 이것이 조각 모음
이다.
조각 모음의 과정
- 조각 모음을 하기 위해 이동할 프로세스의 동작을 멈춘다.
- 프로세스를 적당한 위치로 이동한다. 프로세스가 원래의 위치에서 이동하기 때문에 프로세스의 상대 주소값을 바꾼다.
- 위 작업을 다 마친 후 프로세스를 다시 시작한다.
프로세스의 크기에 상관없이 메모리가 같은 크기로 나뉘며, 큰 프로세스가 메모리에 올라오면 여러 조각으로 나뉘어 배치된다.
한 프로세스가 분산되어 배치되기 때문에 비연속 메모리 할당
이라고 한다.
메모리를 일정한 크기로 나누어 관리하기 때문에 메모리가 관리가 수월하다. 가변 분할 방식의 메모리 통합 같은 부가적인 작업을 할 필요가 없다.
하지만, 각 메모리 조각에 프로세스를 배치하고 공간이 남는 현상인 내부 단편화
가 발생한다.
가상 메모리 시스템에서는 페이징
이라고 한다.
프로 세스의 크기에 맞게 메모리를 계속해서 1/2로 자르고 프로세스를 메모리에 배치한 후, 프로세스가 종료되면 주변의 빈 조각과 합쳐서 하나의 큰 덩어리를 만드는 방식.
가변 분할 방식
과 고정 분할 방식
의 특징을 모두 가지고 있다.
가변 분할 방식
처럼 메모리가 프로세스 크기대로 나뉘며,
고정 분할 방식
처럼 하나의 구역에 다른 프로세스가 들어갈 수 없고, 내부 단편화
가 발생한다.
버디 배치 방식이 가변 분할 방식보다 효과적으로 공간을 관리할 수 있는 이유는 비슷한 크기의 덩어리가 서로 모여 있어 통합하기 쉽기 때문이다.
하지만, 효율적인 공간 관리 측면에서 보면 고정 분할 방식
과 버디 배치 방식
은 비슷한 수준이기 때문에 메모리 관리 측면에서 단순한 고정 분할 방식
을 많이 사용한다.
현재 운영체제에서는 기본적으로 고정 분할 방식을 사용하면서 일부분은 가변 분할 방식을 혼합하고 있다.
도서 : 쉽게 배우는 운영체제