220117
현대 운영체제들은 프로세스를 실행할 때 마다 프로세스 메모리 모델을 생성해 관리한다. 메모리 관리 모델에 대한 지식과 동작 방식을 이해하면 프로그래밍 언어 동작과 처리 흐름을 이해하는 데 도움이 된다.
램 RAM : Random Access Memory 라는 뜻이다.
스택의 장점 : (힙에 비해) 속도가 빠름, 직접 메모리 해제를 할 필요가 없음
스택의 단점 : 메모리 크기의 제한, 지역변수만 액세스 가능
동적으로 할당된 데이터들이 저장되는 공간
malloc
, calloc
으로 메모리 할당힙의 장점 : 메모리 크기 제한 없음, 모든 함수에서 액세스 가능 (전역 범위)
힙의 단점 : (스택에 비해) 속도가 느림, 메모리를 직접 관리해야 함(메모리 누수 위험)
프로그램에 사용될 변수들 저장 - 전역변수 또는 static 변수
우리가 작성한 소스코드가 저장되는 공간
힙과 스택은 같은 메모리 영역을 공유함.
0x00000000
...)0xffffffff
...)스위프트에서 사용되는 힙 메모리 관리 방식.
클래스 인스턴스가 더 이상 필요하지 않을 떄 (= 참조되지 않을 때) 메모리를 자동으로 해제해 준다.
메모리의 RC(Reference Count, 참조 횟수)를 계산해, 참조 횟수가 0이 되면 해제함.
컴퓨터 구조의 3요소 : CPU, 메모레, 입출력장치(I/O)
모든 하드웨어에 들어 있는 작은 시계.
수정체가 흔들리며 주기를 반복하는 역할
클락의 1주기마다 일을 한다. 즉 클락이 작업 단위이다.
클락 주기 : 오르락 + 내리락 이 1 주기임.
단위 : Hz(헤르츠). 1Hz = 오르락+내리락.
Hz가 높다 = 1초에 더 많은 일을 한다 = 더 성능이 좋다.
컴파일된 코드는 메모리에 올라간다.
메모리에는 명령어 저장 영역과 값 저장 영역이 나누어져 있다
메모리 1600MHz : 버스의 크기(1초에 얼마나 많은 데이터를 CPU와 주고받을 수 있느냐)
Central Process Unit?
CPU의 저장장치인 레지스터가 있고,
1클락마다 메모리에서 레지스터로 코드를 가져와 처리하는 역할을 한다.
레지스터 크기에 따라(bit) 몇 비트 CPU인지 결정된다 - 32bit, 64bit CPU
CPU에는 매우 다양한 종류의 레지스터가 존재한다. (보통 몇십개가 존재)
CPU가 처리하는 작업 단위. (명령.)
명령어 + 오퍼랜드 로 IR이 구성된다.
CPU 입장에서 가장 중요한 명령어는
즉 변수를 많이 쓸수록 CPU 작업이 느려진다.
프로그램 하나가 실행될 때, 운영체제가 메모리를 할당한다.
함수 호출
힙 공간은 썼다 지웠다 하는 곳인데, 크고 작은 것을 섞어서 저장하다 보면 사용 효율이 떨어진다.
그래서 처음부터 "리전"을 나눠 작은/중간/큰 크기의 대상을 저장한다.
프로그램을 많이 돌리려면 메모리가 많이 필요한데, 실제 물리 메모리는 턱없이 부족하다.
그래서
현재 실행 중인 프로세스에 필요한 것만 메모리만 올려 사용한다.
현재 실행 중이지 않은 프로세스에 필요한 것들은 가상 메모리에 페이지 단위로 따로 저장해 준다. - 실제 물리 메모리가 아닌 별도 공간에 저장
빠르게 움직이는 클락 주기에 맞춰 메모리에 올라가는 작업들을 매 순간 바꿔치기 하기 때문에, 인간은 동시에 실행되고 있다고 느끼는 것이다.
힙과 스택은 한 메모리를 공유한다.
둘 다 프로그램을 죽이는 오류이므로, 발생하지 않도록 해야 한다.
메모리를 적게 쓸 수 있는 방법으로 동작하도록 메모리 사용량 확인과 알고리즘 공부가 필요하다.
힙 영역이 사용되는 과정.. (C언어 기준)
malloc()
: 메모리에(m) 할당(alloc) 하는 함수free()
: 메모리에서 해제하는 함수malloc()
을 통해 어떤 변수 사용을 위해 메모리 공간을 일정 크기만큼 할당받는다.free()
를 통해 할당받았던 메모리 공간을 해제한다.메모리 관리 방식의 하나.
각 프로그램에 물리적 메모리 주소가 아닌 가상의 메모리 주소를 주는 방식.
프레임 Frame : 물리 메모리의 단위 (실제 메모리 블록)
페이지 Page : 가상 메모리의 단위
세그먼트 Segment : 프로그램의 논리적 단위
페이지 사이즈 = 프레임 사이즈 (32bit 기준 4kb)
실제 메모리 관리에서는 페이징 + 세그먼테이션 기법을 혼용함.
Memory Management Unit
: 가상 주소를 물리 주소로 변환하는 작업을 수행하는 하드웨어.
CPU 코어 내부에 있다.
가상 메모리 주소를 물리 메모리 주소로 변환해 주는 표.
페이지 테이블을 이용해 연속적 처리가 가능해진다.