컴퓨터 시스템에서 메인 메모리와 같은 실리콘 메모리 칩은 빠른 엑세스 속도를 가지고 있지만 저장 비트 대비 비싼 비용으로 인해서 자기 디스크 기반의 보조 메모리를 함께 사용하고 있다. 자기 디스크의 경우 많은 데이터를 저장할 수 있지만 물리적인 한계로 인해 데이터에 접근하는 속도가 상대적으로 느리다. 이를 해결하기 위해서 디스크는 페이지 단위로 데이터를 저장하고, 효율적인 관리를 위해서 B-Tree와 같은 자료구조가 사용된다. B-Tree는 결정된 페이지으 크기에 따라 디스크의 접근 횟수를 최소화하여 디스크의 성능을 높인다.
프로그램 | 프로세스 | 쓰레드 |
---|---|---|
어떤 작업을 수행하기 위한 파일. 코드 덩어리. | 프로그램의 인스턴스로, 자체적인 주소 공간, 메모리, 데이터 스택 및 다른 시스템 자원을 가진다. 프로그램을 실행한 작업. | 프로세스의 작업 단위로 프로세스의 자원 단위와 주소 공간을 공유하면서 실행된다. |
Stack과 Heap의 경우 생성시에 크기가 결정되는 Data, Code영역에 비해 프로세스가 실행되는 동안 크기가 동적으로 변하는 영역이다.
스레드는 프로세스가 자원을 이용하는 실행 단위로, 프로세스 내부에 스레드가 여러개 존재할 수 있다.
프로세스 내부에서 Code, Data, Heap 영역은 다른 스레드와 공유하며 Stack 영역의 경우 각 스레드마다 고유 공간이 존재한다.
함께 스레드끼리 자원을 공유 영역들 때문에 동시에 작업이 가능하다.
각 프로세스는 별도의 주소 공간에서 실행되기 때문에 스레드의 자원 공유 방식처럼 다른 프로세스의 자원에 접근할 수 없다. 하지만 몇 가지 방법을 통해 프로세스간 자원 공유가 가능하다. 아래 세 방식에 대해서는 추후 차근차근 알아보겠다.
캐시 메모리는 지역성(Locality)라는 원리를 활용해 재사용 가능성이 높은 데이터를 캐시에 저장하게 된다. 캐시를 통해서 CPU는 자원을 빠르게 찾을 수 있다.
💡 **지역성 Locality![](https://velog.velcdn.com/images/tkddn_dev8430/post/cc7d2881-c1cf-42e2-ba15-9a6b56b2f1db/image.jpeg)메모리에 접근할 때 특정 부분을 집중적으로 사용하는 경향을 말한다.