Notice
Recent Posts
Recent Comments
Link
| 일 | 월 | 화 | 수 | 목 | 금 | 토 |
|---|---|---|---|---|---|---|
| 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 |
Tags
- Volatile
- 일급 객체
- OAuth 2.0
- lombok
- java
- Google OAuth
- factory
- builder
- Spring
- 일급 컬렉션
- spring security
- Dependency Injection
- synchronized
Archives
- Today
- Total
HJW's IT Blog
Process & Thread 본문
프로세스란 OS 로 부터 자원을 할당받아 실행되는 독립적인 실행단위이다.
각각의 프로세스는 독립적인 메모리 영역을 가지며, 프로세스 간에는 메모리를 공유하지 않는다.
스레드는 프로세스 내에서 실행되는 실행단위이다. 각각의 스레드는 프로세스 내의 메모리를 공유한다.
즉, 프로세스는 독립적인 실행 단위, 스레드는 하나의 프로세스 내에서 실행되는 단위 이다.
프로세스는 다음으로 구성된다.
- Address Space
- Program Code
- Global variable, heap, stack
- OS resources
쓰레드는 다음을 공유한다.
- Address Space, Program Code
- Global variables, heap
- OS resources
각각의 쓰레드는 다음을 가지고 있다
- Register, Program Counter
- Stack, Stack Pointer
다음은 프로세스 내에 있는 쓰레드의 모습이다

- 쓰레드는 특정 프로세스에 종속되어 있다
- 프로세스 내에는 여러 쓰레드가 존재 가능
- 쓰레드 또한 프로세스와 같이 block or create children 할 수 있다.
- 한 프로세스 내에 모든 쓰레드는
- address space, program code, global variables, heap, OS resources 를 공유 한다
- 동시에 실행된다
왜 여러개의 프로세스가 아닌 쓰레드를 사용할까?
- 쓰레드는 전역변수를 공유하기 때문에 IPC 가 필요 없다
- 비용이 저렴하다
- 적은 자원을 사용한다
- Context Switching 이 빠르다
Multithread를 사용하기 좋은 프로그램의 예로는 다음이 있다.
- 여러 독립적인 작업을 필요로 하는 프로그램
- debugger 가 돌아가야 하며 user에게는 모니터로 표시 등등
- 여러 요청을 처리해야 하는 서버
- Repetitive numerical tasks
User Level Thread
- 일반적으로 운영체제는 프로세스를 생성하고 각각의 프로세스에 대해 스레드를 생성한다.
- User Level Thread는 응용 프로그렘에서 직접 생성하고 관리 되기에 OS의 개입 필요 x
- Simple Representation: 각 thread는 PC, reg, stack, control block으로 보여진다
- Simple Management: 커널의 개입 없이 새로운 쓰레드 생성, 쓰레드 간의 switch, 동기화 등 이 가능하다
- FAST: 쓰레드 간의 switching이 빠르다
- Flexible: CPU scheduleing이 customized 될 수 있다.
- 단점
- User Level Thread와 OS커널과 조율되지 않고 사용된다.
- non-blocking 시스템콜을 필요로 한다.
- 하나의 쓰레드가 문제를 일으키면 전체 프로세스가 멈춘다
Kernel Level Thread
- 커널이 syscall을 제공하여 쓰레드를 생성하고 관리한다
- 커널이 모든 쓰레드에 대해 알고 있다(ULT 에선 아니었음)
- 자주 block 되는 application 에서 좋다
- 단점
- Slow: User Level Thread 에 비해 느리다
- Significant overhead & complexity: 커널이 프로세스 뿐만 아니라 쓰레드도 관리해야 한다
- 즉, TCB 를 필요로 한다.
Two-level Thread Model

- User Process를 위한 User-level threads
- Lightweight process: 별도의 메모리 공간을 가지지만 OS에서 제공하는 프로세스보다 가볍고 작은 규모의 프로세스 이다. 각 프로세스가 실행되는 CPU의 역할을 한다.-
- 멀티코어 CPU 에서 특히 효과적인데, 시스템의 자원을 효율적으로 사용할 수 있게 해준다.
- CPU 에서 무거운 프로세스를 실행할 때, Lightweight process를 사용하여 각 코어에서 동시에 처리함으로써, 전체적인 성능을 향상시킨다.
- Lightweight process: 별도의 메모리 공간을 가지지만 OS에서 제공하는 프로세스보다 가볍고 작은 규모의 프로세스 이다. 각 프로세스가 실행되는 CPU의 역할을 한다.-
- Kernel 이 사용하는 kernel-level-thread
- 각 light weight process당 하나의 kernel level thread
- 그 외의 kernel-level thread 들은 다른 작업 수행
'OS' 카테고리의 다른 글
| OS: Deadlock Avoidance (0) | 2023.05.16 |
|---|---|
| OS: Synchronization (0) | 2023.04.11 |
| OS:Cooperating Process (0) | 2023.04.06 |
| CPU Scheduler (0) | 2023.04.03 |
| Frame Pointer, Stack Pointer (0) | 2023.04.02 |