TIL - 2024/04/02

박상우·2024년 4월 2일
0

📝 TIL

목록 보기
11/45
post-thumbnail

디스크와 B-Tree

컴퓨터 시스템에서 메인 메모리와 같은 실리콘 메모리 칩은 빠른 엑세스 속도를 가지고 있지만 저장 비트 대비 비싼 비용으로 인해서 자기 디스크 기반의 보조 메모리를 함께 사용하고 있다. 자기 디스크의 경우 많은 데이터를 저장할 수 있지만 물리적인 한계로 인해 데이터에 접근하는 속도가 상대적으로 느리다. 이를 해결하기 위해서 디스크는 페이지 단위로 데이터를 저장하고, 효율적인 관리를 위해서 B-Tree와 같은 자료구조가 사용된다. B-Tree는 결정된 페이지으 크기에 따라 디스크의 접근 횟수를 최소화하여 디스크의 성능을 높인다.


프로세스와 스레드

프로그램프로세스쓰레드
어떤 작업을 수행하기 위한 파일.
코드 덩어리.
프로그램의 인스턴스로, 자체적인 주소 공간, 메모리, 데이터 스택 및 다른 시스템 자원을 가진다. 프로그램을 실행한 작업.프로세스의 작업 단위로 프로세스의 자원 단위와 주소 공간을 공유하면서 실행된다.

프로세스의 자원

  • Code / Text : 프로그래머가 작성한 프로그램의 코드. CPU가 해석 가능한 기계어 형태로 저장되어있다.
  • Data : 프로그램이 실행되는 동안 사용되는 전역 변수나 데이터가 모여있다.
  • Stack : 호출한 함수가 종료되면 돌아올 임시적인 자료를 저장하는 공간. 이 공간은 제한적이며 이 공간보다 더 많은 데이터가 들어오는 경우 Stackoverflow 에러를 맞이할 수 있다.
  • Heap : 생성자, 인스턴스와 같이 동적으로 할당되는 데이터를 위해 존재하는 공간. 사용자에 의해서 동적으로 할당되고 해제된다.

Stack과 Heap의 경우 생성시에 크기가 결정되는 Data, Code영역에 비해 프로세스가 실행되는 동안 크기가 동적으로 변하는 영역이다.

스레드의 자원 공유

스레드는 프로세스가 자원을 이용하는 실행 단위로, 프로세스 내부에 스레드가 여러개 존재할 수 있다.

프로세스 내부에서 Code, Data, Heap 영역은 다른 스레드와 공유하며 Stack 영역의 경우 각 스레드마다 고유 공간이 존재한다.

함께 스레드끼리 자원을 공유 영역들 때문에 동시에 작업이 가능하다.

프로세스 간 자원공유

각 프로세스는 별도의 주소 공간에서 실행되기 때문에 스레드의 자원 공유 방식처럼 다른 프로세스의 자원에 접근할 수 없다. 하지만 몇 가지 방법을 통해 프로세스간 자원 공유가 가능하다. 아래 세 방식에 대해서는 추후 차근차근 알아보겠다.

  1. IPC(Inter-Process Communication)
  2. LPC(Local inter-Process Communication)
  3. 별도 공유 메모리 사용

캐시 메모리

캐시 메모리는 지역성(Locality)라는 원리를 활용해 재사용 가능성이 높은 데이터를 캐시에 저장하게 된다. 캐시를 통해서 CPU는 자원을 빠르게 찾을 수 있다.

💡 **지역성 Locality![](https://velog.velcdn.com/images/tkddn_dev8430/post/cc7d2881-c1cf-42e2-ba15-9a6b56b2f1db/image.jpeg)

메모리에 접근할 때 특정 부분을 집중적으로 사용하는 경향을 말한다.

  • 시간적 지역성(Temporal Locality) : 한 번 접근된 데이터는 가까운 미래에 다시 접근될 가능성이 있다는 원리 ex) loop 내부 변수
  • 공간적 지역성(Spatial Locality) : 메모리의 특정 주소에 접근한 후, 주변 주소의 데이터에 접근할 가능성이 있다는 원리 ex) 배열과 같은 연속적인 메모리 블록
profile
나도 잘하고 싶다..!

0개의 댓글