카테고리 없음

프로세스, 자바, http

흰색남자 2022. 9. 17. 15:53

프로세스, 쓰레드

프로세스는 실행가능한 프로그램이 cpu에서 자원을 할당받아 실행된 형태입니다.

각 프로세스는 쓰레드라는 실행단위를 가지며 각 쓰레드는 스택이라는 데이터 저장소를 갖습니다.

 

쓰레드와 프로세스의 컨텍스트 스위칭 차이

프로세스 컨텍스트 스위칭이 더 비싼 이유

컨텍스트 스위칭 : 인터럽트나 시스템 호출 등으로 실행 중인 프로세스의 제어를 다른 프로세스에 넘겨 실행 상태가 되도록 하는 것

프로세스 스위칭은 

1. 새  주소 공간을 사용하기 위한 페이지 디렉토리 전환 

2. 커널 스택과 하드웨어 컨텍스트 스위칭

MMU TLB를 건드려야 한다.

*MMU : Memory Management Unit ( 메모리 관리 장치 )

*TLB : Translation Lookaside Buffer ( 변환 참조 버퍼 << 캐시 ) 

 

프로세스 컨텍스트 스위칭이 일어났을 경우, 공유하는 데이터가 없으므로 캐쉬가 지금껏 쌓아놓은 데이터들이 무너지고 새로 캐쉬정보를 쌓아야 한다. 이것이 프로세스 컨텍스트 스위칭에 부담이 되는 요소이다. 
반면, 쓰레드라면 저장된 캐쉬 데이터는 쓰레드가 바뀌어도 공유하는 데이터가 있으므로 의미있다. 그러므로 컨텍스트 스위칭이 빠른 것이다. 

 

프로세스 컨텍스트 스위칭 과정

1. 인터럽트 신호와 함께 p0프로세스는 pcb에 상태를 저장한다.

2. p1 프로세스가 pcb에서 정보를 읽어간다.

3. 인터럽트 신호가 있을 때 까지 p1 프로세스가 실행된다.

4. 다시 p1 프로세스가 인터럽트 신호에 의해 정지되고 p0 프로세스가 실행된다.

 

 

자바는 플랫폼 독립적으로 설계로 jvm만 설치되어 있다면 어느 환경에서도 동작합니다. 

기본적으로 멀티스레드 방식 객체지향 언어입니다.

그러므로 파이썬, 자바스크립트 등 싱글 스레드 기반 언어보다 복잡한 연산에 적합합니다.
자바의 동작과정은 먼저 컴파일러에 의해 자바 바이트 코드로 변환됩니다.
그리고 jdk에 존재하는 jre에 의해 실행됩니다.
jdk의 메모리 영역은 메소드, 힙, 스택, 스태틱 영역이 존재합니다.
메소드 영역에는 프로그램 실행에 필요한 바이트코드가 저장되고, 모든 스레드에 공유됩니다.

 

 

자바 프로그램은 JVM 위에서 돌아가는데 JVM은 운영체제로부터 메모리를 미리 할당받아 놓고 자기가 관리를 한다. 



힙 영역은
 참조형(Reference Type)의 데이터 타입을 갖는 객체(인스턴스), 배열 등은 Heap 영역에 데이터가 저장된다. 
이때 변수(객체, 객체변수, 참조변수)는 Stack 영역의 공간에서 실제 데이터가 저장된 Heap 영역의
 참조값(reference value, 해시코드 / 메모리에 저장된 주소를 연결해주는 값)을 new 연산자를 통해 리턴 받는다.
 다시 말하면 실제 데이터를 갖고 있는 Heap 영역의 참조 값을 Stack 영역의 객체가 갖고 있다.
힙 영역은 일정 스레숄드가 지나면 가비지컬렉터가 진행됩니다. 

스태틱 영역은 정적 메모리를 뜻하고
컴파일 시 할당되는 메모리입니다. 고정된 메모리를 차지하고 프로그램 종료시 해제됩니다.

스택 영역은
우리가 현재까지 작성하던 메소드 내에서 정의하는 원시타입 자료형(int, double, byte, long, boolean 등)에
해당되는 지역변수(매개 변수 및 블럭문 내 변수 포함)의 데이터의 값이 저장되는 공간이 Stack(스택) 영역이다. 
해당 메소드가 호출될 때 메모리에 할당되고 종료되면 메모리가 해제된다. 

여기서 메소드, 힙, 스태틱 영역은 모든 스레드에 공유되고 스택영역은 각 스레드마다 따로 존재합니다.



객체지향 프로그래밍이란 하나의 문제를 여러개의 객체 단위로 나눠 작업하는 프로그래밍을 의미합니다.
객체지향 프로그래밍의은  필요한 데이터 구조와 역할, 기능을 캡슐화하여 공통된 특징을 하나의 객체로 묶어 사용하는 것입니다.
때문에 유지보수성이 좋아지며 재사용성이 좋아집니다.


tcp와 udp의 차이점은 tcp는 연결 지향적이고, udp는 비연결지향적입니다.
tcp는 3way-handshake를 통한 세션을 생성하고 통신이 진행되므로 신뢰성있는 데이터 전송이 가능합니다.
하지만 3way-handshake와 오류제어 흐름제어 혼잡제어를 진행하기 때문에 오버헤드가 발생합니다.
udp는 빠르지만, 신뢰성있는 데이터 전송은 보장하지 않습니다. 그러므로 tcp는 중요한 데이터 전송을 필요로할 경우 사용되고
udp는 비교적 덜한 스트리밍 서비스에서 주로 사용됩니다.

*오버헤드 : 어떤 처리를 하기 위해 들어가는 간접적인 처리 시간 · 메모리 등


web http
사용자는 도메인 주소를 입력합니다.
그럼 로컬dns서버에 해당 도메인 주소가 있는지 검색합니다.
없으면 다음 최상위 루트 dns 서버에 조회하게되고 이러한 과정을 거쳐 ip를 얻어내게 됩니다.
http는 기본적으로 tcp기반이며 3way-handshake를 통해 tcp 세션을 생성하게 됩니다.
3계층 라우팅을 거쳐 해당 목적지까지의 경로를 설정하게 되고, 2계층을 통하여 패킷을 프레임단위로 나눠서 보내게 됩니다.
해당 프레임은 목적지의의 osi7계층에 기반하여 역순으로 사용자에게 표현되게 됩니다.

 

OSI 7계층 나눈 이유

통신이 일어나는 과정을 단계 별로 파악할 수 있기 때문이다. 흐름을 한 눈에 알아보기 쉽고, 사람들이 이해하기 쉽고, 7단계 중 특정한 곳에 이상이 생기면 다른 단계의 장비 및 소프트웨어를 건드리지 않고도 이상이 생긴 단계만 고칠 수 있다.