일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 | 31 |
- flatten
- Python
- 야학
- 판다스
- CNN
- 머신러닝
- MySQL
- reshape
- 머신러닝(딥러닝)
- 개발자
- 연산자
- 데이터베이스
- 딥러닝
- Database
- Java
- LeNet
- 이것이 자바다
- JavaScript
- 생활코딩
- 파이썬
- pandas
- 카카오클라우드스쿨2기
- 생활코딩 데이터베이스
- 데이터베이스 개론
- 머신러닝야학
- 생활코딩 머신러닝야학
- 데이터베이서
- tensorflow
- Today
- Total
IT's 우
[OS] 프로세스와 스레드 본문
✅ 프로세스
: 운영체제로부터 자원을 할당받은 작업의 단위
✅ 스레드
: 프로세스가 할당받은 자원을 이용하는 실행 흐름의 단위
1. 프로세스(Process)
1. 1 프로세스(Process)란?
프로세스는 실행 중인 프로그램을 뜻한다. (프로그램 : 명령어들의 모음을 포함한 디스크에 저장된 파일)
프로그램이 실행되면 이 프로그램의 명령어들과 데이터가 메모리에 적재되고 이것이 프로세스가 된다.
1.2 프로세스의 메모리 구조
Code 영역 : 프로그램을 실행시키는 실행 파일 내의 명령어들이 위치하는 공간
Data 영역 : 전역 변수, static 변수들이 위치하는 공간
Heap 영역 : 동적할당을 위한 메모리 영역(malloc(), new 등)
Stack 영역 : 지역 변수, 파라미터(함수에 전달되는 인자)가 위치하는 공간
1.3 프로세스 상태(Process State)
new(생성) : 프로세스가 생성된 상태. OS 커널에 존재하는 Ready Queue에 올라가면 ready 상태가 된다.
ready(준비) : 프로세스가 CPU로부터 메모리 공간을 할당받길 기다리는 상태. 이때 프로세스 스케줄러에 의해 프로세스가 할당을 받게 되면 running 상태가 된다. 이것을 dispatch라고 한다.
running(실행) : 명령어들이 실행되는 상태. 이때 interrupt(간섭)이 발생하면 ready 상태로 변한다. 실행을 끝마치면 exit(종료)되고 terminated 상태로 변한다. I/O(입출력)이나 event가 발생하면 waiting 상태로 변한다.
waiting(대기) : 특정 event가 발생하길 기다리는 상태이다. 이때 I/O 나 특정 event가 완료되면 ready상태로 변한다.
terminated(종료) : 프로세스가 실행을 끝마친 상태
1.4 프로세스 스케줄링(Process Scheduling)
하나의 CPU를 가지고 있는 컴퓨터는 프로세스를 동시에 실행시킬 수 없다.
따라서 CPU는 고속으로 여러 프로세스를 일정한 기준으로 순서를 정해서 실행한다.
→ 이러한 CPU 할당 순서 및 방법을 결정하는 과정을 프로세스 스케줄링이라고 하며 CPU 스케줄러가 이를 담당한다.
2. 스레드(Thread)
2.1 스레드(Thread)란?
프로세스 하나만을 사용해서 프로그램을 실행하기에는 메모리의 낭비가 발생한다. 스레드는 프로세스와 다르게 스레드 간 메모리를 공유하며 작동한다.
프로세스 내에서 실행되는(프로세스가 할당받은 자원을 이용하는) 프로그램 코드의 흐름의 단위
스레드는 운영체제의 스케줄러에 의해 독립적으로 관리될 수 있는 프로그래밍된 가장 작은 시퀀스이다. 하나의 프로세스는 하나 이상의 스레드를 가지고 있다.
- 프로세스 내 주소 공간이나 자원 공유가 가능
- 스레드는 프로세스 내의 Code, Data, Heap 영역을 공유하고 Stack 영역은 따로 할당받는다.
- 여러 스레드는 한 프로세스 내의 Code, Data, Heap 영역을 공유하지만, 프로세스 간에는 서로 메모리에 접근할 수 없다.
- 스레드는 별도의 Register와 Stack을 가지고, 그 외의 다른 영역은 공유한다. 한 스레드가 프로세스 자원을 변경하면 다른 스레드도 그 변경 결과를 가져올 수 있다.
2.2 스레드가 필요한 이유
여러 개의 작업 단위로 구성된 프로그램에서 요청을 동시에 처리하기 위함이다.
예를 들어, 워드 프로세서에서 사용자로부터 키보드 입력받는 스레드, 그래픽이나 UI를 그리는 스레드, 그리고 문법 오류 체크하는 스레드 등 워드 프로세서 내에서 여러 요청들을 동시에 처리해야 할 때, 스레드가 필요
2.3 스레드의 이점
- 응답성: 다른 스레드의 실행 시간이 길거나 입출력 요청으로 인해 block 되더라도 계속 실행되는 것을 허용
- 자원 공유 : 프로세스 내 자원(Data, Code, Heap)을 공유
- 경제성 : 프로세스 생성을 위한 메모리 자원 할당, 프로세스 간 문맥 교환은 비용이 많이 들고 오버헤드가 발생하는 반면에, thread는 프로세스의 자원을 공유하고 있으므로 스레드 생성이나 문맥 교환 시에 더 경제적
- 확장성 : 멀티 프로세서 구조에서는 스레드들이 각자 프로세스 위에서 병렬적으로 실행되기 때문에, 다중 CPU 환경에서 병렬성이 크게 증대
2.4 스레드가 경량 프로세스(Light Weight Process)라 불리는 이유
- 프로세스 생성(Process fork)에 비해 스레드 생성 시간이 더 빠름
- 스레드 간에 프로세스 자원을 공유할 수 있기 때문.
- 스레드 간에 통신이 용이하기 때문.
출처
https://code-lab1.tistory.com/38
https://velog.io/@aeong98/운영체제OS-프로세스와-스레드
https://wookkingkim.tistory.com/entry/운영체제-스레드Thread의-개념
'CS > OS' 카테고리의 다른 글
[OS] 커널(kernel) (0) | 2023.08.18 |
---|