메모리는 폰노이만 구조의 컴퓨터에서 유일한 작업 공간이며 모든 프로그램은 메모리에 올라와야 실행
일괄처리 시스템 : 한번에 하나 씩 실행함으로 관리 단순
시분할 시스템 : 모든 응용 프로그램이 메모리에 올라와 실행하기 떄문에 복잡
운영체제도 프로그램이기 때문에 메모리에 올라와서 실행
메모리 관리의 이중성
프로세스 : 메모리를 독차지 하려고함
메모리 관리자 : 메모리는 나누어 효율적 관리
언어 번역 프로그램의 종류
컴파일러 : 소스코드를 컴퓨터가 실행할 수 있는 기계어로 번역한 후 한꺼번에 실행(C언어, 자바 등)
인터프리터 : 소스코드를 한 행씩 번역하여 실행(js,베이직 등) - 에러 찾기가 어렵고 최적화 어려움
컴파일러의 목적
오류 발견
코드 최적화(속도 up)
컴ㅍㅏ일러와 인터프리터의 차이
메모리 관리자
메모리 관리자(memory manage Unit, MMU) : 메모리를 관리를 담당하는 하드웨어
메모리 관리자의 작업
가져오기 작업 : 프로세스와 데이터를 메모리로 가져옴
배치 작업 : 가져온 프로세스와 데이터를 메모리의 어떤부분에 올려놓을지 결정
재배치 작업 : 꽉 차있는 메모리에 새로운 프로세스를 가져오기 위해 오래된 프로세스를 내보냄
메모리 관리자의 정책
가져오기 정책 : 프로세스가 필요로 하는 데이터를 언제 메모리로 가져올리 결정
배치 정책 : 가져온 프로세스를 메모리의 어떤 위치에 올려놓을지 결정
재배치 정책 : 메모리가 꽉 찼을 때 메모리 내에 있는 어떤 프로세스를 내보낼지 결정
32bit cpu와 64bit cpu 차이
cpu의 비트
한번에 다룰 수 있는 데이터의 최대 크기 - word라고 부름
32bit cpu는 한번에 32bit까지 다룰수 있(1word = 32bit)
32bit cpu 레지스터 크기는 32bit, 산술 논리연산장치, 대역폭도 32bit
32bit cpu의 메모리 크기
2의 32승(약 4GB)
64bit cpu의 메모리 크기
2의 64승(거의 무한대의 가까운 메모리 사용)
결론 : 메모리의 공간이 달라짐(차이)
물리 주소 공간과 논리 주소 공간
물리주소공간 : 하드웨어 입장에서 바라본 주소 공간으로 컴퓨터마다 크기가 다름
논리주소공간 : 사용자 입장에서 바라본 주소 공간
절대주소와 상대주소
단순 메모리 구조
일괄 처리 시스템
메모리를 운영체제와 사용자 영역으로 나누어 관리
단순 메모리 구조에서 사용자 프로세스 적재
사용자 프로세스는 운영체제 영역을 피하여 메모리를 적재
사용자 프로세스가 운영체제의 크기에 따라 매번 적재되는 주소가 달라지는 것은 번거롭다.
그래서 사용자 메모리의 최상위 부터 사용 주소변경이 복잡해 잘안씀
경제 레지스터
운영체제 영역과 사용자 영역 경제 지점의 주소를 가진 레지스터
사용자 영역과 운영체제영역의 침범을 막음
메모리 관리자는 사용자가 작업을 요청 할 때마다 경제 레지스터의 값을 벗어나는지를 검사,
벗어나는 프로세스가 있다면 프로세스 종료
절대 주소(absolute address)
실제 물리 주소를 가르키는 주소
메모리 주소 레지스터가 사용하는 주소
컴퓨터에 꽂힌 램 메모리의 실제 주소
상대 주소(relative address)
사용자 영역이 사작되는 번지를 0번지로 변경하여 사용하는 주소
사용자 프로세스 입장에서 바라본 주소
절대 주소와 관계없이 항상 0번지 부터 시작
프로세스 입장에서 상대 주소가 사용할 수 없는 영역의 위치를 알 필요가 없고, 주소가 항상 0번지부터 시작하기 때문에 편리
절대 주소와 상대 주소의 차이
논리 주소 공간은 상대 주소를 사용하는 주소 공간
물리 주소 공간은 절대 주소를 사용하는 주소 공간
상대 주소를 절대주소로 변환하는 과정
메모리 관리자는 사용자 프로세스가 상대주소를 사용하여 메모리에 접근할 때마다 상대 주소값에 재배치 레지스터 값을 더하여 절대 주소를 구함
재배치 레지스터는 주소변환의 기본이 되는 주소값을 가진 레지스터로 메모리에서 사용자 영역의 시작 주소값이 저장
메모리 오버레이
프로그램의 크기가 물리메모리보다 클면 프로그램을 짤라서 가져오는 기법
사용하면 물리 메모리보다 더 큰 프로그램 실행 가능
메모리 오버레이의 동작 방식
프로그램이 실행되면 필요한 모듈만 메모리에 올라와서 실행
어떤 모듈을 가져오거나 내보낼지는 CPU레지스터 중 하나인 프로그램카운터(PC)가 결정
프로그램 카운터는 앞으로 실행할 명령어의 위치를 가르키는 레지스터
해당 모듈이 메모리에 없으면 메모리관리자에서 요청해 가져오게함
메모리 오버레이의 의미
한정된 메모리에서 메모리보다 큰 프로그램 실행 가능
프로그램 전체가 아니라 일부만 메모리에 올라와도 실행 가능
스왑
스왑영역(swap area)
메모리가 모자라서 쫒어난 프로세스를 저장장치의 특별한 공간에 모아두는 영역
메모리에서 쫒겨났다가 다시 돌아가는 데이터가 머무는 곳이기 때문에 저장장치는 장소만 빌려주고 메모리 관리자가 관리
사용자는 실제 메모리의 크기와 스왑 영역의 크기를 합쳐서 전체 메모리로 인식하고 사용
swap -> 메모리 = 스왑인
메모리 -> swap = 스왑아웃
다중 프로그래밍 환경에서의 메모리 할당
메모리 분할 방식
가변 분할 방식 : 프로세스의 크기에 따라 메모리를 나누는것
고정 분할 방식 : 프로세스의 크기와 상관없이 메모리를 같은 크기로 나누는 것
메모리 분할 방식의 구현
가변 분할 방식
-프로세스의 크기에 맞게 메모리가 분할
-메모리의 영역이 각각 다름
-연속 메모리 할당
고정 분할 방식
-프로세스의 크기에 상관없이 메모리가 같은 크기로 나뉨
-큰 프로세스가 메모리에 올라오면 여러 조각으로 나누어 배치
-비연속 메모리 할당
가변 분할 방식의 장단점
장점 : 프로세스를 한 덩어리로 처리하여 하나의 프로세스를 연속된 공간에 배치
단점 : 비어 있는 공간을 하나로 합쳐야 하며(외부 단편화), 이 과정에서 다른 프로세스의 자리고 옮겨야 하므로 메모리 관리가 복잡함
외부 단편화 :
외부 단편화 해결방법 :
메모리 배치 방식- 작은 조간이 발생하지 않도록 프로세스 배치
1 . 최초 배치:프로세스를 메모리의 빈공간에 배치할 때 메모리에서 적재 가능한 공간을 순 서대로 찾다가 첫 번째로 발견한 공간에 프로세스를 배치하는 방법
2 . 최적 배치 : 모메리의 빈 공간을 모두 확인한 후 적당한 크기 가운데 가장 작은 공간에 프로세스를 배치하는 방법
최악 배치 : 빈 공간을 모두 확인한 후 가장 큰 공간에 프로세스를 배치하느ㅜㄴ 방법
조각모음 : 조각이 발생 했을 때 작은 조각들을 모아서 하나의 큰 덩어리로 만드는 것
고정 분할 방식의 장단점
장점 : 메모리를 일정한 크기로 나누어 관리하기 때문에 메모리 관리가 수월(가변 분할 방식의 메모리 통합 같은 부가적인 작업을 할 필요가 없음)