1.메모리 관리의 개요
1)메모리 관리의 개념과 정책
:메모리 관리는 프로세스들을 위해 메모리 할당, 제거, 보호하는 활동
<메모리 관리를 위한 3대 정책 >
[1].반입정책(fetch policy)
프로세스를 언제 메모리로 적재할 것 인지를 결정하는 행위
[1].1 요구 반입 (demanded fetch)
-사용자 또는 프로세스의 요구가 있을때 주기억 장치로 적재하는 정책으로 정확하지만 시간 지연 발생
[1].2 예상 반입 (anticipatory fetch)
- 사용자 또는 프로세스의 요구가 있기전에 필요한 것을 미리 보고 미리 주기억장치에 적재하는 정책으로
시간을 감소시키지만 부정확함
[2].배치정책(placement policy)
주기억 장치의 어느 공간으로 적재할 것인지 결정하는 행위
[3].재배치 정책(replacement policy)
주기억장치에 빈 공간이 없을 때 어느 프로세스를 보조기억 장치에 보내고 빈 공간을 확보할 것인지 결정하는 행위
2)메모리의 구조
<메모리 해석에 대한 두가지 관점>
[1].물리적 주소 :실제 데이터나 프로그램이 저장되는 공간
[2].논리적 주소: 프로그래머가 프로그래밍에 사용하는 공간
:목적 코드가 저장된 공간과 프로그램에서 사용하는 자료구조
참고:그림으로 배우는 구조와 원리 (운영체제 개정 3판 )
[주소 바인딩(Address binding)]
논리적 주소(logical address)를 실행되기 위해서는 물리적 주소로 사상하는 것
중앙처리장치가 생성하는 주소를 논리적 주소라 하며
기억장치가 취급하는 주소를 물리적 주소라 한다.
논리적주소 물리적주소
-프로그램,가상메모리 -하드웨어
(904) (15094)
cpu ------------> 기억장치관리기(mmu) (+15000) --------------------->메모리
출처: http://itdexter.tistory.com/403 [IT_Dexter]
*가상메모리?
메모리로서 실제 존재하지는 않지만 사용자에게 있어 메모리로써 역할을 하는 가상의 메모리
다시말해, 프로그램이 수용될때는 가상 메모리의 크기에 맞춰 수용 된다.
그러나, 가상메모리에 수용된 프로그램이 실행될때는 실제 메모리를 필요로 하게 되는 것이다.
*가상메모리와 실제 메모리의 관계?
가상메모리안에 프로그램이 실행될때는 실제 메모리에 머물러있어야한다.
그러나 프로그램 실행시 반드시 프로그램 전체가 실제 메모리에 있을 필요가 없다.
실행되어야 하는 부분만이 실제 메모리에 옮겨져있으면 되는 것이므로 실제 메모리 용량보다 큰 프로그램이 가상 메모리 등장 으로 실행 가능 한 것
*mapping 이란 ? (=논리적 주소와 물리적 주소의 연결 )
가상메모리에 프로그램이 실행될 경우 어떤 과정을 통해 실제 메모리로 옮겨 지게 되는데 이를 mapping이라고 한다.
현재 mapping은 mmu(=메모리 관리 장치)라는 하드웨어에 의해 지원되고 있다.
-메모리 관리 방식에 따라 여러가지 방식으로 구분
1>고정분할
2>동적분할
3>페이징
4>세그먼트
5>페이지화된 세그먼트 방식 등
*세그먼트(segment)?
-각 메모리 블록의 크기가 같은 페이지와는 달리 세그먼트는 논리적 의미에 부합되도록 서로의 크기가 다르며 각각의 세그먼 트들은 연속적인 공간에 저장되어있다.
-각 세그먼트는 쪼개지지 않고, 하나의 블록으로 보조기억 장치에서 메모리의 연속적인 가용 공간에 적재된다.
*바인딩 :매핑 시켜주는 작업
*동적 적재
-바인딩을 최대한 늦춰 실행 직전에 주소 확정하는 메모리 효율적으로 운영방법
-모든 루틴을 메모리에 적재하지 않고 교체 가능한 형태로 디스크에 저장
-메인 프로그램만 먼저 메모리에 적재하여 수행
-사용하지 않을 루틴을 메모리에 적재하지 않으므로 메모리 효율적으로 사용
-오류가 발생하기도 하지만 프로그램 전체양이 많을때 더 유용
*중첩 (오버레이)
-실행 하려는 프로그램이 메모리보다 클때는 당장 필요하지 않는 프로그램의 일부는 중첩(오버레이)으로 설정 가능
-운영체제 영역과 메모리 일부 영역에는 프로그램 실행에 꼭 필요한 명령어 와 데이터만 저장, 나머지 중첩 영ㅇ역에 필요할 때 호출하여 적재하는 방법
참고::http://l2men.tistory.com/21
참고:그림으로 배우는 구조와 원리 (운영체제 개정 3판 )
*스와핑 (프로세스 교체 )
: 프로세서 할당이 끝나고 수행 완료된 프로세스는 보조기억 장치로 보내고(스왑 아웃), 새롭게 시작하는 프로세스는 메모리에 적재(스왑인).프로세스는 메모리에 있어야 수행되므로 일시적으로 디스크로 이동했다가 메모리로 되돌아와 다시 수행 기능
참고:그림으로 배우는 구조와 원리 (운영체제 개정 3판 )
2.연속 메모리 할당
참고:그림으로 배우는 구조와 원리 (운영체제 개정 3판 )
1)단일 프로그래밍 환경에서 연속 메모리 할당
참고:그림으로 배우는 구조와 원리 (운영체제 개정 3판 )
2)다중 프로그래밍 환경에서 연속 메모리 할당
*고정분할다중 프로그래밍:
- 메모리에 여러개의 프로세스를 수용하면서도 같은 메모리관리르 효과적으로 수행하기 위해 제일 쉽게 생각할수 있는 방법이 미리 n개의 영역으로 분할 해 놓는것
-각 분할의 크기가 동일하므로 별다른 배치전략이 필요없다. 빈곳이 있으면 거기에 새로운 프로세스를 배치하면된다.
-문제점: 분할의 크기가 고정되어있으므로 그 크기를 넘어서는 프로세스는 실행될수 없고, 그 보다 작다면 분할 내의 나머지 공간은 사용되지 못한다.
빠른이해원한다면 http://raisonde.tistory.com/513
*내부 단편화?
파일에 기억 장소를 할당할 경우, 모든 기본적인 입출력이 블록 단위로 이루어지므로 블록 단위로 유지하기 위해서 할당되어 낭비된 바이트
*외부단편화 ?
기억 장치의 빈 공간 또는 자료가 여러 개의 조각으로 나뉘는 현상을 말한다. 이 현상은 기억장치의 사용 가능한 공간을 줄이거나, 읽기와 쓰기의 수행속도를 늦추는 문제점을 야기한다.
*메모리 압축 방법
**참고:그림으로 배우는 구조와 원리 (운영체제 개정 3판 )
3)다중 프로그래밍 환경의 버디 시스템
3.분산 메모리 할당 1:페이징
1)페이징의 개념
페이징 방식에서는 가상메모리상의 주소공간을 일정한 크기의 페이지로 분할하게 되는데 실제 메모리 또한 가상메모리와 같 은 크기로 페이지를 분할하게 된다.
*page table 이란?
페이지 테이블은 가상 메모리의 페이지 넘버와 실제메모리의 페이지 프레임이 하나의 순서쌍으로 저장하고 있는 도표 .
이러한 도표를 사용하여 프로그램에서 사용되는 가상주소를 실제메모리주소로 변환하게 된다.
3)다중 단계 페이징 시스템의 구조와 원리
4)페이지 테이블의 구현
[전용 레지스터 사용]
5)공유 페이지
6)페이지에서 보호
4.분산 메모리 할당 2:세그먼테이션
1)세크먼테이션의 개념
-페이징 기법에서는 가상메모리를 같은 크기의 블록으로 분할했으나, 세그멘테이션 기법에서는 가상메모리를 서로 크기가 다른 논리적 단위인 세그먼트로 분할하고 메모리르 할당
하여 주소 변환을 하게된다.
-세그먼트들의 크기가 서로 다르기때문에 메모리를 페이징 기법처럼 미리 분할해 둘수 없고,메모리에 적재될때 빈공간을 찾아 할당하는 사용자 관점의 가상 메모리 관리 기법이다.
2)세그먼테이션에서 하드웨어 구조와 원리
3)세그먼트 공유
4)페이징과 세그먼테이션 비교
5)페이지화된 세그먼테이션
참고:그림으로 배우는 구조와 원리 (운영체제 개정 3판 )