자바 언어로 우리는 프로그램(명령어, 코드 및 정적인 데이터의 묶음이며 아직 실행되지 않은 상태를 의미)을 짠다.
public static void main(String[] args) {
log.info("My First Programs");
}
하나의 애플리케이션에 있는 데이터들이 메모리에 로드, 프로세스 생성
compiler가 바이트 코드로 쓰여진 class 파일을 만들고 interpreter가 한줄 씩 해석, -> 기계어로 번역
프로그램이 메모리에 적재되는 순간 프로스세가 된다고 보면 된다.
메인 메모리에 로드된 데이터들이 CPU와 연산에 의해 프로그램 실행 동작
CPU는 모든 실행이 되는 명령과 데이터들을 메인 메모리에서 가져옴
프로세스는 실행을 위해 메모리에 적재되면 프로세스를 위한 독자적 주소 공간이 생김 = Logical Address
논리주소는 프로세스마다 독립적 할당. 프로세스의 메모리 영역에 할당된 주소들은 논리주소.
웹 애플리케이션에서 작성한 코드들이 프로세스의 메모리 영역에 할당, 각 논리주소 부여. 그리고 웹 애플리케이션이 실행, 메모리에 적재되면 기억장치 메모리의 주소도 있기 때문에 할당되는 주소를 physical address라고 함
논리 주소황 물리 주소를 사용, 서로 주소 값이 매칭 되지 않아 문제 발생
주소 바인딩은 프로그램의 명령어와 데이터를 메모리에 적재할 때,, 메모리 주소를 결정
프로그램에서 사요하는 심블(전역변수, 함수 등) 메모리의 어떤 주소가 있어야 실행 될때 그 주소를 사용, (읽기/쓰기) 할 수 있음
메모리 번지를 언제 결정하느냐에 따라 세가지 방식이 나뉨

지금 현재 Logical Addrss에서 0x00100000 ~ 0x00198000 주소 범위에 func() 함수 내의 데이터와 변수 등이 저장 그리고 Physical address 또한 같은 주소를 부여
컴파일 시간 바인딩은 논리주소와 물리 주소 동일

로딩할때 물리 주소를 결정하는 방식. 따라서 프로그램 내부에서 사용하는 주소랑 물리주소 다름
적재 시간 바인딩에서는 프로그램 내부에서 상대 주소라는 개념을 도입해서 사용.
data 0 번지 부터 98000번지에 위치 Ram 로드 될 때 위치가 10만 번지 로드 => 상대 주소에 10만의 값만 더해 주면 됨.
적재 시간 바인딩의 단점은 프로그램 안에 코득들과 데이터, 명령어들이 많은데 이것을 로딩할 때마다 주소를 결정하게 되면 메모리를 로딩할때 시간이 오래 걸린다는 단점. 실제로는 잘 사용되지 않음

실행시 물리주소를 변경
실행시간 바인딩의 특징은 연산 더하기, 더하기 연산을 하는 위치를 보면 하드웨어. 즉 더하기 연산을 수행하기 위한 하드웨어가 별도로 필요 MMU (CPU 코어 안에 탑재, 실제 주소 -> 메모리 주소)
하드웨어 성능이 좋아져 실행 시간 바인딩 하더라도 성능 Issue는 큰 문제 없음
컴파일 타임, 적재 시간, 실행 시간 방식 전부 프로세스가 실행되기 위해 프로세스 전체가 메모리 위에 올라와야 함. 이 경우 프로세스의 크기가 메모리의 크기보다 크면 안됨
메모리 공간을 보다 효율적으로 사용 -> 동적 적재 방식 등장
동적 적재 에서 각 루틴은 실제 호출 되기 전까지 메모리에 올라가지 않고 재배치한 상태로 디스크에서 대기
자바 언어에서 객체를 만들 때 사용되는 방식이 바로 동적 적재(동적 로딩) 방식
필요한 시점에 메모리로 로딩해서 사용
루틴이 필요한 경우에만 적재
프로세스가 실행되기 위해서는 메모리에 있어야 하지만, 프로세스는 실행 중 임시로 예비 저장 장치로 내보내어 졌다가 실행을 계속 하기 위해 다시 메모리로 돌아 올 수 있음
-> backup store 에는 하드디스크나, ssd 같은 storage 를 의미

20개 최대 프로세스를 올릴 수 있다고 가정, 메모리가 꽉 찬 상태에서 21번째의 프로세스 실행, 이미 실행 중인 프로세스를 잠시 backup store 저장, 빈 공간에 새로운 프로세스를 집어 넣는다.
처음 실행 준비가 된 모든 프로세스들은 준비 리스트에 들어가 있음, CPU 스케줄러가 다시 실행할 프로세스를 선정시 디스패처를 호출, 디스패처는 준비 리스트에 있는 다음 프로세스가 메모리에 올라와 잇는지 확인. 만약 올라와 있지 않다면 디스크에서 불러들인다. 만약 실행 시킬 프로세스를 위한 공간이 메모리에 없다면 공간을 만들기 위해 현재 메모리에 올라와 앗는 프로세스를 내보내고 실행시킬 프로세스를 메모리에 적재
프로세스의 Context-Swithcing 비용은 크기 때문에 현대 운영체제에서는 스와핑이 사용되지 않는다. 대신 스와핑을 변형한 방식을 사용한다고 한다.(Ex. UNIX, Linux, Windows 등) 이 부분에서는 다루지 않을 것
스와핑은 swap-in, swap-out 의 단위가 프로세스(process)인 반면, VMM 은 페이징(paging)이라는 단위로 스와핑을 실시