책 "쉽게 배우는 운영체제"를 참고하여 쓴 글입니다
메모리 관리의 개요
메모리 이해하기
메모리: 폰노이만 구조에서의 유일한 작업 공간
주소: 1B로 나뉜 각 영역, 데이터를 가져오거나 작업 결과를 메모리에 저장하기 위해 사용
캐시: CPU와 메모리의 속도 차이 극복 위해 CPU안에 캐시를 만들어두고 메모리의 일정부분을 미리 가져와(prefetch) 작업
메모리 관리의 이중성
메모리 관리 시스템(MMS): 메모리 관리 담당
메모리 관리의 이중성
- 프로세스 입장: 메모리 독차지
- 메모리 관리자 입장: 관리를 효율적으로
소스코드의 번역과 실행
소스코드의 번역 방식: 프로그램은 프로그래밍 언어로 만들고 프로그램은 컴파일러를 사용하여 실행 가능한 코드로 변경
- 저급언어: 기계어, 어셈블리어
- 고급언어: C언어, 자바
언어번역 프로그램
- 컴파일러: 소스코드를 기계어로 번역한 후 한꺼번에 실행
- 인터프리터: 소스코드를 한 행씩 번역하여 실행
컴파일러 방식: 변수 먼저 선언 후 코드 작성
- 소스코드-> 컴파일러 -> 목적 코드-> 링커-> 실행
- 오류발견: 심벌 테이블 사용
- 소스코드 최적화: 필요하지 않은 변수 삭제, 작업 변경
동적 라이브러리: 실행할 때 삽입되는 함수를 가진 라이브러리
DLL: 윈도우에서의 동적 라이브러리 파일
메모리 관리 작업
가져오기, 배치, 재배치
1. 가져오기: 실행할 프로세스와 데이터를 메모리로 가져오는 작업
2. 메모리 배치: 가져온 프로세스와 데이터를 메모리의 어떤 부분에 올려놓을지 결정하는 작업
- 메모리를 어떤 크기로 자를것인가
- 페이징: 메모리를 같은 크기로 자르는 것
- 세그먼테이션: 프로세스의 크기에 맞게 자르는 것
3. 메모리 재배치: 꽉 찬 메모리에 새로운 프로세스를 가져오기 위해 오래된 프로세스를 내보내는 작업
메모리 주소
CPU를 나타낼 때의 bit: CPU가 한 번에 다룰 수 있는 데이터의 최대 크기
메모리 주소 공간
- 물리 주소 공간: 하드웨어 입장에서 바라본 주소 공간
- 논리 주소 공간: 사용자 입장에서 바라본 주소 공간
논리 주소와 물리 주소
논리 주소 공간: 0번지~컴퓨터가 허용하는 최대의 주소 크기
물리 주소 공간: 0번지~실제로 설치된 메모리의 크기
메모리 관리 유닛(MMU): 논리 주소로 이루어진 프로세스를 실행하면 물리 주소로 변환하는 작업을 담당
- 재배치 레지스터: 주소 변환의 기본이 되는 주소 값을 가진 레지스터
단일 프로그래밍 환경의 메모리 할당
메모리 오버레이
메모리 오버레이: 프로그램의 크기가 실제 메모리 보다 클 때 전체 프로그램을 메모리에 가져오는 대신 적당한 크기로 잘라서 가져오는 기법
- 메모리보다 큰 프로그램을 실행할 수 있다
- 프로그램 전체가 아니라 일부만 메모리에 올라와도 실행할 수 있다.
스왑
스왑 영역: 메모리가 모자라서 쫓겨난 프로세스를 저장장치의 공간에 모아두는 영역
사용자 입장-> 스왑 영역+메모리 크기 = 전체 메모리 크기 로 인식 한다
다중 프로그래밍 환경의 메모리 할당
메모리 분할 방식
가변 분할 방식
- 프로세스 크기에 따라 메모리를 나눈다
- 연속 메모리 할당
- 장점: 프로세스를 한 덩어리로 처리하여 하나의 프로세스를 연속된 공강에 배치할 수 있다
- 단점: 메모리 관리가 복잡
고정 분할 방식
- 프로세스의 크기와 상관없이 메모리를 같은 크기로 나눈다
- 하나의 프로세스가 여러 개로 나뉘어 배치
- 비연속 메모리 할당
- 장점: 메모리 관리 쉽다
- 단점: 하나의 프로세스가 여러 곳으로 나뉠 수 있다
단편화: 프로세스들이 메모리에 올라와 작업하다가 종료되었을때 생기는 빈 공간
가변 분할 방식의 메모리 관리
프로세스의 크기에 맞춰 메모리를 할당하는 방법으로 세그먼테이션 메모리 관리 기법이라고 함
외부 단편화: 조각이 프로세스의 바깥쪽에 위치
- 메모리 배치 방식: 작은 조각이 발생하지 않도록 프로세스를 배치(전처리)
- 최초 배치: 단편화를 고려하지 않음. 프로세스를 메모리의 빈 공간에 배치할 때 메모리에서 적재 가능한 공간을 첫 번째로 발견한 공간에 프로세스를 배치
- 최적 배치: 메모리의 빈 공간을 모두 확인한 후 크기가 가장 비슷한 곳에 프로세스를 배치
- 최악 배치: 빈 공간을 모두 확인한 후 가장 큰 공간에 프로세스를 배치
- 조각 모음: 조각이 발생했을때 작은 조각들을 모아서 하나의 큰 덩어리로 만듦(후처리)
- 이동할 프로세스의 동작을 멈춤
- 프로세스를 적당한 위치로 이동, 프로세스의 논리 주소 값을 바꾼다
- 앞의 작업을 다 마친 후 프로세스를 다시 시작
고정 분할 방식의 메모리 관리
프로세스 크기에 상관없이 메모리를 같은 크기로 나누기 때문에 페이징 메모리 관리 기법이라고도 함
- 단점: 일정하게 나뉜 메모리의 크기보다 작은 프로세스가 배치될 경우 낭비되는 공간이 생긴다
- 내부 단편화: 같은 크기로 나뉜 공간의 내부에서 각 메모리 조각에 프로세스를 배치하고 공간이 남는다
- 조각 모음 할 수 없고, 남는 공간을 다른 프로세스에 배정할 수도 없다
버디 시스템
외부 단편화를 완화하는 방법
가변 분할 방식과 고정 분할 방식의 중간 구조
- 프로세스의 크기에 맞게 메모리를 반으로 자르고 프로세스를 메모리에 배치
- 나뉜 메모리의 각 구역에는 프로세스가 1개만 들어감
- 프로세스가 종료되면 주변의 빈 조각과 합쳐서 하나의 큰 덩어리를 만든다
'전공 > 운영체제' 카테고리의 다른 글
[운영체제]6장 교착 상태 (0) | 2023.04.23 |
---|---|
[운영체제]5장 프로세스 동기화 (0) | 2023.04.22 |
[운영체제]4장 CPU 스케줄링 (0) | 2023.04.16 |
[운영체제]3장 프로세스와 스레드 (0) | 2023.04.15 |
[운영체제] 2장 컴퓨터의 구조와 성능 향상 (0) | 2023.04.14 |