[운영체제(OS)] 8. 메모리 관리(Memory Management) (rebro.kr)
12) 프로세스와 메모리 할당 (tistory.com)
C언어로 작성한 소스파일은 컴파일 작업 + 링크 작업을 거쳐 기계어로 이루어진 실행파일(.exe)이 됨.
이러한 프로그램 실행파일을 '프로그램'이라고 부름.
이 실행파일에 있는 명령어들은 CPU가 직접 실행할 수 없으며, CPU가 이 명령들을 실행하려면 먼저 운영체제가 실행 파일의 명령들을 읽어서 메모리에 재구성하게됨 => 이것이 프로세스
프로세스는 세그먼트들의 집합으로 구성되어있음
(코드 세그먼트, 데이터 세그먼트, 스택 세그먼트)
1.코드 세그먼트
- 컴파일러는 C언어 소스를 기계어로 된 명령문으로 번역해서 실행파일을 만듦.
실행파일이 실행되어 프로세스가 만들어지면 이 기계어 명령들은 프로세스의 '코드 세그먼트'에 복사됨
2.데이터 세그먼트
프로그램이 시작해서 끝날 때까지 계속 사용되는 데이터는 '데이터 세그먼트'에 보관됨.
이 영역에 있는 데이터는 컴파일할 때 정해짐 (ex) 문자열 상수, 전역변수, static변수 등)
3.스택 세그먼트
프로그램 실행중에 필요한 임시 데이터를 저장하는데 사용하는 메모리 영역
(ex)동적 메모리 할당(heap), 지역변수(stack)으로 나뉨)
정적 메모리 할당
컴파일러가 C언어 소스 코드의 변수 선언 부분 번역 시
데이터 세그먼트나 스택 세그먼트에 해당 변수를 저장할 메모리 영역을 배정함
*정적 메모리 할당 : 컴파일러가 코드를 기계어로 번역하는 시점에 변수를 저장할 메모리의 위치를 배정하는 것
프로세스의 주소는 논리적 주소 + 물리적 주소로 나뉨
*논리적 주소: 가상 주소라고도 하며, CPU가 생성하는 주소임.
프로세스마다 독립적으로 가지는 주소 공간이기 때문에, 프로세스의 내부에서 사용되며, 각 프로세스마다 0부터 시작함.
*물리적 주소: 프로세스가 실행되기 위해 실제로 메모리 (RAM)에 올라가는 위치
프로세스는 논리적 주소 -> 물리적 주소로 변환되어 메모리에 올라감
Address Binding: 어떤 프로그램이 메모리의 어느 위치에, 즉 어떤 물리적 주소에 load될지를 결정하는 과정
-> binding하는 시점에 따라 분류됨
(compile Time / Load Time / Run Time)
[프로세스가 메모리에 올라가는 시점에 따른 분류]
1.Compile Time
프로세스의 물리적 주소가 컴파일 떄 정해짐
컴파일 타임 주소 할당은 프로세스 내부에서 사용하는 논리적 주소와 물리적 주소가 동일함.
2.Load Time
프로세스가 메모리의 어느 위치에 들어갈지 미리 알 수 없다면 컴파일러는 Relocatable code를 생성해야 함.
그리고 Loader 가 프로세스를 메모리에 Load하는 시점에 물리주소를 결정함
3.Execution Time(Run Time)
프로세스가 수행이 시작된 이후에 프로세스가 시작될 때 메모리 주소를 바꾸는 방법.
CPU가 주소를 참조할 떄마다 address mapping table을 이용하여 binding을 점검함
런타임 주소 할당은 MMU(Memory Management Unit)라는 하드웨어 장치를 사용하여 논리적 주소를 물리적 주소로 바꿔줌
-----
+ 가상 메모리의 개념
메모리의 구조는
CPU -> 레지스터 -> CPU캐시 -> 메인메모리 -> 보조기억장치 -> 외부기억장치
CPU로부터 멀어질수록 데이터를 저장하는 용량이 커지고, 접근하는 속도는 느려진다.
실제 물리적인 메모리 크기에 상관없이 프로세스에게 가상 메모리 공간을 제공하고,
이 공간은 프로세스 전체를 메모리에 적재하지 않아도 프로세스의 실행이 가능하게 함.
크기가 큰 프로세스를 실행시키고 싶을 때,
프로세스는 필요한 부분(페이지)만 메모리(프레임)에 올림으로서 메인메모리에 올라가는 프로세스의 크기를 줄임.
(프로세스 전체를 메모리에 올릴 필요가 없는 것)
'CS > 운영체제' 카테고리의 다른 글
도커와 컨테이너의 이해 (0) | 2023.12.20 |
---|---|
대칭키 vs 비대칭키 (1) | 2023.12.20 |
CPU 스케쥴링 알고리즘 (1) | 2023.12.07 |
뮤텍스와 세마포어 (1) | 2023.12.07 |
메모리 단편화 (1) | 2023.12.07 |