일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |
- 자료구조
- C언어
- 알고리즘
- IFELSE
- IF문
- Spring
- 스캐너클래스
- error
- 유비쿼터스
- 반복문
- 스캐너
- IF
- 데이터
- 백준
- 변수
- 자바
- 파이썬프로그래밍기초
- java
- 함수
- MySQL
- for
- Scanner class
- Scanner
- 백준알고리즘
- java프로그래밍
- 하드웨어
- 기본
- 1차원배열
- 배열
- FOR문
- Today
- Total
정리하고기록하자
프로세스 ( Process ) , 스레드 ( Thread ) 본문
프로그램
어떤 작업을 위해 운영체제 위에서 실행 할 수 있는 파일
ex ) 웹 브라우저, 워드 프로세스, 카카오톡 등.
프로세스 ( Process )
운영 체제 위에서 실행중인 하나의 프로그램
프로그램 명령어와 데이터들이 메모리에 올라오고 실행 중 또는 실행 대기중인 상태
즉 실행되고 있는 프로그램으로, 프로세스는 각 메모리 공간을 시스템으로부터 할당 받는다.
- 실행중인 프로그램
- CPU를 할당하는 대상
- 시스템 내부에서의 작업 단위
- PCB ( Process Control Block ) 에 존재하는 개체
- 하나의 스레드( 프로그램 내의 실행 단위 )로 구성된 테스크
프로세스의 메모리 구조
Code 영역
실행할 프로그램의 코드가 저장된다. CPU는 이 영역에서 명령어를 하나씩 가져와 처리하게 된다.
Data 영역
전역변수와 정적변수가 저장된다. 이 변수들은 프로그램이 시작될 때 할당되어 프로그램 종료 시 소멸된다.
Stack 영역
지연변수, 매개변수, 리턴값 등 잠시 사용되었다가 사라지는 데이터르 저장하는 영역이다. 함수 호출 시 할당되고 함수 반환 시 소멸된다. 로드 시 ( 컴파일 타임 ) 크기가 결졍된다.
Heap 영역
동적 데이터 영역이다. 메모리 주소 값에 의해서만 참조되고 사용되는 영역이다. 따라서 프로그램 동작 시 크기가 결정된다.
프로세스의 상태
프로세스는 다섯 가지 상태 중 하나를 가진다.
- 생성 ( new ) : 갓 생성된 상태, OS의 커널에 PCB ( Process Control Block )등이 생성 된다
- PCB : 운영 체제 커널의 자료구조로서 프로세스에게 할당할 자원을 설정하고 감시하는 데 필요한 프로세스의 정보를 PCB 라고 한다.
- 준비 ( ready ) : CPU의 서비스를 받기 위해 Ready Queue에서 대기하고 있는 상태
- 실행 ( running ) : CPU에 의해 실행되고 있는 상태
- 대기 ( waiting or blocked ) : I/O 나 다른 event를 기다리며 멈춰있는 상태
- 종료 ( terminated ) : 실행을 완료하는 등의 이유로 종료된 상태
PCB ( Process Controll Block )
프로세스 데이터들을 저장해 놓는 곳이다. 하나의 PCB 안에는 하나의 프로세스의 정보가 담겨있다.
PCB 상세 구조
PCB 가 필요한 이유
CPU 에서는 프로세스의 상태에 따라 교체 작업이 이루어진다 ( 인털럽트가 발생해서 할당받은 프로세스가 Block 상태가 되고 다른 프로세스를 running 으로 바꿀 때 )
이때, 앞으로 다시 수행할 Block 상태의 프로세스의 상태값을 PCB에 저장해두는 것이다.
PCB의 관리 방식
Linked List 방식으로 관리가 됩니다. PCB List Head 에 PCB들이 생성될 때마다 붙게 된다. 주솟값으로 연결이 이루어져 있는 연결 리스트 형태로, 삽입 삭제가 용이하다
즉, 프로세스가 생성되면 해당 PCB가 생성되고 프로세스 완료 시 제거 된다
이렇게 수행 중인 프로세스를 변경 할 때, CPU의 레지스터 정보가 변경되는 것을 프로세스 문맥 교환 ( Context Switching ) 이라고 한다.
프로세스 문맥 교환 ( Context Switch )
다양한 사람들이 동시에 사용하는 것처럼 하기 위해서 Context Switching이 필요하게 되었다.
- 컴퓨터 멀티태스킹을 통해 빠른 반응속도로 응답이 가능하다.
- 빠르게 Task를 바꿔가면서 실행하기에 사람은 실시간처리가 되는 것처럼 보인다.
- CPU가 Task를 바꿔가면서 실행하기 위해 Context Switching이 필요하게 되었다.
스레드 ( Thread )
스레드란 프로세스 내에서 실행되는 흐름의 단위 혹은 CPU 스케줄링의 기본 단위 라고 할 수 있다.
- 사전적 의미
- 프로세스 내에서 실행되는 여러 흐름의 단위
- 프로세스의 특정한 수행 경로
- 프로세스가 할당받은 자원을 이용하는 실행의 단위
- 특징
- 스레드는 프로세스 내에서 각각 Stack 만 따로 할당받고, Code, Data, Heap 영역을 공유한다.
- 스레드는 한 프로세스 내에서 동작되는 여러 실행의 흐름으로, 프로세스 내의 주소 공간이나 자원들을 같은 프로세스 내에 스레드끼리 공유하면서 실행된다.
- 한 스레드가 프로세스 자원을 변경하면, 다른 이웃 스레드도 그 변경 결과를 즉시 볼 수 있다.
장점
- 응답성 : 다중 스레드로 구성된 Task 구조에서 하나의 서버 스레드가 blocked 상태인 동안에도 동일한 Task 내의 다른 스레드가 실행되어 빠른 처리가 가능하다.
- 예를 들어 웹 브라우저가 스레드를 여러 개 가지고 있을 때, 하나의 스레드는 이미지를 비롯한 추가 데이터를 받기 위해 서버에 요청으 걸어서 blocked 상태가 된 후, 다른 스레드가 이미 받아 놓은 HTML 텍스트를 화면에 출력할 수 있다. 이러한 비동기식 입출력을 통해 응답성을 높일 수 있다.
- 자원 공유 : 하나의 프로세스 안에 CPU 수행 단위인 스레드를 두게 되면 code, data, resource 자원을 공유하여 효율적으로 자원 활용이 가능하다.
- 경제성 : 동일한 일을 수행하는 다중 스레드가 협력하여 높은 처리율과 성능 향상을 얻을 수 있다.
- 멀티 프로세서 아키텍처에서의 이용성 : 각각의 스레드가 서로 다른 CPU를 가지고 병렬적으로 작업을 진행해서 훨씬 효율적으로 작업을 수행 할 수 있다.
멀티 프로세스와 멀티 스레드
멀티 프로세싱은 여러 개의 플로세스가 각자 하나의 작업 ( Task )을 맡아 처리하는 것을 말한다.
멀티 스레딩은 여러 개의 스레드가 각자 하나의 작업 ( Task ) 을 맡아 처리하는 것을 말한다.
- 멀티 프로세싱
- Context Switching 이 발생하면 캐시에 존재하는 모든 데이터를 리셋 하고 다시 캐시 정보를 불러와야 한다. 즉 Cntext Switching의 오버헤드가 커서 비용이 크다
- 프로세스간의 통신에 복잡한 IPC를 사용하여 통신해야 한다.
- 여러 개의 자식 프로세스 중 하나에 문제가 발생하면 그 자식 프로세스에만 이상이 생기고 다른 프로세스에는 영향을 주지 않는 장점도 있다.
- 멀티 쓰레딩
- 시스템 자원 소모가 감소한다. 프로세스를 생성하는 system call이 줄어들어 자원을 효율적으로 관리 할 수 있다.
- 시스템 처리량이 증가한다.
- 프로세스 내의 Data, Code, Heap 영역을 공유하기 때문에 스레드 간의 통신이 간단하다
- 스레드 간의 자원을 공유하기 때문에 동기화 문제가 발생할 수 있다.
- 하나의 스레드에 문제가 발생하면 전체 프로세스에 영향을 준다.
참고 :
'개발 상식' 카테고리의 다른 글
쿠키, 세션, JWT (0) | 2022.06.19 |
---|---|
네트워크 시스템의 Layer and Architecture (0) | 2022.06.11 |
TCP / IP (0) | 2022.06.05 |
Spring - PSA (0) | 2022.05.02 |
Spring - DI (0) | 2022.05.02 |