공부용 블로그

Web Server Architecture 마인드맵 본문

설계/WebServer

Web Server Architecture 마인드맵

tomato212 2018. 9. 30. 00:30



1. 프로세스 혹은 스레드 간 메모리 공유란?






2. 프로세스 메모리 구조는?





Stack

 

- 메서드가 실행될 때 변수가 push(입력)되며 실행이 종료될 때 pop(해제=삭제)된다.


- LIFO(Last In, First Out) 구조로 CPU에 의해 관리됨 => 메모리를 직접 관리할 필요없고, 변수가 자동으로 할당/삭제 된다. 


- 스택은 저장할 수 있는 변수의 크기가 제한되어 있음(Heap은 제한되지 않음) => 스택 크기가 제한되어 있다.


- 스택변수는 함수가 실행되는 동안에만 존재한다.


Heap


- 프로그래머가 할당/해제하는 메모리 공간이다


- malloc() 또는 new 연산자를 통해 할당하고,

free() 또는 delete 연산자를 통해서만 해제가 가능하다.

JAVA에서는 가비지 컬렉터가 자동으로 해제하는 것 같기도 하다.


- 이 공간에 메모리 할당하는 것을 동적 할당 이라고도 부른다.


- 런타임(프로세스 실행)시에 크기가 결정된다.


Stack 영역이 크면 클 수록 Heap 영역이 작아지고, Heap 영역이 크면 클 수록 Stack 영역이 작아진다.

그럼 Heap 영역, 동적 할당은 왜 필요한 것일까?

  • 메모리를 효율적으로 관리할 수 있기 때문이지 않을까?
    임베디드 시스템을 개발하다보면 하드웨어 크기가 매우 작은 경우가 많다.
    하드웨어 크기가 작다는 것은 메모리의 용량도 작음을 의미한다.
    뭐 메모리 용량이 클 수도 있지만, 가격이 매우 비싸질 것이다.
    여튼 그러한 작은 메모리 공간에 프로그래머가 메모리 관리의 달인이라면…
    컴파일러가 자동으로 할당해주는 것보다 더 효율적인 관리가 가능하지 않을까?


(참고)  https://blog.perfectacle.com/2017/02/09/c-ref-004/
          http://www.soen.kr/xe/question/15333
          http://dsnight.tistory.com/50



3. runtime compile time ?

runtime : 어떤 프로그램이 실행되는 동안의 Time (heap 영역은 런타임시에 메모리 크기가 결정)

compile time : 고급언어(프로그래밍 언어)를 기계어로 변경하는 과정(stack 영역은 컴파일시에 메모리 크기가 결정)




4. 프로세스를 병렬적으로 처리할때는 Context Switching 이 발생한다. 왜??





5. 메모리. 커널영역, 유저영역 




 쓰레드는 프로세스처럼 스케줄링의 대상이다. 이 과정에서 컨텍스트 스위칭이 발생한다. 하지만 쓰레드는 공유하고 있는 메모리 영역 덕분에 컨텍스트 스위칭 때문에 발생하는 오버헤드(overhead)가 프로세스에 비해 작다. 


'설계 > WebServer' 카테고리의 다른 글

FastCGI  (0) 2018.10.02
Context Switching  (0) 2018.10.02
mysql connector/j download  (0) 2018.09.27
apache mpm 설정  (0) 2018.09.25
Jmeter Listener 사용법  (0) 2018.09.21