국민대학교 황선태 교수님의 운영체제 수업을 듣고, 수업내용을 정리할 목적으로 작성하는 글입니다.
Load 연산은 말 그대로 메모리에서 CPU의 레지스터로 데이터를 가져오는 연산이다.
Store 연산은 Load연산과 반대로 CPU에서 연산을 마친 데이터를 알맞은 주소에 저장하는 과정이다.
1. 전역변수(초기화 여부에 따라 다름)
초기화 되지 않은 전역변수는 bss에 의해 0으로 초기화하고, 초기화 된 전역변수는 개발자가 설정한 값으로 초기화 되어 메모리에 올라간다.
2. 지역변수
지역변수 및 매개변수 와 함수 호출에 필요한 데이터들은 스택에 저장된다.
3. 동적할당된 변수
C언어에서 malloc, java에서 new 연산자로 런타임동안 동적으로 할당되는 변수들은 모두 힙에 저장된다.
텍스트, 초기화된 자료, 초기화되지 않은 자료 힙과 스택의 크기 등이 프로그램 화일에 포함된다.프로그램 화일은 프로그램이 실행되는데 필요한 여러 요소를 담고있다.
- 소스코드를 컴파일한 기계어 코드.
- 프로그램에서 사용하는 정적(static) 변수와 전역(global) 변수
이 밖에도 링커정보, 운영체제 정보, 여러 리소스 등을 담고있다.
여기서 설명하는 Loading은 위에서 언급했던 Load연산과는 다르다. 여기서 의 Loading은 보조기억장치(hdd/ssd)에 저장된 프로그램 실행파일을 메모리에 올리는 과정으로, 메모리에 저장된 데이터를 cpu의 레지스터에 가져오는 load연산과는 차이가 있다.
우리가 사용하는 컴퓨터는 수 많은 프로그램이 동시에 돌아가고 있다. 이 수 많은 프로그램들을 메모리에 올리는 과정에서 충돌이 일어날 수 있는데, 얘를들어 두개의 프로그램이 같은 200번 주소에 올라가려고 했다면 충돌이 발생 할 것이다.
이런 상황을 방지하기 위해서 상대적인 주소로 계속 재 배치하는 과정을 relocation 이라고 한다.