메모리 관리의 복잡성
- 메모리 관리는 메모리 관리 시스템이 담당한다.
메모리 관리의 이중성
- 메모리 관리의 이중성은 프로세스 입장에서 작업의 편리함과 관리자 입장에서 관리의 편리함이 충돌을 일으키는 것
소스코드의 번역과 실행
- 컴파일러
- 소스코드를 컴퓨터가 실행할 수 있는 기계어로 번역한 후 한꺼번에 실행한다. C언어나 자바가 속한다.
- 인터프리터
- 소스코드를 한 행씩 번역하여 실행한다. 자바스크립트가 있다.
- 컴파일러의 목적
- 오류 발견, 코드 최적화를 위함이며, 실행하기 전에 코드를 점검하여 작고 빠른 실행 파일을 만들 수 있게 해준다.
- 컴파일 과정
- 사용자가 작성한 소스코드를 컴파일러가 1차로 번역해서 목적 코드(0 과 1)를 생성한다.
- 그 후 링커가 라이브러리에 있는 코드를 목적 코드에 삽입하여 최종 실행 파일을 만든다.
- 실행파일을 실행한다.
메모리 관리자의 역할
- 메모리 관리자
- 메모리 관리 유닛이라는 하드웨어
- 가져오기 : 프로세스와 데이터를 메모리로 가져오는 작업이다.
- 배치 : 가져온 프로세스와 데이터를 메모리의 어떤 부분에 놓을지 결정하는 작업이다.
- 재배치 : 메모리가 꽉 차있어 새로운 프로세스를 위해 오래된 프로세스를 내보내는 작업.
메모리 주소
32bit CPU와 64bit CPU의 차이
- CPU의 비트
- 한 번에 다룰 수 있는 데이터의 최대 크기
- 32bit CPU 내의 레지스터 크기는 전부 32bit이고 ALU가 처리 가능한 범위, 버스의 크기, 대역폭 모두 32bit이다.
- 메모리 주소 공간도 32bit이므로 최대 2^32 약 4GB를 사용할 수 있다.
- 64bit CPU는 2^64이므로 약 16777216TB를 사용할 수있다. 거의 무한대에 가깝다.
- 메모리의 주소 공간 = 물리 주소 공간
- 사용자 입장에서 바라본 주소 공간 = 논리 주소 공간
절대 주소와 상대 주소
- 메모리는 단순하게 운영체제 영역과 사용자 영역으로 나뉜다.
- 이때 사용자 영역이 운영체제 영역으로 침범하지 않도록 경계 레지스터가 경계 지점의 주소를 저장하여, 값을 벗어나는지 검사하고, 만약 벗어난다면 해당 프로세스를 종료한다.
- 만약 사용자 프로세스가 400번지부터 시작한다면 이 400번지는 절대 주소이다.
- 즉 실제 물리 주소를 가리키는 절대 주소는 메모리 관리자 입장에서 본 주소이다.
- 그러나 사용자 입장에서 절대 주소를 알 필요는 없다.
- 따라서 상대주소는 사용자 영역이 시작되는 400번지를 0번지로 변경하여 사용하는 주소 지정 방식이다. 상대 주소는 항상 0번지부터 시작하여 사용자가 사용하기 편리하다.
- 이러한 변환 작업은 메모리 관리자가 매우 빠르게 처리한다.
- 메모리 관리자 내에 재배치 레지스터가 있는데 상대 주소값에 재배치 레지스터 값을 더하여 절대 주소를 구한다.
- 예를 들어 사용자가 60번지의 메모리에 접근하려하면 재배치 레지스터 400의 값을 더해 460번지의 메모리에 접근하는 것이다.
메모리 오버레이
- 프로그램의 크기가 실제 메모리 크기보다 클 떄 전체 프로그램을 메모리에 가져오는 대신, 적당한 크기로 잘라서 가져오는 기법
- 프로그램을 몇 개의 모듈로 나누고 필요할 때마다 모듈을 메모리에 가져와서 사용하는 것
- 한정된 메모리에서 더 큰 프로그램의 실행이 가능하고, 프로그램의 일부만 메모리에 올라와도 실행이 가능하도록 한다는 점에서 중요한 의미가 있다.
스왑
- 스왑영역
- 메모리가 모자라서 쫓겨난 프로세스를 모아두는 저장장치의 영역
- 스왑인
- 스왑 영역에서 메모리 데이터를 가져오는 작업
- 스왑 아웃
- 메모리에서 스왑 영역으로 데이터를 내보내는 작업
다중 프로그래밍 환경에서의 메모리 할당
메모리 분할 방식
- 가변 분할 방식
- 프로세스의 크기에 따라 메모리를 나눈다.
- 한 프로세스가 연속된 공간에 배치되기 때문에 연속 메모리 할당이라고 부른다.
- 장점
- 프로세스를 한 덩어리로 처리하여 하나의 프로세스를 연속된 공간에 배치
- 단점
- 메모리 관리가 복잡하다
- 고정 분할 방식
- 프로세스의 크기에 상관없이 메모리를 같은 크기로 나누는 것이다.
- 큰 프로세스가 메모리에 올라오면 여러 조각으로 나뉜다. 따라서 비연속 메모리 할당이라고 한다.
- 장점
- 메모리를 일정한 크기로 나눠 관리하기 떄문에 메모리 관리가 수월하다.
- 단점
- 쓸모없는 공간으로 인해 메모리 낭비가 발생한다.(내부 단편화)
가변 분할 방식의 메모리 관리
- 가상 메모리 시스템에서는 세그멘테이션 기법이라고도 한다.
- 예
- 물리 메모리에 프로세스 A,B,C,D,E를 배치한 후 B와 D가 종료한다고 생각해보자.
- 18KB와 17KB의 빈 공간이 생긴다.
- 그 후에 18KB보다 큰 프로세스가 들어오면 적당한 공간이 없어 메모리를 배정하지 못하는데,
- 이런 작은 빈 공간을 외부 단편화라고 한다.
- 프로세스의 바깥쪽에 조각이 발생하기 때문에 외부 단편화라고 한다.
- 문제 해결
- 메모리 배치 방식
- 작은 조각이 발생하지 않도록 프로세스를 배치하는 것.
- 최초 배치(first fit)
- 첫 번째로 발견한 공간에 프로세스를 배치하는 방법.
- 최적 배치(best fit)
- 배치가 가능한 공간 중에서 가장 크기가 작은 공간에 배치하는 방법
- 최악 배치(worst fit)
- 가장 크기가 큰 공간에 배치하는 방법.
- 메모리 배치 방식
- 조각 모음 : 단편화가 발생하면 이미 배치된 프로세스를 옮겨서 빈 공간들을 하나의 큰 덩어리로 만드는 작업
고장 분할 방식의 메모리 관리
- 가상 메모리 시스템에서는 페이징이라고도 한다.
- 예
- 프로세스 A가 38KB이고, 분할된 크기를 20KB, 18KB라고 하자.
- 18KB를 메모리에 할당하면 2KB의 남은 공간이 생긴다.
- 이처럼 메모리 조각에 프로세스를 배치하고 남는 공간이 생기는데 이를 내부 단편화라고 한다.
- 같은 크기로 나뉜 공간 내부에서 발생하기 때문에 내부 단편화라고 한다.
'CS > 운영체제' 카테고리의 다른 글
[운영체제] 가상 메모리 관리 / 페이지 교체 알고리즘 / 스레싱 / 프레임 (0) | 2024.03.26 |
---|---|
[운영체제] 가상 메모리 / 페이징 / 세그먼테이션 (0) | 2024.03.26 |
[운영체제] 교착 상태 (0) | 2024.03.26 |
[운영체제] 프로세스 동기화 (0) | 2024.03.26 |
[운영체제] CPU 스케줄링 (1) | 2024.03.26 |