메인 메모리: 컴파일이 완료된 프로그램 코드가 올라가서 실행되는 영역(RAM) 을 말한다.
-> 주기억 장치는 ROM과 RAM이 있지만, '메모리'라고 하면 일반적으로 '메인 메모리'를 말하며, RAM만을 의미한다고 한다.
보통 레지스터, 캐시, RAM
을 묶어서 본다. 실제로 프로그램이 구동될 때 이 셋을 쓰기 때문.
작업관리자에서 L1, L2, L3 캐시를 확인할 수 있다.
내 CPU가 캐시가 6MB 라는건 L3 캐시를 말하는걸까? 🤔
레지스터, 캐시메모리, RAM의 속도별 정리
- 레지스터: 얘가 제일 빠르다. CPU 계산과정의 일부로 동작한다.
- 캐시메모리: 레지스터 다음으로 빠르다. L1, L2, L3 등 OSI마냥 여러 단계로 나눠진다. 숫자가 작을수록 용량이 작고 빠르고, 숫자가 크면 용량은 크지만 느리다.
-> 하지만 L3캐시가 아무리 느려도 램보다 빠르다. 그정도로 빠른 메모리.- RAM: 얘도 빠르긴 하지만 CPU > Cache > RAM 순이라 주기억장치 안에서는 최약체.
-> 하지만 보조기억장치인 HDD, SSD에 비해서는 압도적으로 빠르다.
간단하게 정리하자면, 보조기억장치(하드나 SSD 같은 것)에 저장된 프로그램을 구동시키면 주기억장치(ROM, RAM)로 올려서 실행하는 것. 이 과정에서 CPU가 돌아가면서 내 요청에 응답을 주거나 내가 하는 작업을 저장해주거나 한다.
참고 블로그 1
참고 블로그 2
참고 블로그 3
참고 블로그 4
참고 블로그 5
CPU 주소공간과 프로세스 주소공간이 있다. 그런데, 주소공간에 대해 알려면 일단 주소부터 알아야 한다 - 컴퓨터 구조에서의 주소는 두 가지가 있다. 물리 주소와 논리 주소. 이 주소가 저장되는 공간이 주소 공간.
물리 주소: 메모리 입장에서 바라본 주소. (= 정보가 실제로 저장된 하드웨어 상의 주소. 집주소 같은 느낌)
논리 주소: CPU와 실행중인 프로세스 입장에서 바라본 주소. (= 실행중인 프로그램에게 부여된, 0번지부터 시작되는 주소를 의미)
지금 메모리에 카톡, 프라시아 전기, VS Code가 올라와있다고 하면, 각자 프로그램들은 다른 프로그램이 몇 번지(물리 주소)에 저장되어 있는 지는 알 필요가 없다. 너희 집이 어딘지 몰라도 우린 만나서 일만 하면 그만인걸.
-> 그래서 프로그램들은 모두 물리 주소가 아니라 0번지부터 시작하는 자신만을 위한 주소
인 논리 주소를 가지고 있다.
하지만 CPU가 이해하는 주소가 논리 주소라고 해도 CPU가 메모리와 상호작용 하려면 논리 주소와 물리 주소 간 변환이 필요하다.
논리주소가 물리주소로 변환 되려면 메모리 관리 장치(MMU)라는 하드웨어에 의해 수행된다.
MMU는 CPU가 만든 논리 주소에 베이스 레지스터 값을 더해 논리 주소를 물리 주소로 변환시킨다.
베이스 레지스터: 프로그램의 시작주소(=물리 주소 상의 시작주소) 값이 담긴 레지스터
ex) 현재 베이스 레지스터에 1700번이 저장되어 있고, CPU가 발생시킨 논리 주소가 888번지라면, 이 논리 주소는 물리 주소 2588 번지로 변환된다.
프로세스는 실행 중에 있는 프로그램이다. 스케줄링의 대상이 되는 작업(Task)
과 같은 의미로 쓰인다. (그래서 우리가 켜는게 '작업 관리자' 인 것)
프로세스 내부에는 최소 하나의 쓰레드를 가지고 있는데, 실제로는 쓰레드 단위로 스케줄링을 한다. (이 스케줄링은 커널이 해준다.)
하드디스크에 있는 프로그램을 실행하면 실행을 위해 메모리 할당이 이루어지고, 이렇게 할당된 메모리 공간으로 바이너리 코드가 올라가면서 이 순간부터 프로세스
라고 부른다.
프로세스는 할당받은 메모리를 자신만의 방법으로 관리하기 위해 이 공간을 어떤 구조로 관리하는데, 우리는 이 영역을 프로세스 주소 공간
이라고 부른다. 즉, 메모리에 프로세스의 주소 공간이 할당된다.
프로세스 주소 공간은 코드, 데이터, 스택 영역, 그리고 힙으로 이루어져 있다.